Skip to main content
Glama
longbridge

longbridge

Official

Official MCP server for the Longbridge brokerage. 164 tools across real-time quotes, options, order routing, fundamentals, analyst ratings, calendars, IPO, price alerts, DCA plans, grid trading, portfolio analytics and community sharelists — covering US and HK markets. Built with Rust using rmcp and axum.


Add it in one place

Then just ask

ChatGPT

Settings → Apps & Connectors → add Longbridge

"How's NVDA trading today?" · "Show my HK positions"

Claude

Settings → Connectors → add Longbridge (web · desktop · mobile)

"Compare AAPL and MSFT valuations" · "Any IPOs this week?"

Sign in once with your Longbridge account. Every request runs over the same hosted, OAuth 2.1–secured endpoint documented below — read-only market data plus full account, portfolio, and trading tools, all gated by your own credentials.


Highlights

  • 164 tools, one endpoint — quotes, options, order routing, fundamentals, analyst research, screeners, IPO, alerts, DCA, grid trading and portfolio analytics across US and HK markets.

  • Stateless by design — every request forwards its Bearer token straight to the Longbridge SDK. No sessions, no database, nothing stored server-side.

  • OAuth 2.1, auto-discovered — RFC 9728 protected-resource and RFC 8414 authorization-server metadata; clients complete the flow with no token to paste.

  • Clean, typed responses — snake_case fields, RFC 3339 timestamps, human-readable symbols, and typed response schemas available as MCP resources.

Built in Rust with rmcp and axum.

Related MCP server: Stock MCP Server

Filter tool responses with jq

Every tool accepts an optional _jq string in its arguments. The expression runs on the complete returned JSON, after the normal response serialization. The _jq name is reserved for response filtering to avoid conflicts with business parameters. Usage guidance is sent once in the MCP initialize response's instructions; each tool schema declares only the optional parameter name and type. For example:

{
  "name": "quote",
  "arguments": {
    "symbols": ["AAPL.US", "MSFT.US"],
    "_jq": "map({symbol, last_done})"
  }
}

Use .data[:5] to take the first five entries of a data array, .data | map(select(.price > 10)) to select rows, or {total: .total} to project fields. Expressions use the embedded jaq engine's jq-compatible syntax; no separate jq executable is needed.

  • Omit _jq (or pass null) to preserve the original response.

  • One output value is returned directly, multiple values as an array, and no values as []. Scalars and arrays are JSON text; objects also appear in structuredContent, containing only the filtered fields.

  • Plain text responses are available as JSON strings. Multiple content blocks without structured content are available as an array.

  • Tool errors and permission/no-data explanations remain unfiltered.

  • Empty, invalid, or non-string expressions are rejected before the tool runs. If filtering fails at runtime, the response explicitly says the tool already executed. Do not automatically retry writes such as placing an order.

  • Environment access, filesystem imports, and logging filters are unavailable. Output is limited to 10,000 values and 8 MiB; exceeding a limit returns an error rather than a partial result.

Because filters can change the response shape, tools do not advertise a fixed outputSchema. Original typed schemas remain available through resources/list and resources/read at lb://tools/{tool-name}/output-schema for schema-backed tools.

Connect your own client

Longbridge runs a hosted endpoint at https://mcp.longbridge.com — point any MCP client at it and complete OAuth when prompted. Authorization is auto-discovered via RFC 9728; there is no token to paste.

Claude Code

claude mcp add --transport http longbridge https://mcp.longbridge.com

Claude Desktop — add to claude_desktop_config.json, then restart:

{ "mcpServers": { "longbridge": { "url": "https://mcp.longbridge.com" } } }

Cursor · Cline · Windsurf · Zed · other clients — point them at https://mcp.longbridge.com with transport streamable-http.

# Local self-hosted instance (see Self-hosting below)
claude mcp add --transport http longbridge-local http://localhost:8000/mcp

claude mcp list                  # registered servers
claude mcp get longbridge        # config + auth status
claude mcp remove longbridge     # unregister
claude mcp logout longbridge     # re-trigger OAuth after revocation

On first use, the client reads the WWW-Authenticate challenge, fetches /.well-known/oauth-protected-resource (RFC 9728), and opens your browser for the Longbridge OAuth flow. Tokens are cached per session and refreshed automatically.

The 164 tools

Twenty categories spanning market data, trading, research and account management.

Category

Count

Coverage

Quote

32

Real-time and historical quotes, candlesticks, depth, brokers, options, warrants, watchlists, capital flow, market temperature, short positions, option volume

Fundamental

33

Financial statements/reports, business segments, institutional views, industry peers/valuation, dividends, EPS forecasts, valuations & valuation comparison, company info/executives, shareholders, corporate actions, operating metrics

Trade

15

Order submission/cancellation/replacement, multi-leg option combination orders, positions, balance, executions, cash flow, margin

Market

15

Market status, industry/top-mover rank, broker holdings, A/H premium, trade statistics, anomalies, short trades/margin, index constituents

DCA

9

Dollar-cost averaging plan create/update/pause/resume/stop, execution history, statistics, support check

Grid

11

Grid trading order submit/replace/cancel/suspend/restart, list/detail/trigger-history reads, per-symbol setup info, one-time strategy consent

Sharelist

8

Community sharelist CRUD, member add/remove/sort, popular lists

IPO

7

IPO subscriptions, calendar, listed stocks, order detail, profit/loss analysis

Content

7

News list/detail, discussion topic CRUD and replies

Alert

5

Price alert CRUD (add, delete, enable, disable, list)

Screener

5

Stock screener search, indicators, strategy recommendation/management

Portfolio

4

Exchange rates, profit/loss analysis (summary, detail, realized)

ATM

3

Bank cards, withdrawal records, deposit records

Macrodata

2

Macroeconomic indicator list and detail

Search

2

News search, community topic search

Statement

2

Account statement listing and export

Calendar

1

Finance calendar (earnings, dividends, IPOs, macro data, closures)

Quant

1

Run a quant indicator script against historical K-line data

Authenticate

1

OAuth code exchange for clients that can't complete a browser redirect

Utility

1

Current UTC time

Self-hosting

Prefer your own instance? Run the published image:

docker run -p 8443:8443 \
  -v /path/to/certs:/certs:ro \
  ghcr.io/longbridge/longbridge-mcp \
  --bind 0.0.0.0:8443 \
  --base-url https://mcp.example.com \
  --tls-cert /certs/cert.pem \
  --tls-key /certs/key.pem

Set --base-url to your externally reachable URL on any public deployment — it is published in the OAuth metadata clients use to discover the authorization server. It defaults to http://localhost:{port}, which remote clients cannot use.

Or build from source: cargo build --release && ./target/release/longbridge-mcp.

Config lives at ~/.longbridge/mcp/config.json (override the directory with LONGBRIDGE_MCP_CONFIG_DIR). CLI flags take precedence. When tls_cert and tls_key are both set the server runs HTTPS, otherwise HTTP; base_url defaults to https://localhost:{port} with TLS or http://localhost:{port} without.

Option

Config Key

CLI Flag

Default

Description

Bind address

bind

--bind

127.0.0.1:8000

HTTP server listen address

Base URL

base_url

--base-url

auto

Public base URL for resource metadata

Log directory

log_dir

--log-dir

(stderr)

Directory for rolling log files

TLS certificate

tls_cert

--tls-cert

(none)

PEM certificate file for HTTPS

TLS private key

tls_key

--tls-key

(none)

PEM private key file for HTTPS

Canary upstream

canary

--canary

false

Talk to the Longbridge canary environment (*.longbridge.xyz). --canary=false forces production even when the config file enables it

The mainland-China environment (*.longbridge.cn) is not a flag: it is auto-selected when LONGBRIDGE_REGION=cn is set (the same variable the SDK uses), so a mainland cluster needs no dedicated setting.

Upstream endpoints are fixed by the selected environment:

Production (default)

Canary (--canary)

Mainland (LONGBRIDGE_REGION=cn)

OpenAPI

https://openapi.longbridge.com

https://openapi-global.longbridge.xyz

https://openapi.longbridge.cn

Quote WebSocket

wss://openapi-quote.longbridge.com/v2

wss://openapi-global-quote.longbridge.xyz/v2

wss://openapi-quote.longbridge.cn/v2

Trade WebSocket

wss://openapi-trade.longbridge.com/v2

wss://openapi-global-trade.longbridge.xyz/v2

wss://openapi-trade.longbridge.cn/v2

OAuth / connect page

openapi.longbridge.com / open.longbridge.com

openapi-global.longbridge.xyz / open.longbridge.xyz

openapi.longbridge.cn / open.longbridge.cn

Canary uses the -global gateway, not openapi.longbridge.xyz: only the former is CloudFront-fronted and performs x-dc-region data-center routing, which this server depends on to serve us_- and ap_-prefixed credentials from one process.

Canary and mainland pin every URL above at startup; production defers to the SDK's own resolution except that a us_ credential with no upstream override is pinned to the global .com gateway. See src/endpoints.rs for the exact selection rules.

Advanced environment variables — most deployments never touch these; they exist for SDK debugging and edge/global-entry deployments.

Variable

Default

Description

LONGBRIDGE_MCP_CONFIG_DIR

~/.longbridge/mcp

Config file directory

LONGBRIDGE_PUBLIC_HOSTS

(none)

Comma-separated hostnames accepted from the edge-injected X-Host header; matching requests echo that host in the 401 challenge / RFC 9728 metadata. Unset = X-Host ignored

LONGBRIDGE_GLOBAL_OAUTH_URL

(none)

Authorization-server URL advertised to requests arriving via an allowlisted X-Host (global single-domain entry). Unset = fall back to the mode's OpenAPI base URL

LONGBRIDGE_MCP_QUOTE_WS_IDLE_TTL_SECS

600

Idle seconds before a cached quote WebSocket context is evicted

LONGBRIDGE_MCP_QUOTE_WS_MAX_CONTEXTS

1024

Maximum cached quote WebSocket contexts per server process

LONGBRIDGE_MCP_LOG_PAYLOADS

(unset)

1 lifts the payload log caps (see below). Never set this in production

LONGBRIDGE_LOG_PATH

(none)

SDK internal log path. Leave unset in production — the SDK writes unfiltered request/response bodies there

MCP requests and responses carry customer data — cash balances, positions, order history — and upstream SDK frames carry access tokens. None of it belongs in a log file, so the server caps the log targets that would print it, independent of RUST_LOG:

Target

Cap

What it would otherwise print

longbridge_httpcli

warn

OpenAPI request and full response bodies (INFO)

longbridge_wscli

warn

Every WebSocket frame, auth token included (INFO)

longbridge::trade

warn

Order push events (INFO)

rmcp

info

Decoded MCP requests and full tool results (DEBUG), raw JSON-RPC frames (TRACE)

So raising verbosity is safe: RUST_LOG=debug (or trace) gives you the server's own logs without leaking customer data. Two switches defeat this, both off by default — LONGBRIDGE_MCP_LOG_PAYLOADS=1 (removes the caps; use only against a test account locally) and LONGBRIDGE_LOG_PATH (makes the SDK write unfiltered bodies to that directory; the server warns at startup when set).

The server expects a Longbridge OAuth access token in Authorization: Bearer <token>. On missing or invalid auth it returns 401 with a WWW-Authenticate header pointing to the protected-resource metadata, which directs clients to the Longbridge OAuth authorization server.

Send x-papertrading: true (or 1) on a request to run it against the paper-trading environment. Upstream rejects a paper-trading request made with a real-money token, so the header is a safety guard rather than a routing switch: it can only narrow what a token may do. LONGBRIDGE_PAPERTRADING=true turns it on for the whole deployment instead.

Method

Path

Description

GET

/.well-known/oauth-protected-resource

Protected Resource Metadata (RFC 9728)

GET

/.well-known/oauth-authorization-server

Authorization Server Metadata (RFC 8414); advertises direct Longbridge authorize/register and proxied token/revoke endpoints

POST

/oauth2/token

OAuth token proxy; derives x-dc-region from the code/refresh token, defaulting to AP

POST

/oauth2/revoke

OAuth revocation proxy; derives x-dc-region from the token, defaulting to AP

GET

/metrics

Prometheus metrics

POST/GET/DELETE

/mcp

MCP Streamable HTTP endpoint (requires Bearer token)

Prometheus metrics: mcp_tool_calls_total (counter), mcp_tool_call_duration_seconds (histogram), and mcp_tool_call_errors_total (counter) — each labelled by tool_name.

Development

cargo +nightly fmt      # format
cargo clippy            # lint
cargo test              # test

License

Released under the MIT License.

Available Tools

165 tools
account_balanceAccount BalanceA
Read-onlyIdempotent
Inspect

Get account cash balance and asset summary. Returns balances[]{currency, total_cash, max_finance_amount, remaining_finance_amount, risk_level, margin_call}. Filter by currency (e.g. "USD", "HKD").

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
currencyNoFilter by currency code (e.g. "USD", "HKD"). Omit to return all currencies.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the return structure (balances[] with fields) and the currency filter behavior, which is useful. However, it does not disclose details like pagination, rate limits, or what happens when no currencies match. With annotations covering the safety profile, 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.

Conciseness5/5

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

Two sentences with no waste. The main purpose is front-loaded, followed by the return structure and the filter option. Every sentence earns its place.

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

Completeness4/5

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

For a read-only, idempotent tool with 100% schema coverage and no output schema, the description is quite complete. It states what the tool returns, the filter option, and the safety profile is covered by annotations. The only minor gap is not describing the exact shape of the balances[] array beyond field names, but that is acceptable given the description lists the fields.

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 description coverage is 100%, so both parameters (_jq and currency) are already documented in the schema. The description adds a concrete example of currency values ('USD', 'HKD') and clarifies that omitting currency returns all currencies, which slightly enhances the schema. Baseline 3 is correct since the schema does the heavy lifting.

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?

The description clearly states the tool's function: 'Get account cash balance and asset summary.' It specifies the resource (account balance) and the action (get), and it lists the return fields. It is distinguishable from siblings like stock_positions or fund_positions because it focuses on cash balance and asset summary, not positions.

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

Usage Guidelines4/5

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

The description provides a clear usage context: it is for retrieving account cash balance and asset summary, with an optional currency filter. It does not explicitly state when not to use it or name alternatives, but the context is clear enough for an agent to select it for balance-related queries. Sibling tools like stock_positions or fund_positions are position-focused, so the distinction is implicit.

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

ah_premiumA/H PremiumA
Read-onlyIdempotent
Inspect

Get A/H share premium historical K-line data. Returns items[]{timestamp, open, high, low, close} representing the premium percentage over the given period.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
countNoNumber of K-lines to return (default: 100)
periodNoK-line period: "1m", "5m", "15m", "30m", "60m", "day" (default), "week", "month", "year"
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds value by specifying the return contract (items[] with timestamp, open, high, low, close as premium percentages) and the 'over the given period' scoping, which is useful behavior beyond the schema.

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

Conciseness5/5

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

The description is a single front-loaded sentence: the action and resource come first, followed by a compact statement of the returned fields. There is no filler, redundancy, or repeated schema content.

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

Completeness4/5

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

For a simple read-only K-line retrieval tool with fully documented parameters and no output schema, the description covers the key return structure and resource scope. It lacks an explicit note about edge cases (e.g., empty records for padded symbols), but that is already documented in the symbol parameter description, so nothing critical is missing for a correct call.

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 description coverage is 100%, so the parameters (symbol, period, count, _jq) are fully documented in the schema; the description adds no new parameter-level detail. Baseline 3 is appropriate because the schema carries the semantic burden and the description does not contradict or enrich it.

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?

The description opens with a specific verb-resource pair ('Get A/H share premium historical K-line data') that names the exact data product and distinguishes it from the sibling ah_premium_intraday by the word 'historical'. It also states the output shape, leaving no ambiguity about what the tool returns.

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

Usage Guidelines3/5

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

The word 'historical' implies this tool is for non-intraday premium K-lines, and the sibling ah_premium_intraday provides the contrast, but there is no explicit when-to-use or when-not-to-use guidance. No alternatives or exclusions are named, so the agent must infer the selection criteria.

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

ah_premium_intradayA/H Premium (Intraday)A
Read-onlyIdempotent
Inspect

Get A/H share premium intraday time-share data. Returns items[]{timestamp, premium_rate} showing the intraday A/H premium percentage minute by minute.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare read-only, open-world, idempotent, and non-destructive behavior. The description adds specifics: returns items with timestamp and premium_rate, and implies minute-by-minute resolution. It avoids contradicting annotations and provides useful context beyond the generic hints.

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

Conciseness5/5

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

The description is two sentences, clear, and front-loaded with the purpose. It includes essential return structure without fluff, earning each word.

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

Completeness4/5

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

Given the tool's simplicity (one required param, no output schema, no nested objects), the description covers the key details: what data is returned and the meaning of the fields. It lacks explicit mention of time range or pagination, but these are likely minor for a simple intraday tool.

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 100%, so the schema fully documents both parameters. The description does mention the symbol example and warns about padded codes (which is beyond the schema), adding marginal value. Given high schema coverage, a baseline of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the tool retrieves intraday A/H premium data with a specific resource and time granularity. It distinguishes from the sibling `ah_premium` by specifying 'intraday' and 'minute by minute', though it could be more explicit about the exact difference.

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

Usage Guidelines3/5

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

The description implies usage for intraday data without explicit guidance on when to choose this over `ah_premium` or other data tools. It lacks direct comparison to the historical or daily counterpart, leaving some inference needed.

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

alert_addAdd Price AlertAInspect

Add a price alert. condition: price_rise/price_fall (absolute price) or percent_rise/percent_fall (relative %). frequency: once/daily/every. Returns created alert object.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
priceYesThreshold price or percentage value
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.
conditionYesAlert condition: "price_rise", "price_fall", "percent_rise", "percent_fall"
frequencyNoAlert frequency: "once" (trigger once then disable), "daily" (once per day), "every" (alert every time condition is met)

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already communicate that this is a non-read-only, non-idempotent, non-destructive operation. The description adds that the tool 'Returns created alert object,' which is useful since there is no output schema. However, it does not disclose side effects, activation behavior, duplicate-alert behavior, or whether created alerts require additional setup—so it only modestly exceeds annotation coverage.

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

Conciseness5/5

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

The description is compact and front-loaded: one clear action sentence, then the two most decision-relevant parameter dimensions, then the return value. Every clause earns its place and no unnecessary filler is present.

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

Completeness4/5

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

For a create tool with five parameters and no output schema, the description covers the main semantic distinctions and the return shape. The main gap is that frequency is optional but the description does not state a default behavior when the agent omits it, which could leave an agent unsure about how the alert will behave.

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 description coverage is 100%, so the baseline is 3. The description adds value by explicitly grouping price_rise/price_fall as absolute price and percent_rise/percent_fall as relative %, which the schema alone does not state. It also restates frequency options, though the schema already covers their detailed semantics.

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?

The description opens with a specific verb-plus-resource statement: 'Add a price alert.' It clearly distinguishes this tool from sibling alert tools like alert_delete, alert_enable, and alert_list, and it further explains condition and frequency variants so the agent knows exactly what the tool creates.

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

Usage Guidelines4/5

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

The description gives clear context on how to configure the alert by differentiating absolute-price conditions from percentage-relative conditions and defining frequency options. It does not explicitly state when not to use this tool versus alert_delete/alert_enable/alert_list, but the create-vs-manage distinction is strongly implied.

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

alert_deleteDelete Price AlertA
DestructiveIdempotent
Inspect

Delete a price alert by alert_id (numeric string from alert_list). Returns upstream API response on success; errors if alert_id is invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
alert_idYesAlert indicator id

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already signal destructive and idempotent behavior; the description adds that a successful call returns the upstream API response and that an invalid alert_id produces an error. It does not contradict the annotations and adds useful call outcome context, though it does not elaborate on permanence or side effects.

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

Conciseness5/5

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

Two sentences, each earning its place: the first states the action and required identifier, the second summarizes success/error outcomes. No filler.

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

Completeness4/5

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

For a one-required-parameter delete operation, the description covers what is deleted, where to get the ID, and the success/error contract. Since there is no output schema, 'Returns upstream API response' is enough to set expectations, though a slightly more concrete response shape would be more complete.

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 already documents both parameters, so the baseline is 3. The description adds the crucial fact that alert_id is a 'numeric string from alert_list', which is more specific than the schema's 'Alert indicator id' and explains the expected format/source.

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?

Description opens with the action verb 'Delete' and names the exact resource ('price alert') plus the required identifier source ('alert_id ... from alert_list'). This clearly distinguishes it from sibling alert tools such as alert_disable and alert_enable.

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

Usage Guidelines4/5

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

The description states that the alert_id must come from alert_list, giving the agent the prerequisite lookup step. It implies deletion as opposed to disable/enable but does not explicitly say when to prefer delete over alert_disable, so it lacks formal exclusions.

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

alert_disableDisable Price AlertA
Idempotent
Inspect

Disable a price alert by alert_id. Use alert_list to find the numeric alert_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
alert_idYesAlert indicator id

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=true, so the description adds little behavioral detail. It does not clarify whether 'disable' is reversible or how it differs from deletion, but the idempotency annotation partially compensates for that gap.

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

Conciseness5/5

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

The description is one concise sentence with no filler. The core action and parameter are stated up front, and the helpful navigation hint follows naturally.

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

Completeness4/5

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

For a simple mutation tool with one required parameter and strong annotations, the description is nearly complete. The main gap is explaining the effect of disabling versus deleting an alertholistically, but the current text is adequate for a low-complexity tool.

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 description coverage is high at 100%, so the baseline is 3. The description adds value by specifying that alert_id is numeric and telling the agent where to find it, which improves the parameter semantics beyond the schema's generic 'Alert indicator id'.

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?

The description states a specific verb ('Disable') and resource ('price alert') with the identifying parameter ('alert_id'), which clearly distinguishes it from sibling tools like alert_enable and alert_delete. It is immediately obvious what this tool does and which resource it acts on.

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

Usage Guidelines4/5

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

It explicitly instructs the agent to use alert_list to find the numeric alert_id, providing useful operational guidance. It does not explicitly contrast when to use disable versus delete/enable, but the verb and id guidance make the intended usage clear enough.

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

alert_enableEnable Price AlertA
Idempotent
Inspect

Enable a price alert by alert_id. Use alert_list to find the numeric alert_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
alert_idYesAlert indicator id

TDQS

A4.2/5.0
Behavior3/5

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

The description is consistent with annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false) and adds no contradicting information. However, it contributes little behavioral detail beyond the verb 'enable' — the mutation, idempotency, and non-destructiveness are already carried by the annotations, and the description adds no new facts about side effects, errors, or state changes.

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

Conciseness5/5

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

Two short sentences with zero filler. The core action is front-loaded in the first sentence, and the second sentence earns its place by supplying the lookup cross-reference. Nothing could be removed without losing information.

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

Completeness4/5

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

For a simple mutation tool with one required parameter, no output schema, and annotations already covering idempotency and non-destructiveness, the description is essentially complete. The only minor gap is not addressing behavior when the alert doesn't exist or is already enabled — but the idempotentHint annotation partially mitigates this.

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%, but the schema's alert_id description ('Alert indicator id') is weak and tautological. The tool description adds genuine value by specifying that the ID is numeric and by telling the agent exactly where to obtain it (alert_list). This exceeds the baseline expected when the schema already documents parameters.

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 — 'Enable a price alert by alert_id' — and the verb 'enable' distinguishes it from the sibling family (alert_add, alert_disable, alert_delete, alert_list) without needing to open any schema. An agent can tell exactly what this tool does and what it is not.

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

Usage Guidelines4/5

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

Provides clear, actionable context by pointing the agent to alert_list as the source for the numeric alert_id — addressing the key precondition. However, it does not explicitly state when to choose this over alert_add (creating a new alert) or alert_disable (the inverse operation), so exclusion guidance is implied rather than stated.

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

alert_listList Price AlertsC
Read-onlyIdempotent
Inspect

Get all configured price alerts.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds no extra behavioral context beyond the basic retrieval statement—no mention of return format, ordering, pagination, or whether disabled alerts are included. With annotations covering safety, the description still adds little value.

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?

The description is a single, efficient sentence that conveys the core purpose without waste. It is appropriately sized for a simple list operation, though it could include more context without becoming verbose.

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

Completeness3/5

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

For a simple list tool with one optional parameter and no output schema, the description is minimal but adequate. However, it lacks any details about the response (e.g., whether it returns an array, includes disabled alerts, or any default behavior). Given the sibling tools, mentioning that it returns all alerts regardless of state could be helpful, but it is not critical for a straightforward list.

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?

The only parameter is the optional _jq filter, which is fully documented in the schema (100% coverage). The description does not need to explain it, as the schema handles it. The baseline of 3 is appropriate since the schema carries the parameter semantics.

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

Purpose4/5

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

The description clearly states the verb 'Get' and the resource 'all configured price alerts', making the purpose unambiguous. It distinguishes from sibling alert management tools (add/delete/enable/disable) by implying a listing operation, but does not explicitly name them. The name 'alert_list' reinforces this, so it is clear enough for an agent.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus the many alert-related siblings (alert_add, alert_disable, etc.). The description does not mention any context, exclusions, or alternatives. An agent must infer that this is for retrieval, not modification.

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

anomalyMarket AnomalyA
Read-onlyIdempotent
Inspect

Get market anomaly alerts (unusual price/volume changes). market: HK/US/CN/SG. symbol: optional, filter to a specific stock. count: results per page (default 50, max 100).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
countNoNumber of results to return (default: 50, max: 100)
marketYesMarket code: HK, US, CN, SG
symbolNoFilter to a specific symbol, e.g. "700.HK" or "AAPL.US"

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already mark the call as read-only, idempotent, and non-destructive. The description adds context about alert content (unusual price/volume changes) and pagination defaults, but doesn't discuss result shape, update frequency, or ordering. 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.

Conciseness5/5

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

The entire description is a single compact sentence with the action first, then the parameters and defaults. No filler or redundancy; every clause adds useful detail.

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

Completeness4/5

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

For a simple read-only lookup with one required parameter, the description plus schema and annotations is sufficient to invoke the tool correctly. It omits the output shape and any mention of no-result behavior, but this is minor given no output schema and the low complexity.

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 description coverage is 100%, so the schema fully documents market, symbol, count, and _jq. The description largely repeats those meanings rather than adding new semantics, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific action ('Get market anomaly alerts') and clarifies the concept as unusual price/volume changes, with market scope. It doesn't explicitly name sibling tools like top_movers or market_status as alternatives, so it is clear but not strongly differentiated.

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

Usage Guidelines3/5

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

The description gives operational guidance — market is required, symbol optionally filters, count controls page size — but no explicit when-to-use versus alternatives or exclusions. The use case is implied by the purpose rather than stated as a decision rule.

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

bank_cardsBank CardsA
Read-onlyIdempotent
Inspect

List linked withdrawal bank cards for the current account. Returns cards[]{id, bank_name, account_number (masked), currency, status}.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral detail by specifying the returned shape (cards[]) and explicitly noting that account_number is masked.

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

Conciseness5/5

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

Two compact sentences with the main action front-loaded and the return payload summarized in one clause. There is no filler and no repetition of structured metadata.

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?

With zero required parameters, no output schema, and read-only non-destructive annotations, the description is sufficient to invoke the tool correctly. It includes the core output fields and notes masking, so an agent knows what to expect in the response.

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?

The only parameter is the optional _jq filter, and the schema description covers it 100%, so the tool description does not need to restate it. The baseline of 3 applies because the schema already provides the necessary parameter meaning.

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?

The description opens with the verb 'List', names the resource 'linked withdrawal bank cards', and scopes it to 'the current account', so the action and object are unambiguous. The resource is clearly distinct from siblings like withdrawals and deposits, which are transaction records rather than card records.

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

Usage Guidelines4/5

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

The phrase 'linked withdrawal bank cards for the current account' supplies clear context for when to use the tool. It does not explicitly name alternatives or exclusions, but the context is sufficient for a straightforward read-only listing tool.

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

broker_holdingBroker HoldingA
Read-onlyIdempotent
Inspect

Get top broker holding data for a symbol (HK stocks only; sourced from HKEX CCASS participant disclosure).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
periodNoPeriod: "rct_1" (1 day, default), "rct_5" (5 days), "rct_20" (20 days), "rct_60" (60 days)
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the description does not need to re-state safety. It adds value by disclosing the data source and market scope, but it does not describe pagination, result ranking, or any other runtime behavior.

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

Conciseness5/5

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

The description is one efficient sentence with the core verb/resource first, followed by the two most important qualifiers (market scope and data source). No wasted words.

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

Completeness4/5

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

For a read-only data lookup, the description plus a fully documented input schema is sufficient for an agent to select and invoke the tool. It does not define what 'top' means or describe the output shape, but given the simple query nature and strong annotations, this is a minor gap.

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 description coverage is 100%, so the parameters are already well documented. The description reinforces the symbol-centric purpose but adds no new semantic detail about period or the jq filter beyond 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?

The description names a specific action and resource: 'Get top broker holding data for a symbol.' It further narrows scope with 'HK stocks only' and 'sourced from HKEX CCASS participant disclosure,' which distinguishes it from sibling tools like broker_holding_daily, broker_holding_detail, and participants.

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

Usage Guidelines4/5

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

It gives a clear applicability boundary ('HK stocks only') and a data-source context, so an agent knows when this tool is relevant. It stops short of explicitly naming alternatives or saying when NOT to use it, which would be necessary for a 5.

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

broker_holding_dailyBroker Holding (Daily)A
Read-onlyIdempotent
Inspect

Get daily holding history for a specific broker (by broker_id) in a symbol (HK stocks only; sourced from HKEX CCASS participant disclosure).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.
broker_idYesBroker participant number

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is established. The description adds useful behavioral context beyond annotations: the data is sourced from HKEX CCASS and limited to HK stocks, and the tool returns daily history rather than current holdings. No contradictions.

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

Conciseness5/5

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

One tightly written sentence that front-loads the core operation and immediately adds the important scoping constraints (broker, symbol, HK-only, data source). Every word earns its place with no filler.

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

Completeness4/5

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

For a read-only, two-required-parameter query tool, the description plus the rich parameter schema gives an agent enough to invoke it correctly. There is no output schema, but the return concept ('daily holding history') is clear from the name and description. Date-range or pagination details would strengthen it but are not essential for a first correct call.

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 description coverage is 100%, and the schema already documents both required parameters, including canonical symbol format and empty-record behavior. The description merely repeats symbol and broker_id in prose without adding new parameter-level meaning, so the baseline 3 is appropriate.

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?

The description states a specific verb ('Get'), a specific resource ('daily holding history for a specific broker ... in a symbol'), and scoping constraints ('HK stocks only', 'HKEX CCASS participant disclosure'). This clearly differentiates it from sibling tools like broker_holding or broker_holding_detail through the 'daily' qualifier.

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

Usage Guidelines4/5

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

The context is clear: use this tool when you need historical daily broker holding data for a specific symbol and broker. It does not explicitly name alternatives or state when not to use it, so it stops short of a 5, but the intended usage is unambiguous.

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

broker_holding_detailBroker Holding DetailA
Read-onlyIdempotent
Inspect

Get full broker holding detail list for a symbol (HK stocks only; sourced from HKEX CCASS participant disclosure).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already establish that this is read-only, idempotent, and non-destructive, so the bar is lower. The description adds useful context about market scope and data provenance, but it does not describe response format, pagination, or size behavior, which would be needed for a fuller 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.

Conciseness5/5

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

One sentence with no filler; the core action, market constraint, and source are all front-loaded. Every element earns its place.

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

Completeness4/5

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

For a simple read-only lookup with one required parameter, the description plus schema is nearly complete: it states the market, source, and what is returned. A mention of response shape or pagination would make it fully complete, but the word 'list' and the robust symbol schema cover most agent needs.

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 description coverage is 100%, including the canonical symbol format caveat about padded codes, so the schema already handles parameter semantics. The description only repeats 'for a symbol' and adds no extra parameter detail.

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

Purpose4/5

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

The description names a specific verb ('Get') and resource ('full broker holding detail list') and adds concrete scope: HK stocks only and data sourced from HKEX CCASS participant disclosure. It is clear, but it does not explicitly distinguish this from sibling tools such as broker_holding or broker_holding_daily.

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

Usage Guidelines3/5

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

The 'HK stocks only' constraint and the HKEX CCASS source give clear context about when the tool applies, and implicitly warn against non-HK symbols. However, it never mentions alternatives or explicitly says when to choose this over sibling holding tools, leaving the routing decision to inference.

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

brokersBroker QueueA
Read-onlyIdempotent
Inspect

Get broker queue (HK stocks only). Map broker IDs to names via participants.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, non-destructive), so the description's added behavioral value is limited to the market-scope constraint. It does not disclose response shape, ordering, or queue-specific behavior, though annotations lower 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.

Conciseness5/5

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

Two terse sentences with the verb and resource front-loaded. The second sentence adds a meaningful resolution step rather than filler.

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

Completeness4/5

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

For a simple read-only, one-required-parameter tool, the description plus schema covers the essential calling contract. It doesn't describe the queue's return fields, but the participants reference tells the agent how to interpret broker IDs, which is the main interpretive gap.

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 description coverage is 100%, so `symbol` and `_jq` are already fully documented. The description adds no parameter-level detail; the baseline of 3 is appropriate.

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

Purpose4/5

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

The description names a specific resource ('broker queue') and a concrete action ('Get'), and narrows scope with 'HK stocks only'. It points to participants for ID resolution but does not explicitly contrast itself with related broker_holding* siblings.

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

Usage Guidelines3/5

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

The 'HK stocks only' qualifier gives a clear scope for when this tool applies, and the participants hint suggests a supporting data source. However, there is no explicit when-not-to-use guidance or named alternatives among the many broker-related tools.

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

business_segmentsBusiness SegmentsA
Read-onlyIdempotent
Inspect

Get current-period business segment revenue breakdown for a symbol (name, percent, total, currency)

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "AAPL.US"

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful point-in-time context ('current-period') and states exactly what data is returned, which goes beyond the annotations without contradicting them.

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

Conciseness5/5

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

A single front-loaded sentence that states the action, scope, resource, and output fields with no filler or repetition of schema details.

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 simple read-only lookup with one required parameter and no output schema, the description supplies the necessary output shape (name, percent, total, currency) and temporal scope. Annotations cover safety and idempotency, so nothing essential is missing.

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 description coverage is 100% and both parameters (symbol and _jq) are already well documented in the schema. The description adds no parameter-specific meaning beyond mentioning symbol in the tool's purpose, so it meets but does not exceed 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?

The description uses a specific verb ('Get') and resource ('business segment revenue breakdown') and scopes it to the current period for a symbol. Listing the returned fields (name, percent, total, currency) makes the tool's output intent unambiguous and distinguishes it from the historical sibling business_segments_history.

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

Usage Guidelines4/5

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

'Current-period' gives a clear context for when this tool applies, implying the historical sibling business_segments_history is for past periods. It does not explicitly name alternatives or exclusions, 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.

business_segments_historyBusiness Segments HistoryA
Read-onlyIdempotent
Inspect

Get historical business segment revenue trends (by period and category).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
cateNoSegment category filter
reportNoReport period: "qf" (quarterly), "saf" (semi-annual), "af" (annual)
symbolYesSecurity symbol, e.g. "AAPL.US"

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds the 'trends' and period/category dimension, which is useful context beyond annotations. However, it doesn't disclose output structure or any edge cases, which is acceptable given the read-only nature but not exceptional.

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

Conciseness5/5

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

A single, front-loaded sentence that states the action and scope with no filler. It's efficient and easily parsed by an agent.

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

Completeness4/5

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

Given the tool is a read-only getter with well-documented parameters and safety annotations, the description is sufficient for an agent to understand the tool's purpose. It hints at the return content ('revenue trends') without needing to detail the exact structure since there's no output schema. Minor gap: it doesn't clarify whether the response is a time series or single point, but the word 'trends' implies multiple periods.

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 description coverage is 100%, so all parameters are documented in the schema. The description's mention of 'by period and category' aligns with the report and cate parameters but doesn't add new meaning beyond the schema. Baseline 3 applies because the schema carries the parameter documentation.

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?

The description clearly states the verb 'Get' and the resource 'historical business segment revenue trends', and adds 'by period and category' which distinguishes it from the sibling 'business_segments' tool. It's specific and unambiguous.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool vs alternatives. The word 'historical' implies it's for historical data versus current, but it doesn't name the sibling tool or provide conditions. An agent would have to infer the use case.

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

calc_indexesCalc IndexesA
Read-onlyIdempotent
Inspect

Calculate financial indexes for symbols. Pass symbols, and optionally indexes (e.g. ["PeTtmRatio","PbRatio","LastDone","TurnoverRate"]). When indexes is omitted or empty, defaults to ["LastDone","ChangeValue","ChangeRate","Volume","PeTtmRatio","PbRatio","DividendRatioTtm","TurnoverRate","TotalMarketValue"]. Returns per-symbol index values. When Greek indexes (Delta, Gamma, Theta, Vega, Rho) are requested, they are normalized: theta is the per-day value (one day's time decay), vega is the price change per 1% change in implied volatility, and rho is the price change per 1% change in the risk-free interest rate.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
indexesNoCalc indexes (optional; defaults to LastDone, ChangeValue, ChangeRate, Volume, PeTtmRatio, PbRatio, DividendRatioTtm, TurnoverRate, TotalMarketValue): LastDone, ChangeValue, ChangeRate, Volume, Turnover, YtdChangeRate, TurnoverRate, TotalMarketValue, CapitalFlow, Amplitude, VolumeRatio, PeTtmRatio, PbRatio, DividendRatioTtm, FiveDayChangeRate, TenDayChangeRate, HalfYearChangeRate, FiveMinutesChangeRate, ExpiryDate, StrikePrice, UpperStrikePrice, LowerStrikePrice, OutstandingQty, OutstandingRatio, Premium, ItmOtm, ImpliedVolatility, WarrantDelta, CallPrice, ToCallPrice, EffectiveLeverage, LeverageRatio, ConversionRatio, BalancePoint, OpenInterest, Delta, Gamma, Theta, Vega, Rho
symbolsYesSecurity symbols, e.g. ["700.HK", "AAPL.US"]. Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark the tool as read-only, idempotent, and non-destructive, and the description adds non-obvious behavior beyond them: padded symbol codes return empty records rather than errors, and Greek indexes have precise normalization semantics. This goes well beyond what the schema or annotations convey.

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

Conciseness5/5

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

Four dense sentences cover purpose, invocation, defaults, and Greek behavior with no filler. The default list is long, but it is essential context and is placed directly after the core instruction, making the description easy to parse.

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 multi-index calculator with no output schema, the description covers request construction, default behavior, edge-case symbol handling, and special index normalization. Nothing critical appears missing for an agent to invoke the tool correctly and interpret the results.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds decision-relevant meaning: representative index values, the default set, the canonical symbol requirement, and the normalization of theta/vega/rho. It turns a flat list of possible parameters into semantics an agent can act on.

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?

The opening phrase 'Calculate financial indexes for symbols' states a specific verb, resource, and target, and the example/default index lists define precisely what kind of metrics are returned. It is distinguishable from quote-like sibling tools by its focus on computed indexes and Greek normalization, even though it does not name an alternative explicitly.

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

Usage Guidelines4/5

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

The description gives concrete invocation guidance: pass symbols, optionally pass indexes, and omitting/empty indexes falls back to a documented default set. It also explains how Greek index values are normalized, but it does not explicitly state when to prefer this tool over quote, option_quote, or valuation, so it stops 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.

cancel_orderCancel OrderA
DestructiveIdempotent
Inspect

Cancel an open order by order_id. Returns plain text "order cancelled" on success; errors if the order is already filled or cancelled. TWO-STEP CONFIRMATION IS MANDATORY: this tool is a DRY RUN unless you pass the confirmation_code its own dry run returned. Call it first without execute, show the returned preview to the user, and only call it again with execute="" after the user has explicitly confirmed that exact order. The code is derived from the order itself, so it applies only to that exact order. Never quote it back on your own initiative, and never in the same turn the user first asks. The dry run also echoes the order being targeted so the user can verify it is the right one. Set is_attached=true to cancel a single take-profit/stop-loss leg by its own order_id; cancelling a parent order cancels its legs along with it.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
executeNoThe `confirmation_code` from this order's dry run. WITHOUT IT NOTHING IS SENT. Omitted (the default) makes this a DRY RUN: the request is validated and echoed back with a three-digit `confirmation_code`, and nothing reaches the exchange. Required protocol: call once without `execute`, show the returned preview to the user, and call again quoting the code only after the user has explicitly confirmed that exact order. The code is single use, expires in 10 minutes, and applies only to this exact order — change any field and it stops working. Never quote it back on your own initiative, and never in the same turn the user first asks.
order_idYesOrder ID to cancel (from today's orders or order history)
is_attachedNoSet to true to cancel an attached take-profit / stop-loss leg by its own order_id, leaving the parent order in place. Omit (or false) to cancel a parent order, which cancels its attached legs with it.

TDQS

A3.6/5.0
Behavior1/5

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

The description discloses rich behavior: plain-text success response, errors on already-filled/cancelled orders, single-use 10-minute confirmation code, dry-run preview echo, and attached-leg semantics. However, this contradicts the idempotentHint=true annotation: the code is single-use and cancelling an already-cancelled order errors, so repeated identical calls do not succeed. Per rubric, a contradiction forces a score of 1.

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?

Core purpose, success/error behavior, and the safety-critical confirmation protocol are front-loaded and clearly flagged. The description is longer than strictly necessary because it partially restates the confirmation details already present on the execute parameter, but the redundancy is acceptable for a destructive tool and nothing is ambiguous or wasted.

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 destructive, two-step tool with no output schema, the description is complete: it states the return value, failure modes, confirmation-code constraints, dry-run behavior, and parent/attached-leg semantics. An agent has everything needed to call the tool correctly.

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 description coverage is 100%, and the schema already documents execute, order_id, is_attached, and _jq in detail, including the two-step confirmation protocol. The description reinforces the confirmation flow but adds little new parameter-level 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.

Purpose5/5

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

States a specific verb and resource: 'Cancel an open order by order_id.' It also distinguishes cancelling a parent order from cancelling an attached take-profit/stop-loss leg via is_attached=true, so an agent can tell exactly what the tool does and how it differs from related order tools.

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

Usage Guidelines4/5

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

Provides an explicit, mandatory usage protocol: call as a dry run first, show the preview, then call again with the confirmation code only after explicit user confirmation, and never quote the code back in the same turn. It also clarifies when to use is_attached=true vs cancelling a parent order. It does not name sibling alternatives (e.g., grid_cancel), so it misses the upper bound.

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

candlesticksCandlesticksA
Read-onlyIdempotent
Inspect

Get candlestick data (OHLCV). Only symbol is required; period defaults to day, count to 100 (max 1000), forward_adjust to false, trade_sessions to all. period: 1m/5m/15m/30m/60m/day/week/month/year. trade_sessions: intraday/all. If the account's entitlement caps out below the requested count, this returns as many candles as allowed instead of erroring — check the returned array length against count if an exact number matters.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
countNoNumber of candlesticks (optional, max 1000; default 100)
periodNoPeriod: 1m, 5m, 15m, 30m, 60m, day, week, month, year (default: day)day
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.
forward_adjustNoWhether to forward-adjust for splits/dividends (default: false / no adjust)
trade_sessionsNoTrade sessions: "intraday" (regular hours only) or "all" (include pre-market and post-market; default "all")all

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond that: the tool silently returns fewer candles when entitlement caps the count instead of erroring, and tells the agent to verify the returned array length. This is a meaningful edge case not present in the schema.

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?

The description is three sentences and front-loads the purpose before diving into defaults and caveats. It is efficient and each sentence earns its place, though the middle sentence packs a long list of defaults and allowed values that is also present in the schema.

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

Completeness4/5

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

For a read-only data-fetching tool with no output schema, the description covers the essential operational details: required parameters, defaults, and the entitlement cap edge case. It does not explain the exact response shape or ordering, but the OHLCV naming and array-length mention give the agent enough to infer what to expect. The lack of differentiation from sibling history tools is the main gap.

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 description coverage is 100%, so the schema already documents every parameter. The description repeats the defaults and allowed values for period and trade_sessions, which does not add new meaning beyond the schema. The only extra is the note that only symbol is required, which is a minimal addition.

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

Purpose4/5

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

The description opens with a specific verb and resource — 'Get candlestick data (OHLCV)' — making the core function immediately clear. However, it does not distinguish itself from sibling tools like history_candlesticks_by_date or history_candlesticks_by_offset, so an agent may not know which candlestick tool to choose for historical vs. period-based data.

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

Usage Guidelines3/5

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

The description gives clear context: only symbol is required, defaults are listed, and the entitlement cap behavior is explained. But it provides no explicit guidance on when to use this tool versus alternatives, nor any 'when not to use' conditions. Usage is implied rather than stated.

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

capital_distributionCapital DistributionA
Read-onlyIdempotent
Inspect

Get capital distribution for a symbol. data_available is false for symbols with no capital-flow data (e.g. indices) — the other fields are still present but meaningless zeros in that case.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds valuable nuance: for symbols without capital-flow data, data_available is false and other fields are present but meaningless zeros. This goes beyond the annotation safety profile and helps the agent interpret results correctly.

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?

The description is a single, focused sentence that states the purpose and the key caveat about data_available. It is concise and front-loaded with the primary action. It could be slightly better structured by separating the purpose from the edge-case note, but it is efficient.

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

Completeness4/5

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

Given the tool's simplicity, no output schema, and rich annotations, the description covers the essential behavioral quirk (data_available and meaningless zeros) and the parameter caveat. It is complete enough for an agent to invoke correctly, though it could mention the return format or typical use cases, which are minor omissions.

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 description coverage is 100%, so the schema documents both parameters. The description adds critical detail for the symbol parameter: padded codes like '00700.HK' return an empty record instead of an error, and canonical form is required. This enriches the schema's basic description and is important for correct invocation.

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

Purpose4/5

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

The description states a clear purpose: 'Get capital distribution for a symbol.' It names the resource and action, but does not differentiate from the sibling tool 'capital_flow', which is a potential alternative for similar data. This prevents a top score because the agent must infer which tool is appropriate.

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

Usage Guidelines3/5

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

The description provides a context clue about data_available being false for symbols without capital-flow data, which hints at when the tool may not be useful. However, it does not explicitly state when to use this tool versus alternatives like capital_flow, nor does it give any exclusion criteria. This is a moderate gap.

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

capital_flowCapital FlowB
Read-onlyIdempotent
Inspect

Get capital inflow/outflow time series. Returns items[]{timestamp, inflow, outflow, net_flow} for the symbol (same-day data).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds useful detail by specifying the return shape (items[] with timestamp, inflow, outflow, net_flow) and the same-day data constraint. There is 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.

Conciseness5/5

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

The description is a single, focused sentence that front-loads the purpose and immediately states the exact return structure. Every clause earns its place, with no redundant or vague wording.

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

Completeness4/5

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

For a simple read-only tool with 100% schema coverage founded on a well-documented input schema, the description provides the essential return shape and the same-day temporal constraint. Pagination, ordering, and exact time ranges are not mentioned, but these are less critical for correct invocation and selection.

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?

The input schema fully documents both parameters, including a concrete canonical-form example and the padded-code empty-record behavior for symbol. The description adds no parameter-level detail beyond what the schema already provides, so the high schema coverage supports the baseline score.

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

Purpose4/5

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

The description clearly states the operation ('Get capital inflow/outflow time series') and explicitly lists the returned fields (timestamp, inflow, outflow, net_flow). However, it does not explicitly differentiate itself from similarly named siblings such as cash_flow or capital_distribution, preventing a top score.

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

Usage Guidelines2/5

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

The description gives no explicit guidance on when to use this tool versus alternatives, and no sibling tools are referenced. The only contextual hint is 'same-day data,' which implies a limitation but does not help an agent decide between this and related capital/cash-flow siblings.

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

cash_flowCash FlowB
Read-onlyIdempotent
Inspect

Get cash flow records (deposits, withdrawals, dividends). Returns items[]{transaction_type, amount, currency, balance, created_at, remark}. start_at/end_at in RFC3339.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
end_atYesEnd time (RFC3339)
start_atYesStart time (RFC3339)

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the time-range scoping and the exact returned fields, which is useful behavioral context. It does not disclose pagination, ordering, or whether the response is limited to a certain number of records, but given the annotations cover the main behavioral traits, 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.

Conciseness4/5

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

The description is two sentences and front-loads the core purpose and returned fields, then adds the time-format constraint. Every sentence earns its place, and there is no fluff. It could be slightly more structured by separating the return format from the parameter note, but it is appropriately sized.

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

Completeness3/5

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

For a read-only list tool with full schema coverage and no output schema, the description covers the essential purpose, returned fields, and time-format requirement. It is missing details like pagination, ordering, or any limits on the returned records, which an agent might need for large date ranges. Given the tool's simplicity and the annotations covering safety, the description is adequate but not complete.

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 description coverage is 100%, so the schema already documents start_at and end_at as RFC3339 times. The description reinforces the time-range semantics by mentioning start_at/end_at in RFC3339, but it adds no new meaning beyond the schema. The _jq parameter is also fully documented in the schema. Baseline 3 is correct when the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the tool retrieves cash flow records and enumerates the transaction types (deposits, withdrawals, dividends), which distinguishes it from generic account tools. It also lists the returned fields, making the resource and output explicit. It doesn't explicitly name a sibling alternative, but the field list and transaction-type scope are enough to differentiate it from related tools like deposits, withdrawals, and account_balance.

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

Usage Guidelines3/5

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

The description implies usage by specifying a time range (start_at/end_at in RFC3339) and the returned record types, which tells an agent when this tool is appropriate for querying cash flow history. However, it does not explicitly state when to prefer this over siblings like deposits, withdrawals, or account_balance, nor does it mention any exclusions or prerequisites. The context is clear but the guidance is not explicit.

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

companyCompany ProfileA
Read-onlyIdempotent
Inspect

Get company overview. US accounts querying a .US symbol get a US-specific variant (intro, market_cap, top_rank_tags, sharelist, detail_url). The region is detected from the account automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already signal read-only, idempotent, and non-destructive behavior. The description adds non-obvious behavioral context: US accounts querying .US symbols receive a different variant with listed fields, and region detection is automatic.

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

Conciseness5/5

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

Three short sentences with no filler: the first states the purpose, the second captures the key US-specific variant, and the third clarifies the trigger. Information is front-loaded and every sentence earns its place.

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

Completeness4/5

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

For a simple read-only overview with fully documented parameters and strong annotations, the description covers the essential purpose and a significant output-variation case. The lack of an explicit return-structure description is a minor gap, not a blocking one.

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 description coverage is 100%, so both _jq and symbol are already fully documented, including the canonical-form caveat for symbols. The description adds no parameter-specific meaning, so the baseline of 3 applies.

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

Purpose4/5

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

The description opens with a clear verb and object: 'Get company overview.' It is specific enough to identify the tool's core purpose, though it does not explicitly distinguish itself from siblings like static_info or security_facts.

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

Usage Guidelines3/5

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

The description implies when to use the tool through 'Get company overview,' but it never states explicit use cases, exclusions, or alternatives. The US-account/.US variant note is practical output guidance, not tool-selection guidance.

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

consensusAnalyst ConsensusA
Read-onlyIdempotent
Inspect

Get financial consensus estimates for upcoming periods. US accounts querying a .US symbol get a US-specific variant (ai_summary plus a details[] list per period, instead of items[]). The region is detected from the account automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds valuable context about the response variant (ai_summary plus details[] vs items[]) and automatic region detection, going beyond what annotations state. 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.

Conciseness5/5

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

The description is two sentences, front-loaded with the primary purpose and immediately followed by the most important behavioral note. Every word earns its place; no fluff or repetition.

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

Completeness3/5

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

There is no output schema, so the description should explain return values. It mentions the US variant response shape but does not detail fields, periods, or error behavior. For a tool with a single required parameter and strong annotations, this is adequate but not fully complete.

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?

The input schema describes both parameters fully (symbol and _jq), so the baseline is 3. The description adds a minor nuance about region detection affecting the symbol interpretation, but does not materially enhance parameter meaning beyond the schema.

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

Purpose4/5

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

States a specific verb and resource ('Get financial consensus estimates') and highlights a notable US-specific variant, which helps distinguish it from other data tools. However, it does not explicitly differentiate from sibling tools like forecast_eps or institutional_views, so clarity is good but not exceptional.

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

Usage Guidelines3/5

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

Provides context about when the US variant applies and that region is auto-detected, which is useful. But there is no explicit guidance on when to use this tool versus alternatives, nor any exclusions or preconditions beyond the symbol requirement.

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

constituentIndex Constituents / ETF Asset AllocationA
Read-onlyIdempotent
Inspect

Get the constituents of an index or the asset allocation of an ETF. For an index (e.g. HSI.HK, .DJI.US) returns constituents[]{symbol, name, last_done, change_rate, market_cap, weight}. For an ETF (e.g. QQQ.US, 2800.HK) returns the asset allocation as info[] grouped by asset_type: 1=Holdings (top constituents with code, symbol, holding_detail), 2=Regional (country/region breakdown), 3=AssetClass (stock/bond/cash etc.), 4=Industry (sector breakdown). Each group has report_date and lists[]{name, position_ratio, name_locales}; Holdings groups additionally include code, symbol and holding_detail{industry_name, index_name, holding_type_name}.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesIndex symbol, e.g. "HSI.HK"

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare the tool read-only, idempotent, and non-destructive. The description adds substantial behavioral detail beyond that: the exact response structure, the four asset_type groups with their numeric codes, which fields each group contains, and the special holding_detail object. This is rich and accurate contextual behavior description.

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

Conciseness5/5

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

The description is dense but well-organized, front-loading the core purpose and then systematically covering the two return shapes. Every sentence adds needed information, and the grouping by asset_type makes the structure easy to parse without unnecessary verbosity.

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?

There is no output schema, so the description carries the full burden of telling the agent what to expect. It explains both index and ETF cases, lists the key fields, names the grouping codes, and describes nested objects. For a read-only lookup tool, this is complete enough for an agent to invoke and interpret results correctly.

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 is 3, but the description adds meaningful parameter guidance beyond the schema: it clarifies that 'symbol' can be an index code like HSI.HK or an ETF code like QQQ.US/2800.HK, and that the output varies based on this value. It also reinforces that _jq never changes the upstream request.

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?

The description states a specific action ('Get the constituents of an index or the asset allocation of an ETF') and names the exact resource types with examples. It clearly distinguishes the two modes (index vs. ETF), making its purpose unmistakable even among many sibling tools.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool: whenever index constituents or ETF asset allocation data are needed. It provides concrete symbol examples and explains the difference between index and ETF inputs, though it does not explicitly name alternative tools or state when not to use this one.

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

corp_actionCorporate ActionsB
Read-onlyIdempotent
Inspect

Get corporate actions (splits, buybacks, name changes).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already convey readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds the examples of corporate action types, which is mild context beyond the annotations, but it does not disclose additional behaviors like pagination, filtering, or output shape. It adds some value but not substantial.

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

Conciseness5/5

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

The description is a single focused sentence with no filler. It front-loads the action ('Get') and immediately clarifies scope with examples. Every word earns its place.

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

Completeness3/5

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

The tool is simple and read-only with rich annotations, but there is no output schema and the description does not hint at the return format or any usage nuances. Given the simplicity, it is mostly adequate, but it misses a note about what the response structure looks like, leaving the agent to guess.

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 description coverage is 100%, so the schema already documents both symbol and _jq parameters thoroughly. The description adds no parameter-level meaning beyond what the schema provides, so the baseline of 3 applies.

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

Purpose4/5

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

The description states a clear verb ('Get') and resource ('corporate actions'), and lists specific examples (splits, buybacks, name changes) that clarify scope. However, it does not explicitly differentiate from sibling tools like dividend or capital_distribution, which cover overlapping events.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description is terse and gives no context about selection criteria, such as 'use this for all corporate actions, dividend for dividend-specific data'.

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

create_watchlist_groupCreate Watchlist GroupBInspect

Create a new watchlist group. Optionally pass securities (e.g. ["AAPL.US", "700.HK"]) to pre-populate.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
nameYesGroup name
securitiesNoSecurities to add, e.g. ["700.HK", "AAPL.US"]

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already indicate a write operation (readOnlyHint=false, idempotentHint=false). The description adds minimal extra behavior: it explicitly says securities can be passed to pre-populate, which is also echoed in the schema. It does not disclose failure modes, permissions, or side effects beyond that. Given annotations cover the safety profile, this is acceptable but not rich.

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

Conciseness5/5

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

The description is one concise sentence with an example, front-loading the core purpose. No filler or redundant repetition of schema information. It is appropriately sized for the tool's simplicity.

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

Completeness3/5

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

For a simple create tool with no output schema and full annotation coverage, the description covers the essential purpose and optional parameter. However, it lacks information about behavior on duplicate names, whether the group is created empty when no securities are passed, or any constraints like group size limits. In a large sibling space, more context on uniqueness or relation to sharelist could improve completeness.

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 description coverage is 100%, so parameters are already documented. The description adds value by explicitly stating that securities are optional and providing a concrete example format (["AAPL.US", "700.HK"]). This reinforces the schema but doesn't significantly expand semantics beyond what's already present.

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

Purpose4/5

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

The description states a clear verb ('Create'), a specific resource ('watchlist group'), and the optional pre-population behavior. It is not a tautology and distinguishes this from delete/update siblings by the action, though it doesn't explicitly differentiate from sharelist_create or related group tools.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. There are sibling tools like delete_watchlist_group and update_watchlist_group, but the description does not mention when to choose this one, nor does it note any prerequisites or limitations (e.g., duplicate names). It leaves usage context entirely to inference.

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

dca_checkCheck DCA SupportA
Read-onlyIdempotent
Inspect

Check whether given symbols support DCA recurring investment.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolsYesSecurity symbols to check, e.g. ["AAPL.US", "TSLA.US"]

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already convey readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the behavioral semantic that this is a support check, but does not disclose additional traits such as response format or any edge cases. Annotations cover the critical safety profile, so the description's contribution is modest.

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

Conciseness5/5

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

A single, complete sentence with no filler or redundant wording. The core purpose is front-loaded and immediately actionable.

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

Completeness4/5

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

For a simple read-only check tool with one required array parameter and no output schema, the description provides sufficient context for a correct call. The main minor gap is that the response shape is not described, but the simple nature of the check makes this acceptable without being fully explicit.

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 description coverage is 100%, so the parameters are already fully documented. The description mentions 'given symbols', reinforcing the main parameter, but adds no new detail 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.

Purpose5/5

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

The description uses a specific verb ('check') and resource ('DCA recurring investment support') and clearly identifies the input ('given symbols'). It is easily distinguished from sibling DCA tools (dca_create, dca_update, dca_list, etc.) which perform management actions rather than eligibility checks.

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool or provide alternatives, but the purpose is straightforward and the sibling dca_create implies a preflight use case (verify support before creating a DCA plan). Usage is implied rather than stated.

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

dca_createCreate DCA PlanAInspect

Create a DCA recurring investment plan. frequency: Daily/Weekly/Monthly. day_of_week (Weekly): Mon/Tue/Wed/Thu/Fri. day_of_month (Monthly): 1-28.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
amountYesAmount to invest per cycle, e.g. "100"
symbolYesSecurity symbol, e.g. "AAPL.US"
frequencyYesInvestment frequency: Daily, Weekly, Monthly
day_of_weekNoDay of week for Weekly frequency: Mon, Tue, Wed, Thu, Fri
allow_marginNoAllow margin financing (default false)
day_of_monthNoDay of month for Monthly frequency (1-28)

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=true, so the agent knows this is a mutating, non-idempotent operation. The description adds scheduling constraints (frequency, day_of_week, day_of_month) but does not disclose side effects beyond that, such as whether repeated calls create duplicate plans, margin behavior, or response shape.

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

Conciseness5/5

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

The description is compact, front-loaded with the action verb, and conveys the key scheduling constraints without any filler. Every clause adds useful information.

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

Completeness3/5

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

For a create tool with no output schema, the description omits details about return values, failure behavior, or consequences of non-idempotency. While required parameters are clear and schema fully documents optional ones, a mutation tool could benefit from at least a note on what a successful call returns or whether creation can be repeated.

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 100%, so every parameter already has a description in the input schema. The description's frequency and day_of_week/day_of_month details essentially restate the schema, adding no new semantic meaning. Baseline 3 applies because the schema does the heavy lifting.

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?

The description opens with 'Create a DCA recurring investment plan' – a specific verb and resource that immediately identifies the action. It is clearly distinguished from siblings like dca_update, dca_stop, and dca_list by the use of 'Create'.

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

Usage Guidelines4/5

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

The intended use case ('create a recurring investment plan') is clearly stated and leaves no doubt about when to invoke it. However, it does not explicitly list alternatives or exclusions, though the sibling group makes the contrast obvious.

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

dca_historyDCA Execution HistoryA
Read-onlyIdempotent
Inspect

Get execution history records for a DCA plan by plan_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
pageNoPage number (default 1)
limitNoRecords per page (default 20)
plan_idYesPlan ID

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already establish that this is read-only, idempotent, and non-destructive. The description adds the scoping constraint 'by plan_id' as useful context, but it does not disclose response format, pagination behavior, or error characteristics. This is adequate but not rich.

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

Conciseness5/5

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

A single, front-loaded sentence that states exactly what the tool does and its required input. There is no redundant wording or filler; every word earns its place.

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

Completeness4/5

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

For a simple read-only getter, the description plus the fully documented schema and safety annotations are nearly sufficient: plan_id is required and page/limit defaults are in the schema. The main gap is the lack of an output schema or a note about what fields the execution records contain, but this is a minor omission for such a straightforward tool.

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 100%, so the schema fully documents all four parameters. The description only restates the plan_id role and adds no extra meaning for page, limit, or _jq, so it neither harms nor enhances the schema's 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?

The description names a specific verb ('Get'), a clear resource ('execution history records'), and the key scope ('for a DCA plan by plan_id'). This is specific enough to separate dca_history from sibling tools like dca_list or dca_stats without ambiguity.

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

Usage Guidelines2/5

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

The description tells what the tool does but gives no guidance on when to prefer it over alternatives such as dca_stats or history_executions, and names no exclusions or prerequisites beyond plan_id. Usage is only implied, not stated.

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

dca_listList DCA PlansA
Read-onlyIdempotent
Inspect

List DCA recurring investment plans. Filter by status (Active/Suspended/Finished) or symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
pageNoPage number (default 1)
limitNoRecords per page (default 20)
statusNoFilter by status: Active, Suspended, Finished. Omit to return all.
symbolNoFilter by symbol, e.g. "AAPL.US". Omit to return all plans.

TDQS

A4/5.0
Behavior3/5

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

The annotations already declare this tool read-only, idempotent, and non-destructive. The description adds the filtering behavior and the resource scope, but it doesn't disclose additional behavioral details such as pagination behavior, response shape, or any operational constraints. With annotations covering the safety profile, the description makes a modest additive contribution, but not a rich one.

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

Conciseness5/5

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

A single, focused sentence that front-loads the core action ('List DCA recurring investment plans') and immediately covers the optional filters. Every word earns its place; no filler or redundant elaboration.

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

Completeness4/5

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

For a simple filtered list tool, the definition is nearly complete: the schema documents all five parameters with 100% coverage, annotations cover the safety profile, and the description states the purpose and filtering options. The only shortfall is that no output schema or return format is mentioned, but an agent can reasonably infer the return is a list of DCA plans.

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 description coverage is 100%, so the baseline is 3. The description does restate the status filter values and symbol filter concept, but those are already present in the schema. It adds no meaningful parameter semantics beyond 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?

The description uses a specific verb and resource: 'List DCA recurring investment plans', which clearly distinguishes it from DCA mutation tools like dca_create, dca_update, dca_stop, etc. It also states the filtering capabilities (by status or symbol), so an agent immediately knows what this tool offers.

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

Usage Guidelines4/5

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

The description makes the usage context clear: call this when you need to list existing DCA plans, optionally filtered by status or symbol. However, it does not explicitly name alternatives such as dca_history or dca_stats, nor does it say when not to use it, so it stops short of full routing guidance.

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

dca_pausePause DCA PlanA
Idempotent
Inspect

Pause (suspend) a DCA plan by plan_id. The plan stops executing until resumed. Returns upstream API response. Use dca_resume to restart.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
plan_idYesPlan ID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate this is not read-only, not destructive, and idempotent. The description adds valuable context beyond this: the plan stops executing until resumed and the tool returns the upstream API response. This gives the agent a clear picture of the tool's lifecycle effect and return behavior.

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

Conciseness5/5

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

Three short sentences, each earning its place: the action, the behavioral consequence, and the relevant sibling for restarting. The most actionable information is front-loaded, and there is no redundancy or filler.

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

Completeness4/5

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

For a simple single-required-parameter command, the description is nearly complete: it states the effect, the identifier, the return behavior, and the restart path. It does not detail response structure in the absence of an output schema, but for this tool's complexity the provided information is sufficient for correct invocation.

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 description coverage is 100%, so the baseline applies. The description only references 'plan_id' without adding meaning beyond the schema, and it does not discuss the optional _jq parameter. The schema already documents both parameters adequately, so the description adds no extra semantic value.

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?

The description states a specific verb ('Pause'), a specific resource ('DCA plan'), and the key identifier ('by plan_id'). It also clarifies the semantic difference from dca_resume by saying the plan stops executing until resumed, which distinguishes it from related lifecycle tools.

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

Usage Guidelines4/5

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

The description clearly conveys the context: use this when you want to suspend a plan, and use dca_resume to restart it. It does not explicitly contrast with dca_stop or other sibling alternatives, so it lacks full exclusion guidance, but the core usage context is clear.

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

dca_resumeResume DCA PlanA
Idempotent
Inspect

Resume a suspended DCA plan by plan_id. Resumes automated execution on the configured schedule. Returns upstream API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
plan_idYesPlan ID

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already mark this as non-read-only, non-destructive, idempotent, and open-world, so the description only needs to add context. It usefully notes that the operation affects the configured schedule and returns the upstream API response, but it does not disclose failure modes, permission requirements, or what happens if the plan is not suspended.

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?

At around 20 words, the description is compact and front-loaded: it states the action, the resource, the effect, and the return behavior in three short sentences. There is minor redundancy in saying 'Resume' and then 'Resumes automated execution,' but no wasted or unrelated content.

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

Completeness4/5

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

For a tool with one required parameter and no nested objects, the description, combined with the annotations and full schema coverage, gives an agent the core information: when it applies, what it does, and that it returns an upstream response. The return structure is generic because there is no output schema, but that is a moderate gap for an operation of this simplicity.

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 description coverage is 100%, so plan_id and _jq are already documented in the input schema. The description only repeats 'by plan_id' and adds no additional format, constraint, or behavior details for the parameters, so the baseline 3 applies.

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

Purpose4/5

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

The description uses a specific verb ('Resume') and a precise resource ('a suspended DCA plan'), then clarifies the effect: 'Resumes automated execution on the configured schedule.' It is clearly distinguishable from siblings like dca_pause and dca_stop, though it does not explicitly name those alternatives.

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

Usage Guidelines3/5

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

The phrase 'suspended DCA plan' conveys the intended precondition, and the scheduled-execution wording explains what resuming entails. However, it does not mention alternative tools such as dca_pause or dca_stop, nor does it caution against calling it on a plan that is already active.

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

dca_statsDCA StatisticsC
Read-onlyIdempotent
Inspect

Get DCA investment statistics.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolNoFilter by symbol, e.g. "AAPL.US". Omit to return stats for all plans.

TDQS

C2.8/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe, read-only operation. The description adds no additional behavioral context, such as whether it returns aggregate data for all plans or per-plan, or if it requires authentication. With annotations covering safety, the lack of extra detail is acceptable but not exceptional.

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?

The description is a single, short sentence—extremely concise. It's front-loaded with the verb 'Get' and the resource. While it lacks detail, it's not verbose. For a simple tool, this is acceptable, but it could be slightly more informative without losing conciseness.

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

Completeness2/5

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

There is no output schema, so the description must explain what the response contains, but it doesn't. With 2 parameters and simple filters, the tool is not overly complex, but the lack of return type or example output means the agent doesn't know what 'statistics' means numerically. Sibling tools like dca_history likely provide detailed data, so a clearer distinction is needed. This is incomplete for an agent to call with confidence.

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 description coverage is 100%, so both parameters ('_jq' and 'symbol') are fully documented. The description doesn't add meaning beyond the schema; for instance, it doesn't clarify that 'symbol' filters by ticker and that omitting it returns all plans, which the schema already states. No value added beyond schema.

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

Purpose3/5

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

The description states the tool gets DCA investment statistics, but it's vague—it doesn't specify what kind of statistics (e.g., totals, performance, breakdowns) or the output format. It distinguishes from siblings like dca_list (listing plans) but doesn't clearly differentiate from dca_history (history of contributions) or trade_stats, which may overlap in concept. A more specific description like 'Get aggregated investment statistics for dollar-cost averaging plans' would be clearer.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives like dca_list, dca_history, or trade_stats. It doesn't state whether to use it for a summary vs. detailed history, or what filters apply. The agent must infer from the symbol parameter, but no explicit 'when to use' or 'when not to use' is provided.

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

dca_stopStop DCA PlanA
DestructiveIdempotent
Inspect

Permanently stop a DCA plan by plan_id. This cannot be undone. To temporarily pause, use dca_pause instead. Returns upstream API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
plan_idYesPlan ID

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and readOnly=false, and the description adds meaningful context beyond that by emphasizing irreversibility ('This cannot be undone') and noting that the tool returns the upstream API response. It does not detail response fields, but for a simple destructive action the safety profile is adequately disclosed.

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

Conciseness5/5

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

Three short sentences, each earning its place: the action, the irreversible consequence, the alternative tool, and the return type. The most decision-relevant information is front-loaded and there is no filler.

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

Completeness4/5

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

For a one-required-parameter destructive tool, the description covers the essential context: what it stops, that it is irreversible, when to choose a sibling instead, and what the return value is. There is no output schema, so a little more detail about the upstream response shape would help, but the gap is modest for this level of complexity.

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 description coverage is 100%: plan_id is already described as 'Plan ID' and _jq has a full explanation of jaq semantics. The description only reinforces that plan_id is the stop target, adding no meaningful parameter behavior beyond what the schema already provides, so the baseline of 3 applies.

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?

The description opens with a specific verb-resource pair, 'Permanently stop a DCA plan by plan_id,' and clearly communicates the permanent nature of the action. It also distinguishes itself from the sibling dca_pause by contrasting permanent stop versus temporary pause, so an agent can disambiguate without opening schemas.

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?

It explicitly states the when-to-use condition and directly names the alternative for a different intent: 'To temporarily pause, use dca_pause instead.' This gives clear routing between the two closest sibling tools, with no inference required.

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

dca_updateUpdate DCA PlanA
DestructiveIdempotent
Inspect

Update an existing DCA plan by plan_id. Can change amount, frequency (Daily/Weekly/Monthly), day_of_week (Mon-Fri), or day_of_month (1-28). Returns updated plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
amountNoNew investment amount per cycle
plan_idYesPlan ID to update
frequencyNoNew investment frequency: Daily, Weekly, Monthly
day_of_weekNoDay of week for Weekly frequency: Mon, Tue, Wed, Thu, Fri
allow_marginNoAllow margin financing
day_of_monthNoDay of month for Monthly frequency (1-28)

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the agent knows this is a mutating, potentially destructive operation. The description confirms it updates an existing plan and adds that it returns the updated plan. However, it does not clarify whether unspecified fields are preserved or reset (partial vs. full update), which is a meaningful behavioral gap. It does not contradict annotations.

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

Conciseness5/5

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

The description is two sentences, with the core purpose front-loaded and a concise list of editable fields. Every word earns its place, and there is no redundant or extraneous information. This is an efficiently structured definition.

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

Completeness3/5

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

The description covers the tool's basic function and return value, and the schema explains every parameter. However, it omits important conditional dependencies: e.g., if frequency is set to Weekly, day_of_week is likely required, and similarly for Monthly/day_of_month. These cross-parameter constraints are neither in the description nor the schema descriptions, leaving an agent to infer them. The presence of an output schema is false, but 'Returns updated plan' suffices for return-value clarity.

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 description coverage is 100%, so all parameters are documented in the schema. The description repeats the allowed values for frequency, day_of_week, and day_of_month exactly as in the schema, providing no additional semantic value. It does not add constraints or clarify relationships between parameters, 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.

Purpose5/5

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

The description opens with a specific verb and resource: 'Update an existing DCA plan by plan_id.' It then enumerates the mutable fields (amount, frequency, day_of_week, day_of_month), which clearly differentiates it from sibling DCA tools like dca_create, dca_pause, dca_resume, and dca_stop. An agent can discern this tool's role 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.

Usage Guidelines4/5

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

The context is clear: use this when you need to modify an existing DCA plan, identified by plan_id. It does not explicitly state when not to use it or name alternatives, but the purpose and sibling names make the appropriate invocation obvious. Lacks explicit exclusions or conditional guidance, so not a 5.

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

delete_watchlist_groupDelete Watchlist GroupA
DestructiveIdempotent
Inspect

Delete a watchlist group by id (numeric). Set purge=true to also remove its securities from all other groups.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWatchlist group id
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
purgeYesWhether to also remove the securities from other groups

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already signal destructiveHint and idempotentHint, so the description doesn't need to restate those. It adds valuable behavioral context by explaining the purge side effect: securities are removed from all other groups. It does not mention irreversibility or permissions, but the destructive annotation covers the main warning.

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

Conciseness5/5

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

Two short, front-loaded sentences. The primary action and required parameter come first, followed by the optional behavior. Every word earns its place.

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

Completeness4/5

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

For a simple delete operation, the description combined with schema and annotations covers what an agent needs: the action, the required id, and the purge behavior. No output schema exists, so return-value details are less critical. It could be slightly more explicit about the purge=false postcondition or alternatives, but it is complete for effective invocation.

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 description coverage is 100%, so the schema already explains id, purge, and _jq. The description adds only marginal restatement ('numeric', 'remove its securities from all other groups'), which is helpful but not a substantial semantic expansion beyond 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?

The description names the exact operation ('Delete a watchlist group'), specifies the identifier ('by id (numeric)'), and defines the conditional scope ('Set purge=true to also remove its securities from all other groups'). It is clearly distinct from sibling tools like create_watchlist_group and update_watchlist_group.

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

Usage Guidelines4/5

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

The description gives a clear context: use this when deleting a watchlist group by numeric id, and sets out the purge variant. It does not explicitly contrast with create/update alternatives, but the delete intent is unambiguous enough that an agent can select it correctly.

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

depositsDepositsA
Read-onlyIdempotent
Inspect

List deposit history for the current account. Returns items[]{id, amount, currency, status, created_at, updated_at}. states: comma-separated (Pending/Finished/Failed). currencies: comma-separated codes.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
pageNoPage number (default: 1)
sizeNoPage size (default: 20)
statesNoFilter by deposit states (comma-separated)
currenciesNoFilter by currencies (comma-separated, e.g. "USD,HKD")

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the return structure (items with id, amount, currency, status, created_at, updated_at) and filter semantics (states and currencies), which are useful beyond the annotations. No contradictions.

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

Conciseness5/5

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

Two concise sentences. The first sentence states purpose and return fields, the second explains the two filters. Front-loaded, no waste, and all content earns its place.

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, idempotent tool with 0 required parameters and full schema coverage, the description covers all essential aspects: what it returns, how to filter, and the scope (current account). No missing information an agent would need to call it correctly.

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 covers 100% of parameters with descriptions, so baseline is 3. The description adds specific allowed state values (Pending/Finished/Failed) not present in the schema, and clarifies currency codes are comma-separated. This enriches the parameter meaning beyond 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?

The description states a specific verb (List) and resource (deposit history for the current account), which clearly distinguishes it from siblings like withdrawals. It also lists the return fields, making the purpose unambiguous and non-tautological.

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

Usage Guidelines3/5

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

The description implies usage for deposits but does not explicitly state when to use it vs alternatives or provide exclusions. It mentions 'current account' but doesn't contrast with other tools like account_balance or withdrawals. No explicit guidance on selection criteria.

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

depthOrder Book DepthB
Read-onlyIdempotent
Inspect

Get order book depth for a symbol. Up to 10 price levels.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, covering the safety profile. The description adds the 'Up to 10 price levels' limit, which is useful behavioral context beyond annotations, but does not describe response format or error behavior.

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

Conciseness5/5

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

Two concise sentences with no wasted words. The purpose is front-loaded and the level limit is a valuable additional detail.

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

Completeness3/5

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

For a simple tool with one required parameter and no output schema, the description is minimal but covers the core purpose and a key limit. However, it omits any description of the response structure, which could be helpful given the absence of an output schema. Still, the schema covers parameter semantics and annotations cover safety, so it is adequate but not comprehensive.

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 100% with both parameters ('symbol' and '_jq') fully described in the schema. The description adds no extra meaning about parameters, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb 'Get' and resource 'order book depth' for a symbol, with an additional detail on level count. It is clear what the tool does, though it does not explicitly differentiate from sibling tools like 'quote' or 'candlesticks' which might also return market data, but the resource is specific enough.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, nor any exclusions or conditions. It simply states what it does, leaving the agent to infer usage context.

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

dividendDividendA
Read-onlyIdempotent
Inspect

Get dividend history for the symbol. US accounts querying a .US symbol get a US-specific variant (e.g. dividend_yield_ttm is a percent value: 0.34 means 0.34%). The region is detected from the account automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, open-world, and non-destructive behavior. The description adds valuable context: region-specific variant where dividend_yield_ttm is a percent value and that region is auto-detected. This goes beyond the structured annotations and helps interpret results correctly.

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

Conciseness5/5

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

Two sentences with no waste. The core purpose is front-loaded, and the region variant is a meaningful addition that earns its place. The structure is efficient and scannable.

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

Completeness4/5

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

For a simple read-only tool with one required parameter and no output schema, the description covers the purpose and a key behavioral nuance. It omits output structure details, but the agent has enough to call it correctly. A slight additional note on typical response fields would push it to 5.

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 description coverage is 100%, so both parameters are fully documented in the schema. The tool description adds nothing about parameter usage or format beyond what the schema provides. Baseline 3 applies because the schema carries the semantic load.

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

Purpose4/5

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

States the specific action 'Get dividend history for the symbol' with a clear resource and scope. It does not explicitly differentiate from the sibling dividend_detail, but the core purpose is unambiguous and actionable.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like dividend_detail. The description mentions region detection but does not address selection criteria, exclusions, or complementary tools. An agent is left to infer when this tool is appropriate.

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

dividend_detailDividend DetailB
Read-onlyIdempotent
Inspect

Get detailed dividend distribution scheme.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds no behavioral traits beyond 'detailed', but it also does not contradict the annotations, so the safety profile is adequately covered.

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

Conciseness5/5

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

A single, front-loaded sentence with no filler. It communicates the core action efficiently and is appropriately sized for a simple read-only getter.

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

Completeness2/5

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

With no output schema, the description should clarify what the response contains or how this tool differs from simpler dividend tools. Saying 'detailed dividend distribution scheme' is too vague to guide the agent on expected return data, and no usage context or alternatives are given.

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 description coverage is 100%, and both parameters are thoroughly documented in the schema, including the canonical symbol format and the _jq filter semantics. The description adds no additional parameter meaning beyond what the schema already provides.

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

Purpose4/5

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

The description uses a specific verb ('Get') and a specific resource ('detailed dividend distribution scheme'). The word 'detailed' helps distinguish it from the sibling tool 'dividend', though the exact meaning of 'distribution scheme' remains somewhat vague.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus related siblings like 'dividend' or 'capital_distribution'. It does not state any conditions, exclusions, or alternatives, leaving the agent to infer usage from the name alone.

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

estimate_max_purchase_quantityEstimate Max Purchase QuantityA
Read-onlyIdempotent
Inspect

Estimate maximum buy/sell quantity for a symbol. Only symbol is required; side (case-insensitive Buy/Sell) defaults to Buy, order_type (case-insensitive) defaults to LO, and price is optional.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
sideNoBuy or Sell (case-insensitive; default: Buy)Buy
priceNoLimit price for limit-style orders. Omit for market orders.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.
order_typeNoOrder type, case-insensitive (default: LO): LO (Limit Order) / ELO (Enhanced Limit Order) / MO (Market Order) / AO (At-auction) / ALO (At-auction Limit Order)LO

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already cover read-only, idempotent, non-destructive aspects. The description adds case-insensitivity and default values, which are useful. It does not disclose response format or edge cases, but annotations handle most transparency needs.

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

Conciseness5/5

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

A single, focused sentence with no fluff. It front-loads the core purpose and then lists key defaults and optionality efficiently. It is appropriately brief and every word serves a purpose.

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

Completeness4/5

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

For an estimation tool with full schema coverage and safe annotations, the description is complete. It provides necessary defaults and usage context, making it sufficient for an agent to call it correctly. No output schema means returns are not detailed, but that is not required given the tool's simplicity.

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 100%, so parameters are already described. The description adds default values and case-insensitivity, which adds some value but is not highly informative 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.

Purpose4/5

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

The description clearly states the tool estimates max buy/sell quantity for a symbol, with a specific verb and resource. It distinguishes from siblings like submit_order and replace_order by focusing on estimation rather than execution, though it does not explicitly name alternatives.

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

Usage Guidelines4/5

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

The description gives clear context: only symbol is required, and it explains defaults and optionality for side, order_type, and price. It does not explicitly say when not to use it versus alternatives, but the purpose implies it is for pre-trade estimation.

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

etf_docsETF Documents (US)A
Read-onlyIdempotent
Inspect

Get regulatory/prospectus documents (etf-files) for a US ETF. US accounts only; errors with DcRegionRestricted for AP accounts.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
limitNoMaximum number of documents to return. Omit for all.
symbolYesETF symbol, e.g. "SPY.US"

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare the tool read-only, open-world, and idempotent, so the description does not need to restate those. It adds valuable behavioral context by disclosing the regional restriction and the specific DcRegionRestricted error for AP accounts, which goes beyond the structured annotations.

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

Conciseness5/5

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

The entire description is one tight sentence that leads with the core action and then adds the critical regional constraint. There is no filler, and every clause contributes useful information.

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

Completeness4/5

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

For a simple read-only tool requiring only one parameter, the description is nearly complete: it names what is returned, the target market, and a key error condition. It does not describe the return shape, but no output schema exists and the response type is implied by 'documents'.

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?

The input schema already provides full descriptions for all three parameters, including the required 'symbol' and optional 'limit' and '_jq'. The description adds no parameter-specific detail, but with 100% schema coverage, the baseline applies and the schema carries the explanatory burden.

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?

The description uses a specific verb ('Get') and a precise resource ('regulatory/prospectus documents for a US ETF'), making the tool's function immediately clear. It also distinguishes itself from broader sibling tools like 'filings' by scoping to ETF-specific documents and US accounts.

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

Usage Guidelines4/5

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

The description clearly states the tool is for US ETFs and explicitly warns that AP accounts will receive a DcRegionRestricted error. It provides strong contextual usage guidance, though it does not explicitly name alternative tools for non-US or non-ETF document lookups.

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

exchange_rateExchange RateA
Read-onlyIdempotent
Inspect

Get exchange rates for all supported currencies. Returns list[]{from_currency, to_currency, rate, timestamp} covering USD, HKD, CNY, SGD and others.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/non-destructive behavior, and the description adds value by declaring the response structure and currency coverage. It goes beyond the schema's one generic parameter. Minor extra context like base-currency semantics or list size would be helpful but is not essential given 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.

Conciseness5/5

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

The description is two short sentences with no filler. The verb and resource are front-loaded, and the return shape follows immediately. Every sentence contributes useful information.

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

Completeness4/5

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

With no output schema, the description takes on the burden of explaining the response, and it does so by naming the fields and example currencies. Some ambiguity remains about how the rate is quoted (e.g., base currency) and whether the list is exhaustive, but the tool is simple and annotations cover the safety profile.

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?

The only parameter, _jq, is fully described in the input schema with detailed semantics and examples, so the description need not repeat it. The tool description doesn't elaborate on parameters, but baseline 3 is appropriate since schema coverage is 100%.

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

Purpose4/5

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

The description states a specific verb and resource ('Get exchange rates for all supported currencies') and includes the exact return shape (list of from_currency, to_currency, rate, timestamp). It does not explicitly name or differentiate from sibling tools, but the resource is unambiguous enough to distinguish it from the large sibling set.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives such as quote, market_status, or now. The usage context is only implied ('for exchange rates'), with no mention of when not to use it or which sibling covers adjacent scenarios.

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

executiveExecutiveB
Read-onlyIdempotent
Inspect

Get company executive and board member information.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds the data scope (executives and board members) but no further behavioral details such as response shape, pagination, or rate limits. This is adequate but not rich.

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?

The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for a simple read tool, though it lacks the additional routing value seen in higher-scoring definitions.

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

Completeness3/5

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

Given low complexity, complete parameter schema, and strong annotations, the description is minimally sufficient. Still, with no output schema and no usage guidance, the agent gets only a broad sense of what is returned and no help choosing this tool among many siblings.

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 description coverage is 100%, so the schema fully documents both 'symbol' and '_jq', including the canonical symbol caveat. The description itself adds no parameter detail, 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.

Purpose4/5

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

The description uses a specific verb and resource: 'Get company executive and board member information.' It is not a tautology and clearly identifies what data the tool returns. However, it does not differentiate itself from sibling tools such as 'participants' or 'company', so it misses the top score.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, and no mention of prerequisites or exclusions. The description only states what the tool does, leaving the agent to infer usage from the tool name and context.

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

filingsFilingsA
Read-onlyIdempotent
Inspect

Get regulatory filings (8-K, 10-Q, 10-K, etc.). Returns items[]{id, title, type, language, filing_date, url} for the symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, covering safety. The description adds context on return structure (items array with specific fields) and confirms it is per symbol. It does not contradict annotations, and it meaningfully supplements the safety profile with output expectations.

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

Conciseness5/5

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

One sentence that front-loads the core action and then specifies return fields. No redundant words or filler. The description is efficient and immediately usable.

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

Completeness4/5

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

For a two-parameter read tool with full schema coverage and annotations handling safety, the description is nearly complete. It specifies the return shape, which substitutes for an output schema. Minor omissions like pagination or rate limits are not critical given the simple list nature and the tool's safe profile.

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 description coverage is 100%; both symbol and _jq are documented with syntax and canonical-form guidance. The description adds no new parameter semantics beyond reiterating that it returns items for the symbol. Baseline 3 is appropriate because the schema already carries the parameter meaning.

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?

The description states a specific verb ('Get') and resource ('regulatory filings'), enumerates example types (8-K, 10-Q, 10-K) and returns a structured items array. It is unambiguous and clearly distinguishable from siblings like news or corp_action, which cover different data.

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

Usage Guidelines3/5

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

The description implies use when the agent needs regulatory filing data for a security, but provides no explicit guidance on when to use this tool versus alternatives (e.g., news for non-regulatory announcements, corp_action for corporate events). It does not mention exclusions or conditions, so usage is inferred from purpose rather than stated.

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

finance_calendarFinancial CalendarA
Read-onlyIdempotent
Inspect

Finance calendar by category: report (earnings) / dividend / split / ipo / macrodata (CPI, NFP, rates) / closed (holidays). start and end (YYYY-MM-DD) are optional, default today plus 7 days; keep ranges under 2 weeks or results truncate.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
endNoEnd date in YYYY-MM-DD format (inclusive). Defaults to 7 days after `start`.
startNoStart date in YYYY-MM-DD format (inclusive). Defaults to today (UTC).
marketNoOptional market filter. One of: HK, US, CN, SG, JP, UK, DE, AU. Omit to include all markets.
categoryYesEvent category. One of: - "report": earnings reports (includes financial statements) - "dividend": dividend announcements - "split": stock splits and reverse splits (share consolidations) - "ipo": upcoming IPO listings - "macrodata": macro economic data releases (CPI, NFP, rate decisions, etc.) - "closed": market closure days

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already mark the tool readOnly, openWorld, idempotent, and non-destructive; the description adds useful behavioral detail beyond that by disclosing the default date range and the truncation behavior for ranges over two weeks. This goes beyond what annotations or the schema provide.

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

Conciseness5/5

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

Two sentences with no filler. The category list is front-loaded, the date defaults are stated compactly, and the truncation warning earns its place as an essential constraint.

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

Completeness4/5

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

For a filtered read-only calendar with a rich schema and annotations, the description covers required category selection, optional date behavior, and the truncation constraint. It does not describe the return shape, but no output schema exists and an agent can still invoke the tool correctly with the provided information.

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 description coverage is 100%, so parameters are already well-documented, including category values, date formats, and the market filter. The description adds one extra semantic constraint not in the schema: ranges longer than two weeks truncate results, which clarifies start/end interplay.

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

Purpose4/5

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

The description identifies a specific resource (finance calendar) and enumerates its categories (report, dividend, split, ipo, macrodata, closed), which makes the tool's scope clear. It lacks an explicit verb like 'list' or 'get' and does not distinguish from sibling tools such as macrodata, dividend, or ipo_calendar, so it falls short of a 5.

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

Usage Guidelines4/5

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

The description gives clear context for when to use this tool: it covers a defined set of financial event categories and states the default date window. It also adds an operational constraint (keep ranges under two weeks or results truncate), though it does not explicitly name alternatives or say when not to use it.

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

financial_reportFinancial ReportC
Read-onlyIdempotent
Inspect

Get financial reports (income statement, balance sheet, cash flow). kind: IS/BS/CF/ALL. report_type: af (annual), saf (semi-annual), q1/q2/q3, qf (quarterly full).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
kindNoStatement kind: "IS" (income statement), "BS" (balance sheet), "CF" (cash flow), "ALL" (default)
symbolYesSecurity symbol, e.g. "AAPL.US"
report_typeNoReport period: "af" (annual), "saf" (semi-annual), "q1"/"q2"/"q3" (quarterly), "qf" (quarterly full)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already convey the safety profile (readOnlyHint, idempotentHint, openWorldHint, non-destructive), so the bar for added behavioral disclosure is lower. The description adds no behavioral traits beyond them — nothing about result size, the default kind when omitted, or any quirks of the data returned. It mostly restates the parameter options rather than disclosing runtime behavior.

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?

Two compact sentences, with the core purpose front-loaded and the parameter reference following. The format is efficient and scannable, though the second sentence's parameter list partially duplicates schema content. Overall it earns its place as a tight, well-structured summary.

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

Completeness3/5

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

For a read-only tool with strong annotation coverage and full schema documentation, the core essentials are present. However, there is no output schema and the description does not say what shape the returned report takes, nor does it address the five-plus overlapping financial_report_* siblings. An agent choosing between financial_report, financial_report_latest, and financial_report_snapshot would still face ambiguity.

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 100%, so the schema already documents all four parameters, which sets a baseline of 3. The description restates the kind and report_type value lists and expands the abbreviations (af=annual, saf=semi-annual), adding modest convenience. However, most of this is redundant with the schema's own parameter descriptions, so the description does not meaningfully surpass the baseline.

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

Purpose4/5

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

The description states a specific verb ('Get') and resource ('financial reports') and enumerates exactly which statements are covered (income statement, balance sheet, cash flow). It is clear in its own right but does not explicitly differentiate itself from the many financial_report_* siblings (financial_report_latest, financial_report_snapshot, financial_report_key_metrics, financial_statement), so an agent must rely on naming to pick it.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus its alternatives. It never mentions financial_report_latest, financial_report_snapshot, financial_report_key_metrics, or financial_statement, nor any condition that would select one over another. With such a large sibling cluster, this omission leaves the agent without routing direction.

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

financial_report_key_metricsFinancial Report Key Metrics (US)A
Read-onlyIdempotent
Inspect

Get key financial metrics (fin-keyfactor) for a US symbol. report: af (annual, default), saf, qf, q1/q2/q3. US accounts only; errors with DcRegionRestricted for AP accounts.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
reportNoReport period: "af" (annual, default), "saf" (semi-annual), "qf" (quarterly full), "q1"/"q2"/"q3".
symbolYesSecurity symbol, e.g. "AAPL.US"

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds useful behavioral detail: the default report period, accepted report keys, and the specific regional error code.

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

Conciseness5/5

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

Two compact sentences front-load the action and then pack in the essential report modes, default, and regional error behavior. There is no filler or redundant prose.

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

Completeness4/5

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

For a simple read-only tool with fully documented parameters and strong annotations, the description covers scope, report selection, defaults, and a known failure mode. It does not describe the output shape, but 'key financial metrics' provides a reasonable expectation and no output schema is available.

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 description coverage is 100%, so the baseline is 3. The description re-states the report options and default but adds no meaning beyond what the schema already provides for symbol, report, or _jq.

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

Purpose4/5

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

The description states a specific verb and resource: 'Get key financial metrics (fin-keyfactor) for a US symbol,' and it includes report variants and region restrictions. It is clear and actionable, though it does not explicitly differentiate itself from the similarly-named financial_report and financial_report_snapshot sibling tools.

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

Usage Guidelines4/5

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

It gives clear context on when to use: for US accounts only, and it even warns that AP accounts will trigger a DcRegionRestricted error. It does not name an alternative tool for non-US reports, so it stops short of fully routing the agent away.

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

financial_report_latestLatest Financial ReportC
Read-onlyIdempotent
Inspect

Get the latest financial report summary for a security.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description adds no behavioral context beyond a generic 'Get'. It does not clarify what 'latest' means, what the summary contains, or that a non-canonical symbol returns an empty record; that last detail lives only in the schema.

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?

The description is a single, concise sentence with no filler and the action is front-loaded. It is efficient, though it slightly repeats the title rather than adding richer context.

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

Completeness3/5

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

For a simple read-only tool with fully documented parameters and safe annotations, the minimal description is arguably sufficient. However, without an output schema and with sibling tools that overlap in purpose, the lack of additional context about return shape and tool selection leaves a noticeable gap.

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 description coverage is 100%, so the baseline is 3. The description itself adds no parameter meaning, but the schema already fully documents symbol's canonical-form behavior and the generic _jq filter, so no significant gap exists.

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

Purpose4/5

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

The description states a specific verb ('Get'), a concrete resource ('latest financial report summary'), and the scope ('for a security'). However, it does not distinguish this tool from siblings like financial_report, financial_report_snapshot, or financial_report_key_metrics, so the clarity is good but not excellent.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of alternatives, and no exclusions. Given the large sibling set containing several closely related financial-report tools, an agent receives no help selecting this tool over those alternatives.

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

financial_report_snapshotFinancial Report SnapshotA
Read-onlyIdempotent
Inspect

Get financial report snapshot: report_desc (text summary), fo_revenue/fo_ebit/fo_eps (actual vs forecast with yoy/cmp), fr_* financial ratios (ROE, margins, assets, cash flow). report: qf/saf/af.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
reportNoReport type: "qf" (quarterly), "saf" (semi-annual), "af" (annual)
symbolYesSecurity symbol, e.g. "AAPL.US"
fiscal_yearNoFiscal year, e.g. 2024
fiscal_periodNoFiscal period, e.g. "1" "2" "3" "4"

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value by listing return field groups, but does not discuss auth requirements, rate limits, or response shape (no output schema). With annotations covering most behavioral expectations, a 3 is appropriate for the modest extra context.

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?

The description is a compact single sentence that front-loads the main action and then lists the key field groups and report types. It avoids redundancy and every clause contributes meaning, though it might be slightly dense for an agent to parse quickly.

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

Completeness4/5

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

For a snapshot tool with rich annotations (safe, idempotent, read-only), the description covers the core return fields and report types. No output schema exists, but the listed fields give sufficient context for an agent to decide whether this tool provides the needed data. Minor gaps like pagination or filter behavior are not critical for a snapshot.

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 description coverage is 100%, so all five parameters (symbol, report, fiscal_year, fiscal_period, _jq) are documented in the schema. The description's mention of report types ('qf/saf/af') and field groups adds only marginal semantic value beyond what the schema already provides; baseline 3 is correct.

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?

The description states a specific verb ('Get') and resource ('financial report snapshot'), enumerates the exact field groups returned (report_desc, fo_revenue/fo_ebit/fo_eps, fr_* ratios), and clarifies report types (qf/saf/af). This distinguishes it from siblings like financial_report, financial_report_key_metrics, and financial_statement by the snapshot's condensed nature and the specific metrics.

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

Usage Guidelines3/5

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

The description implies usage by naming the report types and field categories, but it does not explicitly state when to prefer this tool over alternatives (e.g., financial_report_latest for the most recent data, financial_report_key_metrics for ratios only). No when-not or alternative-selection guidance is provided beyond the tool's inherent scope.

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

financial_statementFinancial StatementsB
Read-onlyIdempotent
Inspect

Get financial statements (income statement, balance sheet, or cash flow) for a security. kind: IS/BS/CF/ALL. report: af (annual, default), saf (semi-annual), qf (quarterly full), q1/q2/q3.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
kindNoStatement kind: "IS" (income statement), "BS" (balance sheet), "CF" (cash flow), "ALL" (default)
reportNoReport period: "af" (annual), "saf" (semi-annual), "qf" (quarterly full), "q1"/"q2"/"q3"
symbolYesSecurity symbol, e.g. "AAPL.US"

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already disclose that this is read-only, idempotent, and non-destructive. The description adds the supported statement kinds and report periods, which is useful scoping context. It does not describe response shape, pagination, rate limits, or the behavior of the ALL option, but it does not contradict 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.

Conciseness5/5

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

The description is two compact sentences with the purpose front-loaded and no filler. The parameter quick-reference is dense but immediately useful. It earns its place despite some overlap with the schema.

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

Completeness3/5

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

The core invocation details are present: required symbol, kind values, report values, and defaults. However, with no output schema, the description does not clarify the shape of the response or what ALL returns. It also lacks disambiguation from closely related sibling tools, making the context adequate but not complete.

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 100%, so the schema already documents kind, report, symbol, and _jq. The description largely restates the kind/report enums and adds that 'af' is the default report, which is a minor increment. This is a baseline-3 situation where 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.

Purpose4/5

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

The description says 'Get financial statements (income statement, balance sheet, or cash flow) for a security,' which is a specific verb and resource. It clearly identifies what the tool returns. However, it does not differentiate this tool from nearby siblings such as financial_report, cash_flow, or statement_export.

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

Usage Guidelines2/5

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

There is no guidance about when to use financial_statement versus related alternatives like financial_report, financial_report_snapshot, cash_flow, or statement_export. The only implicit guidance is that it is relevant when financial statements are requested. No exclusions, prerequisites, or alternative-selection conditions are stated.

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

forecast_epsForecast EPSB
Read-onlyIdempotent
Inspect

Get EPS forecast and analyst estimate history.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

B3.3/5.0
Behavior3/5

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

The annotations already provide a strong safety profile: readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds only the output scope and no behavioral details such as pagination, empty responses, or return shape. It does not contradict the annotations, but it also does not enrich them.

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

Conciseness5/5

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

The description is a single concise sentence with no filler: 'Get EPS forecast and analyst estimate history.' The core resource and action are front-loaded, and every word earns its place.

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

Completeness3/5

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

For a read-only two-parameter query, the annotations and schema cover safety and inputs well. However, there is no output schema, and the description only vaguely mentions return categories without specifying fields, forecast period, or how estimates are structured. It is adequate but leaves meaningful gaps.

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 description coverage is 100%, with detailed parameter explanations including the canonical-symbol caveat for `symbol` and a full `_jq` description. The tool description itself contributes no additional parameter-level meaning, 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.

Purpose4/5

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

The description uses a clear verb and resource: 'Get EPS forecast and analyst estimate history.' It is unambiguous and distinct in topic, but it does not explicitly contrast sibling tools like consensus or institution_rating, so it stops short of full differentiation.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives, and no exclusions or prerequisites are mentioned. With many related estimation/rating siblings present, selection would rely on the agent's prior knowledge rather than the description.

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

fund_holderFund HoldersB
Read-onlyIdempotent
Inspect

Get funds and ETFs that hold a given symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe read operation. The description adds no further behavioral context such as rate limits, authentication needs, or edge-case behavior beyond what the schema parameter notes provide. It does not contradict the annotations, but adds minimal value.

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

Conciseness5/5

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

The description is a single, succinct sentence with zero filler. It is front-loaded with the core action and resource, making it easy to scan. Every word earns its place.

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

Completeness4/5

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

Given the tool's simplicity, full schema coverage, and strong annotations, the description is largely sufficient. It states the output purpose implicitly (returning funds/ETFs that hold the symbol). No output schema exists, but for a simple lookup, the description covers the essential context. Minor gaps like pagination or limits are not critical here.

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 description coverage is 100%, with both parameters (symbol and _jq) documented. The symbol parameter already includes a useful note about canonical form. The description itself does not elaborate on parameter meanings, but the schema fully covers them, so the baseline of 3 applies.

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

Purpose4/5

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

The description clearly states the verb 'get' and the resource 'funds and ETFs that hold a given symbol'. It is specific and understandable, though it does not explicitly name sibling tools like fund_positions to differentiate itself. The purpose is unambiguous.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. It simply states the function without contextual routing, leaving the agent to infer applicability from the name and schema.

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

fund_positionsFund PositionsC
Read-onlyIdempotent
Inspect

Get current fund positions.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety and mutation. The description adds no additional behavioral context, such as what data is returned, whether it reflects a snapshot or live data, or any constraints. Since the description does not contradict annotations, it is not a 1, but it adds nothing beyond them.

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 description is a single short sentence, which is concise and front-loaded. However, it is under-specified and does not provide useful detail. It is not verbose, but it also fails to convey important context, making it minimally acceptable in this dimension.

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

Completeness2/5

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

With no output schema, the description should explain what the tool returns (e.g., list of positions, fields included). It does not. Given the tool's simplicity and the annotations covering safety, the description is still incomplete because it leaves the return format and data semantics entirely unspecified.

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 100% because the only parameter, _jq, is fully described in the schema. The description does not mention this parameter at all, so it adds no extra meaning. The baseline for full schema coverage is 3, and the description fails to add any value beyond the schema.

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

Purpose4/5

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

The description states a specific verb and resource: 'Get current fund positions.' It is clear what the tool does, but it does not differentiate from sibling tools like stock_positions or short_positions, which are also position-related. The purpose is clear but lacks distinguishing context.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. The description provides no context about what 'fund positions' means or when it would be preferred over similar tools. An agent would have no clue whether to select this or another position tool.

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

grid_cancelCancel Grid OrderA
DestructiveIdempotent
Inspect

Cancel (terminate) a grid order by order_id. TWO-STEP CONFIRMATION IS MANDATORY: this tool is a DRY RUN unless you pass the confirmation_code its own dry run returned. Call it first without execute, show the returned preview to the user, and only call it again with execute="" after the user has explicitly confirmed it. The code is derived from the order itself, so it applies only to that exact request. Never quote it back on your own initiative.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
executeNoThe `confirmation_code` from this request's dry run. WITHOUT IT NOTHING IS SENT. Omitted (the default) makes this a DRY RUN: the request is validated and echoed back with a three-digit `confirmation_code`, and nothing reaches the exchange. Required protocol: call once without `execute`, show the returned preview to the user, and call again quoting the code only after the user has explicitly confirmed it. The code is single use, expires in 10 minutes, and applies only to this exact request — change any field and it stops working. A grid strategy keeps placing orders on its own once live, so never quote the code back on your own initiative.
order_idYesGrid order ID.

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the annotations, the description reveals critical behavior: it is a dry run unless execute is supplied, the confirmation code is derived from and unique to the exact request, it is single-use, and the two-step confirmation is mandatory. It also warns about the live grid strategy continuing to place orders. There is no contradiction with 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.

Conciseness4/5

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

The description is one dense paragraph with the most important safety constraint front-loaded. Some redundancy exists with the execute parameter's schema description, but it is acceptable for a destructive operation where the confirmation protocol must be unmistakable.

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

Completeness4/5

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

For a destructive tool with no output schema, the description covers the essential invocation flow: dry-run first, user confirmation, then execution with the returned code. It also explains code expiry and exact-request binding. Missing is an explicit statement of what the final response contains and guidance on distinguishing this tool from cancel_order or grid_suspend, but the core calling contract is complete.

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 description coverage is 100%, so the baseline is 3. The description reinforces the semantics of the execute parameter by framing it as a mandatory confirmation step, but it does not add parameter-level details beyond what the schema already provides for order_id or execute. This is adequate but not additive.

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

Purpose4/5

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

The description clearly states the action ('Cancel (terminate)') and the resource ('grid order by order_id'), so an agent can tell what this tool does. However, it does not explicitly distinguish it from closely related siblings like cancel_order or grid_suspend, so sibling differentiation is missing. This is clear purpose without a direct comparison.

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

Usage Guidelines4/5

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

The description gives explicit procedural usage: call once without execute, show the preview, and only then call again with the confirmation code after user confirmation. It also warns never to quote the code on the agent's own initiative. What it lacks is any guidance on when to choose this tool over alternatives such as cancel_order or grid_suspend.

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

grid_detailGrid Order DetailA
Read-only
Inspect

Full detail for one grid order: rule parameters, status, embedded child orders (grid_sub_orders) and lifecycle history (grid_order_history). Supports history_id cursor + limit paging.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
limitNoPage size for the embedded sub-order / history lists.
order_idYesGrid order ID.
history_idNoHistory cursor for paging the embedded trigger history.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the description doesn't need to restate safety. It adds value by disclosing the response structure (embedded child orders and history lists) and the paging mechanism (history_id cursor + limit), which are behavioral details 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.

Conciseness5/5

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

Two sentences with the core purpose front-loaded and the paging note appended. No filler, every phrase contributes information.

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

Completeness4/5

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

For a read-only detail tool with no output schema, the description conveys the operation, the response categories, and paging behavior. Minor gaps like default page size or whether history is included by default are not critical for correct invocation.

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 is 3. The description goes beyond the schema by clarifying that history_id acts as a cursor and limit controls page size, and by labeling the tool's scope as a single grid order. This adds meaningful semantic context.

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?

The description states a specific resource ('one grid order') and enumerates the exact contents returned: rule parameters, status, embedded child orders, and lifecycle history. This clearly differentiates it from list-oriented siblings like grid_list and grid_list_by_ids.

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

Usage Guidelines3/5

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

The phrase 'Full detail for one grid order' implies use when a single order's full context is needed, and the required order_id parameter reinforces that. However, it never explicitly contrasts with alternatives like grid_trigger_history or grid_list, nor states when not to use it.

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

grid_listList Grid OrdersB
Read-only
Inspect

List grid trading orders. Filter by symbol or comma-joined status (e.g. "Performing,Suspended"); supports page/limit and sort_by/sort_order.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
pageNoPage number (default 1).
limitNoRecords per page (default 20).
statusNoComma-joined status filter, e.g. "Performing,Suspended". Omit for all.
symbolNoFilter by symbol, e.g. "700.HK". Omit for all grid orders.
sort_byNoSort field (e.g. "created_at").
sort_orderNoSort order ("asc" / "desc").

TDQS

B3.4/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes that this is a safe read operation. The description adds useful behavioral context around filtering by symbol or comma-joined status and supporting pagination/sorting, but it does not disclose response shape, default behavior beyond schema defaults, or any open-world caveats. This is acceptable but not rich.

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

Conciseness5/5

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

A single sentence front-loads the core purpose and then packs the meaningful capabilities into a compact, readable structure. There is no filler or redundant restating of the tool name.

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

Completeness4/5

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

For a read-only list tool with zero required parameters and fully documented schema fields, the description is nearly sufficient. It covers filters, pagination, and sorting, though it does not describe the output record shape and does not clarify the boundary with grid_list_by_ids.

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 100%, so the schema already documents every parameter. The description repeats the comma-joined status example and mentions page/limit and sort fields, but adds little meaning beyond what the input schema already provides. Baseline 3 is appropriate.

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

Purpose4/5

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

The description opens with a clear verb and resource: 'List grid trading orders.' It enumerates filtering, pagination, and sorting capabilities, making the operation unmistakable. It does not explicitly distinguish itself from the sibling grid_list_by_ids, so it stops short of a 5.

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

Usage Guidelines2/5

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

No guidance is given about when to prefer this tool over siblings such as grid_list_by_ids or grid_detail. The description implies a general listing use case but omits when-not-to-use scenarios and alternative routing, which matters given the large sibling set.

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

grid_list_by_idsGet Grid Orders By IDsB
Read-only
Inspect

Fetch specific grid orders by their IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
order_idsYesGrid order IDs to fetch, e.g. ["123", "456"].

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the scoping detail of fetching specific IDs, but it does not describe response shape, ordering, or error behavior. With annotations covering the core behavioral traits, this is adequate but not rich.

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

Conciseness5/5

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

A single, front-loaded sentence with no wasted words. The resource and selection criterion are immediately clear, and nothing extraneous is included.

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

Completeness4/5

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

For a simple read-only ID-lookup tool with full schema coverage and safe annotations, the description provides enough context to invoke it correctly. No output schema exists, but the purpose clearly implies the return of the requested grid order objects.

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 description coverage is 100%, so the baseline is 3. The description's 'by their IDs' merely echoes the order_ids parameter and adds no additional semantics beyond what the schema already documents. The _jq parameter is fully documented in the schema.

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

Purpose4/5

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

The description states a specific action ('Fetch') and resource ('specific grid orders') with a clear selection criterion ('by their IDs'). It is distinguishable from sibling tools like grid_list (all orders) and grid_detail (likely a single order), though it does not explicitly name them.

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

Usage Guidelines2/5

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

No explicit guidance is given for when to use this tool versus alternatives such as grid_list or grid_detail. The ID-based selection is implied, but there are no stated exclusions, prerequisites, or comparisons to help an agent choose between related grid tools.

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

grid_replaceReplace Grid OrderA
DestructiveIdempotent
Inspect

Replace an existing grid order's rule by order_id. Accepts the same grid rule fields as grid_submit. Overwrites the order's entire rule. TWO-STEP CONFIRMATION IS MANDATORY: this tool is a DRY RUN unless you pass the confirmation_code its own dry run returned. Call it first without execute, show the returned preview to the user, and only call it again with execute="" after the user has explicitly confirmed it. The code is derived from the order itself, so it applies only to that exact request. Never quote it back on your own initiative. The dry run echoes the rule that would replace the current one.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
rthNoRegular-trading-hours flag: 0 / 1 / 2.
executeNoThe `confirmation_code` from this request's dry run. WITHOUT IT NOTHING IS SENT. Omitted (the default) makes this a DRY RUN: the request is validated and echoed back with a three-digit `confirmation_code`, and nothing reaches the exchange. Required protocol: call once without `execute`, show the returned preview to the user, and call again quoting the code only after the user has explicitly confirmed it. The code is single use, expires in 10 minutes, and applies only to this exact request — change any field and it stops working. A grid strategy keeps placing orders on its own once live, so never quote the code back on your own initiative.
order_idYesGrid order ID to replace.
expire_timeNoExpiry time in unix seconds (use with GTD).
time_in_forceNoTime in force: 0 = Day, 1 = GTC, 6 = GTD.
multiple_triggerNoWhether one grid level may trigger multiple times.
trigger_quantityNoQuantity per trigger (decimal string).
lower_limit_eventNoAction at lower bound: 1 = ignore (keep running), 2 = close at last price.
lower_limit_priceNoLower price bound (decimal string).
support_shortsellNoWhether short selling is allowed.
trigger_buy_depthNoBuy-side order-book depth (-5..5; 0 = use grid_order_type_down).
trigger_spread_upNoUpward trigger spread, absolute (decimal string; use with type 1).
upper_limit_eventNoAction at upper bound: 1 = ignore (keep running), 2 = close at last price.
upper_limit_priceNoUpper price bound (decimal string).
grid_order_type_upNoSell-side order type when depth is 0: GMO / GLO / GTG.
trigger_percent_upNoUpward trigger percent (decimal string; use with type 2).
trigger_price_typeNoTrigger price type: 1 = spread (absolute), 2 = percent.
trigger_sell_depthNoSell-side order-book depth (-5..5; 0 = use grid_order_type_up).
trigger_spread_downNoDownward trigger spread, absolute (decimal string; use with type 1).
grid_order_type_downNoBuy-side order type when depth is 0: GMO / GLO / GTG.
lower_limit_quantityNoQuantity handled when the lower bound is reached (decimal string).
submitted_base_priceNoBase price the grid is anchored to (decimal string).
trigger_percent_downNoDownward trigger percent (decimal string; use with type 2).
upper_limit_quantityNoQuantity handled when the upper bound is reached (decimal string).

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses the dry-run behavior, the confirmation code requirement, its single-use nature, 10-minute expiry, and that it applies only to the exact request. This goes well beyond the annotations (destructive, non-read-only) by explaining the safety mechanism in detail.

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

Conciseness5/5

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

The description is a single, well-structured paragraph that front-loads the purpose and then explains the confirmation process in logical steps. Every sentence contributes value, and the mandatory confirmation is highlighted in caps for emphasis. It is detailed but not verbose.

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

Completeness4/5

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

For a 25-parameter tool with no output schema, it clearly explains the confirmation flow and the dry-run preview. It does not describe the final response format after execution, which is a minor gap given the complexity, but the essential usage and behavioral context are covered.

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?

The schema already provides 100% coverage with descriptions for all 25 parameters. The description adds the note that it accepts the same fields as grid_submit, which is helpful for consistency but not essential. The execute parameter's role is already well-documented in the schema, so the description adds minimal extra value.

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?

The description states the action precisely: 'Replace an existing grid order's rule by order_id' and clarifies it overwrites the entire rule. It distinguishes itself from siblings like grid_submit by noting it accepts the same fields but for replacement, 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.

Usage Guidelines5/5

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

It provides explicit when-to-use context (existing grid orders) and a mandatory two-step confirmation protocol with clear steps: call without execute, show preview, then call with execute after user confirmation. It implicitly routes new orders to grid_submit by referencing it as the source of the same fields.

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

grid_restartRestart Grid OrderA
Idempotent
Inspect

Restart (resume) a suspended grid order by order_id. TWO-STEP CONFIRMATION IS MANDATORY: this tool is a DRY RUN unless you pass the confirmation_code its own dry run returned. Call it first without execute, show the returned preview to the user, and only call it again with execute="" after the user has explicitly confirmed it. The code is derived from the order itself, so it applies only to that exact request. Never quote it back on your own initiative. A restarted grid resumes placing orders on its own.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
executeNoThe `confirmation_code` from this request's dry run. WITHOUT IT NOTHING IS SENT. Omitted (the default) makes this a DRY RUN: the request is validated and echoed back with a three-digit `confirmation_code`, and nothing reaches the exchange. Required protocol: call once without `execute`, show the returned preview to the user, and call again quoting the code only after the user has explicitly confirmed it. The code is single use, expires in 10 minutes, and applies only to this exact request — change any field and it stops working. A grid strategy keeps placing orders on its own once live, so never quote the code back on your own initiative.
order_idYesGrid order ID.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already signal mutability and open-world effects, but the description goes well beyond them: it exposes the mandatory dry-run behavior, the single-use expiring confirmation code, the fact that the code is request-bound, and the warning that a restarted grid keeps placing orders autonomously. This gives the agent the critical behavioral context needed for safe invocation.

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?

The description is somewhat long but front-loads the purpose and then dedicates each sentence to a safety-critical aspect of the workflow. There is minor repetition between 'confirmation is mandatory,' 'dry run unless execute is passed,' and 'only call again after user confirmation,' but the material is dense and important rather than padded.

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 mutation tool with no output schema and a safety-critical confirmation flow, the description covers everything an agent needs: the dry-run first call, the confirmation code semantics, expiry and single-use constraints, the requirement to show previews to the user, and the autonomous order-placement consequence. It is complete for correct invocation.

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 description coverage is 100%, so the schema already fully documents order_id, execute, and _jq. The description reinforces the dry-run/confirmation flow but adds little parameter-level meaning beyond what the execute schema already provides. Baseline 3 is appropriate.

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?

The description opens with a specific verb and resource: 'Restart (resume) a suspended grid order by order_id.' It clearly distinguishes this from sibling tools like grid_suspend or grid_cancel by framing it as resuming an already-suspended order. The purpose is unambiguous and the exact target resource is named.

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

Usage Guidelines4/5

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

The description gives clear context for when to use this tool: on a suspended grid order, and it mandates a two-step dry-run/confirm protocol with explicit guidance to show previews and await user confirmation. It does not name alternatives or explicitly say when not to use it, but the context is strong 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.

grid_submitSubmit Grid OrderAInspect

Submit a grid trading order. DRY RUN unless execute is the confirmation_code from its own dry run: call once without execute, show the preview, then re-call quoting the code only after the user confirms.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
rthNoRegular-trading-hours flag: 0 / 1 / 2.
symbolYesSecurity symbol, e.g. "700.HK".
executeNoThe `confirmation_code` from this request's dry run. WITHOUT IT NOTHING IS SENT. Omitted (the default) makes this a DRY RUN: the request is validated and echoed back with a three-digit `confirmation_code`, and nothing reaches the exchange. Required protocol: call once without `execute`, show the returned preview to the user, and call again quoting the code only after the user has explicitly confirmed it. The code is single use, expires in 10 minutes, and applies only to this exact request — change any field and it stops working. A grid strategy keeps placing orders on its own once live, so never quote the code back on your own initiative.
expire_timeNoExpiry time in unix seconds (use with GTD).
time_in_forceNoTime in force: 0 = Day, 1 = GTC, 6 = GTD.
multiple_triggerNoWhether one grid level may trigger multiple times.
trigger_quantityNoQuantity per trigger (decimal string).
lower_limit_eventNoAction at lower bound: 1 = ignore (keep running), 2 = close at last price.
lower_limit_priceNoLower price bound (decimal string).
support_shortsellNoWhether short selling is allowed.
trigger_buy_depthNoBuy-side order-book depth (-5..5; 0 = use grid_order_type_down).
trigger_spread_upNoUpward trigger spread, absolute (decimal string; use with type 1).
upper_limit_eventNoAction at upper bound: 1 = ignore (keep running), 2 = close at last price.
upper_limit_priceNoUpper price bound (decimal string).
grid_order_type_upNoSell-side order type when depth is 0: GMO / GLO / GTG.
trigger_percent_upNoUpward trigger percent (decimal string; use with type 2).
trigger_price_typeNoTrigger price type: 1 = spread (absolute), 2 = percent.
trigger_sell_depthNoSell-side order-book depth (-5..5; 0 = use grid_order_type_up).
settlement_currencyYesSettlement currency, e.g. "HKD".
trigger_spread_downNoDownward trigger spread, absolute (decimal string; use with type 1).
grid_order_type_downNoBuy-side order type when depth is 0: GMO / GLO / GTG.
lower_limit_quantityNoQuantity handled when the lower bound is reached (decimal string).
submitted_base_priceNoBase price the grid is anchored to (decimal string).
trigger_percent_downNoDownward trigger percent (decimal string; use with type 2).
upper_limit_quantityNoQuantity handled when the upper bound is reached (decimal string).

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses the dry-run mechanism, confirmation code single-use, 10-minute expiry, and the fact that the grid operates autonomously once live. These are behavioral traits not present in annotations (readOnlyHint false, openWorldHint true, idempotentHint false), adding substantial value beyond 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.

Conciseness5/5

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

Two sentences with no fluff. The critical dry-run warning is front-loaded, and the protocol is stated concisely. Every sentence earns its place.

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

Completeness4/5

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

For a 26-parameter tool with no output schema, the description covers the essential execution flow and the schema covers parameter details. It mentions showing a preview, implying a return value, and includes the key caveat about autonomous grid behavior. Minor gaps (exact response format) are acceptable given the schema's thoroughness.

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 100%, so the schema already documents all 26 parameters. The description adds context on the execute parameter's role, but the schema already explains the confirmation-code protocol in detail. The description does not introduce new parameter semantics beyond what the schema provides.

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?

Description clearly states the action (submit a grid trading order) and the crucial dry-run/execute flow. It distinguishes from siblings like grid_replace and grid_cancel by focusing on the submission and the two-step protocol.

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?

Explicitly instructs to call once without execute, show the preview, then re-call only after user confirmation. It also warns against quoting the code autonomously because the grid keeps placing orders. This leaves no ambiguity about when and how to use the tool.

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

grid_suspendSuspend Grid OrderA
Idempotent
Inspect

Suspend (pause) a running grid order by order_id. Resume with grid_restart. TWO-STEP CONFIRMATION IS MANDATORY: this tool is a DRY RUN unless you pass the confirmation_code its own dry run returned. Call it first without execute, show the returned preview to the user, and only call it again with execute="" after the user has explicitly confirmed it. The code is derived from the order itself, so it applies only to that exact request. Never quote it back on your own initiative.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
executeNoThe `confirmation_code` from this request's dry run. WITHOUT IT NOTHING IS SENT. Omitted (the default) makes this a DRY RUN: the request is validated and echoed back with a three-digit `confirmation_code`, and nothing reaches the exchange. Required protocol: call once without `execute`, show the returned preview to the user, and call again quoting the code only after the user has explicitly confirmed it. The code is single use, expires in 10 minutes, and applies only to this exact request — change any field and it stops working. A grid strategy keeps placing orders on its own once live, so never quote the code back on your own initiative.
order_idYesGrid order ID.

TDQS

A4/5.0
Behavior1/5

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

The description contradicts the annotations: it states that the confirmation code is single-use and expires in 10 minutes, implying the operation is not idempotent (repeating with the same parameters would fail), while the annotations declare idempotentHint=true. This is a direct contradiction, so per the rubric the score is 1. The description otherwise provides good behavioral context (dry-run mechanism, side effects), but the contradiction overrides it.

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

Conciseness5/5

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

The description is a single, well-structured paragraph that front-loads the purpose and then explains the mandatory confirmation protocol. Every sentence adds necessary information—no fluff. The length is justified by the critical safety requirement of the two-step confirmation, and the structure guides the agent logically from what to do to how to do it.

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

Completeness4/5

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

There is no output schema, so the description must explain the return value. It does mention that a dry run returns a preview and a three-digit confirmation_code, and instructs the agent to show the preview to the user. However, it does not describe the success/failure response of the actual suspend operation or error cases. Given the complexity and the emphasis on the confirmation flow, this is a minor gap, so a 4 is appropriate.

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 description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by emphasizing the critical nature of the 'execute' parameter (confirmation code) and adding behavioral nuances like 'the code is derived from the order itself' and 'never quote it back on your own initiative'—information not present in the schema. This enriches parameter understanding, so a 4 is warranted.

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?

The description states a specific verb ('Suspend') and resource ('a running grid order by order_id'), and distinguishes it from the sibling tool grid_restart by explicitly mentioning resume via that tool. It clearly identifies the action and scope, leaving no ambiguity about what this tool does.

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?

The description provides explicit when-to-use guidance: it names the resume counterpart (grid_restart) and mandates a two-step confirmation protocol with precise instructions on how to call the tool (dry run first, then with confirmation code). It also warns against quoting the code on one's own initiative, giving clear usage boundaries.

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

grid_symbol_infoGrid Symbol InfoA
Read-only
Inspect

Pre-trade grid setup info for a security (takes a symbol, not an order_id): security name, last price, board lot sizes (buy/sell), price-step (bid_size) table, and channel/authorization info (strategy grant flag, RTH support, supported s...

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK".

TDQS

A4.3/5.0
Behavior4/5

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

The annotations already establish read-only behavior; the description adds meaningful context by saying it returns channel/authorization info including strategy grant flag and RTH support, plus grid/board-lot parameters. No contradiction with readOnlyHint. The final clause is truncated, so it does not fully disclose all 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.

Conciseness4/5

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

The visible portion is front-loaded: purpose, input distinction, and a compact list of return fields in one sentence. It earns high marks but not a 5 because the sentence trails off mid-word ('supported s...'), which reads as an incomplete definition if the truncation is literal.

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

Completeness4/5

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

For a single-required-parameter read-only tool with no output schema, the description gives enough information about return content (name, last price, lot sizes, price-step table, auth flags) to let an agent invoke it and understand the result. The truncated tail and absence of any response-format note keep it from being fully complete.

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 is 3; the description goes beyond by emphasizing that the input is a security symbol and explicitly not an order_id, which prevents likely misuse with order-based grid tools. It does not add details for _jq, but the schema already documents that parameter fully.

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?

The description opens with a specific resource and intent ('Pre-trade grid setup info for a security') and immediately disambiguates from order_id-based grid tools by saying it takes a symbol, not an order_id. It also lists concrete output contents, so an agent can tell exactly what this tool is for.

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

Usage Guidelines4/5

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

The description communicates the key input constraint ('takes a symbol, not an order_id') and frames the tool as pre-trade setup info, which tells an agent when to select it. It stops short of naming a concrete alternative tool or stating explicit when-not scenarios, so it is not a 5.

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

grid_trigger_historyGrid Trigger HistoryB
Read-only
Inspect

Trigger history for one grid order: each triggered child order with price, quantity, executed price/qty, and trigger time. Supports page/limit.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
pageNoPage number (default 1).
limitNoRecords per page (default 20).
order_idYesGrid order ID whose trigger history to fetch.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered and the bar is lower. The description adds useful context about what the response contains (per-child-order prices, quantities, execution details, trigger times), which is genuinely informative. It does not disclose ordering, empty-history behavior, or limits beyond the paging already in the schema, acceptable given annotation coverage. 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.

Conciseness4/5

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

Two sentences with the core purpose front-loaded in the first phrase, followed by response content and a brief pagination note. There is no filler or redundancy with the schema except the short 'Supports page/limit' tail. Appropriately sized for a 4-param read tool with fully described schema; a touch more comparative guidance would raise it, but the structure itself is clean.

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

Completeness3/5

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

For a read-only tool with 100% schema coverage and safety annotations, the description is mostly adequate and partially compensates for the missing output schema by listing the per-child-order fields. Remaining gaps: no guidance distinguishing this from grid_detail/history_executions, no behavior for empty trigger histories, and no return-ordering semantics. Adequate for basic invocation but not complete for nuanced selection.

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 description coverage is 100%, so the schema fully documents all four parameters including required order_id. The description adds marginal value by reaffirming pagination ('Supports page/limit') and clarifying order_id's role ('for one grid order'), but these merely echo or lightly reinforce schema semantics. Baseline 3 is appropriate since the schema carries the parameter-explanation burden.

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

Purpose4/5

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

The description opens with a specific verb+resource statement ('Trigger history for one grid order') and enumerates the content scope (each triggered child order with price, quantity, executed price/qty, trigger time). This distinguishes it from sibling tools: grid_detail covers grid configuration, grid_list enumerates grids, and history_executions covers executions generally. The 'triggered child order' concept is distinctive enough to separate it from siblings, though it never names them explicitly.

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

Usage Guidelines3/5

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

'For one grid order' plus 'Supports page/limit' implies the usage context: supply a specific order_id and paginate results. However, there is no explicit when-to-use vs. alternatives guidance — an agent must infer that grid_detail or grid_list serve different grid-level needs and that this tool is for per-order trigger breakdowns. Usage is implied rather than stated, with no exclusions.

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

history_candlesticks_by_dateHistorical Candlesticks by DateB
Read-onlyIdempotent
Inspect

Get historical candlestick data by date range. Only symbol is required; period defaults to day (1m/5m/15m/30m/60m/day/week/month/year), forward_adjust to false, trade_sessions to all.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
endNoEnd date (yyyy-mm-dd), optional
startNoStart date (yyyy-mm-dd), optional
periodNoPeriod: 1m, 5m, 15m, 30m, 60m, day, week, month, year (default: day)day
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.
forward_adjustNoWhether to forward-adjust for splits/dividends (default: false / no adjust)
trade_sessionsNoTrade sessions: "intraday" (regular hours only) or "all" (include pre-market and post-market; default "all")all

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already cover readOnly, idempotent, and non-destructive behavior. The description adds nothing beyond repeating defaults already present in the schema (period, forward_adjust, trade_sessions) and the required symbol, providing no new behavioral context.

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

Conciseness5/5

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

The description is a single, focused sentence that front-loads the purpose and efficiently lists defaults. No wasted words or redundancy.

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

Completeness3/5

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

The tool is simple and read-only with comprehensive schema coverage. However, the description omits any mention of the response format or usage guidance, and does not clarify how this differs from similar candlestick tools, leaving some gaps for an agent.

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 description coverage is 100%, so the schema fully documents all parameters. The description only restates defaults and the required field, adding no additional meaning beyond what the schema already provides.

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

Purpose4/5

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

The description clearly states the tool retrieves historical candlestick data by date range, with a specific verb and resource. However, it does not distinguish this from sibling tools like candlesticks or history_candlesticks_by_offset, so it falls short of a 5.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. It only lists defaults and required parameters, with no mention of scenarios where other tools would be more appropriate.

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

history_candlesticks_by_offsetHistorical Candlesticks by OffsetA
Read-onlyIdempotent
Inspect

Get historical candlestick data by offset from a reference time. Only symbol is required; period defaults to day (1m/5m/15m/30m/60m/day/week/month/year), count to 100, forward_adjust/forward to false, trade_sessions to all. If the account's entitlement caps out below the requested count, this returns as many candles as allowed instead of erroring — check the returned array length against count if an exact number matters.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
timeNoReference datetime (yyyy-mm-ddTHH:MM:SS), omit to start from latest
countNoNumber of candlesticks (optional, max 1000; default 100)
periodNoPeriod: 1m, 5m, 15m, 30m, 60m, day, week, month, year (default: day)day
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.
forwardNoWhether to query forward in time (true) or backward (false; default)
forward_adjustNoWhether to forward-adjust for splits/dividends (default: false / no adjust)
trade_sessionsNoTrade sessions: "intraday" (regular hours only) or "all" (include pre-market and post-market; default "all")all

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, establishing a safe read operation. The description goes beyond by revealing a subtle behavioral trait: if the account's entitlement caps below the requested count, the tool returns as many candles as allowed instead of erroring, with a warning to check array length. This is exactly the kind of context that helps an agent avoid misinterpreting short responses.

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

Conciseness5/5

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

The description is compact and front-loaded. The first sentence states the core function; the second lists all defaults in a single breath; the last sentence covers the edge-case behavior. Every sentence contributes essential information without any fluff or repetition.

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, idempotent tool with a fully documented schema abbreviation, the description is complete: it identifies the only required parameter, enumerates all defaults, and flags the one behavior (partial results) that could otherwise surprise the caller. There is no output schema, but this tool's return format (candlestick arrays) is standard, and the description even tells the agent how to handle a potential short array.

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 description coverage is 100%, so the baseline is 3. The description adds value by summarizing defaults in one place and, more importantly, explaining the entitlement cap behavior for the 'count' parameter, which is not in the schema. This goes beyond a mere restatement, though it doesn't override the schema's comprehensive documentation.

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

Purpose4/5

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

The description clearly states the tool's function: 'Get historical candlestick data by offset from a reference time.' The verb 'Get', the resource 'historical candlestick data', and the distinguishing mechanism 'by offset' make the purpose evident. However, it does not explicitly differentiate from the sibling tool 'history_candlesticks_by_date' (though the name and offset wording implicitly do), so it stops short of a 5.

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

Usage Guidelines4/5

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

The description provides excellent context on how to use the tool: defaults for period, count, forward_adjust, forward, and trade_sessions are stated, and it notes that only symbol is required. It also explains the behavior when entitlement caps the count. However, it does not explicitly state when to prefer this tool over alternatives like 'candlesticks' or 'history_candlesticks_by_date', so it lacks explicit alternatives.

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

history_executionsHistorical ExecutionsA
Read-onlyIdempotent
Inspect

Get every trade execution (fill) in a date range, filtered by execution time (trade_done_at) and auto-paginated to return the complete set (never truncated at the 1000-per-page cap). Returns executions[]{order_id, trade_id, symbol, side, quantity, price, trade_done_at}; trade_id is the stable dedupe key. start_at/end_at in RFC3339.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
end_atYesEnd time (RFC3339)
symbolNoFilter by symbol (optional)
us_pageNoUS accounts only: page number (default 1). Ignored for AP accounts (the region is inferred from the account — do not pass it).
start_atYesStart time (RFC3339)
us_limitNoUS accounts only: page size (default 20). Ignored for AP accounts.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior, so the bar is lower. The description adds valuable behavioral context beyond annotations: auto-pagination guarantees the complete set, filtering is by execution time, and trade_id is the stable dedupe key—information an agent could not infer from the schema.

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

Conciseness5/5

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

Three compact sentences front-load the core behavior, then cover return shape, dedupe semantics, and time format. Every sentence earns its place, and no schema information is redundantly repeated.

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?

With no output schema, the description appropriately documents the return shape (executions array and key fields), the dedupe semantics, and pagination guarantee. Combined with annotations covering safety and a fully documented input schema, there is enough information for an agent to select and invoke the tool correctly.

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 description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by clarifying that start_at/end_at filter on trade_done_at, that the result is auto-paginated rather than manually paged, and that trade_id serves as the dedupe key—useful semantics not present in the parameter descriptions.

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

Purpose4/5

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

The description clearly identifies the resource (trade executions/fills), the action (get every execution in a date range), and adds meaningful scope details like filtering by trade_done_at and auto-pagination. It does not explicitly name a sibling alternative, but 'every...date range' plus the 'history_' prefix separates it well from tools like today_executions or trades.

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

Usage Guidelines3/5

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

The description makes the use case clear: retrieving the complete set of historical fills in a date range without truncation. However, it never explicitly says when not to use this tool or names alternatives for related needs (e.g., today_executions, order_detail), leaving routing between siblings to the agent's inference.

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

history_market_temperatureHistorical Market TemperatureA
Read-onlyIdempotent
Inspect

Get historical market temperature time series.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
endYesEnd date (yyyy-mm-dd)
startYesStart date (yyyy-mm-dd)
marketYesMarket code: HK, US, CN, SG

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already cover read-only, idempotent, open-world, and non-destructive behavior. The description adds that the result is a time series, but does not disclose granularity, output format, or edge cases. The annotation coverage lowers the burden, so the added value beyond annotations is modest.

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

Conciseness5/5

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

The description is a single sentence with no filler. It front-loads the action and resource, and every word contributes to the core meaning.

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

Completeness4/5

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

For a low-complexity, read-only tool with fully described parameters and helpful annotations, this description is largely sufficient for selection and invocation. It does not provide alternative routing or output details, but those are not essential for this simple time-series query.

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 description coverage is 100%, and the inputs (market, start, end, _jq) are already documented with types and format hints. The description adds no parameter-specific meaning, so the baseline 3 is appropriate.

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 ('Get'), resource ('market temperature'), and scope ('historical time series'). The word 'historical' clearly differentiates this tool from the sibling market_temperature tool, and 'time series' clarifies the expected output shape.

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

Usage Guidelines3/5

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

The description only implies when the tool should be used: when historical market temperature data is needed. It does not explicitly mention alternatives such as market_temperature for current data, nor does it state exclusions or prerequisites.

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

history_ordersHistorical OrdersA
Read-onlyIdempotent
Inspect

Get historical orders between dates (excludes today). Returns orders[]{order_id, symbol, side, status, quantity, price, submitted_at}. start_at/end_at in RFC3339. US accounts only: us_page, us_limit paginate via a separate US order endpoint (default page size 20 — pass us_page to see more than the first page).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
end_atYesEnd time (RFC3339)
symbolNoFilter by symbol (optional)
us_pageNoUS accounts only: page number (default 1). Ignored for AP accounts (the region is inferred from the account — do not pass it).
start_atYesStart time (RFC3339)
us_limitNoUS accounts only: page size (default 20). Ignored for AP accounts.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive. The description adds meaningful behavioral details: it excludes today, returns a specific array structure, and explains regional pagination behavior (us_page/us_limit defaults, ignored for AP accounts). This goes beyond what annotations alone provide.

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?

The description is a single dense paragraph that front-loads the core purpose, then return format, then pagination details. It is efficient and every sentence adds necessary information, though it is somewhat packed with multiple clauses.

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

Completeness4/5

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

Given there is no output schema, the description adequately provides the return structure. It covers pagination and regional differences, which are critical for correct usage. Minor omissions like error conditions or timezone assumptions are acceptable for a read-only query tool, and the annotations cover the safety profile.

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 baseline is 3. The description enhances parameter meaning by explaining pagination semantics (us_page default 1, us_limit default 20, ignored for AP accounts) and confirming RFC3339 format, which is not fully captured in the schema's terse descriptions.

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?

The description states a specific verb and resource: 'Get historical orders between dates (excludes today)'. It also lists the exact return fields, making the tool's purpose unambiguous and distinct from siblings like today_orders and order_detail.

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

Usage Guidelines3/5

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

The description implies usage context by excluding today (suggesting today_orders for current-day data) and notes US/AP pagination differences, but it does not explicitly name alternative tools or provide explicit when-not-to-use guidance. The exclusion of today is a clear context, but no sibling is referenced.

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

industry_peersIndustry PeersA
Read-onlyIdempotent
Inspect

Hierarchical sub-sector tree for an industry group. Accepts an industry symbol from industry_rank (e.g. IN00258.US). Each node shows stock count, daily change, and YTD change.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesIndustry symbol from `industry_rank`, e.g. "IN00258.US". The BK counter_id form ("BK/US/IN00258") is also accepted.

TDQS

A4/5.0
Behavior3/5

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

Annotations already cover read-only, open-world, idempotent, and non-destructive behavior. The description adds useful output details (node contents: stock count, daily change, YTD change) but does not disclose potential size limits, hierarchy depth, or response shape.

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

Conciseness5/5

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

Two sentences with no filler. The first sentence states the core purpose, and the second provides the input format and output fields. Front-loaded and efficient.

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

Completeness4/5

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

For a simple read-only lookup with one required parameter, the description covers the input, output fields, and relationship to industry_rank. Without an output schema, it gives enough for an agent to call and interpret the result.

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 100%; the symbol parameter already includes format examples and the alternate BK form. The description repeats the industry_rank provenance but adds no new parameter-level meaning. Baseline 3 is appropriate.

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?

The description states a specific resource ('hierarchical sub-sector tree for an industry group'), the required input type (industry symbol), and what each node shows. This clearly distinguishes it from related siblings like industry_rank or industry_valuation.

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

Usage Guidelines4/5

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

It explicitly says the tool accepts a symbol from industry_rank, which implies a usage workflow and prerequisite. It does not name alternatives or exclusions, but the context is clear enough for selecting this tool over ranking or valuation siblings.

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

industry_rankIndustry RankA
Read-onlyIdempotent
Inspect

Industry ranking list by market (US/HK/CN/SG) and indicator (0=领涨/1=今日走势/2=人气/3=市值/4=营收/5=营收增长率/6=净利润/7=净利润增长率). sort_type: 0=单级 1=多层. Returns items[]{symbol(IN00258.US), name, chg, lists[]}. Pass a row's symbol directly to industry_peers.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
limitNoNumber of results to return (default: returns all)
marketYesMarket: "US" | "HK" | "SG" | "CN"
indicatorNoRanking indicator (default: "0"): "0" = 领涨行业, "1" = 今日走势, "2" = 行业人气, "3" = 市值, "4" = 营收, "5" = 营收增长率, "6" = 净利润, "7" = 净利润增长率
sort_typeNoSort type: "0" = 单级 (default) | "1" = 多层

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds useful response expectations: items[] with symbol, name, chg, and lists[], plus the symbol format example. Minor gaps like empty results and pagination behavior are not covered, but for a read-only list tool these are acceptable.

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

Conciseness5/5

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

The description is two dense sentences with no filler. It front-loads the core scoping dimensions (market and indicator), then covers sort_type, return fields, and the natural next step. Every sentence earns its place.

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

Completeness4/5

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

For a read-only tool with no output schema, the description conveys the key selection dimensions, return item fields, and the integration path to industry_peers. The lists[] field is left somewhat undefined and pagination is not addressed, but limit is already covered in the schema, so the remaining gap is small.

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 description coverage is 100%, so the schema already documents market, indicator, sort_type, limit, and _jq. The description repeats indicator and sort_type values without adding substantial new parameter meaning beyond the schema; it mainly adds output structure, which is not a parameter concern.

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

Purpose4/5

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

The description clearly identifies an industry ranking list, scoped by market and indicator, with a specific verb and resource. It distinguishes itself from industry_peers by positioning that sibling as the next step, though it does not explicitly differentiate from other rank-oriented siblings like rank_list or rank_categories.

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

Usage Guidelines4/5

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

The description provides clear context on what the tool is for and gives a concrete follow-up instruction: 'Pass a row's symbol directly to industry_peers.' It does not state explicit when-not-to-use conditions or alternatives, so it stops 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.

industry_valuationIndustry ValuationC
Read-onlyIdempotent
Inspect

Get industry valuation comparison for peers.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond the annotations—no mention of output shape, data scope, or edge cases. It does not contradict the annotations, but it also does not add meaningful behavioral disclosure.

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?

The description is a single short sentence with no wasted words. It is front-loaded with the verb and resource. However, it is so terse that it sacrifices useful detail, which keeps it from a 5.

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

Completeness2/5

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

Given the large number of closely related sibling tools and no output schema, the description is too thin. An agent cannot tell what 'industry valuation comparison' returns, how it differs from industry_valuation_dist or valuation_comparison, or what the output looks like. The annotations cover safety but not selection or output expectations.

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 description coverage is 100%, so the schema already documents both parameters. The description adds no parameter-level meaning beyond what the schema provides. Baseline 3 is appropriate because the schema carries the full burden.

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

Purpose3/5

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

The description 'Get industry valuation comparison for peers' states a clear verb and resource, but it is vague about what exactly is compared (valuation metrics? multiples?) and how it differs from closely related siblings like industry_peers, industry_rank, industry_valuation_dist, valuation_comparison, and valuation_rank. It names the general purpose but does not distinguish it from these alternatives.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus the many sibling tools with overlapping names (industry_peers, industry_rank, industry_valuation_dist, valuation_comparison, valuation_rank). The description does not state any exclusions, prerequisites, or context for selection.

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

industry_valuation_distIndustry Valuation DistributionB
Read-onlyIdempotent
Inspect

Get industry PE/PB/PS valuation distribution.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already establish read-only, idempotent, non-destructive behavior, so the description does not need to restate safety. It adds mild context by indicating the result concerns PE/PB/PS distribution, but it does not disclose output shape, empty-record behavior, or how the distribution is computed. It does not contradict 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.

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler or redundant phrasing. It is appropriately compact for a straightforward read-only lookup.

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

Completeness2/5

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

There is no output schema, so the description should explain return semantics, but it only says 'distribution' without describing the shape, scope, or units. It also fails to distinguish this tool from close siblings such as industry_valuation, valuation_rank, and valuation_comparison, leaving a meaningful completeness gap.

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 description coverage is 100%, with the schema already explaining both _jq and symbol, including the canonical form warning. The description itself adds no parameter-level meaning, so the high-coverage baseline of 3 applies.

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

Purpose4/5

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

The description uses a specific verb and resource: 'Get industry PE/PB/PS valuation distribution.' This is clearer than the bare tool name and conveys the core object of the call. However, it does not explicitly distinguish this tool from closely named siblings like industry_valuation, industry_rank, or valuation_rank.

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

Usage Guidelines2/5

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

The description provides no guidance on when to choose this tool over alternatives. It does not state prerequisites, exclusions, or contrast with similar valuation/industry tools. An agent is left to infer usage solely from the name and title.

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

institutional_viewsInstitutional ViewsC
Read-onlyIdempotent
Inspect

Get monthly institutional rating distribution timeline.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description's 'Get' is consistent. However, the description adds no additional behavioral context such as the return format, time-series structure, pagination, or any limits. It relies entirely on annotations and does not enrich them with useful details.

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?

The description is a single concise sentence with no redundant words, front-loading the core action and resource. It is appropriately short, though it sacrifices useful detail. For a simple get tool, this level of conciseness is acceptable, though more context could be added without becoming verbose.

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

Completeness2/5

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

The tool is simple with one required parameter and no output schema, but the description is minimal. It does not explain what the 'distribution timeline' contains, how it differs from related institutional rating tools, or any caveats. Given the lack of output schema and the presence of several similar siblings, this is insufficient for an agent to correctly select and use it.

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?

The schema provides descriptions for both parameters (symbol and _jq) with 100% coverage, so the description adds nothing about parameters. The word 'monthly' refers to data granularity rather than parameter semantics. With high schema coverage, the baseline of 3 is appropriate; the description does not need to compensate.

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

Purpose4/5

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

The description clearly states the verb 'Get' and the resource 'monthly institutional rating distribution timeline', which is specific and not a tautology. However, it does not differentiate this from closely related sibling tools like institution_rating_history or institution_rating, which likely have overlapping functionality. The purpose is clear but sibling distinction is missing.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as institution_rating_history or institution_rating_industry_rank. The description provides no context for selection, leaving the agent to guess which tool is appropriate for a given request.

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

institution_ratingInstitution RatingC
Read-onlyIdempotent
Inspect

Get institution rating summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. However, the description adds no behavioral context beyond the schema and annotations—nothing about return shape, data freshness, aggregation behavior, or rate limits. With such rich annotations, the bar is lower, but the description still contributes no additional behavioral transparency.

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

Conciseness5/5

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

The description is a single concise sentence with no filler or redundancy. It is front-loaded and immediately states the operation. No structural improvement is possible without adding substantive information.

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

Completeness2/5

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

With no output schema, the description is responsible for explaining what the tool returns beyond the vague phrase 'summary'. It does not specify whether the response contains aggregate counts, per-institution ratings, or a simple overall score. Given the complexity of the sibling group (institution_rating_detail, institution_rating_history, institution_rating_industry_rank), an agent could easily be confused about what data will be returned.

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 description coverage is 100% — both _jq and symbol are described in the input schema, including the important canonical-form note for symbol. The tool description itself adds no parameter-specific meaning, so the baseline of 3 applies because the schema already carries the parameter documentation burden.

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

Purpose4/5

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

The description states a specific verb ('Get') and a specific resource ('institution rating summary'), making the core purpose clear. It does not explicitly contrast with the many sibling tools (e.g., institution_rating_detail, institution_rating_history), but the word 'summary' does distinguish it from those variants, so it is more than a tautology.

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

Usage Guidelines2/5

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

No guidance is provided on when to choose this tool over alternatives such as institution_rating_detail or institution_rating_history. The description does not mention exclusions or prerequisites. The 'summary' wording only weakly implies a use case, so the agent receives essentially no routing help.

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

institution_rating_detailInstitution Rating DetailC
Read-onlyIdempotent
Inspect

Get detailed historical institution ratings and target price history.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no additional behavioral disclosure such as rate limits, pagination, error behavior, or the canonical symbol requirement, which is only in the parameter description.

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?

The description is a single concise sentence with no superfluous words. It front-loads the action and resource effectively. It could be slightly more informative about the 'detail' aspect, but it remains appropriately sized.

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

Completeness3/5

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

The description is adequate for a simple read-only tool with one required parameter and no output schema. However, it does not differentiate from closely named siblings like institution_rating_history, leaving ambiguity about when to choose this tool. The canonical symbol caveat is covered in the schema, so it does not need to be in the description.

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 description coverage is 100% for both parameters (symbol and _jq), so the schema already provides complete parameter documentation. The tool description adds no extra meaning beyond what is in the schema, so baseline 3 applies.

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

Purpose4/5

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

The description clearly states a specific action and resource: 'Get detailed historical institution ratings and target price history.' It is clear but does not explicitly distinguish itself from sibling tools like institution_rating_history or institution_rating, relying on the 'detail' in the name for differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention conditions, prerequisites, or exclusions. It is purely a purpose statement without any usage context.

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

institution_rating_historyInstitution Rating HistoryC
Read-onlyIdempotent
Inspect

Get institution rating history.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

C2.8/5.0
Behavior2/5

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

The annotations already convey read-only, idempotent, and non-destructive behavior, so the description is not required to repeat that. But the description itself adds no extra behavioral context such as time range, ordering, response granularity, or record shape; 'history' merely mirrors the tool name. It does not contradict 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.

Conciseness3/5

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

The description is a single short sentence with no fluff, so it is concise in form. However, it adds little beyond the title and omits useful differentiating context; the brevity is not paired with enough substance to be genuinely effective.

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

Completeness2/5

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

With no output schema and several closely related institution_rating sibling tools, a one-sentence description is incomplete. It does not clarify what data the history contains, what time span it covers, or how to choose this tool over institution_rating or institution_rating_detail.

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 description coverage is 100%, and both parameters are well documented: symbol includes canonical-form guidance and an empty-record warning, and _jq explains its filtering behavior. The description adds no parameter-level insight, but the schema carries the full burden adequately.

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

Purpose4/5

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

The description states a specific verb ('Get') and resource ('institution rating history'), so the core purpose is clear in isolation. However, it essentially restates the tool's title and does not distinguish it from closely related siblings such as institution_rating, institution_rating_detail, or institution_rating_industry_rank.

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

Usage Guidelines2/5

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

There is no guidance about when to use this tool instead of the many institution_rating-related siblings. No alternatives, exclusions, or selection criteria are mentioned, which is a significant gap given the large sibling list.

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

institution_rating_industry_rankInstitution Rating Industry RankA
Read-onlyIdempotent
Inspect

Get peers ranked by institution analyst ratings in the same industry. Paginated.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
pageNoPage number (default: 1)
sizeNoPage size (default: 20)
symbolYesSecurity symbol, e.g. "AAPL.US"

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, covering safety. The description adds the pagination behavior, which is a useful operational detail beyond the annotations. It does not describe the output structure or sorting direction, but given the annotation coverage, this additional context earns 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.

Conciseness5/5

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

The description is two short sentences, front-loaded with the core action and scope, and ends with a key behavioral detail (paginated). There is no fluff or redundancy; every word earns its place.

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

Completeness4/5

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

For a read-only, paginated list tool, the description covers the essential semantics: what is returned (peers), the ranking criterion (institution analyst ratings), the scope (same industry), and pagination. There is no output schema, so some return-field details are absent, but for calling the tool correctly, the description is adequate. It could mention that the symbol parameter identifies the focal company, but that is already in the schema.

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 100% — all four parameters (_jq, page, size, symbol) have descriptions in the schema. The description adds no parameter-specific information, so the baseline 3 applies. No extra semantics beyond the schema are provided.

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?

The description states a specific verb-resource pair: get peers ranked by institution analyst ratings within the same industry. This clearly distinguishes it from siblings like institution_rating (which returns ratings for a symbol), institution_rating_history (history), and industry_rank (which likely ranks industries). The pagination mention adds further specificity.

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives, nor does it give exclusions. It implies usage through its purpose (e.g., when you need peer ranking by analyst ratings), but no explicit guidance is given. The name and sibling set make it reasonably inferable, but it falls short of a 4 because no alternative is named.

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

intradayIntraday LineB
Read-onlyIdempotent
Inspect

Get intraday minute-by-minute price/volume data. trade_sessions: "intraday" (default, regular hours) or "all" (include pre-market and post-market)

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.
trade_sessionsNoTrade sessions to include: "intraday" (default, regular hours only) or "all" (include pre-market and post-market).

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds behavioral context by specifying minute-by-minute granularity and the effect of trade_sessions on pre/post-market inclusion, but does not disclose other behaviors like data limits or ordering. This is comparable to the high-calibration example where annotations carried the safety burden and the description added scoping detail.

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

Conciseness5/5

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

The description is two short sentences that front-load the core purpose and then address the key parameter. There is no redundancy or fluff; every word serves a purpose. This is appropriately concise for the tool's simplicity.

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

Completeness4/5

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

For a simple read-only tool with three parameters and no output schema, the description covers the essential information: what it returns (minute-by-minute price/volume), and how the trade_sessions parameter affects the data. It does not mention when to use it vs. alternatives, but that is covered under usage guidelines, and no critical operational detail is missing. A 4 is appropriate given the low complexity and full schema coverage.

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 description coverage is 100%, meaning all parameters (symbol, trade_sessions, _jq) are already documented in the schema. The description repeats the trade_sessions explanation but adds no new information beyond what the schema provides. The baseline for full schema coverage is 3.

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

Purpose4/5

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

The description states a clear verb ('Get') and resource ('intraday minute-by-minute price/volume data'), making the tool's purpose obvious. It does not explicitly differentiate from siblings like candlesticks or history_candlesticks, so it lacks the sibling contrast that would earn a 5, but the purpose is unambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as candlesticks, history_candlesticks_by_date, or now. The description only explains the trade_sessions parameter, which is parameter semantics, not usage context. An agent is left to infer when intraday data is appropriate.

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

invest_relationInvestor RelationsB
Read-onlyIdempotent
Inspect

Get investor relations events and announcements.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered by structured data and the description is consistent with it. However, the description adds no behavioral context beyond the annotations — it doesn't mention return shape, pagination, or whether this reflects historical vs. upcoming events, so credit is limited to consistency.

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

Conciseness5/5

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

A single, front-loaded sentence with zero wasted words. It states the verb and the resource immediately and contains no filler or redundant elaboration.

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

Completeness3/5

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

For a simple read-only tool with one required parameter and full schema coverage, the description is minimally adequate. Yet it never specifies the nature of the events/announcements, the time window covered, or the output shape (no output schema exists to compensate), and it doesn't help disambiguate against similar siblings, so completeness is only average.

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 description coverage is 100% (both symbol and _jq are documented in the schema), so per rubric the baseline is 3 even though the description adds no parameter detail. The description doesn't clarify what event types or announcement kinds are returned for a given symbol, but the schema already carries the parameter documentation burden.

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

Purpose4/5

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

The description uses a specific verb ('Get') with a resource ('investor relations events and announcements'), which is clear at a basic level. However, with 100+ siblings including news, filings, corp_action, and news_search, it doesn't distinguish itself — 'announcements' could plausibly overlap with news or filings, so the tool identity is not sharply delineated.

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

Usage Guidelines2/5

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

No guidance is given on when to prefer invest_relation over alternatives like news, news_detail, filings, or corp_action. With a sibling set this large and several tools that could return announcements or corporate events, the absence of any selection criteria forces the agent to guess based on the name alone.

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

ipo_calendarIPO CalendarC
Read-onlyIdempotent
Inspect

Show the IPO calendar.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive. The description adds no behavioral context beyond the verb 'Show'. It does not describe what data is returned or any limitations. It merely repeats the read-only nature already declared.

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?

The description is extremely brief with no fluff, which is good for conciseness. However, it is so minimal it borders on under-specification rather than effective conciseness.

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

Completeness2/5

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

The tool has no output schema and the description gives no indication of what the IPO calendar contains, what time range it covers, or how it differs from related tools like ipo_listed. This is inadequate 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.

Parameters3/5

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

The only parameter _jq is fully documented in the schema (100% coverage). The description does not need to add parameter details, so a baseline of 3 is appropriate.

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

Purpose2/5

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

The description 'Show the IPO calendar' simply restates the tool name and title. It does not distinguish this from the many other IPO-related sibling tools (ipo_listed, ipo_detail, ipo_subscriptions) and lacks specificity about what the calendar contains.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives. An agent has no way to know if this is the right tool for upcoming IPOs, historical IPOs, or a specific date range.

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

ipo_detailIPO DetailB
Read-onlyIdempotent
Inspect

Show IPO detail for a symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
marketNoMarket: "HK" or "US" (default: inferred from symbol suffix)
symbolYesSecurity symbol, e.g. "6871.HK" or "ARM.US"

TDQS

B3.3/5.0
Behavior2/5

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

The description adds no behavioral information beyond the annotations: readOnlyHint, idempotentHint, and destructiveHint=false already establish safety. It does not disclose what 'detail' includes, the response shape, or any formatting/pagination behavior, so it provides little transparency beyond structured metadata.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. It is appropriately concise for a tool whose parameters and safety profile are already covered by the schema and annotations.

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

Completeness3/5

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

The tool is simple (one required parameter, full schema documentation) and annotations establish its read-only, idempotent nature, so an agent can invoke it from the schema alone. However, with no output schema and many IPO-related sibling tools, the description could be richer to aid confident tool selection and set expectations for the response.

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 description coverage is 100%, so all three parameters (symbol, market, _jq) are fully documented in the schema. The description's mention of 'a symbol' merely echoes the existing parameter documentation and adds no new meaning about market inference or jq filtering.

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

Purpose4/5

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

The description 'Show IPO detail for a symbol' provides a clear verb ('Show'), a resource ('IPO detail'), and a scope ('for a symbol'), so the core purpose is unambiguous. It does not differentiate this tool from the many ipo_* sibling tools like ipo_listed or ipo_calendar, which is the main clarity gap.

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

Usage Guidelines3/5

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

The phrase 'for a symbol' implies this is the single-symbol IPO detail lookup, giving some situational context. However, there is no explicit mention of when to use this tool instead of alternatives such as ipo_listed or ipo_calendar, nor any exclusions.

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

ipo_listedIPO ListedB
Read-onlyIdempotent
Inspect

List recently listed IPO stocks (HK+US).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
pageNoPage number (default: 1)
sizeNoPage size (default: 20)

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds market scope and recency but does not disclose response format, ordering, or pagination behavior. With annotations carrying the main behavioral burden, 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.

Conciseness5/5

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

The description is a single sentence that front-loads the core action, resource, and scope with zero filler. Every word contributes, making it an exemplary concise definition.

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

Completeness3/5

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

For a simple, read-only list tool with optional pagination, the description conveys the core purpose, but it leaves gaps: no definition of 'recently', no mention of what fields each listed stock contains, and no ordering guarantee. Since there is no output schema, the description carries more responsibility for return-value semantics than it fulfills.

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 description coverage is 100% for all three parameters (page, size, _jq), so the schema already documents them fully. The description adds no 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.

Purpose4/5

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

The description names a specific verb ('List'), a specific resource ('recently listed IPO stocks'), and a market scope ('HK+US'). It is clear and functional, but it does not explicitly differentiate itself from sibling IPO tools like ipo_calendar or ipo_detail; the phrase 'recently listed' provides an implicit distinction from upcoming IPO calendars.

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

Usage Guidelines2/5

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

No guidance is given on when to prefer this tool over alternatives such as ipo_calendar (upcoming IPOs) or ipo_detail. The only contextual clue is 'recently listed' and 'HK+US', which is implicit at best. There are no explicit use cases, exclusions, or alternative routing.

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

ipo_order_detailIPO Order DetailB
Read-onlyIdempotent
Inspect

Show detailed information for a specific IPO order by order_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
order_idYesIPO order ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, covering the safety profile. The description adds no additional behavioral details such as response format or pagination. It is neutral and does not contradict annotations, so a baseline 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.

Conciseness5/5

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

The description is a single sentence with no filler. It front-loads the action and resource. This is an optimal level of conciseness.

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

Completeness4/5

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

For a simple read-only tool with one required parameter, the description is sufficient. It tells the agent exactly what the tool does. Given the annotations cover safety, no further context is needed. However, it does not describe the structure of the returned detail, but since no output schema exists, that is not strictly required.

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?

Both parameters are fully described in the schema (order_id and _jq), with 100% coverage. The description adds no extra semantics beyond what the schema provides, so it earns the baseline 3.

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

Purpose4/5

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

The description clearly states a verb (Show) and a specific resource (IPO order) identified by order_id. It is distinguishable from sibling tools like ipo_orders (which likely lists) and order_detail (non-IPO) based on the resource type. However, it does not explicitly name alternatives, so slightly less than a perfect 5.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as ipo_orders or order_detail. The description only states the action without any context about selection criteria.

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

ipo_ordersIPO OrdersA
Read-onlyIdempotent
Inspect

List IPO orders (active+history). Filter by symbol, market, or status.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
pageNoPage number (default: 1)
sizeNoPage size (default: 20)
marketNoFilter by market: "HK" or "US"
statusNoFilter by order status
symbolNoFilter by symbol, e.g. "6871.HK"

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already carry readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the scope 'active+history' and the available filter dimensions, which is useful but does not go into return format or any edge cases.

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

Conciseness5/5

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

The description is a single sentence that front-loads the purpose and then the filters. No filler or redundancy; every word earns its place.

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

Completeness4/5

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

For a read-only list tool with six optional parameters and no output schema, the description captures the essential purpose and scope. Minor gaps are the lack of explicit mention of where to get single-order details or what the response array contains, but the name and verb 'List' make it inferable.

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 description coverage is 100%, so each parameter is already documented. The description's mention of symbol, market, and status mirrors the schema and adds no new semantic value, so baseline 3 is appropriate.

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?

Description states a specific verb and resource ('List IPO orders') and clarifies that both active and history are included. This distinguishes it from detail-oriented siblings like ipo_order_detail and calendar tools.

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

Usage Guidelines3/5

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

The description gives implied usage by stating it lists IPO orders and supports filtering, but it never names alternatives or exclusions. Siblings like ipo_order_detail and ipo_subscriptions exist, and the agent is not told when to choose one over the other.

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

ipo_profit_lossIPO Profit / LossA
Read-onlyIdempotent
Inspect

Show IPO profit/loss summary and per-stock breakdown. period: all/ytd/1y/3y.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
pageNoPage number (default: 1)
sizeNoPage size (default: 20)
periodNoPeriod filter: "all", "ytd", "1y", "3y" (default: "all")

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds that the result includes a summary and per-stock breakdown, but it does not disclose pagination behavior, data source, or any operational caveats. This is acceptable but not enriching 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.

Conciseness4/5

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

The description is short, front-loaded with the core purpose, and free of fluff. However, the second sentence restates period options already present in the schema, so not every word earns its place, though it remains efficient.

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

Completeness4/5

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

For a simple read-only summary tool, this is mostly complete: all parameters are documented in the schema, annotations cover safety, and the description states the high-level output shape. The main gap is the lack of relationship to sibling IPO/analysis tools, but that is not fatal for correct invocation.

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 description coverage is 100%, with _jq, page, size, and period already documented including defaults. The description only repeats the period enum values ('all/ytd/1y/3y') and adds no new semantic meaning, so the baseline of 3 applies.

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?

The description uses a specific verb ('Show') plus a resource ('IPO profit/loss') and states the scope ('summary and per-stock breakdown'). It is clearly distinct from siblings like ipo_orders, ipo_calendar, and profit_analysis because the profit/loss focus is explicit.

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

Usage Guidelines3/5

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

The description implies this is a read-only query tool for IPO P/L, but it does not state when to prefer it over alternatives such as ipo_orders or profit_analysis, nor does it give any when-not-to-use guidance. The usage context is inferred rather than explicit.

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

ipo_subscriptionsIPO SubscriptionsA
Read-onlyIdempotent
Inspect

List IPO stocks in subscription/pre-filing stage (HK+US).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

A4/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds scoping behavior (which stages and markets are included) but does not disclose output shape, pagination, or data freshness. This is adequate but not rich behavioral context.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no filler. Every element—action, resource, stage, market—contributes directly to tool selection and invocation.

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

Completeness4/5

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

For a zero-required-parameter read-only list tool, the description is nearly complete. It states exactly what is listed and in which markets. Since there is no output schema, a brief note on the response shape would improve completeness, but it is not essential for correct invocation.

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?

The only parameter, `_jq`, is fully documented in the schema with detailed semantics and an example. The description does not need to repeat this, 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.

Purpose5/5

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

The description uses a specific verb, 'List', with a clear resource: IPO stocks in subscription/pre-filing stage, scoped to HK+US. This uniquely distinguishes the tool from siblings like ipo_listed, ipo_calendar, and ipo_detail. An agent can identify when this tool applies without opening schemas.

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

Usage Guidelines4/5

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

The description gives clear context: use this for IPOs that are in subscription or pre-filing stage, not yet listed. It does not explicitly name alternatives or state when-not-to-use cases, but the stage and market scoping effectively communicates the intended use.

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

macrodataMacro Indicator DataA
Read-onlyIdempotent
Inspect

Get historical observations for one macro-economic indicator. Use indicator_code from macrodata_indicators; start_date/end_date accept YYYY-MM-DD. Supports offset/limit pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
limitNoMaximum number of data points to return (default 100, max 100).
offsetNoPagination offset for historical data points, default 0.
end_dateNoLatest release date to include (YYYY-MM-DD, e.g. `"2024-12-31"`).
start_dateNoEarliest release date to include (YYYY-MM-DD, e.g. `"2024-01-01"`).
indicator_codeYesIndicator code from `macrodata_indicators`, e.g. `"30771718"`.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful behavioral context beyond those hints: pagination via offset/limit and the requirement to source indicator_code from the sibling tool, so the agent knows the expected input relationship.

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

Conciseness5/5

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

The description is three short, purposeful sentences with the core purpose front-loaded. Each sentence earns its place by covering the tool's purpose, required-parameter sourcing, date format, and pagination behavior.

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, idempotent tool with full schema documentation, the description covers what is needed to invoke it correctly: which indicator to fetch, where the code comes from, date formatting, and pagination. The lack of an output schema is not a significant gap here because the returned resource is described as historical observations.

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 description coverage is 100%, so the schema already documents every parameter. The description largely restates what is already in the schema ('start_date/end_date accept YYYY-MM-DD', 'offset/limit pagination'), adding only minimal extra meaning beyond the structured fields.

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?

The description opens with a specific verb and resource: 'Get historical observations for one macro-economic indicator.' This clearly distinguishes the tool from the sibling macrodata_indicators, which lists indicator metadata rather than observations.

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

Usage Guidelines4/5

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

The description tells the agent exactly where to obtain the required parameter ('Use indicator_code from macrodata_indicators') and specifies date formats and pagination support. It does not explicitly state exclusions or alternative tools, but the usage context is clear.

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

macrodata_indicatorsMacro Indicator ListA
Read-onlyIdempotent
Inspect

List macro-economic indicators. Filter by keyword and country (US/CN/HK/EU/JP/SG). Use the returned indicator_code with macrodata. Supports offset/limit pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
limitNoMaximum number of indicators to return (default 100, max 1000).
offsetNoPagination offset, default 0.
countryNoFilter by country code. One of: "US", "CN", "HK", "EU", "JP", "SG". Omit to return all countries.
keywordNoKeyword to search indicator names (e.g. "CPI", "非农", "GDP").

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, openWorld, idempotent, and non-destructive. The description adds that it supports pagination and that results feed into macrodata, which is useful context. No contradictions, and no additional behavioral claims beyond annotations.

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

Conciseness5/5

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

Three sentences, front-loaded with the core function, and each sentence adds value. No redundancy.

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

Completeness4/5

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

For a read-only list tool with full schema coverage and safety annotations, the description covers filtering, pagination, and downstream usage. The only omission is the generic _jq parameter, which is common across tools and self-explanatory.

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 100%, and the description highlights keyword, country, and pagination parameters. It adds minimal detail beyond the schema, but the reference to indicator_code clarifies the output's role.

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 the verb 'List' and the resource 'macro-economic indicators', and clarifies it returns indicator codes for use with macrodata. This distinguishes it from the sibling macrodata tool, making its purpose unambiguous.

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

Usage Guidelines4/5

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

Explicitly instructs to use the returned indicator_code with macrodata, and describes filtering by keyword and country, plus pagination. This gives clear context on when and how to use it, though it doesn't explicitly contrast with alternative listing tools.

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

margin_ratioMargin RatioB
Read-onlyIdempotent
Inspect

Get margin ratio for a symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the read-only safety profile is covered. The description adds no extra behavioral context such as the padded-symbol empty-record quirk or return-shape expectations, making it adequate but not enriching.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler or repetition. Every word earns its place, which is exactly what conciseness requires.

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

Completeness4/5

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

For a simple read-only getter with rich annotations and a fully documented two-parameter schema, the description is sufficiently complete for invocation. The lack of an output schema is mitigated by the tool name and phrasing, though a bit more detail about the returned value would push it higher.

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 description coverage is 100%, including the warning that a padded symbol like '00700.HK' returns an empty record and the detailed _jq filter semantics. The tool description adds no parameter-level meaning beyond what the schema already provides, so it sits at the schema baseline.

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

Purpose4/5

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

The description names a specific resource ('margin ratio') and a required input ('symbol') with the verb 'Get', making the core purpose clear. It does not differentiate itself from related sibling tools such as short_margin or margin-related endpoints, so it stops short of a 5.

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

Usage Guidelines2/5

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

No guidance is given on when to use margin_ratio versus alternatives, nor are exclusions or prerequisites mentioned. The description only implies a narrow use case, which is insufficient for routing an agent to this tool over its siblings.

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

market_statusMarket StatusC
Read-onlyIdempotent
Inspect

Get current market trading status for all markets.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no behavioral context beyond that—it doesn't disclose response format, pagination, or any operational quirks. Since there is no output schema, the description could have provided hints about the returned data but doesn't.

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

Conciseness5/5

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

The description is a single sentence with no wasted words, front-loading the core action and scope. It is appropriately concise for a simple read operation.

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

Completeness2/5

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

While annotations cover safety and the purpose is clear, the description is incomplete for an agent that needs to understand what the response looks like. There is no output schema and no hint about the returned structure (e.g., a list of markets with statuses and timestamps). For a tool that returns data, this is a significant gap.

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 description coverage is 100% for the single `_jq` parameter, which is fully explained in the schema. The description adds no information about parameters, but the baseline of 3 applies because the schema already carries the burden.

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

Purpose4/5

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

The description clearly states a specific verb ('Get') and resource ('market trading status') with a scope ('all markets'), which distinguishes it from related tools like market_temperature (temperature) and trading_session (session times). It is not a tautology, as it adds 'current' and 'all markets' beyond the title.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. Sibling tools like market_temperature or trading_session serve different purposes, but the description doesn't mention them or provide any exclusions or context for selection. It simply states what it does.

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

market_temperatureMarket TemperatureC
Read-onlyIdempotent
Inspect

Get current market sentiment temperature. market: HK/US/CN/SG.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
marketYesMarket code: HK, US, CN, SG

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. However, the description adds no behavioral context beyond restating the purpose—no mention of output format, scale, or any side effects. Given the annotations, the bar is lower, but the description still fails to add any meaningful behavioral detail.

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 description is a single sentence with no wasted words, but it is under-specified. It front-loads the action but does not structure any additional useful context. It is concise but too brief to be genuinely helpful, balancing efficiency against completeness.

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

Completeness2/5

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

With no output schema, the description must explain what the tool returns, such as the scale or meaning of 'temperature'. It does not. The tool is simple, but an agent has no idea what the response looks like or how to interpret it. This is a significant gap for a tool that returns a sentiment metric.

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 description coverage is 100%, so the schema already documents the market parameter fully. The description repeats the accepted values ('HK/US/CN/SG') without adding new semantics like format, defaults, or examples. This meets the baseline of 3 but adds no value beyond the schema.

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

Purpose4/5

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

The description clearly states the action ('Get current market sentiment temperature') and identifies the resource (market sentiment temperature). It names the accepted market codes, distinguishing it from a historical variant (history_market_temperature) implicitly by 'current', but does not explicitly call out the sibling. Still, the purpose is unambiguous.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. It does not mention history_market_temperature or any other sentiment-related tool, nor any exclusions or preconditions. An agent must infer usage from the name alone.

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

newsNewsA
Read-onlyIdempotent
Inspect

Get latest news articles for a symbol. Returns items[]{id, title, source, publish_time, summary, url, related_symbols[]}.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering safety. The description adds the return structure (items[] with fields) but does not disclose additional behaviors such as pagination, ordering guarantees, or error handling. Given annotation coverage, the description provides modest extra value, warranting a 3.

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

Conciseness5/5

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

The description is a single sentence with a clear purpose, followed by a compact return structure specification. It is front-loaded, avoids filler, and every word contributes meaning.

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

Completeness4/5

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

The description clearly states the input (symbol) and the output format, which is sufficient for a simple read-only tool with no output schema. It does not mention pagination or limits, but for a news list tool this is a minor gap. The return structure is explicit, so an agent can call it correctly.

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 description coverage is 100% for both parameters. The description adds no parameter-specific detail beyond what the schema provides; it only mentions 'symbol' implicitly. With high schema coverage, the baseline is 3, and the description does not elevate it.

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?

The description states a specific verb ('Get'), a resource ('news articles'), and a scoping parameter ('for a symbol'). It also specifies the return shape, which distinguishes it from news_search (which likely searches by keyword) and news_detail (which fetches a single article). The purpose is unambiguous.

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

Usage Guidelines3/5

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

The description implies usage for fetching symbol-specific news but does not explicitly compare to alternatives like news_search or news_detail. There is no guidance on when not to use it or what to prefer for other scenarios. The context is clear (symbol-based news) but exclusions are absent, so it stops at 'implied usage'.

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

news_detailNews DetailA
Read-onlyIdempotent
Inspect

Get one news article's full detail by id (from news/news_search).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNews article ID (numeric), e.g. "7123456789012345678". Get IDs from `news` or `news_search`.
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe, non-mutating operation. The description adds only that it fetches detail by ID, which is minimal extra context. It does not describe return format or error behavior, but with the annotation coverage, the description is not required to carry that burden. No contradiction exists.

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

Conciseness5/5

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

The description is a single sentence with zero filler. It immediately states the action, object, and prerequisite in a front-loaded manner. Every word earns its place; it is exemplary conciseness.

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

Completeness4/5

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

For a simple get-by-id tool with only two parameters and no output schema, the description is sufficient: it clarifies what is returned ('full detail') and where to obtain the ID. It does not mention potential errors, but that is not necessary for such a straightforward tool. The inclusion of `news/news_search` provides critical routing context, making the tool complete for agent use.

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 description coverage is 100%: both `id` and `_jq` have detailed descriptions in the schema, including the format and source of the ID. The tool description does not add information beyond the schema, but with full coverage, the baseline of 3 is appropriate. No parameter is left unexplained.

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?

The description states a specific verb ('Get'), a resource ('news article's full detail'), and the key parameter ('by id'). It also references `news/news_search` as the source of IDs, which clearly distinguishes this tool from those search/list siblings. An agent can immediately understand this is the detail-fetch counterpart to the search tools.

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

Usage Guidelines4/5

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

It explicitly says 'by id (from news/news_search)', which establishes the prerequisite condition for using this tool: you must already have an ID from the search tool. This implies that you use this tool when you have a specific article ID and need full details, versus using `news` or `news_search` to discover articles. However, it does not explicitly state 'when not to use this' or list alternative tools, so it is slightly below the strongest tier.

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

nowCurrent TimeA
Read-onlyIdempotent
Inspect

Get current UTC time as an RFC3339 string (e.g. "2025-01-15T08:30:00Z"). Use to determine current date/time before making date-based queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds the crucial detail of the return format (RFC3339 string) with an example, which is beyond what annotations provide. It does not contradict annotations and gives the agent the exact expected output shape, though it could have mentioned that the tool has no side effects, but that's already implied by annotations.

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

Conciseness5/5

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

The description is a single, information-dense sentence that states the purpose, the exact output format, an example, and the recommended usage scenario. Every word earns its place, and the most important information (output format and usage) is front-loaded.

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 zero-required-parameter tool with no output schema, the description provides all necessary context: it tells the agent what it returns (UTC time in RFC3339), gives an example, and explains when to use it. There is nothing an agent needs to know to call this tool correctly that is missing. The annotations cover the safety profile, so the description is complete for its simplicity.

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?

The only parameter is _jq, and the schema covers it 100% with a thorough description. The tool description adds no parameter-specific information, but with full schema coverage, a baseline of 3 is appropriate. The description's main focus is on the return value, not parameters, and that's acceptable since the schema handles it.

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?

The description clearly states the tool gets the current UTC time as an RFC3339 string with an explicit example. It is specific about the verb, resource, and output format, and it is distinct from all sibling tools since none deal with time retrieval.

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?

The description explicitly states when to use this tool: 'Use to determine current date/time before making date-based queries.' This gives a clear, actionable usage scenario. While no alternative is mentioned, that is appropriate because no sibling tool serves the same purpose, and the guidance fully covers the intended use.

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

operatingOperating PerformanceA
Read-onlyIdempotent
Inspect

Get company operating metrics (HK stocks only).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the meaningful HK-only scope constraint, but does not disclose output shape, pagination, or error behavior. The annotation coverage lowers 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.

Conciseness5/5

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

A single sentence that front-loads the purpose and the key market restriction. No unnecessary words or repetition.

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

Completeness3/5

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

For a simple read-only tool with one required parameter and full schema coverage, it is mostly complete. However, with no output schema, the description could do more to clarify what 'operating metrics' actually includes to distinguish it from financial statements or segment data.

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 description coverage is 100%, with the symbol parameter already explaining canonical form and the empty-record behavior. The description adds no parameter-level detail beyond the schema, so the baseline score applies.

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

Purpose4/5

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

The description uses a specific verb and resource ('Get company operating metrics') and adds a clear market scope ('HK stocks only'). It is clear but does not explicitly differentiate from overlapping siblings like company or business_segments.

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

Usage Guidelines3/5

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

The HK-only restriction provides a useful precondition, and the purpose implies when to use it. However, there is no explicit guidance about when to choose this tool over sibling tools that also cover company or financial performance data.

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

option_chain_expiry_date_listOption Expiry DatesA
Read-onlyIdempotent
Inspect

Get option chain expiry dates for a symbol (e.g. AAPL.US). Returns expiry_dates[] as "yyyy-mm-dd" strings. Use with option_chain_info_by_date to get the contracts for one of those dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value beyond those by disclosing the exact return shape (expiry_dates[] with 'yyyy-mm-dd' strings). This is meaningful behavioral context, especially with no output schema present.

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

Conciseness5/5

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

Two sentences deliver purpose, return format, and a usage pointer in compact form. The most important facts are front-loaded, and every sentence earns its place.

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 simple read-only list tool with strong annotations, the description covers what it returns, the date format, and the natural companion tool. No critical information an agent needs to call it correctly is missing.

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 description coverage is 100%, and both parameters (symbol and _jq) are already well documented, including the canonical-form caveat. The description's AAPL.US example adds marginal illustrative value but does not carry additional parameter meaning beyond 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 ('Get'), a precise resource ('option chain expiry dates'), and a concrete symbol example, while explaining that the output is an array of date strings. It also distinctively links to option_chain_info_by_date, which helps an agent separate it from other option-related siblings.

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

Usage Guidelines4/5

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

The description explicitly says to use this tool together with option_chain_info_by_date to fetch contracts for a selected date, giving clear downstream context. It does not list exclusions such as 'do not use for quotes or volumes,' but the intended role as a date-list precursor is clear.

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

option_chain_info_by_dateOption Chain by DateA
Read-onlyIdempotent
Inspect

Get the option contract list for one expiry date. Returns one entry per contract (calls and puts are NOT paired): {symbol, expiry_date, strike_price, direction (Call/Put), option_type (Monthly/Weekly/Quarterly), standard_attr (Normal/Old), days_to_expiry}. Filter on direction to split calls from puts, and pass standard_only=true to drop the legacy post-corporate-action contracts. Carries no prices or Greeks — pass the symbols to option_quote for those.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
dateYesExpiry date (yyyy-mm-dd). Required — list the tradable ones with `option_chain_expiry_date_list`.
symbolYesUnderlying security symbol, e.g. "AAPL.US". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.
standard_onlyNoReturn standard contracts only. Omitted or false returns everything, including the legacy contracts left over from a corporate action (`standard_attr: "Old"`), which are rarely what a caller wants.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds substantial behavioral context beyond that: the response is one entry per contract with calls and puts unpaired, the default behavior of standard_only (omitted means legacy 'Old' contracts are included, which are 'rarely what a caller wants'), and the canvas callback 'returns an empty record, not an error' for padded codes. It sets clear expectations about what is absent (no prices/Greeks).

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

Conciseness5/5

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

Three sentences with zero waste: the first states purpose and return shape, the second delivers filtering guidance, the third sets expectations and routes to a sibling tool. Key information is front-loaded — the agent learns what the tool does and what it returns in the opening sentence. Every sentence earns its place.

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?

With no output schema, the description's full field list ({symbol, expiry_date, strike_price, direction, option_type, standard_attr, days_to_expiry}) carries the burden of documenting return values, and it does so completely. All four parameters are documented in the schema, annotations cover the safety profile, and the description addresses edge behavior, default filtering, and companion tools. Nothing an agent needs to correctly invoke this tool 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 description coverage is 100%, so the schema already documents all four parameters, setting the baseline at 3. The description adds genuine value beyond schema by explaining how to use parameters to get desired results: filtering on direction to split calls from puts, and passing standard_only=true to drop the legacy post-corporate-action contracts. It also maps output fields (direction, standard_attr) to parameter usage, which helps the agent reason about the contract data.

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?

The first sentence names a specific verb and resource with precise scope: 'Get the option contract list for one expiry date.' It distinguishes from siblings by detailing the exact return shape (one entry per contract, calls/puts NOT paired) and explicitly stating what it does NOT do ('Carries no prices or Greeks'), which separates it from option_quote and option_volume. An agent can tell this tool apart from its nearest siblings without ambiguity.

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?

The description explicitly routes to option_quote for prices/Greeks ('pass the symbols to option_quote for those') and the schema's date parameter directs users to option_chain_expiry_date_list to find tradable dates. It also gives concrete invocation guidance: filter on direction to split calls from puts, and pass standard_only=true to exclude legacy contracts. When-to-use and where-else-to-go are both stated explicitly rather than left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

option_quoteOption QuoteA
Read-onlyIdempotent
Inspect

Get option quotes (max 500 symbols). Symbols must be option contract symbols (e.g. "AAPL230317P160000.US"), NOT plain stock symbols — obtain valid ones from the symbol field of each option_chain_info_by_date contract. Returns last_done, prev_close, open, high, low, volume, turnover, implied_volatility, delta, gamma, theta, vega, rho, open_interest per symbol. Greeks are normalized: theta is the per-day value (one day's time decay), vega is the price change per 1% change in implied volatility, and rho is the price change per 1% change in the risk-free interest rate.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolsYesOption contract symbols, e.g. ["AAPL230317P160000.US"]. These are NOT plain stock symbols — get valid ones from the `symbol` field of each `option_chain_info_by_date` contract (after listing expiry dates with `option_chain_expiry_date_list`).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint, idempotentHint, and destructiveHint=false, and the description contradicts none of them. Beyond the annotations, it discloses the 500-symbol cap and, importantly, the Greek normalization semantics: theta is per-day, vega is per 1% IV change, and rho is per 1% risk-free rate change. This prevents an agent from misinterpreting returned values.

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?

The description is a dense but well-ordered paragraph: purpose and cap first, then symbol sourcing, then output fields, then Greek normalization. Every sentence carries load-bearing information with no filler; the normalization detail is placed at the end where it complements the field list rather than obscuring the invocation guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description shoulders the return-value burden and discharges it by listing all 14 per-symbol fields plus Greek normalization semantics. It covers input sourcing, the symbol cap, and the contract-symbol distinction. Only the response container shape and error behavior are left unspecified, which is minor for a read-only quote tool.

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 description coverage is 100%, with the symbols parameter already documenting the contract-symbol constraint and the sourcing workflow from option_chain_info_by_date. The description adds value beyond the schema with the 500-symbol limit and a concrete contract format example ('AAPL230317P160000.US'). The _jq parameter is standard boilerplate needing no elaboration.

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?

The description opens with a specific verb and resource ('Get option quotes') plus a concrete invocation boundary (max 500 symbols). It then enumerates the full set of returned fields (last_done, prev_close, Greeks, open_interest, etc.) and mandates option contract symbol format, distinguishing it from stock-quote siblings like quote and from option_volume/option_volume_daily.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit sourcing workflow: valid symbols come from the symbol field of option_chain_info_by_date contracts, and it warns against passing plain stock symbols — implicitly excluding the quote tool for equity lookups. It does not name sibling alternatives or state explicit when-not-to-use conditions, which keeps it at a 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

option_volumeOption VolumeA
Read-onlyIdempotent
Inspect

Get real-time option call/put volume stats for a US stock. Returns {call_volume, put_volume, put_call_ratio, call_oi, put_oi} and top active contracts.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesUnderlying symbol (US market only), e.g. "AAPL.US"

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so side-effect safety is established. The description adds useful behavioral context by specifying real-time data and the exact return fields, going beyond the annotations. It does not cover details like data availability caveats or nested structure of 'top active contracts', but these are minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states the action and scope, the second lists the output fields. Every sentence contributes useful information without wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple read-only tool with one required parameter and no output schema. The description compensates by listing the core returned fields and stating real-time behavior. A slight gap is the lack of guidance on how 'top active contracts' is shaped, and no explicit sibling differentiation, but overall it is complete enough for correct invocation.

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 description coverage is 100%, and both parameters (_jq and symbol) are already described adequately in the schema. The description repeats 'US stock' but does not add meaningful parameter-level detail beyond that. Baseline of 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Get real-time option call/put volume stats for a US stock.' It clearly names the returned fields, so an agent knows what the tool produces. It doesn't explicitly differentiate itself from sibling tools like option_volume_daily, but the 'real-time' qualifier gives useful distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when real-time call/put volume data for a US stock is needed. However, it does not state when not to use it or mention alternatives such as option_volume_daily or option_chain_*. This leaves some selection burden on the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

option_volume_dailyOption Volume (Daily)A
Read-onlyIdempotent
Inspect

Get daily historical option stats for a US stock. Returns items[]{date, call_volume, put_volume, put_call_vol_ratio, call_oi, put_oi, put_call_oi_ratio}.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
countNoNumber of trading days to return (default 20)
symbolYesUnderlying symbol (US market only), e.g. "AAPL.US"

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry readOnlyHint, idempotentHint, openWorldHint, and destructiveHint, so the bar for additional behavioral disclosure is lower. The description adds the response item shape and daily historical scope, but does not mention behaviors such as default ordering, data availability limits, or API-specific constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that states the operation, scope, and return fields with no filler. It does not repeat what the schema and annotations already communicate.

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 simple read-only data tool, the description covers purpose, output structure, and market scope. With annotations and full schema coverage handling safety and parameters, nothing essential is missing.

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 description coverage is 100%, so the schema already documents symbol, count, and _jq. The description adds no parameter-level meaning beyond what the schema provides, which is the baseline case.

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 ('Get'), resource ('daily historical option stats'), and market scope ('a US stock'). It also names the exact returned fields, making it easy to distinguish from the sibling option_volume by the 'daily historical' qualifier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for daily historical option stats, but it never explicitly says when to prefer it over siblings like option_volume or option_quote, nor does it state exclusions. Usage context is clear but only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

order_detailOrder DetailA
Read-onlyIdempotent
Inspect

Get detailed information about a specific order. To look up such a leg by its own ID instead, pass it as order_id with is_attached=true: the response is then that leg, with charge_detail null.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
order_idYesOrder ID to look up. A parent order ID, or (with is_attached=true) the ID of an attached take-profit / stop-loss leg.
is_attachedNoSet to true when order_id is the ID of an attached take-profit / stop-loss leg rather than a parent order. The response is then that leg itself, with charge_detail null. Omit (or false) for parent orders. Has no effect for US accounts, which are served by the US order endpoint.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds the behavioral detail that for an attached leg the response is that leg with charge_detail null, which is useful context beyond annotations. However, it does not disclose other behaviors like error handling or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences that front-load the primary purpose and then explain the special case. There is no filler or repetition; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a simple get-by-id operation with three well-documented parameters and no output schema. The description covers the main purpose and the leg nuance, which is sufficient for an agent to invoke it correctly. It does not describe the response format, but that is often unnecessary for a lookup tool.

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 description coverage is 100%, so every parameter is already documented in the schema. The main description reiterates the is_attached=true behavior already present in the schema descriptions, adding no new semantic value. Baseline 3 is appropriate given the high coverage.

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?

The description clearly states the tool's verb and resource: 'Get detailed information about a specific order.' It also explains a distinct use case (attached leg lookup) that differentiates it from a plain order fetch. This is specific and not a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear guidance for the attached-leg scenario (when is_attached=true), but it does not mention when to use this tool versus other order-related siblings like history_orders, today_orders, or ipo_order_detail. The usage context is partial.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

participantsMarket ParticipantsA
Read-onlyIdempotent
Inspect

Get HK market participant broker information. Returns participants[]{broker_ids[], name_en, name_cn, name_hk}. Use broker_ids to interpret broker queue data.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the return shape and a usage hint but no additional behavioral context such as pagination or data freshness; this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences front-load the main purpose and return shape, then add a practical usage note. No filler or repetition of schema/annotation data.

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 zero-required-parameter, read-only tool, the description is complete: it documents the exact output shape and explains why the returned broker_ids matter. The schema's _jq is already fully documented, and annotations cover the behavioral profile.

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?

The only parameter is the optional _jq filter, and the input schema already describes it fully (100% coverage). The description adds no param-specific meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Get'), a concrete resource ('HK market participant broker information'), and the exact fields returned (participants[]{broker_ids[], name_en, name_cn, name_hk}). It is clearly scoped, though it does not explicitly differentiate itself from the sibling tool 'brokers'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear downstream use case: 'Use broker_ids to interpret broker queue data.' This tells an agent when the result is needed, but it does not mention alternatives (e.g., 'brokers') or exclusion cases, so it falls short of explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

profit_analysisProfit AnalysisA
Read-onlyIdempotent
Inspect

Get portfolio profit and loss analysis summary. start/end: optional date range in yyyy-mm-dd format. Both must be provided together — passing only one returns empty results.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
endNoEnd date (yyyy-mm-dd). Must be paired with `start`; passing only one returns empty results.
startNoStart date (yyyy-mm-dd). Must be paired with `end`; passing only one returns empty results.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is covered. The description adds one behavioral quirk: passing only one of start/end returns empty results. This is useful and not redundant. However, it does not mention what happens with invalid date formats or whether the summary is aggregated or per-position. But the annotations carry most of the behavioral burden, so 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact (two sentences), front-loads the core purpose, and then adds the necessary parameter constraint. No redundant words. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool that returns a summary, the description covers the purpose and the key parameter constraint. However, given the presence of closely related siblings (profit_analysis_detail, profit_analysis_realized), an agent might lack clarity on the exact output scope (e.g., realized vs unrealized P&L). The output schema is absent, but a summary tool might not need elaboration. Still, a brief clarification on what the summary includes would improve completeness.

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?

The schema already describes both 'start' and 'end' parameters and their pairing requirement, so coverage is 100%. The description repeats this pairing requirement, adding minimal extra value. The _jq parameter is fully documented in the schema, so no additional benefit. Baseline 3 is correct because the description adds little beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a portfolio profit and loss analysis summary. It names the resource (portfolio) and the specific purpose (profit and loss). However, it doesn't differentiate from the closely related siblings like profit_analysis_detail and profit_analysis_realized, which could cause confusion for an agent choosing between them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions the optional date range and explicitly warns about the pairing requirement. It does not provide guidance on when to use this tool instead of the similarly named siblings (profit_analysis_detail, profit_analysis_realized), nor does it state the typical use case or context. The usage is implied but not elaborated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

profit_analysis_detailProfit Analysis DetailB
Read-onlyIdempotent
Inspect

Get detailed profit and loss analysis for a specific symbol. start/end: optional date range in yyyy-mm-dd format. Both must be provided together — passing only one returns empty results.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
endNoEnd date (yyyy-mm-dd). Must be paired with `start`; passing only one returns empty results.
startNoStart date (yyyy-mm-dd). Must be paired with `end`; passing only one returns empty results.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds two concrete behavioral quirks: start/end must be paired or results are empty, and non-canonical symbol forms return empty records instead of errors. These are valuable 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main purpose. The second sentence reiterates parameter constraints already present in the schema, which is slightly redundant but not verbose. It is concise and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with safety covered by annotations, the description covers the essential call behaviors (symbol, date pairing). However, it does not clarify how this 'detailed' analysis differs from other profit_analysis siblings, which is a gap for an agent deciding between tools. No output schema is provided, so return format is left unaddressed.

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 description coverage is 100%, and the schema already explains the pairing rule and canonical symbol format. The description does not add any new parameter semantics beyond what is in the schema, so it meets the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'Get detailed profit and loss analysis for a specific symbol.' It is specific and actionable, but does not explicitly differentiate from siblings like profit_analysis or profit_analysis_realized, so it misses the top score for sibling distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to choose this tool over profit_analysis or profit_analysis_realized. The description mentions parameter pairing rules, but that is a usage constraint, not a selection guideline among alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

profit_analysis_realizedProfit Analysis (Realized, US)A
Read-onlyIdempotent
Inspect

Get realized P&L for a US account, broken down by category (stock/option/crypto) and period. US accounts only; errors with DcRegionRestricted for AP accounts.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
categoryNoFilter by category: "STOCK", "OPTION", "CRYPTO", or omit for all.
currencyNoCurrency to report in, e.g. "USD" (default: "USD"). US accounts only.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: the region restriction and the specific error code 'DcRegionRestricted', plus the output breakdown by category. This is useful and does not contradict annotations.

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?

The description is compact: two sentences that front-load the purpose and add a key restriction. However, the phrase 'and period' is slightly misleading because there is no period parameter in the schema, so it introduces ambiguity without earning its place. Otherwise, it is well-structured and free of fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no output schema, the description gives a good high-level summary and a useful error condition, but it references 'period' without explaining how period is specified, and it does not hint at the response shape (e.g., categories/periods in the output). This is a moderate gap that could leave an agent uncertain about what the result will look like.

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 description coverage is 100%, and the schema already documents 'category' with the exact enum values and 'currency' with the US-only note. The description's mention of 'stock/option/crypto' and 'US accounts only' largely duplicates schema content. It adds no new parameter-level meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get realized P&L for a US account', and adds scope ('US accounts only') and breakdown ('by category'). It is clear, but it does not explicitly name sibling alternatives like profit_analysis or profit_analysis_detail, so differentiation relies on the tool name and context rather than explicit contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear contextual guidance: it is for realized P&L, US accounts only, and it warns about the DcRegionRestricted error for AP accounts. This effectively tells the agent when not to use it, but it does not explicitly point to alternatives for unrealized P&L or non-US accounts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quant_runQuant — Run Indicator ScriptA
Read-onlyIdempotent
Inspect

Run a quant indicator script against historical K-line data on the server. Executes the script server-side and returns the computed indicator/plot values as JSON. Periods: 1m, 5m, 15m, 30m, 1h, day, week, month, year (default: day). The optional input parameter accepts a JSON array matching the order of input.*() calls in the script, e.g. "[14,2.0]".

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
endYesEnd date (YYYY-MM-DD) for the K-line range
inputNoScript input values as a JSON array, e.g. "[14,2.0]". Must match the order of input.*() calls in the script.
startYesStart date (YYYY-MM-DD) for the K-line range
periodNoK-line period: 1m, 5m, 15m, 30m, 1h, day, week, month, year (default: day)day
scriptNoIndicator script source.
symbolYesSymbol in <CODE>.<MARKET> format, e.g. TSLA.US, 700.HK

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds meaningful behavioral context beyond those: execution is server-side, the tool accepts arbitrary indicator scripts, and it returns computed values as JSON. It also clarifies that the input array must match the order of input.*() calls, which is a key runtime behavior. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core purpose and followed by the most important parameter formatting notes. Some redundancy exists because the period list and input example are identical to the schema descriptions, but the text remains compact and scannable without padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool that accepts arbitrary scripts, the description covers the essentials: data scope, period values, input format, and return type. However, it omits details about script language/syntax, how output values map to input() calls, error behavior, or limits. With no output schema, the return description ('indicator/plot values as JSON') is sufficient but thin. Given the tool's complexity, a 3 reflects the clear gaps rather than a fully complete picture.

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 description coverage is 100%, so the structured schema already documents every parameter. The description repeats the period list and input-array example that are already in the schema, adding no new semantic nuance beyond what the schema provides. Baseline 3 is appropriate when the schema carries the full parameter documentation.

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?

The description states a specific verb and resource: 'Run a quant indicator script against historical K-line data on the server' and clarifies the server-side execution and JSON return. This distinguishes it clearly from sibling data-retrieval tools like candlesticks or history_candlesticks_by_date; no other sibling appears to execute user-supplied scripts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does but never says when to choose it over alternatives or when not to use it. It does not reference siblings like candlesticks, history_candlesticks_by_date, or screener_search, leaving the agent to infer that quant_run is for custom scripted indicators. No preconditions or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quoteQuoteA
Read-onlyIdempotent
Inspect

Get latest price quotes. Returns per symbol: last_done, prev_close, open, high, low, volume, turnover, change_rate, change_value, trade_status, timestamp.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolsYesSecurity symbols, e.g. ["700.HK", "AAPL.US"]. Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value by listing the response fields (last_done, prev_close, etc.), which is useful output context, but it does not disclose any additional behavioral caveats (e.g., empty records for padded symbols — that detail lives only in the schema). 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence states the action and then lists the return fields. Every clause earns its place, and the field enumeration is compact yet informative. No filler or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only tool with full schema descriptions and strong annotations, the description is close to sufficient. It compensates for the absent output schema by enumerating the response fields, though it omits the non-canonical-symbol empty-record behavior (present in the schema) and any rate-limit or symbol-limit expectations.

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 description coverage is 100%, so the schema already documents both 'symbols' and '_jq' meaning. The description reinforces that quotes are keyed per symbol but adds no parameter-level detail beyond what the schema provides. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb-resource pair ('Get latest price quotes') and even enumerates the returned fields, so an agent knows exactly what this tool returns. It does not explicitly differentiate from siblings like option_quote or warrant_quote, but the generic scope ('per symbol') makes the scope clear enough; it just doesn't name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for fetching the latest price quotes for given symbols, which tells the agent when it is appropriate. There is no explicit guidance about when to prefer option_quote, warrant_quote, intraday, or depth, nor any exclusions, so the usage context is implied rather than directly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rank_categoriesRank CategoriesB
Read-onlyIdempotent
Inspect

Get rank tab category configurations for the popularity leaderboard. Pass a second_tags key (e.g. hot_all-us) to rank_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds minimal behavioral context beyond the basic purpose; it does not disclose any side effects or special handling. 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is concise and clear, but the second sentence introduces a note about rank_list that seems misplaced or ambiguous, undermining overall structure. It is short but not entirely focused on this tool's own usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no required parameters and no output schema, the description gives the basic purpose but leaves the nature of 'rank tab category configurations' vague. It does not explain how the returned data might be used or how it relates to rank_list, leaving some gap in practical guidance.

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?

The only parameter _jq is fully described in the schema (100% coverage). The description adds no extra meaning about parameters, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence clearly states the tool fetches 'rank tab category configurations for the popularity leaderboard,' providing a specific verb and resource. It does not explicitly contrast with the sibling rank_list, but the distinct noun 'categories' and the leaderboard context help differentiate it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not say when to use this tool versus alternatives. The second sentence instructs passing a 'second_tags key' to rank_list, which seems to reference a different tool and could be a workflow hint, but it is not framed as usage guidance for this tool. No exclusions or alternative conditions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rank_listRank ListA
Read-onlyIdempotent
Inspect

Get ranked stock list by leaderboard tab key. key: from rank_categories second_tags[].key (e.g. "hot_all-us", "hot_up-hk", "trade_heat-us"). market: inferred from key suffix (-us/-hk) or pass explicitly. size: results (default 20).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
keyYesTab key from rank_categories second_tags[].key, e.g. "hot_all-us" (US total heat), "hot_up-hk" (HK rising heat), "trade_heat-us" (US hot trades). The "ib_" prefix is stripped from rank_categories keys and added back automatically.
sizeNoNumber of results to return (default: 20)
marketNoMarket override: "US" | "HK" | "CN" | "SG". Defaults to the market suffix in the key (e.g. "ib_hot_all-hk" → HK), then "US".
need_articleNoWhether to include related news articles (default: false)

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds valuable behavioral details beyond those annotations: market is inferred from the key suffix, the ib_ prefix is stripped/added automatically, and size defaults to 20. This gives an agent the operational context needed to call the tool correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences deliver the core purpose, parameter sources, examples, and defaults with zero filler. The most important information (what the tool returns and how to identify the key) is front-loaded. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with moderate complexity (5 params, 1 required), the description covers the key workflow: where to get the key, how market is inferred, and default size. There is no output schema, so return format is not documented, but the operation is a read-only list retrieval and the invocation path is well specified. Minor gaps like pagination or output structure prevent a perfect score.

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 description coverage is 100%, so the schema already documents all parameters thoroughly. The description largely repeats the schema's key, market, and size semantics rather than adding new meaning. It serves as a useful summary but does not compensate for or extend the structured parameter documentation meaningfully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get ranked stock list by leaderboard tab key.' It provides concrete examples of valid keys, making the tool's function unambiguous. However, it does not explicitly distinguish itself from sibling ranking tools like industry_rank or valuation_rank, though the leaderboard-tab-key concept is fairly unique.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how to construct parameters (e.g., market inferred from key suffix) and points to rank_categories as the source of keys, which hints at a workflow. Yet it never states when to choose this tool over alternatives such as top_movers, industry_rank, or screener_search. No explicit exclusions or comparison conditions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replace_orderReplace OrderA
DestructiveIdempotent
Inspect

Modify an open order's quantity, price, trigger_price, or trailing params. Returns "order replaced" on success. Only open/pending orders can be modified. TWO-STEP CONFIRMATION IS MANDATORY: this tool is a DRY RUN unless you pass the confirmation_code its own dry run returned. Call it first without execute, show the returned preview to the user, and only call it again with execute="" after the user has explicitly confirmed that exact order. The code is derived from the order itself, so it applies only to that exact order. Never quote it back on your own initiative, and never in the same turn the user first asks. The dry run echoes the current order alongside the requested change. Attached take-profit/stop-loss legs are changed here too: attached_order_type with the new attached_profit_taker_price / attached_stop_loss_price adds or reprices a leg, attached_profit_taker_id / attached_stop_loss_id target an existing leg, and attached_cancel_all=true removes every leg while leaving the order in place.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
priceNoNew limit price (for limit-style orders)
executeNoThe `confirmation_code` from this order's dry run. WITHOUT IT NOTHING IS SENT. Omitted (the default) makes this a DRY RUN: the request is validated and echoed back with a three-digit `confirmation_code`, and nothing reaches the exchange. Required protocol: call once without `execute`, show the returned preview to the user, and call again quoting the code only after the user has explicitly confirmed that exact order. The code is single use, expires in 10 minutes, and applies only to this exact order — change any field and it stops working. Never quote it back on your own initiative, and never in the same turn the user first asks.
order_idYesOrder ID to replace (returned by submit_order or listed in today_orders / history_orders)
quantityYesNew order quantity (number of shares)
limit_offsetNoNew limit offset from the trailing stop price (for TSLPAMT / TSLPPCT)
trigger_priceNoNew trigger (activation) price (for LIT / MIT / trailing-stop orders)
trailing_amountNoNew trailing amount as absolute price distance (for TSLPAMT)
attached_main_idNoID of the parent order that owns the attached leg, when the leg is modified on its own rather than through its parent.
trailing_percentNoNew trailing percent as decimal e.g. 0.05 = 5% (for TSLPPCT)
attached_quantityNoNew quantity for the attached leg.
attached_cancel_allNoSet to true to cancel every attached take-profit / stop-loss leg of this order, leaving the order itself in place.
attached_order_typeNoAttached leg to add or update: "PROFIT_TAKER", "STOP_LOSS" or "BRACKET". Required unless the only attached change is attached_cancel_all.
attached_expire_timeNoNew expiry for the attached leg as a unix timestamp in seconds. Required when attached_time_in_force is GTD.
attached_outside_rthNoNew outside-RTH setting for the triggered leg: "RTH_ONLY" / "ANY_TIME" / "OVERNIGHT" / "OPTION_PRE_MARKET".
attached_market_priceNoReference market price for the attached leg.
attached_stop_loss_idNoID of the existing stop-loss leg to update (from order_detail's attached_orders[]). Omit to add a new leg.
attached_time_in_forceNoNew time-in-force for the attached leg: "Day" / "GTC" / "GTD".
attached_profit_taker_idNoID of the existing take-profit leg to update (from order_detail's attached_orders[]). Omit to add a new leg.
attached_stop_loss_priceNoNew stop-loss trigger price.
attached_profit_taker_priceNoNew take-profit trigger price.
attached_activate_order_typeNoNew order type for the triggered leg, e.g. "LO" or "MO".
attached_stop_loss_submit_priceNoNew limit price for the stop-loss leg.
attached_profit_taker_submit_priceNoNew limit price for the take-profit leg.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses critical behavioral traits beyond annotations: the dry-run vs. execute behavior, the confirmation_code mechanism, single-use code with 10-minute expiry, and the fact that attached take-profit/stop-loss legs are modified here too. It also explains the effect of attached_cancel_all. The annotations say destructiveHint=true and idempotentHint=true, and the description's emphasis on confirmation aligns with the destructive nature. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-structured, front-loading the core purpose and the critical confirmation protocol. The attached-leg explanation is a bit long but necessary given the complexity. Every sentence earns its place; no filler. Slightly long, but justified by the tool's complexity.

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 mutation tool with 24 parameters, no output schema, and destructive annotations, the description covers the essential context: what can be modified, the mandatory confirmation flow, the attached-leg behavior, and the success return string. The schema covers parameter details, and the description covers the protocol. Nothing critical is missing for an agent to call this tool correctly.

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 description coverage is 100%, so the schema already documents all 24 parameters. The description adds value by explaining the high-level grouping: quantity, price, trigger_price, trailing params, and the attached-leg semantics (attached_order_type with new prices adds/reprices, attached_profit_taker_id/attached_stop_loss_id target existing legs, attached_cancel_all removes all legs). This goes beyond the schema's per-parameter descriptions, though it doesn't detail every parameter.

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?

The description opens with a specific verb and resource: 'Modify an open order's quantity, price, trigger_price, or trailing params.' It clearly distinguishes this from sibling tools like submit_order, cancel_order, and grid_replace by focusing on modifying existing open orders. The scope is explicit: only open/pending orders can be modified.

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?

The description provides explicit when-to-use guidance: 'Only open/pending orders can be modified.' It also gives a mandatory two-step confirmation protocol with clear instructions on when to call the tool first (dry run), what to show the user, and when to call again with execute. It even states what not to do: 'Never quote it back on your own initiative, and never in the same turn the user first asks.' 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.

screener_indicatorsScreener IndicatorsA
Read-onlyIdempotent
Inspect

Get all available screener indicator keys with units and default value ranges. Technical indicators include a tech_values field showing available options (e.g. macd_day: {category:[goldenfork,deadcross], period:[day,week]}).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolNoOptional security symbol to filter indicators for a specific stock, e.g. "AAPL.US"

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile: readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds a scope guarantee ('all available') and response details, but it does not disclose additional behavioral constraints such as pagination, rate limits, or auth expectations. There is 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two compact, front-loaded sentences. The first states the core purpose, and the second adds a concrete example of the tech_values structure. Every word earns its place.

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 simple read-only metadata tool with no required parameters and annotations covering safety, the description is complete: it tells the agent what will be returned (keys, units, default ranges, tech_values options). The optional `symbol` and `_jq` parameters are fully described in the schema, so nothing needed for invocation is missing.

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 description coverage is 100%, so both `_jq` and `symbol` are already documented in the input schema. The description does not meaningfully add parameter semantics beyond that, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get all available screener indicator keys with units and default value ranges.' This clearly identifies the tool as a metadata/reference endpoint and distinguishes it from sibling tools like screener_search and screener_strategy by focusing specifically on indicator keys, units, and ranges.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is implied: call this tool when you need to discover available screener indicators, their units, or default value ranges. However, the description does not explicitly state when not to use it or name alternative tools, so the agent receives no direct routing guidance against siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

screener_recommend_strategiesScreener Recommend StrategiesA
Read-onlyIdempotent
Inspect

List platform-preset screener strategies. market: US|HK|CN|SG (default: US). Pass id to screener_search strategy_id to run, or screener_strategy to inspect filter conditions.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
marketNoMarket filter: "US" | "HK" | "CN" | "SG" (default: "US")

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description does not need to restate safety traits. It adds platform-preset scoping and downstream routing, but no detail on response shape or pagination; this is acceptable but not exceptional.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: purpose is front-loaded, followed by market guidance and downstream usage. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with no required parameters and full annotations, the description is nearly complete. It does not explicitly describe the response shape beyond listing strategies and providing an id, but the downstream references make the contract clear enough.

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 description coverage is 100%, so the baseline is 3. The description restates the market values and default, and references the id field in downstream usage, but adds no 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and names the resource ('platform-preset screener strategies'), making the tool's purpose immediately clear. The word 'platform-preset' also distinguishes it from user-defined strategy tools like screener_user_strategies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete downstream guidance: pass the returned id to screener_search or screener_strategy. It does not explicitly contrast this tool with screener_user_strategies, but the usage context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

screener_strategyScreener StrategyA
Read-onlyIdempotent
Inspect

Inspect a screener strategy's filter conditions before running it. Use screener_search strategy_id to execute the strategy.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStrategy ID from screener_recommend_strategies or screener_user_strategies screeners[].id
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the 'before running it' context, which is useful, but does not disclose anything else about behavior, such as what happens with invalid IDs or the response structure. Given the strong annotations, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste: the first states the purpose, the second gives the execution alternative. The purpose is front-loaded and every word earns its place.

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 simple tool with one required parameter and no output schema, the description is complete. It explains what the tool does, how to obtain the ID, and how to proceed if execution is needed. Nothing essential 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains both parameters well, including where to get the id from. The description itself does not add parameter details beyond pointing to screener_search, which is not necessary. Baseline 3 is correct when the schema carries the burden.

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?

The description clearly states the verb 'Inspect' and the resource 'a screener strategy's filter conditions', distinguishing it from execution. It explicitly names screener_search as the execution alternative, so an agent can tell them apart without opening schemas.

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?

It says to inspect before running and directs the agent to use screener_search strategy_id to execute. This explicitly provides when-to-use and points to the alternative tool, leaving no ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

screener_user_strategiesScreener User StrategiesA
Read-onlyIdempotent
Inspect

List the current user's saved screener strategies. market: US|HK|CN|SG (default: US). Pass id to screener_search strategy_id to run, or screener_strategy to inspect conditions.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
marketNoMarket filter: "US" | "HK" | "CN" | "SG" (default: "US")

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior, so the description doesn't need to repeat that. It adds that the results are scoped to the current user and that market defaults to US, which is useful context. No extra disclosure about pagination or response shape is given, but the bar is lower given 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero filler: the first states the core purpose, the second explains the market parameter and how to chain the output into sibling tools. Every sentence earns its place and the important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with two optional parameters and no output schema, the description covers the essential points: what it returns, the market filter, and how the result feeds into other tools. A mention of the output structure or pagination would be nice, but it's not critical here given the tool's simplicity.

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 100%, so the parameters are fully documented in the schema. The description repeats the market enum and default, adding no new meaning beyond what the schema already says. It doesn't explain _jq, but the schema does, so baseline 3 is appropriate.

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?

The description opens with 'List the current user's saved screener strategies', a specific verb and resource that clearly distinguishes this from sibling tools like screener_recommend_strategies, screener_search, and screener_strategy. It also names those siblings and explains how they relate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives practical context by telling the agent what to do with the returned id: pass to screener_search to run, or to screener_strategy to inspect conditions. It doesn't explicitly say when *not* to use this tool or compare it with other list-like tools, but the usage guidance is concrete and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

security_factsSecurity FactsA
Read-onlyIdempotent
Inspect

List a security's fact (catalyst) events — anomaly detections, factor readings, data sources and natural-language summaries — filtered by time range and count. Facts are what strategies react to: a signal names its trigger in key_fact_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
limitNoThe maximum number of facts to return. If the number of facts in the time range exceeds this limit, only the latest 'limit' facts will be returned. Defaults to 100.
symbolYesSecurity symbol to query, e.g. "AAPL.US" or "700.HK".
end_timeNoThe end time of the fact to be queried, formatted as 2006-01-02T15:04:05Z in UTC Timezone. If left empty, the query will default to retrieving the latest data.
begin_timeNoThe optional start time of the fact query, formatted as 2006-01-02T15:04:05Z in UTC Timezone. If left empty, the query will include the earliest available data.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the tool as read-only, idempotent, and non-destructive, lowering the burden on the description. The description adds value by specifying the nature of the returned data (catalyst events, including anomaly detections and summaries) and the key_fact_id linkage, which helps the agent understand the content and purpose beyond the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero filler. The first sentence delivers the core action, scope, and filters; the second adds the conceptual framing (facts as triggers). The most important information is front-loaded, making it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and five parameters, the description covers the essential aspects: what is listed, event types, filtering capabilities, and the relationship to signals. It does not describe the exact response shape or pagination, but the schema explains defaults and the description gives enough context for an agent to make a reasonable first call. Minor gap given no output schema, but overall adequate.

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 100%, with each parameter having detailed descriptions (e.g., time formats, limit default, symbol format). The description reinforces that begin_time/end_time/limit control filtering and count, but it adds no new parameter-specific meaning beyond what the schema already provides. Baseline of 3 is appropriate.

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?

The description clearly states the tool lists a security's fact (catalyst) events, enumerates specific event types (anomaly detections, factor readings, data sources, natural-language summaries), and mentions filtering by time range and count. It distinguishes itself from related siblings like anomaly and signals by framing facts as the triggers that signals reference, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides contextual guidance: 'Facts are what strategies react to' and 'a signal names its trigger in key_fact_id,' which implies when to use this tool (to inspect the underlying causes behind signals). However, it does not explicitly contrast with alternatives like anomaly, signals, or signal_detail, nor does it state when not to use it, so it falls short of the top tier.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

security_listSecurity ListA
Read-onlyIdempotent
Inspect

Get security list for a market. Supports market: US, HK, CN, SG. category: "Overnight" (default). page: 1-based page number (default 1). count: records per page (default 50).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
pageNoPage number, 1-based (default: 1)
countNoRecords per page (default: 50)
marketYesMarket code: US, HK, CN, SG
categoryNoCategory filter. Currently only "Overnight" is supported; omitting defaults to Overnight.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds default values for category, page, and count, which is useful behavioral context, but does not disclose behavior for invalid inputs or pagination details beyond defaults.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence with all key details (market, category, page, count) front-loaded. No redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with no output schema, the description covers the main parameters and defaults adequately. It could mention response structure or error behavior, but the essentials are present.

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 description coverage is 100% and includes defaults and allowed values for each parameter. The description repeats these details without adding new meaning, so it meets the baseline but does not exceed it.

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 'Get security list for a market' with specific supported markets and category options. Clearly a distinct resource from siblings like sharelist_list, and the scope is well-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides no guidance on when to use this tool versus alternatives such as sharelist_list or watchlist. No exclusions or conditions are mentioned, leaving selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shareholderShareholdersB
Read-onlyIdempotent
Inspect

Get institutional shareholders for a symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, which fully cover the safety profile. The description adds no behavioral context beyond the bare purpose—no mention of output format, pagination, rate limits, or any special handling. It does not contradict annotations, but it provides zero additional transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is direct and front-loaded. It states the action and resource immediately with no wasted words. It is appropriately concise for such a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (2 params, no nested objects, no output schema), the description is mostly complete. The agent knows what the tool does and has the required parameter from the schema. The only minor gap is that it does not hint at what the response contains (e.g., list of institutions with percentages), but this is not critical for calling the tool correctly.

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?

The schema describes both parameters fully, including the 'symbol' parameter with an example and a warning about canonical form. Schema description coverage is 100%, so the description does not need to add parameter meaning. The phrase 'for a symbol' adds no new information, so a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'Get institutional shareholders' and specifies the input 'for a symbol.' It is not a tautology and gives the agent a concrete idea of the tool's function. However, it does not explicitly distinguish this from related siblings like 'shareholder_detail' or 'shareholder_top', so it lacks explicit differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention conditions like 'for a quick overview of institutional holders' versus more detailed breakdowns available in sibling tools. There is no mention of why an agent would choose this over related shareholders tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shareholder_detailShareholder DetailA
Read-onlyIdempotent
Inspect

Get a single shareholder's holding and trade history. Requires object_id from shareholder_top. Note: trading_details[] is empty for institutional (13F) holders — it is only populated for insider/individual filers (Form 4).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "AAPL.US"
object_idYesShareholder object_id from shareholder_top tool

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds valuable context beyond annotations by disclosing the conditional population of trading_details[] for institutional vs. insider filers, which is not inferable from the schema or annotations. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core purpose is front-loaded in the first sentence, and the caveat about trading_details is concise and placed second. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity and the fact that the output schema is absent, the description covers the essential facts: what it returns, the prerequisite, and a key data-population caveat. It could be more explicit about the response structure, but the information provided is sufficient for correct invocation.

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 parameters are well-documented in the schema. The description adds meaning by specifying that object_id originates from shareholder_top, giving the agent a clear source for a required parameter. This is a small but useful addition beyond the schema's generic description.

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 ('Get') and resource ('a single shareholder's holding and trade history'), which is unambiguous. It distinguishes itself from sibling tools like shareholder_top by explicitly requiring its object_id, and from other detail tools by the 'single shareholder' scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the prerequisite of obtaining object_id from shareholder_top, which tells the agent the correct calling sequence. The note about trading_details[] being empty for institutional holders provides a clear condition for when trade history will be present, though it doesn't explicitly name alternative tools for that case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shareholder_topTop 20 ShareholdersA
Read-onlyIdempotent
Inspect

Get Top 20 major shareholders (institutions, individuals, insiders) across reporting periods. Use object_id with shareholder_detail to drill into a holder's full trade history.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "AAPL.US"

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety and side effects. The description adds the data-scope detail 'across reporting periods,' which is a behavioral trait about output coverage, but it does not disclose response format, pagination, or any limits beyond the 'Top 20' fixed count. Given annotations carry the main behavioral burden, the description adds modest extra context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero fluff. The purpose is front-loaded, and the second sentence adds a useful cross-reference to a sibling tool. Every word earns its place; it is efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only query with two parameters and no output schema, the description explains the core function but leaves some ambiguity about the response structure (e.g., whether it returns data for multiple reporting periods and how those are formatted). Since there is no output schema, the description should carry more of the return-format burden; it doesn't fully do so. Still, the tool is simple enough that the description is minimally adequate.

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 description coverage is 100% (both symbol and _jq are documented). The description adds no new parameter meaning beyond the schema; it references 'object_id' but that is a parameter of shareholder_detail, not of this tool. Baseline 3 is appropriate since the schema already fully documents the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Get), resource (Top 20 major shareholders), and scope (institutions, individuals, insiders, across reporting periods). It clearly conveys a top-20 limited list, distinguishing it from a general shareholder list. However, it does not explicitly contrast with the sibling 'shareholder' tool, so the differentiation is implied rather than named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides one usage pointer: 'Use object_id with shareholder_detail to drill into a holder's full trade history,' which tells the agent when to switch to a different tool. But it does not mention when to prefer this over the 'shareholder' sibling or other holder-related tools (e.g., fund_holder, broker_holding). The guidance is partial, not a full when/when-not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sharelist_addAdd to SharelistAInspect

Add securities to a community sharelist by id. Provide symbols (e.g. ["AAPL.US", "700.HK"]) to add. Returns upstream API response.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSharelist ID
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolsYesSecurity symbols, e.g. ["AAPL.US", "700.HK"]

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, covering the mutation nature. The description adds that it returns the upstream API response, which is useful, but it does not detail error handling or duplicate symbol behavior. It contributes modestly beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with the action front-loaded. Includes a concrete example for symbols and notes the return type. No redundant or vague phrasing; every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple mutation tool with full schema coverage and annotations, the description covers the essential call information: target list, symbols, and return format. It does not detail error cases, but that is acceptable given the low complexity and absence of an output schema.

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 100% for all three parameters, each with clear descriptions. The tool description only repeats the symbols example already in the schema, adding no new semantic value. Baseline 3 is appropriate since the schema carries the full burden.

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?

The description clearly states the action ('Add securities to a community sharelist by id') with a specific verb and resource. It distinguishes itself from siblings like sharelist_create (create new list) and sharelist_remove (remove securities) by focusing on adding securities to an existing list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (need an existing sharelist id) but does not explicitly mention when not to use it or alternatives. Given the large sibling set, some routing guidance would help, but the action is straightforward enough that the context is reasonably inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sharelist_createCreate SharelistBInspect

Create a new community sharelist with a name and optional description.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
nameYesList name (also used as description if `description` is omitted).
descriptionNoList description. Defaults to `name` when omitted.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey that this is a write, non-idempotent, non-destructive operation, so the description's main added value is the 'community' scoping and the fact that only a name is required. It does not explain duplicate behavior, visibility implications, permissions, or response format, but the annotation coverage lowers the burden on the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single clear sentence with no filler, repetition, or tangential details. The action is front-loaded and every word contributes to understanding the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create operation with one required parameter, the description and schema are largely sufficient. However, there is no output schema and no explanation of what the tool returns, and the description does not mention idempotency or the likely follow-up workflow of adding items to the created sharelist. The low complexity and rich annotations keep this from being a 2.

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 description coverage is 100%, and the schema already documents `name`, `description`, its default behavior, and `_jq`. The description only restates 'a name and optional description' and adds no new parameter semantics. This matches the baseline of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource, 'Create a new community sharelist', so an agent immediately knows the operation. It also mentions the relevant inputs, name and optional description. However, it does not explicitly distinguish this tool from sibling tools like sharelist_add or create_watchlist_group, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus sharelist_add, sharelist_delete, sharelist_list, or create_watchlist_group. The description only states what the tool does, not the conditions under which an agent should choose it. This forces the agent to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sharelist_deleteDelete SharelistA
DestructiveIdempotent
Inspect

Delete a community sharelist by id (own lists only; subscribed lists cannot be deleted). Returns upstream API response on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSharelist ID
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, covering the mutation and repeatability profile. The description adds the ownership constraint and states that it returns the upstream API response on success. It does not contradict annotations. It adds context beyond annotations, though it does not elaborate on error behavior or response structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the action, then adds the ownership restriction and return behavior. Zero waste, every clause adds value. Excellent conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete operation with one required parameter, the description covers the action, scope restriction, and return value. The destructive and idempotent hints are in annotations. It does not mention authentication or error handling, but these are not essential given the tool's simplicity and annotation coverage. Slightly more could be added, but it is adequately complete.

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 100% with descriptions for both id and _jq. The description does not add meaning beyond the schema; it simply refers to 'by id' which is already documented. Baseline of 3 is appropriate since the schema carries the parameter documentation.

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?

Description states a specific verb+resource: 'Delete a community sharelist by id.' It also adds a scope restriction (own lists only) that distinguishes it from other sharelist operations like sharelist_remove (likely removing a symbol) and sharelist_sort. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit context on when to use: 'own lists only; subscribed lists cannot be deleted.' This tells the agent the condition for valid usage, though it does not name an alternative tool for subscribed lists. It is clear enough to prevent misuse, but could be improved by explicitly referencing an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sharelist_detailSharelist DetailB
Read-onlyIdempotent
Inspect

Get community sharelist detail by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSharelist ID
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds only the scoping detail that this is a 'community' sharelist and a detail fetch, which is minimal behavioral context. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single seven-word sentence that contains only meaningful information: the operation, the resource, and the lookup key. No fluff, front-loaded, and easily parsed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only get-by-id tool with rich annotations, the description is minimally viable but does not describe the response shape or content of the 'detail' (e.g., whether it includes list items, metadata, permissions). With no output schema, a bit more context about what the response contains would improve completeness.

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 description coverage is 100%, so both id and _jq are already documented. The description's 'by id' merely restates the schema's required parameter without adding new semantics. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('community sharelist detail') and identifies the lookup key ('by id'). It clearly distinguishes from sharelist_list/sharelist_popular (which presumably return collections) without explicitly naming them. Slightly below 5 because it doesn't name the alternative tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives like sharelist_list or sharelist_popular. The 'by id' qualifier implies a single-item lookup, but there is no explicit when-to-use or when-not-to-use context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sharelist_listList SharelistsA
Read-onlyIdempotent
Inspect

List user's own and subscribed community sharelists.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
countNoNumber of lists to return (default 20)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, fully covering the safety profile. The description adds value by specifying that both own and subscribed community sharelists are returned, which is more than the tool name implies. It does not mention pagination behavior, sort order, or whether the response contains full list details, but those are minor gaps 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single-sentence description is concise and front-loaded with the key purpose. Every word earns its place, and there is no redundant restating of the tool name or title. This is efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read-only list operation, the description plus annotations and schema cover the essential usage context. It does not describe return values or ordering, but no output schema exists and the tool is straightforward. A short mention of the default count behavior would push it to 5, but the current information is sufficient for safe invocation.

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 description coverage is 100%, and both parameters (count and _jq) are documented in the input schema. The description does not add parameter-level detail beyond the schema, which is acceptable because the schema carries the full burden. Baseline score of 3 is appropriate when the schema fully explains parameters.

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?

The description states a specific verb ('List') and resource ('user's own and subscribed community sharelists'), which immediately distinguishes it from sibling tools like sharelist_detail, sharelist_popular, and sharelist_add. This is clear and unambiguous about what is being enumerated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes it clear this tool is for enumerating the user's own and subscribed sharelists, which provides clear context for when to use it. It does not explicitly name alternatives or exclusion conditions, but the scope is well implied by contrasting with sharelist_detail and sharelist_popular. No alternative routing is provided, but the primary use case is evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sharelist_removeRemove from SharelistA
DestructiveIdempotent
Inspect

Remove securities from a community sharelist by id. Provide symbols to remove. Returns upstream API response on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSharelist ID
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolsYesSecurity symbols, e.g. ["AAPL.US", "700.HK"]

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the agent knows this is a destructive, repeatable operation. The description adds 'Returns upstream API response on success', which hints at return behavior, but does not clarify partial-removal semantics or error handling. It provides minimal extra 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the action and resource, and contains zero waste. It is efficiently structured for an agent to quickly parse the purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and a destructive operation, the description could benefit from more context about effects (e.g., permanence, partial removals). However, the annotations cover the destructive and idempotent aspects, and the schema fully documents parameters. The description is adequate for a simple removal but leaves some ambiguity around return details and edge cases.

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 description coverage is 100% for all three parameters, including detailed descriptions for id, symbols, and _jq. The description's 'Provide symbols to remove' reiterates the symbols parameter without adding new meaning. Since the schema already fully documents parameters, a baseline score of 3 is appropriate.

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?

The description states a specific verb ('Remove') and resource ('securities from a community sharelist by id'), making the tool's purpose immediately clear. It distinguishes itself from siblings like sharelist_add (adding) and sharelist_delete (removing the whole list) by focusing on removing specific symbols.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit when-to-use vs alternatives guidance. It does not mention sharelist_add or sharelist_delete, nor any condition under which a different tool would be appropriate. The only usage hint is 'Provide symbols to remove', which is a parameter instruction, not a selection criterion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sharelist_sortSort SharelistA
DestructiveIdempotent
Inspect

Reorder securities in a community sharelist by id. Provide symbols in the desired new order. Returns upstream API response on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSharelist ID
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolsYesSecurity symbols, e.g. ["AAPL.US", "700.HK"]

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal readOnly=false, destructiveHint=true, and idempotentHint=true; the description aligns with these by describing a reordering mutation. It adds useful context such as 'by id', symbol ordering, and upstream response, but it does not clarify what destructive consequences might occur (e.g., whether a partial symbol list removes omitted securities).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences deliver the action, required inputs, ordering semantics, and response behavior with no wasted words. The most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with only 3 parameters and no nested objects, the description covers the essentials: what to pass (id, symbols in order), the action, and the response. It does not detail the upstream response structure, but 'Returns upstream API response on success' is acceptable given no output schema exists.

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 is 3. The description adds meaningful semantic value beyond the schema by making explicit that the symbol array must be in the desired new order, which is central to how the tool behaves.

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?

The description clearly states the action ('Reorder securities') and the resource ('a community sharelist by id'). It is immediately distinguishable from sibling sharelist tools like sharelist_add, sharelist_remove, and sharelist_create.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the intended use clear: rearranging the order of symbols in an existing sharelist. It does not explicitly say when to prefer it over alternatives, but the operation is distinct enough that an agent can infer the right context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

short_marginShort MarginB
Read-onlyIdempotent
Inspect

Get short margin deposit details for the current account. Returns short positions with margin_amount, margin_rate, interest_rate, symbol, quantity per position.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description need not repeat that this is a safe read. The description adds useful context about what is returned (short positions with margin fields), but nothing about pagination, limits, account assumptions, or response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the operation, scope, and returned fields are all stated efficiently. The most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter, read-only tool with annotations covering safety and idempotency, the description covers the essential return data well. It lacks explicit differentiation from closely named siblings, but the simple parameter surface and clear return-field list make it reasonably complete.

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?

The only parameter is _jq, and its schema description already explains the filter behavior and constraints with 100% coverage. The tool description does not need to add parameter semantics, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Get') and resource ('short margin deposit details for the current account') and enumerates the returned fields, so an agent knows what this tool does. It does not explicitly distinguish itself from sibling tools like short_positions or margin_ratio, though the 'deposit details' phrasing and returned fields narrow the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus short_positions, short_trades, or margin_ratio, and no exclusions or prerequisites are mentioned. The 'current account' scope is the only implicit usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

short_positionsShort PositionsA
Read-onlyIdempotent
Inspect

Get short interest history (open short positions) for HK or US stocks. Market inferred from symbol suffix. count: 1–100 (default 20). Unified data[]{timestamp(RFC3339), short_shares(open short position in shares), rate(decimal ratio e.g. 0.009=0.9%), close}. US-only: avg_daily_vol, days_to_cover. HK-only: balance(outstanding short position in HKD). US source: FINRA bi-weekly. HK source: HKEX daily.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
countNoNumber of records to return (1-100, default 20)
symbolYesSecurity symbol, e.g. "AAPL.US" (US) or "700.HK" (HK). Market is inferred from suffix.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds valuable behavioral context: data source frequency (FINRA bi-weekly, HKEX daily), market inference logic, and field variations by market (US-only vs HK-only). This goes beyond the annotations without contradicting them.

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?

The description is front-loaded with purpose and then efficiently packs count, data fields, and sources into a compact paragraph. It avoids fluff and each clause adds information, though the density of field names and sources could be slightly more organized for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating the return fields and market-specific variations, plus data sources. It also clarifies count limits and market inference. Minor gaps like error handling or no-data behavior exist but are not critical for a read-only, idempotent tool with clear input constraints.

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 100% for all three parameters, each with descriptive text. The description reinforces the count range and suffix inference but adds little new meaning beyond what the schema already provides. The field-level details in the description indirectly clarify the response but not the parameter semantics themselves.

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?

The description states a specific verb ('Get'), a precise resource ('short interest history'), and a clear scope ('HK or US stocks'), distinguishing it from related siblings like short_trades and short_margin by focusing on open positions history. The field list and source details further clarify its exact purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates when to use the tool (for short interest history) and gives operational details like count range and market inference from suffix. However, it does not explicitly mention alternatives or when not to use it, such as differentiating from short_trades for trading activity or short_margin for margin-based data, leaving some selection ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

short_tradesShort TradesA
Read-onlyIdempotent
Inspect

Get daily short-sale volume history for HK or US stocks. Market inferred from symbol suffix. last_timestamp: unix seconds (omit for latest). page_size: 1–100 (default 20). US source: FINRA/NASDAQ daily. HK source: HKEX daily.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "AAPL.US" (US) or "700.HK" (HK). Market is inferred from suffix.
page_sizeNoPage size: 1–100 (default: 20)
last_timestampYesQuery cutoff timestamp in seconds (pass current timestamp for latest data)

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful behavioral context: data sources for US (FINRA/NASDAQ) and HK (HKEX), market inference, and pagination limits. It does not mention return format, but the annotation coverage lowers that burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each serving a distinct purpose: what the tool does, market inference, timestamp semantics, page size, and data sources. No filler; the primary verb and resource are front-loaded. The information density is appropriate without being bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only data-query tool with fully documented parameters and safety annotations, the description covers essential context: data sources, market inference, pagination defaults, and timestamp behavior. The only notable omission is the exact return structure, but the semantic of 'volume history' plus the lack of an output schema make this acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description introduces a contradiction: 'last_timestamp: unix seconds (omit for latest)' conflicts with the schema's required flag for last_timestamp. This actively misleads invocation. The page_size range matches the schema and adds little beyond it.

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?

The description states a specific verb ('Get'), a specific resource ('daily short-sale volume history'), and the market scope ('HK or US stocks'). It also notes the market is inferred from the symbol suffix, clarifying behavior. This is clearly distinguishable from sibling tools like short_positions or short_margin, which address different data types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool (when short-sale volume history is needed) and helpful usage tips (last_timestamp semantics, page_size range). However, it does not explicitly name alternative sibling tools or state when not to use this tool, so there are no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

signal_detailSignal DetailA
Read-onlyIdempotent
Inspect

Get one signal by ID (from signals). Same fields as the list, plus analysis — the full strategy analysis: fit scores, valuation scenarios, evidence sources and related fact IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
signal_idYesSignal ID, e.g. "sign_992_1a00c9425c3_48ab". Get IDs from `signals`.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds value by disclosing the additional `analysis` payload and its subcomponents (fit scores, valuation scenarios, evidence sources, fact IDs), which is behavior not inferable from annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero redundancy. The core action and resource are front-loaded, followed by the distinguishing field description. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only fetch with one required parameter and no output schema, the description covers what the tool does, what the response contains, and where to get the ID. It doesn't address edge cases like missing signals or null analysis, but given the low complexity and rich annotations, this is sufficient.

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 both parameters are already documented. The description adds a useful hint that `signal_id` values come from `signals` and gives an example format, which helps an agent construct valid calls. This is a small but real increment over 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?

The description opens with a specific verb-resource pair ('Get one signal by ID') and immediately grounds it in the `signals` list, explicitly distinguishing it from the sibling list tool. Naming the extra `analysis` field and its contents makes the tool's purpose unambiguous and differentiated from other detail tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It tells the agent to source IDs from `signals` and implies this tool is for retrieving a single signal's full detail, while the list provides summary fields. It doesn't explicitly state 'use this when you need analysis' or list exclusions, but the context is clear enough for an agent to select it appropriately among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

signalsSignalsA
Read-onlyIdempotent
Inspect

Query strategy signals — a strategy's take on a security, triggered by a catalyst. Filter by symbol, strategy, catalyst and time range; page with limit/offset. The full strategy analysis is omitted here — fetch it with signal_detail.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
limitNoMaximum number of results to return. Defaults to 20.
offsetNoNumber of results to skip for pagination. Defaults to 0.
end_timeNoFilter records created at or before this time. ISO 8601 datetime with timezone. If omitted, no upper bound.
start_timeNoFilter records created at or after this time. ISO 8601 datetime with timezone, e.g. 2024-01-15T10:30:00Z. If omitted, no lower bound.
strategy_idNoFilter by strategy id (e.g., "buffett-value"). Preferred over the deprecated strategy_name; takes precedence when both are provided.
symbol_nameNoFilter by security symbol, e.g. "AAPL.US" or "700.HK". If omitted, returns signals for all symbols.
catalyst_nameNoFilter by the name of the factor that triggered the signal, e.g. "EARNINGS_RELEASED" or "macd_12_26_9" — not the display label returned in key_catalyst. If omitted, signals with any catalyst name are returned.
catalyst_typeNoFilter by the catalyst type that triggered the signal, e.g. "News", "Fundamental", "Technical". If omitted, signals with any catalyst type are returned.
strategy_nameNoFilter by strategy name. If omitted, returns signals from all strategies.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond that: what a signal is, that it is triggered by a catalyst, that filters and pagination are supported, and that full analysis is intentionally delegated to signal_detail. It does not add rate-limit or response-detail context, but the annotation coverage lowers 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences accomplish a lot: define the resource, enumerate filtering and paging, and point to the sibling for deeper analysis. There is no filler, repeated schema text, or unnecessary detail.

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 that all parameters are optional and fully documented in the schema, and the annotations already carry read-only/idempotent safety, the description fills the remaining contextual gaps: what a signal is, how to page through results, and where to get full analysis. For a filtered list-query tool, this is complete enough for correct invocation.

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 description coverage is 100%, so the schema already documents all 10 parameters. The description's mention of symbol, strategy, catalyst, time range, and pagination maps to the parameters but does not add meaning beyond the individual field descriptions already present. Baseline 3 is appropriate.

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?

The description opens with a specific verb and resource ('Query strategy signals') and defines the domain concept in app-specific terms: 'a strategy's take on a security, triggered by a catalyst.' It also differentiates itself from the nearest sibling, signal_detail, by explicitly stating that full strategy analysis is omitted, so an agent can correctly distinguish the two.

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?

The description explicitly says the full strategy analysis is not here and routes the agent to signal_detail, which is a clear when-not/alternative statement. It also summarizes the relevant filter dimensions (symbol, strategy, catalyst, time range) and pagination, giving the agent enough context to choose this tool for list-style signal queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statement_exportExport StatementA
Read-onlyIdempotent
Inspect

Get a pre-signed download URL for a statement data file (obtained from statement_list).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
file_keyYesFile key from statement_list, e.g. "/statement_data/data/.../20975338.json"

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds that the tool returns a pre-signed URL, but does not disclose URL expiry, return shape, or any follow-up download step required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence communicates the core purpose and the relationship to statement_list without any filler. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, with full schema coverage and robust annotations. The description sufficiently explains what is returned (a pre-signed URL) and where the file_key comes from, but it could add a note about URL expiration or how to actually fetch the file.

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 description coverage is 100%, so the input parameters are already fully documented. The description reinforces that file_key comes from statement_list, but this does not add meaningful semantic value beyond the schema's own parameter description.

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?

The description states a specific action ('Get a pre-signed download URL') and a specific resource ('statement data file'), and ties it to statement_list as the source. This clearly distinguishes statement_export from its siblings like statement_list and other data-download tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use this tool: after obtaining a file_key from statement_list. It does not explicitly name alternatives or give when-not-to-use guidance, so it stops 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.

statement_listStatement ListA
Read-onlyIdempotent
Inspect

List available account statements (daily/monthly). Use the id with statement_export to download.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
limitNoNumber of records to return. Defaults to 30 for "daily" or 12 for "monthly". The default depends on `statement_type`, so the schema declares none: `skip_serializing_if` is what stops schemars deriving `default: null` from `serde(default)`, which would contradict the integer type.
start_dateNoStart date (yyyy-mm-dd). Defaults to 30 days ago for "daily" or 12 months ago for "monthly".
statement_typeNoStatement type: "daily" (default) or "monthly".

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive behavior, so the safety profile is covered. The description adds useful behavior beyond that: the returned records expose an id intended for statement_export, and the list is restricted to daily/monthly statements. It doesn't describe pagination or return format, but that is less critical given 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with no filler. It front-loads the core purpose and immediately adds the actionable cross-tool instruction, earning every word.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with fully documented parameters, the description is nearly sufficient. It names the companion tool and the id contract, though it doesn't describe the response fields beyond implying an id. With no output schema present, a bit more detail about what fields are returned could be helpful, but the current text covers the essential workflow.

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?

The input schema covers all parameters with descriptions, including statement_type, limit, start_date, and _jq. The description's mention of 'daily/monthly' aligns with statement_type but adds no deeper semantic detail beyond what the schema already provides, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('List available account statements'), the resource ('account statements'), and the key dimension (daily/monthly). It also distinguishes this tool from statement_export by stating the id is meant for that export flow, so an agent can tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this to list statements, then use the id with statement_export to download. It doesn't explicitly say when not to use this tool or name alternative listing tools, but the workflow relationship to statement_export is a strong practical guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

static_infoSecurity Static InfoA
Read-onlyIdempotent
Inspect

Get static info for securities. Returns per symbol: symbol, name_cn, name_en, exchange (e.g. NASDAQ), type (e.g. US_Stock), lot_size, listed_date, delisted (bool). US accounts only: .BKKT crypto symbols (e.g. BTCUSD.BKKT) are routed to a separate US crypto overview endpoint; .HAS/.OSL crypto symbols are unaffected.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolsYesSecurity symbols, e.g. ["700.HK", "AAPL.US"]. Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as read-only and idempotent, so the description adds value by disclosing the special routing for .BKKT crypto symbols under US accounts and noting that .HAS/.OSL symbols are unaffected. It also spells out the returned fields, which is helpful given no output schema.

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?

Two focused sentences pack the return field list and the important crypto caveat without filler. The second sentence is dense, but it earns its place because it prevents incorrect assumptions about crypto symbol behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description covers the return fields well, and the schema documents the canonical symbol format and _jq semantics. The crypto edge case is also addressed, leaving no major missing information for a read-only lookup tool.

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 description coverage is 100%, so both symbols and _jq are already fully explained in the input schema. The description's 'per symbol' phrasing lightly reinforces parameter meaning but adds no new parameter-level details beyond 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?

The description states a specific verb and resource ('Get static info for securities') and enumerates the returned fields (symbol, name_cn, name_en, exchange, type, lot_size, listed_date, delisted). This makes the tool's scope concrete and clearly distinguishes it from real-time quote or company-profile siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the purpose—use this when you need static security info—but the description never names alternatives or states when NOT to use it. The US-account crypto routing note is useful behavioral context, not explicit guidance about choosing between this tool and siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stock_positionsStock PositionsA
Read-onlyIdempotent
Inspect

Get current stock positions across all channels. US accounts only: an additional us_asset_overview field {cash_list, stock_list, option_list, crypto_list, cash_buy_power, overnight_buy_power} is included alongside the existing data.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a safe, read-only, idempotent operation, so the description does not need to restate that. It does add useful behavioral context by disclosing the US-only us_asset_overview field and its subfields, but it says nothing about response shape, errors, or other edge-case behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no filler. The main purpose is front-loaded, and the US-account-specific caveat is placed second, making the structure clear and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only, parameterless tool, the description covers the core purpose, scope, and the notable US-only response addition. The absence of an output schema is partly mitigated by the tool's name and the explicit field detail, though a bit more detail about the base response structure would make it fully complete.

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?

The only parameter, _jq, is fully documented in the input schema with syntax and behavior details. Since schema description coverage is 100%, the description does not need to add parameter information; it simply stays silent, which is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Get current stock positions') and resource scope ('across all channels'). It is easy to understand what the tool returns, but it does not explicitly differentiate from sibling tools like fund_positions or short_positions, so it misses the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'current stock positions' implies when to use the tool, and the US-account caveat adds a relevant condition. However, there is no explicit guidance on when not to use it or which sibling tools cover alternatives such as fund positions or short positions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_multileg_orderSubmit Multi-Leg OrderA
Destructive
Inspect

Submit a multi-leg option combination order; all legs fill or rest together as one strategy order.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
legsYesThe legs of the combination, in strategy order. Option symbols only.
sideYesBuy or Sell — the direction of the strategy as a whole
remarkNoOrder remark (max 255 characters)
strategyYesStrategy, which fixes how many legs are required and the direction of each: CoveredCall / CoveredPut (stock + option) / VerticalCallSpread / VerticalPutSpread / Collar / Straddle / Strangle / CalendarCallSpread / CalendarPutSpread (the two calendar spreads pair the same strike across two expiries)
order_typeYesOrder type: LO (Limit, requires submitted_price) or MO (Market)
submitted_priceNoNet limit price for the whole combination. Required for LO.
client_request_idNoIdempotency key, unique per intended order. See the field of the same name on `submit_order`.
submitted_quantityYesNumber of strategy units to trade (each unit is one set of legs in the ratios given by `legs`)

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating, destructive operation, so the description does not need to repeat that. It adds one useful behavioral trait beyond annotations: the all-or-nothing fill/rest semantics. However, it does not disclose other behavioral details such as idempotency expectations, validation failures, or response behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words. The core action and the most important behavioral constraint are both front-loaded, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 9-parameter order tool with no output schema, the description is minimal. It covers the key atomicity concept, but it does not describe response expectations, failure modes, or sufficiently route an agent away from submit_order. Schema and annotations compensate for much, but not all, of the missing operational context.

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 description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no parameter-level semantics, which is acceptable but not additive; the baseline score of 3 applies.

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?

The description states a specific verb ('Submit') and resource ('multi-leg option combination order'), and adds a distinguishing behavioral detail: all legs fill or rest together as one strategy order. This clearly separates it from siblings like submit_order, which would handle single-leg or simpler orders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for multi-leg option combination orders, but it does not explicitly say when to prefer it over submit_order or any other sibling, nor does it state exclusions or prerequisites. The usage context is inferable but not directly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_orderSubmit OrderA
Destructive
Inspect

Submit a buy/sell order. DRY RUN unless execute is the confirmation_code from its own dry run: call once without execute, show the preview to the user, then re-call quoting the code only after they explicitly confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
sideYesBuy or Sell
remarkNoOrder remark (max 255 characters)
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.
executeNoThe `confirmation_code` from this order's dry run. WITHOUT IT NOTHING IS SENT. Omitted (the default) makes this a DRY RUN: the request is validated and echoed back with a three-digit `confirmation_code`, and nothing reaches the exchange. Required protocol: call once without `execute`, show the returned preview to the user, and call again quoting the code only after the user has explicitly confirmed that exact order. The code is single use, expires in 10 minutes, and applies only to this exact order — change any field and it stops working. Never quote it back on your own initiative, and never in the same turn the user first asks.
order_typeYesOrder type (HK supports all; US supports LO/MO/LIT/MIT/TSLPAMT/TSLPPCT only): - LO (Limit Order): requires submitted_price - ELO (Enhanced Limit Order, HK only): requires submitted_price - MO (Market Order): no price required - AO (At-auction Order, HK only): executed at auction price, no price required - ALO (At-auction Limit Order, HK only): requires submitted_price - ODD (Odd Lots Order, HK only): requires submitted_price, for non-standard lot sizes - LIT (Limit If Touched): requires submitted_price and trigger_price; activates when market price touches trigger_price - MIT (Market If Touched): requires trigger_price only; executes at market when trigger_price is touched - TSLPAMT (Trailing Limit If Touched by Amount): requires trailing_amount and limit_offset; trailing stop by fixed amount - TSLPPCT (Trailing Limit If Touched by Percent): requires trailing_percent (0-1) and limit_offset; trailing stop by percentage - SLO (Special Limit Order, HK only): requires submitted_price; cannot be replaced after submission
expire_dateNoExpiry date (yyyy-mm-dd). Required when time_in_force is GTD
outside_rthNoOutside regular trading hours: "RTH_ONLY" (regular trading hours only), "ANY_TIME" (any time including pre/post market), "OVERNIGHT" (overnight session, US only), "OPTION_PRE_MARKET" (US option pre-market session)
limit_offsetNoLimit offset from the trailing stop price. Required for: TSLPAMT, TSLPPCT
time_in_forceYesOrder validity: "Day" (Day Order, expires end of session), "GTC" (Good Til Canceled), "GTD" (Good Til Date, requires expire_date)
trigger_priceNoTrigger (activation) price. Required for: LIT, MIT, TSLPAMT, TSLPPCT
submitted_priceNoLimit price. Required for: LO, ELO, ALO, ODD, LIT, SLO
trailing_amountNoTrailing amount (absolute price distance). Required for TSLPAMT
trailing_percentNoTrailing percent as decimal (e.g. 0.05 = 5%). Required for TSLPPCT
client_request_idNoIdempotency key, unique per intended order (e.g. a UUID). When two requests carry the same value the exchange places one order and returns the original `order_id` for the second, so a retry after a timeout or a dropped connection cannot double-fill. Set it whenever you may retry; generate a NEW value for a genuinely new order.
submitted_quantityYesOrder quantity (number of shares)
attached_order_typeNoAttach a take-profit / stop-loss leg to this order: "PROFIT_TAKER" (take-profit only), "STOP_LOSS" (stop-loss only) or "BRACKET" (both). Omit for a plain order; every other attached_* field is ignored without it.
attached_expire_timeNoExpiry of the attached leg as a unix timestamp in seconds (e.g. "1767139200"). Required when attached_time_in_force is GTD.
attached_outside_rthNoOutside-RTH setting of the triggered leg: "RTH_ONLY" / "ANY_TIME" / "OVERNIGHT" / "OPTION_PRE_MARKET".
attached_time_in_forceNoTime-in-force of the attached leg: "Day" / "GTC" / "GTD". Defaults to the parent order's setting when omitted.
attached_stop_loss_priceNoStop-loss trigger price. Required for STOP_LOSS and BRACKET.
attached_profit_taker_priceNoTake-profit trigger price. Required for PROFIT_TAKER and BRACKET.
attached_activate_order_typeNoOrder type the attached leg is submitted as once triggered, e.g. "LO" (then set the matching attached_*_submit_price) or "MO".
attached_stop_loss_submit_priceNoLimit price of the stop-loss leg, for an LO attached_activate_order_type.
attached_profit_taker_submit_priceNoLimit price of the take-profit leg, for an LO attached_activate_order_type.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the critical behavioral trait: without execute, nothing is sent; the dry run returns a confirmation code that is single-use, expires in 10 minutes, and applies only to the exact order. It also warns against quoting the code on the agent's own initiative or in the same turn. This goes well beyond the annotations (destructiveHint=true, readOnlyHint=false) and directly supports safe usage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action and the dry-run safety rule. The critical confirmation protocol is stated up front, and the execute parameter description later reinforces it. There is no wasted wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 25-parameter mutation tool, the description captures the essential safety workflow and leaves field-level detail to the fully-covered schema. It doesn't describe return values, but no output schema exists and the preview/confirmation_code behavior is implied. It could mention idempotency or order-type variations, but those are documented in the schema.

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 description coverage is 100%, and the schema itself documents every parameter in detail, including the execute protocol and conditional requirements. The main description does not add parameter-level semantics 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: 'Submit a buy/sell order,' and immediately clarifies the dry-run/confirmation behavior. It doesn't explicitly distinguish from sibling tools like submit_multileg_order or replace_order, but the resource and action are clear enough for an agent to know 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit two-step protocol: call without execute, show the preview to the user, then re-call with the confirmation code after explicit confirmation. It doesn't discuss when to use this tool versus alternatives like submit_multileg_order or replace_order, but it provides clear context for the safe invocation workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

today_executionsToday's ExecutionsA
Read-onlyIdempotent
Inspect

Get today's trade executions (fills). Returns executions[]{order_id, trade_id, symbol, side, quantity, price, trade_done_at}. Pass symbol or order_id to filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolNoFilter by symbol, e.g. "700.HK".
order_idNoFilter by a specific order_id.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the return format and filtering behavior, which is useful but not rich behavioral context (e.g., pagination, timezone handling, auth requirements). Since annotations carry the safety burden, the description's additions are moderate but not extensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose and return structure, with the filtering hint appended. Every word earns its place, and there is no redundancy or fluff. Ideal length for a simple read tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with no output schema, the description provides the return format, filtering options, and temporal scope. Annotations cover safety. The only minor gap is the lack of mention of result limits or default behavior (e.g., does it return all executions or a capped list?), but for a 'today' execution list this is likely minor and does not block correct invocation.

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 description coverage is 100%, so the input schema already documents the parameters (symbol and order_id as filters). The description reiterates 'Pass symbol or order_id to filter' but adds no additional meaning beyond what the schema provides. Baseline of 3 is appropriate when the schema does the heavy lifting.

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?

The description uses a specific verb ('Get'), a clear resource ('today's trade executions (fills)'), and enumerates the returned fields (executions[]{order_id, trade_id, symbol, side, quantity, price, trade_done_at}). It also mentions filtering options, which distinguishes it from sibling tools like history_executions (past) and today_orders (orders vs executions). This is a precise, unambiguous purpose statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the temporal scope ('today's') but does not explicitly state when to use this tool instead of alternatives such as history_executions or today_orders. It provides context but no explicit exclusions or named alternatives, leaving the agent to infer usage from the name and scope. This is adequate but lacks clear routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

today_ordersToday's OrdersA
Read-onlyIdempotent
Inspect

Get orders placed today. Returns orders[]{order_id, symbol, side, order_type, status, quantity, price, submitted_at, executed_quantity, executed_price, attached_orders[]}, where attached_orders[] holds the order's take-profit/stop-loss legs. Pass symbol to filter by security, or order_id for one order. To fetch an attached leg by its own ID, pass that ID as order_id together with is_attached=true — the leg itself comes back as the order entry. is_attached does nothing without order_id, and neither has any effect for US accounts, which are served by the US order endpoint. US accounts only: us_action (Buy/Sell), us_page, us_limit filter/paginate via a separate US order endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolNoFilter by symbol, e.g. "700.HK". Omit to return all today's orders.
us_pageNoUS accounts only: page number (default 1). Ignored for AP accounts.
order_idNoFilter by order ID: a parent order ID, or (with is_attached=true) the ID of an attached take-profit / stop-loss leg. Has no effect for US accounts, which are served by the US order endpoint.
us_limitNoUS accounts only: page size (default 20). Ignored for AP accounts.
us_actionNoUS accounts only: filter by side, "Buy" or "Sell". Omit for all. Ignored for AP accounts (the region is inferred from the account — do not pass it).
is_attachedNoOnly meaningful together with order_id: it says that order_id is the ID of an attached take-profit / stop-loss leg, and the response then carries that leg itself as an order entry. On its own it does nothing, and it has no effect for US accounts either.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool read-only, idempotent, and non-destructive. The description goes further by specifying the response structure, attached-order behavior, and US-account distinctions, which are not present in the annotations. No contradiction exists.

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?

The description is front-loaded with purpose and return shape, and every sentence conveys a useful behavior. It is, however, a dense single paragraph that could benefit from bullet structure or slight trimming.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return fields and edge cases itself. It covers filtering, attached orders, and US-account caveats; minor ambiguity remains about the separate US endpoint, but the description is generally sufficient for correct invocation.

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%, but the description adds meaningful semantics: the 'is_attached does nothing without order_id' rule, the attached leg being returned as an order entry, and the US-only behavior of us_action/us_page/us_limit. This exceeds the schema 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?

The description opens with 'Get orders placed today,' a specific verb, resource, and time scope. The return shape and attached-order explanation further differentiate today's orders from history or execution tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear usage context is given: retrieve today's orders, optionally filter by symbol or order ID, and handle attached legs with is_attached. However, it does not explicitly name alternatives like history_orders or today_executions, so the when-not-to-use guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

topicTopic ListB
Read-onlyIdempotent
Inspect

Get discussion topics for a symbol. Returns items[]{id, title, author, created_at, like_count, comment_count, content_summary}.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds the response shape (items[] with specific fields), which is useful, but it does not disclose any additional behavioral traits like pagination, error handling, or empty-result behavior. Given the annotation coverage, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the purpose and includes the key return fields. There is no wasted wording, and it is easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one required parameter and no output schema, the description is mostly complete. It states the purpose and return fields, which is sufficient for basic usage. However, it omits potential nuances like pagination or limits, and it does not clarify how this tool relates to topic_detail or topic_replies, but these are minor gaps for this tool's simplicity.

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?

The input schema fully documents both parameters, including the canonical symbol format note. The description does not add any parameter-specific meaning beyond what the schema already provides. Since schema coverage is 100%, the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves discussion topics for a symbol and lists the returned fields. It is specific and unambiguous, but it does not explicitly differentiate from sibling tools like topic_search or topic_detail, so it earns a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or how it differs from related topic tools such as topic_search or topic_detail. An agent would have to infer usage from context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

topic_createCreate TopicAInspect

Create a new discussion topic. topic_type="post" (default) is plain text; "article" requires a non-empty title and accepts Markdown body.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
bodyYesTopic body. "post" type is plain text only; "article" type accepts Markdown.
titleYesTopic title. Required when topic_type is "article", optional for "post".
symbolsNoRelated security symbols, e.g. ["700.HK", "TSLA.US"] (max 10).
topic_typeNoTopic type: "post" (default, plain text) or "article" (Markdown, title required).

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate it's a non-read-only mutation (readOnlyHint=false, idempotentHint=false), so the description doesn't need to restate that. It does add useful behavioral context: it clarifies that 'article' requires a title and accepts Markdown, while 'post' is plain text. However, it doesn't describe side effects or response behavior, but with annotations covering the mutation profile, this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The primary action is front-loaded, and the essential type distinction is conveyed efficiently. Every word earns its place; there is no superfluous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create operation with 5 parameters (2 required) and no output schema, the description covers the core purpose and the critical type-specific requirements. It doesn't explain the symbols or _jq parameters, but those are fully described in the schema. The description is complete enough for an agent to understand what the tool does and when to use it, without needing additional context.

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 description coverage is 100%, so the schema already documents all parameters. The description adds a concise summary of the relationship between topic_type, title, and body, but this largely repeats what the schema states (e.g., title required for article, body format). It doesn't add significantly new semantics beyond the schema, so a baseline score of 3 is appropriate.

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?

The description clearly states the action ('Create a new discussion topic') and identifies the resource (a discussion topic). It further differentiates between two topic types, 'post' and 'article', which is essential for correct invocation and distinguishes this tool from topic_create_reply and other topic-related siblings. This is a specific, unambiguous purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear guidance on when to use each topic type: 'post' for plain text and 'article' for Markdown with a required title. It does not explicitly compare to sibling tools, but the verb 'create' and the distinction from 'topic_create_reply' are evident from the name. The context is sufficient for an agent to decide between topic types, though it doesn't state when not to use this tool in favor of alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

topic_create_replyCreate Topic ReplyAInspect

Create a reply to a discussion topic. Pass reply_to_id to nest under another reply; omit for a top-level reply.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
bodyYesReply body (plain text only).
topic_idYesTopic ID to reply to.
reply_to_idNoOptional parent reply ID for nested replies. Get IDs from `topic_replies`. Omit for a top-level reply.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the description doesn't need to restate mutation. It adds useful context about nesting behavior and plain-text body, but doesn't disclose things like whether the reply is immediately visible, whether editing/deleting is possible, or any rate limits. With annotations covering the safety profile, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler. The primary action and the critical branching instruction (reply_to_id vs omit) are front-loaded. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create-reply tool with full schema coverage and annotations indicating a non-read, non-idempotent write, the description covers the essential call pattern. It doesn't describe the response shape, but there is no output schema and the tool's purpose is straightforward. The only minor gap is not stating what happens on success (e.g., returned reply ID), but that is not critical for invoking it correctly.

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 description coverage is 100%, so the schema already documents all four parameters. The description adds the key semantic distinction for reply_to_id (nest vs top-level) and clarifies body is plain text, but it doesn't add meaning beyond what the schema already provides. Baseline 3 is correct.

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?

The description states a specific verb ('Create') and resource ('a reply to a discussion topic'), and immediately distinguishes the two call modes: nested (reply_to_id) vs top-level (omit). This clearly differentiates it from siblings like topic_create and topic_replies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when to pass reply_to_id versus omit it, and the schema's reply_to_id description points to topic_replies for obtaining parent IDs. It doesn't explicitly say when to prefer this over topic_create, but the context is clear enough for a discussion-reply tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

topic_detailTopic DetailA
Read-onlyIdempotent
Inspect

Get discussion topic detail by topic_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
topic_idYesTopic ID

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral traits beyond what the annotations already declare. It simply restates the tool's purpose and repeats the topic_id parameter already present in the schema, with no mention of return format, possible errors, or any additional side-effect scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence that communicates the essential action and input. It is front-loaded and free of any filler, perfectly appropriate for a simple read-only detail tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the strong annotations, fully described parameters, and simple read-only nature, the description is adequate for selecting and invoking the tool. It could mention what fields the detail returns, but that is not critical for a correct call.

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 description coverage is 100%, and both parameters are documented in the schema. The description does not enrich the meaning of topic_id or _jq beyond the schema, so the baseline of 3 applies.

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?

The description uses a specific verb ('Get'), names the resource ('discussion topic detail'), and specifies the key access pattern ('by topic_id'). This clearly distinguishes it from sibling tools like topic_search, topic_replies, and topic_create.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its usage: call this when you have a topic_id and want the full detail of a single discussion topic. However, it provides no explicit guidance on when to prefer this over siblings such as topic_search or topic_replies, nor does it mention any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

topic_repliesTopic RepliesA
Read-onlyIdempotent
Inspect

Get replies to a discussion topic, paginated (page default 1, size default 20, range 1-50)

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
pageNoPage number, 1-based (default: 1).
sizeNoRecords per page, 1-50 (default: 20).
topic_idYesTopic ID.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description need not restate. It adds concrete pagination behavior (defaults and limits), which is useful beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with purpose and pagination details. No fluff; every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description doesn't explain return structure, but annotations cover safety and schema covers parameters. It omits potential edge cases (e.g., empty replies), but for a simple read tool this is sufficient.

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 covers 100% of parameters with descriptions (e.g., page default, size range). The description restates these but adds no new 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb ('get') and resource ('replies to a discussion topic'), with pagination details. It distinguishes from siblings like 'topic_create_reply' (write) and 'topic'/'topic_detail' (topic itself), though it doesn't explicitly name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage when needing replies for a topic, and pagination details hint at when to adjust parameters. No explicit 'use instead of X' guidance, but sibling tools like 'topic_create_reply' suggest a clear separation (read vs. write).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

top_moversTop MoversA
Read-onlyIdempotent
Inspect

Get stocks whose price fluctuation exceeds the 20-trading-day standard deviation, with correlated news reasons. markets: comma-separated HK/US/CN/SG (omit=all). sort: 0=time 1=change-magnitude 2=popularity/heat (default).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
dateNoDate to query in "YYYY-MM-DD" format. Omit for today's movers.
sortNoSort order (default: "2"): "0" = by time (most recent first) "1" = by price change magnitude (largest move first) "2" = by popularity (most-viewed first)
limitNoNumber of events to return per page (default: 20, max: 100)
marketsNoMarket filter: comma-separated list of markets to include. Supported values: "HK", "US", "CN", "SG". Omit to return all markets. Example: "HK,US"
next_paramsNoPagination cursor from previous response next_params field. Pass the entire next_params object returned by the previous call to get the next page. Omit for the first page.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds the selection logic (20-day std dev) and mentions correlated news reasons, but does not describe pagination or response structure. This adds some value beyond annotations but not rich behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence, front-loading the core purpose and appending parameter shortcuts. It wastes no words and is easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with full parameter schema coverage, the description adequately conveys the core purpose and selection criteria. It omits details like pagination usage and output format, but these are partially covered by the schema and the tool's simplicity. Given no output schema, a bit more on return values would be ideal, but it is not critical.

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 100%, so the baseline is 3. The description repeats parameter hints for markets and sort, but adds no new meaning beyond what the schema provides. It does not mention date, limit, or next_params, which are documented in 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?

The description clearly states the tool's purpose: retrieving stocks whose price fluctuation exceeds a 20-trading-day standard deviation, with correlated news reasons. This is a specific verb-resource pair and defines the selection criteria, distinguishing it from general screeners like screener_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives, nor does it mention any exclusions. The purpose is clear, but the context for when to choose this over sibling tools like screener_search or candlesticks is only implied, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tradesRecent TradesA
Read-onlyIdempotent
Inspect

Get recent trades (max 1000). Returns trades[]{price, volume, timestamp, trade_type, direction} for the symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
countYesMaximum number of results (max 1000)
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds useful behavioral context: the 1000-result cap and the returned field list. It does not disclose pagination or ordering behavior, but for a simple read tool the combined disclosure is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the action and limit, then lists the return fields. Every word earns its place; there is no fluff or repeated schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with annotations covering safety and schema covering parameters, the description is nearly complete. It does not mention ordering, pagination, or how trade_type/direction enums are encoded, but given the tool's simplicity and the rich sibling context, those are minor gaps.

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 description coverage is 100%, so the schema documents all three parameters fully. The description adds the return-field list and the 1000 cap, which clarifies what 'count' actually controls. It does not deeply explain the trade_type/direction values, but the schema-plus-description pairing is strong.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get recent trades (max 1000)' with a clear return shape. However, it does little to distinguish this tool from the sibling tool 'short_trades', which could plausibly also return trade-like data for a symbol, so some ambiguity remains.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: returning recent trades for a given symbol with a count limit. It does not explicitly state when to choose this over similar siblings like 'short_trades', 'today_executions', or 'history_executions', so the guidance is mostly implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trade_statsTrade StatisticsA
Read-onlyIdempotent
Inspect

Get trade statistics (buy/sell/neutral volume distribution). Returns items[]{price_range, buy_volume, sell_volume, neutral_volume} for price-volume profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the returned data structure and the price-volume profile framing, but does not disclose behavioral details like aggregation period, pagination, or empty-result behavior beyond what annotations imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The resource and core distribution are front-loaded, and the return structure is stated efficiently. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly takes responsibility for explaining the return value, and it does so with concrete field names. The schema fully documents the only required parameter. Minor context like the time period or aggregation basis could be added, but nothing essential is missing for a basic call.

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 description coverage is 100%, and the schema already documents 'symbol' (with canonical-form guidance) and '_jq' (with filter syntax and behavior). The description adds no parameter-level meaning beyond what the schema provides, matching the baseline of 3.

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?

The description states a specific verb ('Get'), a specific resource ('trade statistics'), and the precise scope ('buy/sell/neutral volume distribution'). The return shape items[]{price_range, buy_volume, sell_volume, neutral_volume} makes it clearly distinct from siblings like trades, capital_distribution, or quote.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: an agent would use this when it needs buy/sell/neutral volume distribution for a symbol. However, the description gives no explicit guidance on when not to use it or which sibling tool is the alternative, so the context is implicit rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trading_daysTrading DaysB
Read-onlyIdempotent
Inspect

Get trading days for a market between dates. market: HK/US/CN/SG.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
endYesEnd date (yyyy-mm-dd)
startYesStart date (yyyy-mm-dd)
marketYesMarket code: HK, US, CN, SG

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds minimal behavioral context beyond the basic operation; it doesn't mention return format, pagination, or edge cases. With annotations covering safety, 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose and lists valid markets. It is concise without being under-specified, though it could have included a bit more context. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a simple schema, no output schema, and annotations cover safety. However, the description does not clarify the expected return format (e.g., list of date strings), whether weekends/holidays are excluded, or any date-range constraints. While not severely lacking, it leaves some ambiguity for an agent deciding whether to call it.

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 description coverage is 100%, so each parameter (market, start, end, _jq) is documented in the schema. The description repeats the market list (HK/US/CN/SG) but adds no additional meaning beyond the schema, such as date inclusivity or formatting details. Baseline 3 is correct since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: get trading days for a market between dates. It specifies the resource (trading days) and the scope (market and date range), and even lists valid markets. It is not a tautology and is distinguishable from siblings like trading_session, though it doesn't explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. The description implies usage (when you need trading days) but provides no context about prerequisites, exclusions, or better-suited sibling tools. Given the large sibling list, explicit routing would help.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trading_sessionTrading SessionsA
Read-onlyIdempotent
Inspect

Get trading session schedule for all markets. Returns market_sessions[]{market, trade_sessions[]{beg_time, end_time, trade_session_type}}.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds the response structure (market_sessions and trade_sessions with fields), which is useful and goes beyond the annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, focused sentence that states the purpose and the return format without wasted words. The key information is front-loaded, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly carries the return format burden. It provides enough detail for an agent to understand what the tool returns. Minor gaps like handling of empty sessions or market availability are not critical for a read-only, idempotent tool.

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?

The only parameter is _jq, which is fully described in the schema (100% coverage). The description does not need to repeat it, and the baseline of 3 is appropriate because the schema handles parameter semantics adequately.

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?

The description clearly states the tool's action ('Get trading session schedule'), the resource ('all markets'), and the return shape. It is distinct from siblings like market_status (likely real-time status) and trading_days (trading calendar) by explicitly focusing on session schedules.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives such as market_status or trading_days. The scope 'all markets' is mentioned, but there is no discussion of use cases, exclusions, or why this tool is preferred over similar siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_watchlist_groupUpdate Watchlist GroupA
DestructiveIdempotent
Inspect

Update a watchlist group by id. Can rename (name param) or modify securities (securities + mode: add/remove/replace).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesWatchlist group id
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
modeNoUpdate mode for securities: "add", "remove", or "replace" (default: "replace")
nameNoNew group name (optional)
securitiesNoSecurities list (optional)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=true; the description builds on this by explicitly naming the destructive operations (remove/replace) and the default replace mode, which implies replacing the securities list. This adds meaningful behavioral detail beyond the flags and does not contradict any annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with a front-loaded target and a compact enumeration of operations. There is no redundant wording, and every clause contributes to understanding what the tool does.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter update tool with full schema coverage and rich annotations, the description is nearly complete. The main gap is that it does not describe return values or post-conditions, and there is no output schema, but the mutation semantics and parameters are clear enough for correct invocation.

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?

All five parameters are documented in the schema, so the baseline is 3. The description adds value by linking 'name' to the rename operation and 'securities + mode' to add/remove/replace, clarifying the intended parameter combinations and that these are independent update paths.

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?

The description opens with a specific verb and resource, 'Update a watchlist group by id', and then enumerates the two update operations: renaming and modifying securities. This distinguishes it from sibling tools like create_watchlist_group and delete_watchlist_group without needing to open their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: use this tool when renaming a group or changing its securities via add/remove/replace, and the id is required. It does not explicitly name alternatives or provide when-not-to-use guidance, but the purpose is unambiguous enough that an agent can decide correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

valuationValuationA
Read-onlyIdempotent
Inspect

Get valuation overview with peer comparison. US accounts querying a .US symbol get a US-specific variant (ai_summary plus a metrics.pe object with different sub-fields). The region is detected from the account automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only/idempotent. The description adds value by disclosing the region-specific response variant (ai_summary, metrics.pe) and automatic region detection, which are not present in the schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and then the exception. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only overview with no output schema, it explains the region variant but leaves the return format and the meaning of 'peer comparison' unspecified. Adequate, but an agent may need to infer output contents.

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 has 100% coverage for both parameters (symbol and _jq), so it already carries parameter meaning. The description adds context about region-dependent output but does not add syntax or format details beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it retrieves a valuation overview with peer comparison, and notes a US-specific variant. However, it does not distinguish from sibling tools like valuation_comparison or valuation_history, so an agent could confuse it with those.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to choose valuation over siblings such as valuation_comparison or valuation_history. The description only describes behavior, not selection criteria or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

valuation_comparisonStock ComparisonB
Read-onlyIdempotent
Inspect

Stock valuation comparison. Mode A (single): pass only symbol — server returns stock + auto-selected industry peers.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol to compare, e.g. "AAPL.US"
currencyYesCurrency: "USD" | "HKD" | "CNY"
comparison_symbolsNoComparison symbols, comma-separated, max 4, e.g. "MSFT.US,GOOGL.US". Note: pending backend support — currently server auto-selects industry peers.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered and the burden on the description is lower. The description adds useful behavioral context: auto-selection of industry peers and the note that comparison_symbols is 'pending backend support.' However, it doesn't disclose what happens when comparison_symbols is passed anyway, and 'Mode A' implies undocumented modes without elaboration.

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?

The description is two short sentences with no filler, and the core purpose is front-loaded before the Mode A detail. Minor deduction for the cryptic 'Mode A' label, which could be clearer, but overall it is efficient and well-sized for a simple read-only tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter read-only tool with rich annotations and full schema coverage, the description is mostly adequate. Gaps remain: the mode system is only partially documented, behavior when both symbol and comparison_symbols are supplied is ambiguous, and since there is no output schema, the agent would want a stronger hint of the response shape beyond 'stock + auto-selected industry peers.'

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 description coverage is 100%, so every parameter (symbol, currency, comparison_symbols, _jq) already has inline documentation with examples and value constraints. The tool description adds little to parameter semantics beyond referencing symbol in Mode A; the baseline 3 applies because the schema carries the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource ('Stock valuation comparison') and clarifies the return, 'server returns stock + auto-selected industry peers,' which goes beyond the tautological title. The 'Mode A (single)' framing is somewhat cryptic since no other modes are described, but the core purpose is unambiguous and distinguishable from plain 'valuation' siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an invocation instruction for Mode A ('pass only symbol') and notes that comparison_symbols is pending backend support, which is useful operational context. However, with over 100 siblings including closely related tools like valuation, valuation_rank, industry_valuation, and industry_peers, there is no guidance on when to choose this tool over those alternatives, nor any when-not-to-use exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

valuation_historyValuation HistoryC
Read-onlyIdempotent
Inspect

Get detailed valuation history time series.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolYesSecurity symbol, e.g. "700.HK". Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. However, the description adds no additional behavioral context—such as output format, pagination, or data scope—which would be valuable given the absence of an output schema. It merely restates the purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It efficiently states the core function without unnecessary words, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description should clarify what data is returned and any relevant limitations. 'Detailed valuation history time series' is vague—it doesn't specify which valuation metrics are included, the time range, or whether data is complete. Given the large sibling list and the tool's specific purpose, this level of detail is insufficient for confident selection and invocation.

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 description coverage is 100% (both 'symbol' and '_jq' are documented in the input schema). The description adds no extra parameter-level meaning beyond what the schema already provides, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Get') and resource ('detailed valuation history time series'), which is more informative than a mere tautology. It clearly conveys the tool's function and distinguishes it from sibling tools like 'valuation' or 'valuation_comparison' by emphasizing the historical time-series aspect, though it doesn't explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus the many sibling tools (e.g., valuation, valuation_comparison, valuation_rank). It neither mentions specific use cases nor excludes alternatives, leaving the agent to infer applicability from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

valuation_rankValuation RankA
Read-onlyIdempotent
Inspect

Get daily valuation rank (PE/PB/PS/dividend yield industry percentile) for a security over a date range. start/end in yyyymmdd format.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
endNoEnd date in yyyymmdd format (default: today)
startNoStart date in yyyymmdd format (default: 30 days ago)
symbolYesSecurity symbol, e.g. "AAPL.US"

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile needs no further disclosure. The description adds that results are daily and percentile-based, but it does not describe return shape, pagination, or data-availability limits; with annotations carrying the safety burden this is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence states what the tool does and the required date format without filler. Parenthetical metrics are compact and the description earns its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only range query with strong annotations and full parameter documentation, the description covers purpose, metric semantics, and date format. There is no output schema, but 'daily valuation rank... percentile' conveys the expected return sufficiently; missing details like output container shape are minor.

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 description coverage is 100%, and the schema already documents symbol, start/end defaults, yyyymmdd format, and _jq. The description only restates 'start/end in yyyymmdd format' and does not add meaning beyond the schema, so baseline 3 applies.

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?

The description opens with a specific verb ('Get') and identifies a concrete resource: daily valuation rank for a security, scoped to PE/PB/PS/dividend yield industry percentile over a date range. This is enough to distinguish it from siblings like valuation, valuation_history, or industry_valuation 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'daily valuation rank... over a date range' clearly frames when the tool is appropriate: historical valuation-percentile queries for a single symbol. It does not explicitly name alternatives or exclusion criteria (e.g., when to prefer valuation_history or industry_valuation), so guidance is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

warrant_issuersWarrant IssuersA
Read-onlyIdempotent
Inspect

Get HK warrant issuer information. Returns issuers[]{id, name_en, name_cn}. Use id in warrant_list issuer filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful detail beyond annotations by specifying the exact returned fields (id, name_en, name_cn) and the downstream role of the id, which helps an agent understand what the tool actually returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences cover the tool's purpose, output structure, and downstream usage with no wasted words. The main action and result are front-loaded.

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?

This is a simple, read-only, parameterless tool with annotations carrying the safety profile and the description carrying the output shape. Together with the warrant_list filter guidance, an agent has everything needed to call it correctly and interpret its result.

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?

The only parameter is the generic _jq filter, which is already fully described in the input schema (100% coverage). The description does not need to add input-parameter semantics, though it does clarify how a returned field (id) should be used elsewhere.

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?

The description uses a specific verb and resource: 'Get HK warrant issuer information,' and names the exact output shape (issuers[]{id, name_en, name_cn}). It also differentiates itself from related warrant tools by explicitly connecting its id output to warrant_list's issuer filter.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear intended use: retrieve issuer ids to be used in warrant_list's issuer filter. It does not explicitly state when to avoid this tool versus alternatives, but it provides enough contextual routing for the primary workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

warrant_listWarrant ListA
Read-onlyIdempotent
Inspect

Get filtered warrant list for an underlying symbol. Returns warrants[]{symbol, name, last_done, change_rate, implied_volatility, expiry_date, strike_price, leverage_ratio, outstanding_ratio}.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
issuerNoFilter by issuer ID (optional), use issuer_id from warrant_issuers tool
statusNoFilter by status (optional): "Suspend" (suspended), "PrepareList" (pending listing), "Normal" (normal trading)
symbolYesUnderlying symbol, e.g. "700.HK"
sort_byYesSort field: LastDone, ChangeRate, ChangeValue, Volume, Turnover, ExpiryDate, StrikePrice, UpperStrikePrice, LowerStrikePrice, OutstandingQuantity, OutstandingRatio, Premium, ItmOtm, ImpliedVolatility, Delta
price_typeNoFilter by in/out of bounds (optional): "In" (in bounds), "Out" (out of bounds). Only for Inline warrants.
sort_orderYesSort order: Ascending or Descending
expiry_dateNoFilter by expiry date range (optional): "LT_3" (<3 months), "Between_3_6" (3-6 months), "Between_6_12" (6-12 months), "GT_12" (>12 months)
warrant_typeNoFilter by warrant type (optional): "Call", "Put", "Bull", "Bear", "Inline"

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the return structure (list of warrant fields) but does not disclose any extra behavioral traits such as pagination, default limits, or response size. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the core action, the target, and the returned fields. Every word earns its place; there is no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with a 100% schema-covered parameter set, the description is sufficiently complete. It names the return fields, which compensates for the absence of an output schema, and the annotations cover the safety profile. Minor omissions like default sort behavior or result limits are not critical given the schema detail.

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 description coverage is 100%: every parameter, including optional filters, has a description with allowed values/format. The description itself contributes no parameter details beyond what the schema provides, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get filtered warrant list for an underlying symbol.' It clearly indicates the tool returns an array of warrant records with named fields, which distinguishes it from quote or issuer tools by function. However, it does not explicitly differentiate from siblings like warrant_quote or warrant_issuers, so it misses the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: when you need a filtered list of warrants for a symbol, use this tool. It does not provide any explicit when-not-to-use guidance or mention alternative tools for single-warrant quotes or issuer lookups. The implied use case is clear, but there are no exclusions or alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

warrant_quoteWarrant QuoteA
Read-onlyIdempotent
Inspect

Get warrant quotes. Returns last_done, prev_close, open, high, low, volume, turnover, implied_volatility, delta, leverage_ratio, effective_leverage per symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
symbolsYesSecurity symbols, e.g. ["700.HK", "AAPL.US"]. Use the canonical form — a padded code like "00700.HK" returns an empty record, not an error.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering safety. The description adds the concrete set of returned fields (last_done, prev_close, etc.), which is useful behavioral context. It does not mention rate limits or error cases, but with annotations present, the bar is lower and the field list adds value 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that immediately states the action and lists all returned fields. No filler or redundant phrasing. It is front-loaded with the core purpose and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple quote tool with only one required parameter, the description plus full schema coverage is nearly complete. It lists the output fields, which compensates for the lack of an output schema. Minor gaps include not specifying the exact response structure (array vs. object) or edge cases like empty symbols, but these are not critical for correct invocation.

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 description coverage is 100%—both 'symbols' and '_jq' have detailed descriptions including canonical format and jq syntax examples. The description adds 'per symbol' but nothing else that meaningfully extends the schema. Thus the baseline of 3 is appropriate.

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?

The description states a specific verb ('Get') and resource ('warrant quotes'), and explicitly lists the exact data fields returned. This clearly distinguishes it from sibling tools like 'quote' (general quotes) and 'option_quote' (options), making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for warrant-specific data, but does not explicitly state when to prefer this over alternatives or when not to use it. It lacks direct exclusions or alternative routing, so an agent must infer from the name and context rather than explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

watchlistWatchlistA
Read-onlyIdempotent
Inspect

Get all watchlist groups and their securities. Returns groups[]{id, name, securities[]{symbol, market, name, watched_price, watched_at}}.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds the return structure (groups[]{id, name, securities[]{...}}), which is genuinely useful since there is no output schema, but it doesn't disclose anything else such as pagination, limits, or open-world caching implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler. The purpose verb+resource is front-loaded, and the return-shape sentence is dense with useful structural information. Every word earns its place.

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 tool with zero required parameters, no tool-specific params, and annotations carrying the full safety profile, the description is complete. The return shape is spelled out explicitly, compensating for the absent output schema, and nothing an agent needs to invoke it correctly is missing.

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 description coverage is 100% — the only parameter, _jq, is fully documented in the input schema itself, so the description need not add param-level detail. Per the baseline rule for high schema coverage, a 3 is appropriate; the description contributes no additional parameter semantics beyond what the schema already states.

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?

The description states a specific verb ('Get') and resource ('all watchlist groups and their securities'), and the second sentence pins down the exact return shape. Among siblings, it is unambiguously the read counterpart to create_watchlist_group, update_watchlist_group, and delete_watchlist_group, and distinct from sharelist_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied rather than explicit: sibling names (create/update/delete_watchlist_group) make it obvious this is the listing tool for watchlist groups, but the description never states when to prefer it over alternatives or when not to use it. There is no explicit routing, though for a simple list tool the implication is fairly strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

withdrawalsWithdrawalsA
Read-onlyIdempotent
Inspect

List withdrawal history for the current account. Returns items[]{id, amount, currency, status, created_at, bank_name, account_number (masked)}.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNoOptional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response.
pageNoPage number (default: 1)
sizeNoPage size (default: 20)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context beyond annotations by specifying the response shape and noting that account_number is masked, which is behaviorally relevant.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no redundant filler. The core action and return shape are front-loaded, and every word adds value.

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 simple read-only paginated list tool, the description is complete: it states the account scope, the output fields, and the masked nature of sensitive data. Pagination defaults are already in the schema, and annotations cover safety. No missing information would prevent correct invocation.

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 100%, so page, size, and _jq are fully documented in the input schema. The description does not add parameter-level detail, but the schema already carries that burden, so a baseline of 3 is appropriate.

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?

The description uses a specific verb ('List') and clearly identifies the resource ('withdrawal history for the current account'). It also includes the exact return fields, which distinguishes it from sibling tools like deposits or account_balance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: this is for listing withdrawal history for the current account. It does not explicitly name alternatives or when-not-to-use, but the scope is specific enough for an agent to select it appropriately among the many sibling tools.

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.

  1. 165 tool updatesv0.12.0
    • Changedaccount_balance1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedah_premium3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / count / format
        Removed value: -"uint32"
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedah_premium_intraday2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedalert_add2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedalert_delete1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedalert_disable1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedalert_enable1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedalert_list1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedanomaly2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / count / format
        Removed value: -"uint32"
    • Changedbank_cards1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedbroker_holding2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedbroker_holding_daily2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedbroker_holding_detail2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedbrokers2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedbusiness_segments1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedbusiness_segments_history1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedcalc_indexes2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbols / description
        Previous value: -"Security symbols, e.g. [\"700.HK\", \"AAPL.US\"]"New value: +"Security symbols, e.g. [\"700.HK\", \"AAPL.US\"]. Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedcancel_order1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedcandlesticks3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / count / format
        Removed value: -"uint"
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedcapital_distribution2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedcapital_flow2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedcash_flow1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedcompany2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedconsensus2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedconstituent1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedcorp_action2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedcreate_watchlist_group1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changeddca_check1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changeddca_create2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / day_of_month / format
        Removed value: -"uint32"
    • Changeddca_history3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / limit / format
        Removed value: -"uint32"
      • removedInput schema / properties / page / format
        Removed value: -"uint32"
    • Changeddca_list3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / limit / format
        Removed value: -"uint32"
      • removedInput schema / properties / page / format
        Removed value: -"uint32"
    • Changeddca_pause1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changeddca_resume1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changeddca_stats1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changeddca_stop1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changeddca_update2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / day_of_month / format
        Removed value: -"uint32"
    • Changeddelete_watchlist_group2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / id / format
        Removed value: -"int64"
    • Changeddeposits3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / page / format
        Removed value: -"uint32"
      • removedInput schema / properties / size / format
        Removed value: -"uint32"
    • Changeddepth2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changeddividend2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changeddividend_detail2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedestimate_max_purchase_quantity2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedetf_docs2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / limit / format
        Removed value: -"uint32"
    • Changedexchange_rate1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedexecutive2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedfilings2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedfinance_calendar1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedfinancial_report1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedfinancial_report_key_metrics1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedfinancial_report_latest2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedfinancial_report_snapshot2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / fiscal_year / format
        Removed value: -"uint32"
    • Changedfinancial_statement1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedforecast_eps2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedfund_holder2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedfund_positions1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedgrid_cancel1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedgrid_detail2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / limit / format
        Removed value: -"int32"
    • Changedgrid_list3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / limit / format
        Removed value: -"int32"
      • removedInput schema / properties / page / format
        Removed value: -"int32"
    • Changedgrid_list_by_ids1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedgrid_replace9 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / expire_time / format
        Removed value: -"int64"
      • removedInput schema / properties / lower_limit_event / format
        Removed value: -"int32"
      • removedInput schema / properties / rth / format
        Removed value: -"int32"
      • removedInput schema / properties / time_in_force / format
        Removed value: -"int32"
      • removedInput schema / properties / trigger_buy_depth / format
        Removed value: -"int32"
      • removedInput schema / properties / trigger_price_type / format
        Removed value: -"int32"
      • removedInput schema / properties / trigger_sell_depth / format
        Removed value: -"int32"
      • removedInput schema / properties / upper_limit_event / format
        Removed value: -"int32"
    • Changedgrid_restart1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedgrid_submit9 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / expire_time / format
        Removed value: -"int64"
      • removedInput schema / properties / lower_limit_event / format
        Removed value: -"int32"
      • removedInput schema / properties / rth / format
        Removed value: -"int32"
      • removedInput schema / properties / time_in_force / format
        Removed value: -"int32"
      • removedInput schema / properties / trigger_buy_depth / format
        Removed value: -"int32"
      • removedInput schema / properties / trigger_price_type / format
        Removed value: -"int32"
      • removedInput schema / properties / trigger_sell_depth / format
        Removed value: -"int32"
      • removedInput schema / properties / upper_limit_event / format
        Removed value: -"int32"
    • Changedgrid_suspend1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedgrid_symbol_info1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedgrid_trigger_history3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / limit / format
        Removed value: -"int32"
      • removedInput schema / properties / page / format
        Removed value: -"int32"
    • Changedhistory_candlesticks_by_date2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedhistory_candlesticks_by_offset3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / count / format
        Removed value: -"uint"
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedhistory_executions3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / us_limit / format
        Removed value: -"int32"
      • removedInput schema / properties / us_page / format
        Removed value: -"int32"
    • Changedhistory_market_temperature1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedhistory_orders3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / us_limit / format
        Removed value: -"int32"
      • removedInput schema / properties / us_page / format
        Removed value: -"int32"
    • Changedindustry_peers2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"BK counter_id from `industry_rank`, e.g. \"BK/US/IN00258\"."New value: +"Industry symbol from `industry_rank`, e.g. \"IN00258.US\". The BK\ncounter_id form (\"BK/US/IN00258\") is also accepted."
    • Changedindustry_rank1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedindustry_valuation2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedindustry_valuation_dist2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedinstitution_rating2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedinstitution_rating_detail2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedinstitution_rating_history2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedinstitution_rating_industry_rank3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / page / format
        Removed value: -"uint32"
      • removedInput schema / properties / size / format
        Removed value: -"uint32"
    • Changedinstitutional_views2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedintraday2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedinvest_relation2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedipo_calendar1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedipo_detail1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedipo_listed3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / page / format
        Removed value: -"uint32"
      • removedInput schema / properties / size / format
        Removed value: -"uint32"
    • Changedipo_order_detail1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedipo_orders3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / page / format
        Removed value: -"uint32"
      • removedInput schema / properties / size / format
        Removed value: -"uint32"
    • Changedipo_profit_loss3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / page / format
        Removed value: -"uint32"
      • removedInput schema / properties / size / format
        Removed value: -"uint32"
    • Changedipo_subscriptions1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedmacrodata3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / limit / format
        Removed value: -"int32"
      • removedInput schema / properties / offset / format
        Removed value: -"int32"
    • Changedmacrodata_indicators3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / limit / format
        Removed value: -"int32"
      • removedInput schema / properties / offset / format
        Removed value: -"int32"
    • Changedmargin_ratio2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedmarket_status1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedmarket_temperature1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changednews2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changednews_detail1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changednews_search2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / limit / format
        Removed value: -"uint32"
    • Changednow1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedoperating2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedoption_chain_expiry_date_list2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedoption_chain_info_by_date4 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / date / description
        Previous value: -"Date (yyyy-mm-dd)"New value: +"Expiry date (yyyy-mm-dd). Required — list the tradable ones with\n`option_chain_expiry_date_list`."
      • addedInput schema / properties / standard_only
        Added value: +{
        +  "description": "Return standard contracts only. Omitted or false returns everything,\nincluding the legacy contracts left over from a corporate action\n(`standard_attr: \"Old\"`), which are rarely what a caller wants.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Underlying security symbol, e.g. \"AAPL.US\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedoption_quote2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbols / description
        Previous value: -"Option contract symbols, e.g. [\"AAPL230317P160000.US\"]. These are NOT\nplain stock symbols — get valid ones from `option_chain_info_by_date`'s\nper-strike `call.symbol`/`put.symbol` fields (after listing expiry\ndates with `option_chain_expiry_date_list`)."New value: +"Option contract symbols, e.g. [\"AAPL230317P160000.US\"]. These are NOT\nplain stock symbols — get valid ones from the `symbol` field of each\n`option_chain_info_by_date` contract (after listing expiry dates with\n`option_chain_expiry_date_list`)."
    • Changedoption_volume1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedoption_volume_daily2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / count / format
        Removed value: -"uint"
    • Changedorder_detail1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedparticipants1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedprofit_analysis1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedprofit_analysis_detail2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedprofit_analysis_realized1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedquant_run1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedquote2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbols / description
        Previous value: -"Security symbols, e.g. [\"700.HK\", \"AAPL.US\"]"New value: +"Security symbols, e.g. [\"700.HK\", \"AAPL.US\"]. Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedrank_categories1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedrank_list2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / size / format
        Removed value: -"uint32"
    • Changedreplace_order2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / attached_outside_rth / description
        Previous value: -"New outside-RTH setting for the triggered leg: \"RTH_ONLY\" / \"ANY_TIME\"\n/ \"OVERNIGHT\"."New value: +"New outside-RTH setting for the triggered leg: \"RTH_ONLY\" / \"ANY_TIME\"\n/ \"OVERNIGHT\" / \"OPTION_PRE_MARKET\"."
    • Changedscreener_indicators1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedscreener_recommend_strategies1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedscreener_search3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / page / format
        Removed value: -"uint32"
      • removedInput schema / properties / size / format
        Removed value: -"uint32"
    • Changedscreener_strategy1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedscreener_user_strategies1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedsecurity_facts2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / limit / format
        Removed value: -"int32"
    • Changedsecurity_list3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / count / format
        Removed value: -"uint"
      • removedInput schema / properties / page / format
        Removed value: -"uint"
    • Changedshareholder2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedshareholder_detail2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / object_id / format
        Removed value: -"int64"
    • Changedshareholder_top1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedsharelist_add1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedsharelist_create1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedsharelist_delete1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedsharelist_detail1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedsharelist_list2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / count / format
        Removed value: -"uint32"
    • Changedsharelist_popular2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / count / format
        Removed value: -"uint32"
    • Changedsharelist_remove1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedsharelist_sort1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedshort_margin1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedshort_positions2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / count / format
        Removed value: -"uint"
    • Changedshort_trades1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedsignal_detail1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedsignals3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / limit / format
        Removed value: -"int32"
      • removedInput schema / properties / offset / format
        Removed value: -"int32"
    • Changedstatement_export1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedstatement_list2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / limit / format
        Removed value: -"int32"
    • Changedstatic_info2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbols / description
        Previous value: -"Security symbols, e.g. [\"700.HK\", \"AAPL.US\"]"New value: +"Security symbols, e.g. [\"700.HK\", \"AAPL.US\"]. Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedstock_positions1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Addedsubmit_multileg_order
    • Changedsubmit_order5 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / attached_outside_rth / description
        Previous value: -"Outside-RTH setting of the triggered leg: \"RTH_ONLY\" / \"ANY_TIME\" /\n\"OVERNIGHT\"."New value: +"Outside-RTH setting of the triggered leg: \"RTH_ONLY\" / \"ANY_TIME\" /\n\"OVERNIGHT\" / \"OPTION_PRE_MARKET\"."
      • addedInput schema / properties / client_request_id
        Added value: +{
        +  "description": "Idempotency key, unique per intended order (e.g. a UUID). When two\nrequests carry the same value the exchange places one order and returns\nthe original `order_id` for the second, so a retry after a timeout or a\ndropped connection cannot double-fill. Set it whenever you may retry;\ngenerate a NEW value for a genuinely new order.",
        +  "type": "string"
        +}
      • changedInput schema / properties / outside_rth / description
        Previous value: -"Outside regular trading hours: \"RTH_ONLY\" (regular trading hours only), \"ANY_TIME\" (any time including pre/post market), \"OVERNIGHT\" (overnight session, US only)"New value: +"Outside regular trading hours: \"RTH_ONLY\" (regular trading hours only), \"ANY_TIME\" (any time including pre/post market), \"OVERNIGHT\" (overnight session, US only), \"OPTION_PRE_MARKET\" (US option pre-market session)"
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedtoday_executions1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedtoday_orders3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / us_limit / format
        Removed value: -"int32"
      • removedInput schema / properties / us_page / format
        Removed value: -"int32"
    • Changedtop_movers2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / limit / format
        Removed value: -"uint32"
    • Changedtopic2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedtopic_create1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedtopic_create_reply1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedtopic_detail1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedtopic_replies3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / page / format
        Removed value: -"int32"
      • removedInput schema / properties / size / format
        Removed value: -"int32"
    • Changedtopic_search2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / limit / format
        Removed value: -"uint32"
    • Changedtrade_stats2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedtrades3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / count / format
        Removed value: -"uint"
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedtrading_days1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedtrading_session1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedupdate_watchlist_group2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / id / format
        Removed value: -"int64"
    • Changedvaluation2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedvaluation_comparison1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedvaluation_history2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbol / description
        Previous value: -"Security symbol, e.g. \"700.HK\""New value: +"Security symbol, e.g. \"700.HK\". Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedvaluation_rank1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedwarrant_issuers1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedwarrant_list2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / issuer / items / format
        Removed value: -"int32"
    • Changedwarrant_quote2 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • changedInput schema / properties / symbols / description
        Previous value: -"Security symbols, e.g. [\"700.HK\", \"AAPL.US\"]"New value: +"Security symbols, e.g. [\"700.HK\", \"AAPL.US\"]. Use the canonical form — a padded code like \"00700.HK\" returns an empty record, not an error."
    • Changedwatchlist1 field changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
    • Changedwithdrawals3 fields changed
      • addedInput schema / properties / _jq / description
        Added value: +"Optional jq filter (jaq syntax) applied to this tool's JSON response before it is returned; it never changes the upstream request. One output is returned as-is, several as a JSON array, none as []. Module imports and the `env`/`debug`/`stderr` builtins are unavailable. Example: .data | map({symbol}). Omit for the full response."
      • removedInput schema / properties / page / format
        Removed value: -"uint32"
      • removedInput schema / properties / size / format
        Removed value: -"uint32"
  2. 165 tool updatesv0.10.6
    • Changedaccount_balance1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedah_premium1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedah_premium_intraday1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedalert_add1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedalert_delete1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedalert_disable2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "alert_id": {
        -      "type": "string"
        -    },
        -    "enabled": {
        -      "type": "boolean"
        -    }
        -  },
        -  "required": [
        -    "alert_id",
        -    "enabled"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedalert_enable2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "alert_id": {
        -      "type": "string"
        -    },
        -    "enabled": {
        -      "type": "boolean"
        -    }
        -  },
        -  "required": [
        -    "alert_id",
        -    "enabled"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedalert_list2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "AlertIndicator": {
        -      "properties": {
        -        "condition": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "enabled": {
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "frequency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "indicator_id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "triggered_at": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "AlertSymbolGroup": {
        -      "properties": {
        -        "indicators": {
        -          "items": {
        -            "$ref": "#/$defs/AlertIndicator"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "lists": {
        -      "items": {
        -        "$ref": "#/$defs/AlertSymbolGroup"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedanomaly2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "AnomalyChange": {
        -      "properties": {
        -        "change_rate": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "volume": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "all_off": {
        -      "type": [
        -        "boolean",
        -        "null"
        -      ]
        -    },
        -    "changes": {
        -      "items": {
        -        "$ref": "#/$defs/AnomalyChange"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedbank_cards1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedbroker_holding2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "BrokerHoldingItem": {
        -      "properties": {
        -        "broker_name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "holding_change": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "holding_quantity": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "holding_ratio": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "items": {
        -      "items": {
        -        "$ref": "#/$defs/BrokerHoldingItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedbroker_holding_daily2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "BrokerHoldingDailyItem": {
        -      "properties": {
        -        "date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "holding_change": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "holding_quantity": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "holding_ratio": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "items": {
        -      "items": {
        -        "$ref": "#/$defs/BrokerHoldingDailyItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedbroker_holding_detail2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "BrokerHoldingDetailItem": {
        -      "properties": {
        -        "broker_id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "broker_name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "holding_change": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "holding_quantity": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "holding_ratio": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "items": {
        -      "items": {
        -        "$ref": "#/$defs/BrokerHoldingDetailItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedbrokers2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "BrokerLevel": {
        -      "properties": {
        -        "broker_ids": {
        -          "items": {
        -            "format": "int32",
        -            "type": "integer"
        -          },
        -          "type": "array"
        -        },
        -        "position": {
        -          "format": "int32",
        -          "type": "integer"
        -        }
        -      },
        -      "required": [
        -        "position",
        -        "broker_ids"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "ask_brokers": {
        -      "items": {
        -        "$ref": "#/$defs/BrokerLevel"
        -      },
        -      "type": "array"
        -    },
        -    "bid_brokers": {
        -      "items": {
        -        "$ref": "#/$defs/BrokerLevel"
        -      },
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "bid_brokers",
        -    "ask_brokers"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedbusiness_segments1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedbusiness_segments_history2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "BusinessSegmentsHistoryPeriod": {
        -      "properties": {
        -        "business": {
        -          "items": {
        -            "$ref": "#/$defs/SegmentBreakdown"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "regionals": {
        -          "items": {
        -            "$ref": "#/$defs/SegmentBreakdown"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "total": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "SegmentBreakdown": {
        -      "properties": {
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "percent": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "value": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "historical": {
        -      "items": {
        -        "$ref": "#/$defs/BusinessSegmentsHistoryPeriod"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedcalc_indexes1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedcancel_order2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / is_attached
        Added value: +{
        +  "description": "Set to true to cancel an attached take-profit / stop-loss leg by its own\norder_id, leaving the parent order in place. Omit (or false) to cancel a\nparent order, which cancels its attached legs with it.",
        +  "type": "boolean"
        +}
    • Changedcandlesticks1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedcapital_distribution2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "CapitalDistribution": {
        -      "properties": {
        -        "large": {
        -          "type": "string"
        -        },
        -        "medium": {
        -          "type": "string"
        -        },
        -        "small": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "large",
        -        "medium",
        -        "small"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "capital_in": {
        -      "$ref": "#/$defs/CapitalDistribution"
        -    },
        -    "capital_out": {
        -      "$ref": "#/$defs/CapitalDistribution"
        -    },
        -    "timestamp": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "timestamp",
        -    "capital_in",
        -    "capital_out"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedcapital_flow1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedcash_flow1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedcompany2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "ccy_symbol": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "ceo": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "description": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "detail_url": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "employees": {
        -      "format": "int64",
        -      "type": [
        -        "integer",
        -        "null"
        -      ]
        -    },
        -    "exchange": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "founded_year": {
        -      "format": "int64",
        -      "type": [
        -        "integer",
        -        "null"
        -      ]
        -    },
        -    "industry": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "intro": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "market_cap": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "name": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "share_list": {
        -      "items": true,
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "top_rank_tags": {
        -      "items": true,
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "website": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedconsensus2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "ConsensusItem": {
        -      "properties": {
        -        "analyst_count": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "eps_estimate": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "last_updated": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "net_income_estimate": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "period": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "revenue_estimate": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "UsConsensusEstimate": {
        -      "properties": {
        -        "actual": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "estimate": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "UsConsensusPeriod": {
        -      "properties": {
        -        "ebit": {
        -          "anyOf": [
        -            {
        -              "$ref": "#/$defs/UsConsensusEstimate"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        },
        -        "eps": {
        -          "anyOf": [
        -            {
        -              "$ref": "#/$defs/UsConsensusEstimate"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        },
        -        "fiscal_year": {
        -          "format": "int32",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "report_txt": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "revenue": {
        -          "anyOf": [
        -            {
        -              "$ref": "#/$defs/UsConsensusEstimate"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "ai_summary": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "currency": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "items": {
        -      "items": {
        -        "$ref": "#/$defs/ConsensusItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "list": {
        -      "items": {
        -        "$ref": "#/$defs/UsConsensusPeriod"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "opt_reports": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "report": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedconstituent1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedcorp_action2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "CorpActionItem": {
        -      "properties": {
        -        "action_type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "description": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "effective_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "ratio": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "items": {
        -      "items": {
        -        "$ref": "#/$defs/CorpActionItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedcreate_watchlist_group2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "id": {
        -      "format": "int64",
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "id"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changeddca_check2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "DcaCheckItem": {
        -      "properties": {
        -        "reason": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "support_dca": {
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "items": {
        -      "items": {
        -        "$ref": "#/$defs/DcaCheckItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changeddca_create1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changeddca_history2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "DcaExecution": {
        -      "properties": {
        -        "amount": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "order_id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "quantity": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "status": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "executions": {
        -      "items": {
        -        "$ref": "#/$defs/DcaExecution"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changeddca_list2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "DcaPlan": {
        -      "properties": {
        -        "amount": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "frequency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "next_execution_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "plan_id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "status": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "plans": {
        -      "items": {
        -        "$ref": "#/$defs/DcaPlan"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changeddca_pause1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changeddca_resume1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changeddca_stats2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "DcaStatsItem": {
        -      "properties": {
        -        "invested": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "return_rate": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "value": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "items": {
        -      "items": {
        -        "$ref": "#/$defs/DcaStatsItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "plan_count": {
        -      "format": "int64",
        -      "type": [
        -        "integer",
        -        "null"
        -      ]
        -    },
        -    "return_rate": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "total_invested": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "total_return": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "total_value": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changeddca_stop1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changeddca_update1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changeddelete_watchlist_group2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "deleted": {
        -      "type": "boolean"
        -    },
        -    "id": {
        -      "format": "int64",
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "deleted"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changeddeposits1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changeddepth2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "DepthLevel": {
        -      "properties": {
        -        "order_num": {
        -          "format": "int64",
        -          "type": "integer"
        -        },
        -        "position": {
        -          "format": "int32",
        -          "type": "integer"
        -        },
        -        "price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "volume": {
        -          "format": "int64",
        -          "type": "integer"
        -        }
        -      },
        -      "required": [
        -        "position",
        -        "volume",
        -        "order_num"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "asks": {
        -      "items": {
        -        "$ref": "#/$defs/DepthLevel"
        -      },
        -      "type": "array"
        -    },
        -    "bids": {
        -      "items": {
        -        "$ref": "#/$defs/DepthLevel"
        -      },
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "bids",
        -    "asks"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changeddividend2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "DividendItem": {
        -      "properties": {
        -        "amount": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "dividend_type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "ex_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "pay_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "record_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "status": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "UsDividendHistoryYear": {
        -      "properties": {
        -        "currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "dividend": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "dividend_growth_rate": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "dividend_payout_ratio": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "dividend_to_cashflow_ratio": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "dividend_yield": {
        -          "format": "double",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "fiscal_year": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "fiscal_year_range": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "UsDividendPayout": {
        -      "properties": {
        -        "currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "dividend": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "dividend_type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "ex_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "payment_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "record_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "UsRecentDividends": {
        -      "properties": {
        -        "currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "dividend_ttm": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "dividend_yield_ttm": {
        -          "format": "double",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "payouts": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "dividend_history": {
        -      "items": {
        -        "$ref": "#/$defs/UsDividendHistoryYear"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "dividend_payout_history": {
        -      "items": {
        -        "$ref": "#/$defs/UsDividendPayout"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "items": {
        -      "items": {
        -        "$ref": "#/$defs/DividendItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "payout_ratios": {
        -      "items": {
        -        "$ref": "#/$defs/UsDividendHistoryYear"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "recent_dividends": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/UsRecentDividends"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changeddividend_detail2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "DividendDetailItem": {
        -      "properties": {
        -        "cash_dividend": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "ex_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "pay_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "period": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "record_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "stock_dividend": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "details": {
        -      "items": {
        -        "$ref": "#/$defs/DividendDetailItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedestimate_max_purchase_quantity2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "cash_max_qty": {
        -      "type": "string"
        -    },
        -    "margin_max_qty": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "cash_max_qty",
        -    "margin_max_qty"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedetf_docs2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "EtfDocFile": {
        -      "properties": {
        -        "code": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "file_name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "file_path": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "format": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "update_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "files": {
        -      "items": {
        -        "$ref": "#/$defs/EtfDocFile"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedexchange_rate1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedexecutive2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "ExecutiveMember": {
        -      "properties": {
        -        "age": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "appointed_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "biography": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "compensation": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "title": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "members": {
        -      "items": {
        -        "$ref": "#/$defs/ExecutiveMember"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedfilings1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedfinance_calendar2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "FinanceCalendarBucket": {
        -      "properties": {
        -        "date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "infos": {
        -          "items": {
        -            "$ref": "#/$defs/FinanceCalendarEvent"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "FinanceCalendarEvent": {
        -      "properties": {
        -        "datetime": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "market": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "list": {
        -      "items": {
        -        "$ref": "#/$defs/FinanceCalendarBucket"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "partial": {
        -      "type": [
        -        "boolean",
        -        "null"
        -      ]
        -    },
        -    "partial_reason": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedfinancial_report2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "FinancialReportBalancePeriod": {
        -      "properties": {
        -        "debt_assets_ratio": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "report": {
        -          "anyOf": [
        -            {
        -              "$ref": "#/$defs/FinancialReportPeriodMeta"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        },
        -        "total_assets": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "total_liabilities": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "FinancialReportCashFlowPeriod": {
        -      "properties": {
        -        "financing": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "investing": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "operating": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "report": {
        -          "anyOf": [
        -            {
        -              "$ref": "#/$defs/FinancialReportPeriodMeta"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "FinancialReportField": {
        -      "properties": {
        -        "display_order": {
        -          "format": "int32",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "field": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "level": {
        -          "format": "int32",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "value": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "value_type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "yoy": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "FinancialReportIncomePeriod": {
        -      "properties": {
        -        "net_income": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "net_margin": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "report": {
        -          "anyOf": [
        -            {
        -              "$ref": "#/$defs/FinancialReportPeriodMeta"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        },
        -        "revenue": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "FinancialReportPeriodMeta": {
        -      "properties": {
        -        "end_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "report_txt": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "start_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "FinancialStatementPeriod": {
        -      "properties": {
        -        "ff_period": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "ff_year": {
        -          "format": "int32",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "fields": {
        -          "items": {
        -            "$ref": "#/$defs/FinancialReportField"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "fp_end": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "report_txt": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "rpt_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "bs_list": {
        -      "items": {
        -        "$ref": "#/$defs/FinancialReportBalancePeriod"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "ccy_symbol": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "cf_list": {
        -      "items": {
        -        "$ref": "#/$defs/FinancialReportCashFlowPeriod"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "currency": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "empty_fields": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "is_list": {
        -      "items": {
        -        "$ref": "#/$defs/FinancialReportIncomePeriod"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "list": {
        -      "items": {
        -        "$ref": "#/$defs/FinancialStatementPeriod"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "report": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "report_type": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedfinancial_report_key_metrics2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "FinancialReportField": {
        -      "properties": {
        -        "display_order": {
        -          "format": "int32",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "field": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "level": {
        -          "format": "int32",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "value": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "value_type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "yoy": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "FinancialStatementPeriod": {
        -      "properties": {
        -        "ff_period": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "ff_year": {
        -          "format": "int32",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "fields": {
        -          "items": {
        -            "$ref": "#/$defs/FinancialReportField"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "fp_end": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "report_txt": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "rpt_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "currency": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "empty_fields": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "list": {
        -      "items": {
        -        "$ref": "#/$defs/FinancialStatementPeriod"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "report": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedfinancial_report_latest2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "eps": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "gross_margin": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "net_income": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "period": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "report_date": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "revenue": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "roe": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedfinancial_report_snapshot2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "ForecastActual": {
        -      "properties": {
        -        "cmp": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "yoy": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "fo_ebit": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/ForecastActual"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    },
        -    "fo_eps": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/ForecastActual"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    },
        -    "fo_revenue": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/ForecastActual"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    },
        -    "report_desc": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedfinancial_statement2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "FinancialReportField": {
        -      "properties": {
        -        "display_order": {
        -          "format": "int32",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "field": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "level": {
        -          "format": "int32",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "value": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "value_type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "yoy": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "FinancialStatementKind": {
        -      "properties": {
        -        "currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "empty_fields": {
        -          "items": {
        -            "type": "string"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "list": {
        -          "items": {
        -            "$ref": "#/$defs/FinancialStatementPeriod"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "report": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "FinancialStatementPeriod": {
        -      "properties": {
        -        "ff_period": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "ff_year": {
        -          "format": "int32",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "fields": {
        -          "items": {
        -            "$ref": "#/$defs/FinancialReportField"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "fp_end": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "report_txt": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "rpt_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "balance_sheet": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/FinancialStatementKind"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    },
        -    "cash_flow": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/FinancialStatementKind"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    },
        -    "currency": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "empty_fields": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "income_statement": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/FinancialStatementKind"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    },
        -    "list": {
        -      "items": {
        -        "$ref": "#/$defs/FinancialStatementPeriod"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "report": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedforecast_eps2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "ForecastEpsItem": {
        -      "properties": {
        -        "analyst_count": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "eps_actual": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "eps_estimate": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "forecast_end_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "forecast_start_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "surprise_pct": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "items": {
        -      "items": {
        -        "$ref": "#/$defs/ForecastEpsItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedfund_holder2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "FundHolderItem": {
        -      "properties": {
        -        "change": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "fund_name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "fund_symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "ratio": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "reported_at": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "shares": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "fund_holders": {
        -      "items": {
        -        "$ref": "#/$defs/FundHolderItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedfund_positions2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "FundPosition": {
        -      "properties": {
        -        "cost_net_asset_value": {
        -          "type": "string"
        -        },
        -        "currency": {
        -          "type": "string"
        -        },
        -        "current_net_asset_value": {
        -          "type": "string"
        -        },
        -        "holding_units": {
        -          "type": "string"
        -        },
        -        "net_asset_value_day": {
        -          "type": "string"
        -        },
        -        "symbol": {
        -          "type": "string"
        -        },
        -        "symbol_name": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "symbol",
        -        "symbol_name",
        -        "currency",
        -        "holding_units",
        -        "current_net_asset_value",
        -        "net_asset_value_day",
        -        "cost_net_asset_value"
        -      ],
        -      "type": "object"
        -    },
        -    "FundPositionChannel": {
        -      "properties": {
        -        "account_channel": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "fund_info": {
        -          "items": {
        -            "$ref": "#/$defs/FundPosition"
        -          },
        -          "type": "array"
        -        }
        -      },
        -      "required": [
        -        "fund_info"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "list": {
        -      "items": {
        -        "$ref": "#/$defs/FundPositionChannel"
        -      },
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "list"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedgrid_cancel1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedgrid_detail2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "expire_time": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "grid_order_history": {
        -      "items": true,
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "grid_status": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "grid_sub_orders": {
        -      "items": true,
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "lower_limit_price": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "order_id": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "settlement_currency": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "status": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "submitted_base_price": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "suspend_reason": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "symbol": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "upper_limit_price": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedgrid_list2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "GridOrderSummary": {
        -      "properties": {
        -        "created_at": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "grid_status": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "lower_limit_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "order_id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "settlement_currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "status": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "stock_name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "submitted_base_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "total_buy_quantity": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "total_profit_balance": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "total_sell_quantity": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "trigger_price_type": {
        -          "format": "int32",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "upper_limit_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "grid_order": {
        -      "items": {
        -        "$ref": "#/$defs/GridOrderSummary"
        -      },
        -      "type": "array"
        -    },
        -    "has_more": {
        -      "type": "boolean"
        -    }
        -  },
        -  "required": [
        -    "grid_order",
        -    "has_more"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedgrid_list_by_ids2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "GridOrderSummary": {
        -      "properties": {
        -        "created_at": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "grid_status": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "lower_limit_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "order_id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "settlement_currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "status": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "stock_name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "submitted_base_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "total_buy_quantity": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "total_profit_balance": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "total_sell_quantity": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "trigger_price_type": {
        -          "format": "int32",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "upper_limit_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "grid_orders": {
        -      "items": {
        -        "$ref": "#/$defs/GridOrderSummary"
        -      },
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "grid_orders"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Removedgrid_questionnaire
    • Changedgrid_replace1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedgrid_restart1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedgrid_submit2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "dry_run": {
        -      "type": "boolean"
        -    },
        -    "next_step": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "order_id": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "preview": {}
        -  },
        -  "required": [
        -    "dry_run"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedgrid_suspend1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedgrid_symbol_info2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "GridBidSizeRule": {
        -      "properties": {
        -        "bid_size": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "end_proceed": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "str_proceed": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "bid_sizes": {
        -      "items": {
        -        "$ref": "#/$defs/GridBidSizeRule"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "buy_lot_size": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "channel_info": {},
        -    "last_done": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "lot_size": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "name": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "sell_lot_size": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedgrid_trigger_history2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "GridTriggerOrder": {
        -      "properties": {
        -        "action": {
        -          "format": "int32",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "executed_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "executed_qty": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "quantity": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "status": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "trigger_at": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "has_more": {
        -      "type": "boolean"
        -    },
        -    "trigger_orders": {
        -      "items": {
        -        "$ref": "#/$defs/GridTriggerOrder"
        -      },
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "trigger_orders",
        -    "has_more"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedhistory_candlesticks_by_date1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedhistory_candlesticks_by_offset1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedhistory_executions3 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / us_limit / description
        Previous value: -"US accounts only, history_orders tool only: page size (default 20)."New value: +"US accounts only: page size (default 20). Ignored for\nAP accounts."
      • changedInput schema / properties / us_page / description
        Previous value: -"US accounts only, history_orders tool only: page number (default 1)."New value: +"US accounts only: page number (default 1). Ignored for\nAP accounts (the region is inferred from the account — do not pass it)."
    • Changedhistory_market_temperature2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "MarketTemperatureResponse": {
        -      "properties": {
        -        "description": {
        -          "type": "string"
        -        },
        -        "sentiment": {
        -          "format": "int32",
        -          "type": "integer"
        -        },
        -        "temperature": {
        -          "format": "int32",
        -          "type": "integer"
        -        },
        -        "timestamp": {
        -          "type": "string"
        -        },
        -        "valuation": {
        -          "format": "int32",
        -          "type": "integer"
        -        }
        -      },
        -      "required": [
        -        "temperature",
        -        "description",
        -        "valuation",
        -        "sentiment",
        -        "timestamp"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "list": {
        -      "items": {
        -        "$ref": "#/$defs/MarketTemperatureResponse"
        -      },
        -      "type": "array"
        -    },
        -    "type": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "type",
        -    "list"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedhistory_orders3 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / us_limit / description
        Previous value: -"US accounts only, history_orders tool only: page size (default 20)."New value: +"US accounts only: page size (default 20). Ignored for\nAP accounts."
      • changedInput schema / properties / us_page / description
        Previous value: -"US accounts only, history_orders tool only: page number (default 1)."New value: +"US accounts only: page number (default 1). Ignored for\nAP accounts (the region is inferred from the account — do not pass it)."
    • Changedindustry_peers2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "IndustryPeersNode": {
        -      "properties": {
        -        "chg": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "counter_id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "next": {
        -          "items": {
        -            "$ref": "#/$defs/IndustryPeersNode"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "stock_num": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "ytd_chg": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "IndustryPeersTop": {
        -      "properties": {
        -        "market": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "chain": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/IndustryPeersNode"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    },
        -    "top": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/IndustryPeersTop"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedindustry_rank1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedindustry_valuation2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "IndustryValuationHistoryPoint": {
        -      "properties": {
        -        "date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "pb": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "pe": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "IndustryValuationItem": {
        -      "properties": {
        -        "dividend_yield": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "history": {
        -          "items": {
        -            "$ref": "#/$defs/IndustryValuationHistoryPoint"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "pb": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "pe": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "ps": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "list": {
        -      "items": {
        -        "$ref": "#/$defs/IndustryValuationItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedindustry_valuation_dist2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "IndustryValuationDistribution": {
        -      "properties": {
        -        "current_percentile": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "max": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "median": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "min": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "p25": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "p75": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "IndustryValuationDistributions": {
        -      "properties": {
        -        "pb": {
        -          "anyOf": [
        -            {
        -              "$ref": "#/$defs/IndustryValuationDistribution"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        },
        -        "pe": {
        -          "anyOf": [
        -            {
        -              "$ref": "#/$defs/IndustryValuationDistribution"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        },
        -        "ps": {
        -          "anyOf": [
        -            {
        -              "$ref": "#/$defs/IndustryValuationDistribution"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "distributions": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/IndustryValuationDistributions"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedinstitution_rating2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "InstitutionRatingAnalyst": {
        -      "properties": {
        -        "buy": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "consensus_rating": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "hold": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "outperform": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "sell": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "target_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "underperform": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "analyst": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/InstitutionRatingAnalyst"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    },
        -    "instratings": {},
        -    "warnings": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedinstitution_rating_detail2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "InstitutionRatingDetailItem": {
        -      "properties": {
        -        "analyst": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "firm": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "rating": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "target_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "timestamp": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "InstitutionRatingDetailTarget": {
        -      "properties": {
        -        "list": {
        -          "items": {
        -            "$ref": "#/$defs/InstitutionRatingDetailItem"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "target": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/InstitutionRatingDetailTarget"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedinstitution_rating_history2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "EvaluateHistoryItem": {
        -      "properties": {
        -        "date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "firm": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "new_rating": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "old_rating": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "TargetHistoryItem": {
        -      "properties": {
        -        "analyst": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "firm": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "new_target": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "old_target": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "evaluate_history": {
        -      "items": {
        -        "$ref": "#/$defs/EvaluateHistoryItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "target_history": {
        -      "items": {
        -        "$ref": "#/$defs/TargetHistoryItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedinstitution_rating_industry_rank2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "InstitutionRatingIndustryRankItem": {
        -      "properties": {
        -        "buy_count": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "consensus_rating": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "sell_count": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "target_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "items": {
        -      "items": {
        -        "$ref": "#/$defs/InstitutionRatingIndustryRankItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "list": {
        -      "items": {
        -        "$ref": "#/$defs/InstitutionRatingIndustryRankItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedinstitutional_views2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "InstitutionalViewsMonth": {
        -      "properties": {
        -        "buy": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "hold": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "outperform": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "sell": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "total": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "underperform": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "months": {
        -      "items": {
        -        "$ref": "#/$defs/InstitutionalViewsMonth"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedintraday1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedinvest_relation2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "InvestRelationItem": {
        -      "properties": {
        -        "description": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "event_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "event_type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "title": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "url": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "items": {
        -      "items": {
        -        "$ref": "#/$defs/InvestRelationItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedipo_calendar2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "IpoItem": {
        -      "properties": {
        -        "issue_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "listing_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "market": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "min_lot_size": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "status": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "sub_end_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "sub_start_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "items": {
        -      "items": {
        -        "$ref": "#/$defs/IpoItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedipo_detail2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "eligibility": {},
        -    "profile": {},
        -    "timeline": {}
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedipo_listed2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "IpoListedItem": {
        -      "properties": {
        -        "first_day_close": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "first_day_return": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "issue_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "listing_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "market": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "volume": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "IpoListedMarketFeed": {
        -      "properties": {
        -        "items": {
        -          "items": {
        -            "$ref": "#/$defs/IpoListedItem"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "hk": {
        -      "$ref": "#/$defs/IpoListedMarketFeed"
        -    },
        -    "us": {
        -      "$ref": "#/$defs/IpoListedMarketFeed"
        -    }
        -  },
        -  "required": [
        -    "hk",
        -    "us"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedipo_order_detail2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "allotted_quantity": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "market": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "order_id": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "quantity": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "status": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "submitted_at": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "symbol": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "total_amount": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedipo_orders2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "IpoOrderItem": {
        -      "properties": {
        -        "market": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "order_id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "quantity": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "status": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "submitted_at": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "total_amount": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "IpoOrdersFeed": {
        -      "properties": {
        -        "orders": {
        -          "items": {
        -            "$ref": "#/$defs/IpoOrderItem"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "history": {
        -      "$ref": "#/$defs/IpoOrdersFeed"
        -    },
        -    "orders": {
        -      "$ref": "#/$defs/IpoOrdersFeed"
        -    }
        -  },
        -  "required": [
        -    "orders",
        -    "history"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedipo_profit_loss2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "IpoProfitLossItem": {
        -      "properties": {
        -        "cost": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "current_value": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "return_rate": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "IpoProfitLossItems": {
        -      "properties": {
        -        "items": {
        -          "items": {
        -            "$ref": "#/$defs/IpoProfitLossItem"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "IpoProfitLossSummary": {
        -      "properties": {
        -        "total_cost": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "total_return": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "total_value": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "items": {
        -      "$ref": "#/$defs/IpoProfitLossItems"
        -    },
        -    "summary": {
        -      "$ref": "#/$defs/IpoProfitLossSummary"
        -    }
        -  },
        -  "required": [
        -    "summary",
        -    "items"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedipo_subscriptions2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "IpoItem": {
        -      "properties": {
        -        "issue_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "listing_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "market": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "min_lot_size": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "status": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "sub_end_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "sub_start_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "IpoMarketFeed": {
        -      "properties": {
        -        "items": {
        -          "items": {
        -            "$ref": "#/$defs/IpoItem"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "hk": {
        -      "$ref": "#/$defs/IpoMarketFeed"
        -    },
        -    "us": {
        -      "$ref": "#/$defs/IpoMarketFeed"
        -    }
        -  },
        -  "required": [
        -    "hk",
        -    "us"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedmacrodata2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "MacroeconomicDataPoint": {
        -      "properties": {
        -        "actual_value": {
        -          "type": "string"
        -        },
        -        "forecast_value": {
        -          "type": "string"
        -        },
        -        "period": {
        -          "type": "string"
        -        },
        -        "previous_value": {
        -          "type": "string"
        -        },
        -        "release_at": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "unit": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "period",
        -        "actual_value",
        -        "previous_value",
        -        "forecast_value",
        -        "unit"
        -      ],
        -      "type": "object"
        -    },
        -    "MacroeconomicIndicator": {
        -      "properties": {
        -        "country": {
        -          "type": "string"
        -        },
        -        "describe": {
        -          "type": "string"
        -        },
        -        "importance": {
        -          "format": "int32",
        -          "type": "integer"
        -        },
        -        "indicator_code": {
        -          "type": "string"
        -        },
        -        "name": {
        -          "type": "string"
        -        },
        -        "periodicity": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "indicator_code",
        -        "country",
        -        "name",
        -        "describe",
        -        "periodicity",
        -        "importance"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "count": {
        -      "format": "int32",
        -      "type": "integer"
        -    },
        -    "data": {
        -      "items": {
        -        "$ref": "#/$defs/MacroeconomicDataPoint"
        -      },
        -      "type": "array"
        -    },
        -    "info": {
        -      "$ref": "#/$defs/MacroeconomicIndicator"
        -    }
        -  },
        -  "required": [
        -    "info",
        -    "data",
        -    "count"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedmacrodata_indicators2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "MacroeconomicIndicator": {
        -      "properties": {
        -        "country": {
        -          "type": "string"
        -        },
        -        "describe": {
        -          "type": "string"
        -        },
        -        "importance": {
        -          "format": "int32",
        -          "type": "integer"
        -        },
        -        "indicator_code": {
        -          "type": "string"
        -        },
        -        "name": {
        -          "type": "string"
        -        },
        -        "periodicity": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "indicator_code",
        -        "country",
        -        "name",
        -        "describe",
        -        "periodicity",
        -        "importance"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "count": {
        -      "format": "int32",
        -      "type": "integer"
        -    },
        -    "list": {
        -      "items": {
        -        "$ref": "#/$defs/MacroeconomicIndicator"
        -      },
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "list",
        -    "count"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedmargin_ratio2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "fm_factor": {
        -      "type": "string"
        -    },
        -    "im_factor": {
        -      "type": "string"
        -    },
        -    "mm_factor": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "im_factor",
        -    "mm_factor",
        -    "fm_factor"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedmarket_status2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "MarketStatusEntry": {
        -      "properties": {
        -        "delay_timestamp": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "delay_trade_status": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "market": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "timestamp": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "trade_status": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "market_time": {
        -      "items": {
        -        "$ref": "#/$defs/MarketStatusEntry"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedmarket_temperature2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "description": {
        -      "type": "string"
        -    },
        -    "sentiment": {
        -      "format": "int32",
        -      "type": "integer"
        -    },
        -    "temperature": {
        -      "format": "int32",
        -      "type": "integer"
        -    },
        -    "timestamp": {
        -      "type": "string"
        -    },
        -    "valuation": {
        -      "format": "int32",
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "temperature",
        -    "description",
        -    "valuation",
        -    "sentiment",
        -    "timestamp"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changednews1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changednews_detail2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "NewsAuthor": {
        -      "properties": {
        -        "avatar": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "NewsImage": {
        -      "properties": {
        -        "height": {
        -          "format": "int32",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "url": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "width": {
        -          "format": "int32",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "author": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/NewsAuthor"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    },
        -    "body": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "comments_count": {
        -      "format": "int32",
        -      "type": [
        -        "integer",
        -        "null"
        -      ]
        -    },
        -    "description": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "id": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "images": {
        -      "items": {
        -        "$ref": "#/$defs/NewsImage"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "likes_count": {
        -      "format": "int32",
        -      "type": [
        -        "integer",
        -        "null"
        -      ]
        -    },
        -    "published_at": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "shares_count": {
        -      "format": "int32",
        -      "type": [
        -        "integer",
        -        "null"
        -      ]
        -    },
        -    "tickers": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "title": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "url": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changednews_search1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changednow1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedoperating2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "OperatingItem": {
        -      "properties": {
        -        "metric_name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "period": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "unit": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "value": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "items": {
        -      "items": {
        -        "$ref": "#/$defs/OperatingItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedoption_chain_expiry_date_list1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedoption_chain_info_by_date1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedoption_quote2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / symbols / description
        Previous value: -"Security symbols, e.g. [\"700.HK\", \"AAPL.US\"]"New value: +"Option contract symbols, e.g. [\"AAPL230317P160000.US\"]. These are NOT\nplain stock symbols — get valid ones from `option_chain_info_by_date`'s\nper-strike `call.symbol`/`put.symbol` fields (after listing expiry\ndates with `option_chain_expiry_date_list`)."
    • Changedoption_volume1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedoption_volume_daily1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedorder_detail4 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / is_attached
        Added value: +{
        +  "description": "Set to true when order_id is the ID of an attached take-profit /\nstop-loss leg rather than a parent order. The response is then that leg\nitself, with charge_detail null. Omit (or false) for parent orders. Has\nno effect for US accounts, which are served by the US order endpoint.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / order_id / description
        Previous value: -"Order ID (from today's orders or order history)"New value: +"Order ID to look up. A parent order ID, or (with is_attached=true) the\nID of an attached take-profit / stop-loss leg."
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "UsOrderDetail": {
        -      "properties": {
        -        "action": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "done_at": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "executed_amount": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "executed_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "executed_qty": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "operate_direction": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "order_histories": {
        -          "items": {
        -            "$ref": "#/$defs/UsOrderHistoryEntry"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "order_type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "quantity": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "security_type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "status": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "submitted_at": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "time_in_force": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "UsOrderHistoryEntry": {
        -      "properties": {
        -        "occurred_at": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "qty": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "status": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "currency": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "current_millisecond": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "executed_price": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "executed_quantity": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "expire_date": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "last_done": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "limit_offset": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "msg": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "order": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/UsOrderDetail"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    },
        -    "order_id": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "order_type": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "outside_rth": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "price": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "quantity": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "side": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "status": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "stock_name": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "submitted_at": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "symbol": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "tag": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "time_in_force": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "trailing_amount": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "trailing_percent": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "trigger_at": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "trigger_price": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "trigger_status": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "updated_at": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedparticipants1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedprofit_analysis1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedprofit_analysis_detail1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedprofit_analysis_realized2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "RealizedPlCategory": {
        -      "properties": {
        -        "category": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "metrics": {
        -          "items": {
        -            "$ref": "#/$defs/RealizedPlMetric"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "RealizedPlMetric": {
        -      "properties": {
        -        "amount": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "period": {
        -          "format": "int32",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "rate": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "rate_unit": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "realized_pl_list": {
        -      "items": {
        -        "$ref": "#/$defs/RealizedPlCategory"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedquant_run1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedquote1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedrank_categories2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "RankFirstTag": {
        -      "properties": {
        -        "key": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "second_tags": {
        -          "items": {
        -            "$ref": "#/$defs/RankSecondTag"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "RankSecondTag": {
        -      "properties": {
        -        "key": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "market": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "first_tags": {
        -      "items": {
        -        "$ref": "#/$defs/RankFirstTag"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedrank_list2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "RankListItem": {
        -      "properties": {
        -        "amplitude": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "chg": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "five_day_chg": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "industry": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "inflow": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "intro": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "last_done": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "market_cap": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "pre_post_chg": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "pre_post_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "ten_day_chg": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "this_year_chg": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "turnover_rate": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "twenty_day_chg": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "volume_rate": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "lists": {
        -      "items": {
        -        "$ref": "#/$defs/RankListItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "updated_at": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedreplace_order16 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_activate_order_type
        Added value: +{
        +  "description": "New order type for the triggered leg, e.g. \"LO\" or \"MO\".",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_cancel_all
        Added value: +{
        +  "description": "Set to true to cancel every attached take-profit / stop-loss leg of this\norder, leaving the order itself in place.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / attached_expire_time
        Added value: +{
        +  "description": "New expiry for the attached leg as a unix timestamp in seconds.\nRequired when attached_time_in_force is GTD.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_main_id
        Added value: +{
        +  "description": "ID of the parent order that owns the attached leg, when the leg is\nmodified on its own rather than through its parent.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_market_price
        Added value: +{
        +  "description": "Reference market price for the attached leg.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_order_type
        Added value: +{
        +  "description": "Attached leg to add or update: \"PROFIT_TAKER\", \"STOP_LOSS\" or \"BRACKET\".\nRequired unless the only attached change is attached_cancel_all.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_outside_rth
        Added value: +{
        +  "description": "New outside-RTH setting for the triggered leg: \"RTH_ONLY\" / \"ANY_TIME\"\n/ \"OVERNIGHT\".",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_profit_taker_id
        Added value: +{
        +  "description": "ID of the existing take-profit leg to update (from\norder_detail's attached_orders[]). Omit to add a new leg.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_profit_taker_price
        Added value: +{
        +  "description": "New take-profit trigger price.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_profit_taker_submit_price
        Added value: +{
        +  "description": "New limit price for the take-profit leg.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_quantity
        Added value: +{
        +  "description": "New quantity for the attached leg.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_stop_loss_id
        Added value: +{
        +  "description": "ID of the existing stop-loss leg to update (from order_detail's\nattached_orders[]). Omit to add a new leg.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_stop_loss_price
        Added value: +{
        +  "description": "New stop-loss trigger price.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_stop_loss_submit_price
        Added value: +{
        +  "description": "New limit price for the stop-loss leg.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_time_in_force
        Added value: +{
        +  "description": "New time-in-force for the attached leg: \"Day\" / \"GTC\" / \"GTD\".",
        +  "type": "string"
        +}
    • Changedscreener_indicators2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "ScreenerIndicator": {
        -      "properties": {
        -        "default_range": {
        -          "anyOf": [
        -            {
        -              "$ref": "#/$defs/ScreenerIndicatorRange"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        },
        -        "id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "key": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "tech_values": {},
        -        "unit": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "ScreenerIndicatorGroup": {
        -      "properties": {
        -        "group_name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "indicators": {
        -          "items": {
        -            "$ref": "#/$defs/ScreenerIndicator"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "ScreenerIndicatorRange": {
        -      "properties": {
        -        "max": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "min": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "groups": {
        -      "items": {
        -        "$ref": "#/$defs/ScreenerIndicatorGroup"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedscreener_recommend_strategies2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "ScreenerStrategyItem": {
        -      "properties": {
        -        "description": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "market": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "risk": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "three_months_chg": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "strategys": {
        -      "items": {
        -        "$ref": "#/$defs/ScreenerStrategyItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedscreener_search2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "ScreenerResultIndicator": {
        -      "properties": {
        -        "key": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "unit": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "value": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "ScreenerResultItem": {
        -      "properties": {
        -        "indicators": {
        -          "items": {
        -            "$ref": "#/$defs/ScreenerResultIndicator"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "items": {
        -      "items": {
        -        "$ref": "#/$defs/ScreenerResultItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "total": {
        -      "format": "int64",
        -      "type": [
        -        "integer",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedscreener_strategy2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "ScreenerStrategyFilter": {
        -      "properties": {
        -        "key": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "max": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "min": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "tech_values": {}
        -      },
        -      "type": "object"
        -    },
        -    "ScreenerStrategyFilterGroup": {
        -      "properties": {
        -        "filters": {
        -          "items": {
        -            "$ref": "#/$defs/ScreenerStrategyFilter"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "filter": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/ScreenerStrategyFilterGroup"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    },
        -    "market": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedscreener_user_strategies2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "ScreenerStrategyItem": {
        -      "properties": {
        -        "description": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "market": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "risk": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "three_months_chg": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "strategys": {
        -      "items": {
        -        "$ref": "#/$defs/ScreenerStrategyItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedsecurity_facts2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "AnomalyDetection": {
        -      "properties": {
        -        "anomaly_result": {
        -          "type": "string"
        -        },
        -        "significance_level": {
        -          "type": "string"
        -        },
        -        "test_method": {
        -          "type": "string"
        -        },
        -        "thresholds": {
        -          "$ref": "#/$defs/AnomalyThresholds"
        -        }
        -      },
        -      "required": [
        -        "anomaly_result",
        -        "significance_level",
        -        "test_method",
        -        "thresholds"
        -      ],
        -      "type": "object"
        -    },
        -    "AnomalyThresholds": {
        -      "properties": {
        -        "high": {
        -          "type": "string"
        -        },
        -        "low": {
        -          "type": "string"
        -        },
        -        "medium": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "low",
        -        "medium",
        -        "high"
        -      ],
        -      "type": "object"
        -    },
        -    "FactDataSource": {
        -      "properties": {
        -        "icon": {
        -          "type": "string"
        -        },
        -        "source_name": {
        -          "type": "string"
        -        },
        -        "type": {
        -          "$ref": "#/$defs/FactType"
        -        },
        -        "url": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "source_name",
        -        "type",
        -        "url",
        -        "icon"
        -      ],
        -      "type": "object"
        -    },
        -    "FactDirection": {
        -      "enum": [
        -        "long",
        -        "short",
        -        "neutral",
        -        ""
        -      ],
        -      "type": "string"
        -    },
        -    "FactFactor": {
        -      "properties": {
        -        "anomaly_detection": {
        -          "$ref": "#/$defs/AnomalyDetection"
        -        },
        -        "factor_groups": {
        -          "items": {
        -            "type": "string"
        -          },
        -          "type": "array"
        -        },
        -        "long_short_direction": {
        -          "$ref": "#/$defs/FactDirection"
        -        },
        -        "name": {
        -          "type": "string"
        -        },
        -        "trigger_condition": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "name",
        -        "factor_groups",
        -        "long_short_direction",
        -        "trigger_condition",
        -        "anomaly_detection"
        -      ],
        -      "type": "object"
        -    },
        -    "FactNlInfo": {
        -      "properties": {
        -        "eli_explain": {
        -          "$ref": "#/$defs/NlField"
        -        },
        -        "invest_anal": {
        -          "$ref": "#/$defs/NlField"
        -        },
        -        "sub_title": {
        -          "type": "string"
        -        },
        -        "summary": {
        -          "$ref": "#/$defs/NlField"
        -        },
        -        "title": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "title",
        -        "sub_title",
        -        "summary",
        -        "invest_anal",
        -        "eli_explain"
        -      ],
        -      "type": "object"
        -    },
        -    "FactSymbol": {
        -      "properties": {
        -        "security_name": {
        -          "type": "string"
        -        },
        -        "symbol": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "symbol",
        -        "security_name"
        -      ],
        -      "type": "object"
        -    },
        -    "FactType": {
        -      "enum": [
        -        "News",
        -        "Fundamental",
        -        "Technical",
        -        "Unknown"
        -      ],
        -      "type": "string"
        -    },
        -    "NlField": {
        -      "anyOf": [
        -        {
        -          "items": {
        -            "$ref": "#/$defs/NlTag"
        -          },
        -          "type": "array"
        -        },
        -        {
        -          "type": "string"
        -        }
        -      ]
        -    },
        -    "NlTag": {
        -      "properties": {
        -        "tag": {
        -          "type": "string"
        -        },
        -        "value": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "tag",
        -        "value"
        -      ],
        -      "type": "object"
        -    },
        -    "SecurityFactItem": {
        -      "properties": {
        -        "data_source": {
        -          "items": {
        -            "$ref": "#/$defs/FactDataSource"
        -          },
        -          "type": "array"
        -        },
        -        "direction": {
        -          "$ref": "#/$defs/FactDirection"
        -        },
        -        "fact_id": {
        -          "type": "string"
        -        },
        -        "fact_type": {
        -          "$ref": "#/$defs/FactType"
        -        },
        -        "factors": {
        -          "items": {
        -            "$ref": "#/$defs/FactFactor"
        -          },
        -          "type": "array"
        -        },
        -        "nl_info": {
        -          "$ref": "#/$defs/FactNlInfo"
        -        },
        -        "occur_time": {
        -          "type": "string"
        -        },
        -        "symbols_info": {
        -          "items": {
        -            "$ref": "#/$defs/FactSymbol"
        -          },
        -          "type": "array"
        -        }
        -      },
        -      "required": [
        -        "fact_id",
        -        "fact_type",
        -        "direction",
        -        "occur_time",
        -        "symbols_info",
        -        "factors",
        -        "data_source",
        -        "nl_info"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "facts": {
        -      "items": {
        -        "$ref": "#/$defs/SecurityFactItem"
        -      },
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "facts"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedsecurity_list2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "SecurityListItem": {
        -      "properties": {
        -        "name_cn": {
        -          "type": "string"
        -        },
        -        "name_en": {
        -          "type": "string"
        -        },
        -        "name_hk": {
        -          "type": "string"
        -        },
        -        "symbol": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "symbol",
        -        "name_cn",
        -        "name_en",
        -        "name_hk"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "count": {
        -      "format": "uint",
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    "items": {
        -      "items": {
        -        "$ref": "#/$defs/SecurityListItem"
        -      },
        -      "type": "array"
        -    },
        -    "page": {
        -      "format": "uint",
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    "total": {
        -      "format": "uint",
        -      "minimum": 0,
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "total",
        -    "page",
        -    "count",
        -    "items"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedshareholder2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "ShareholderItem": {
        -      "properties": {
        -        "change": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "change_type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "institution": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "ratio": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "reported_at": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "shares": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "shareholders": {
        -      "items": {
        -        "$ref": "#/$defs/ShareholderItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedshareholder_detail2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "ShareholderTrading": {
        -      "properties": {
        -        "accum_buy": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "accum_sell": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "net_buy": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "period": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "trading_details": {
        -          "items": {
        -            "$ref": "#/$defs/ShareholderTradingDetail"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "ShareholderTradingDetail": {
        -      "properties": {
        -        "filing_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "security_type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "trading_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "trading_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "trading_shares": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "trading_type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "holding_periods": {},
        -    "holding_summary": {},
        -    "name": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "owner_source": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "trading_periods": {},
        -    "tradings": {
        -      "items": {
        -        "$ref": "#/$defs/ShareholderTrading"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedshareholder_top2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "ShareholderTopHolder": {
        -      "properties": {
        -        "filing_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "object_id": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "percent_shares_held": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "shares_changed": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "shares_held": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "title": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "ShareholderTopPeriod": {
        -      "properties": {
        -        "period": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "share_holders": {
        -          "items": {
        -            "$ref": "#/$defs/ShareholderTopHolder"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "info": {
        -      "items": {
        -        "$ref": "#/$defs/ShareholderTopPeriod"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedsharelist_add1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedsharelist_create2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "description": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "id": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "name": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedsharelist_delete1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedsharelist_detail2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "SharelistConstituent": {
        -      "properties": {
        -        "change_rate": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "last_done": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "constituents": {
        -      "items": {
        -        "$ref": "#/$defs/SharelistConstituent"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "description": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "id": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "name": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedsharelist_list2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "SharelistSummary": {
        -      "properties": {
        -        "creator": {},
        -        "description": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "follower_count": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "is_owner": {
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol_count": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "lists": {
        -      "items": {
        -        "$ref": "#/$defs/SharelistSummary"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedsharelist_popular2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "SharelistSummary": {
        -      "properties": {
        -        "creator": {},
        -        "description": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "follower_count": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "is_owner": {
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol_count": {
        -          "format": "int64",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "lists": {
        -      "items": {
        -        "$ref": "#/$defs/SharelistSummary"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedsharelist_remove1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedsharelist_sort1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedshort_margin1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedshort_positions1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedshort_trades2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "ShortTradesItem": {
        -      "properties": {
        -        "balance": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "close": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "market_vol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "nasdaq_vol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "nyse_vol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "rate": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "short_vol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "timestamp": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "data": {
        -      "items": {
        -        "$ref": "#/$defs/ShortTradesItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedsignal_detail2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "SignalOutlook": {
        -      "enum": [
        -        "Strong bullish",
        -        "Bullish",
        -        "Neutral",
        -        "Bearish",
        -        "Strong bearish",
        -        "Unknown"
        -      ],
        -      "type": "string"
        -    },
        -    "SignalStatus": {
        -      "enum": [
        -        "Pending",
        -        "Active",
        -        "Deleted",
        -        "AiFailed",
        -        "FilteredByManual",
        -        "AiSubmitFailed",
        -        "Unknown"
        -      ],
        -      "type": "string"
        -    }
        -  },
        -  "properties": {
        -    "analysis": {},
        -    "analysis_price": {
        -      "format": "double",
        -      "type": "number"
        -    },
        -    "benchmark_price": {
        -      "format": "double",
        -      "type": "number"
        -    },
        -    "company_name": {
        -      "type": "string"
        -    },
        -    "conservative_price": {
        -      "format": "double",
        -      "type": "number"
        -    },
        -    "created_at": {
        -      "type": "string"
        -    },
        -    "expression": {
        -      "type": "string"
        -    },
        -    "id": {
        -      "type": "string"
        -    },
        -    "key_catalyst": {
        -      "type": "string"
        -    },
        -    "key_fact_id": {
        -      "type": "string"
        -    },
        -    "market": {
        -      "type": "string"
        -    },
        -    "optimistic_price": {
        -      "format": "double",
        -      "type": "number"
        -    },
        -    "outlook": {
        -      "$ref": "#/$defs/SignalOutlook"
        -    },
        -    "outlook_desc": {
        -      "type": "string"
        -    },
        -    "recommend_by": {
        -      "type": "string"
        -    },
        -    "status": {
        -      "$ref": "#/$defs/SignalStatus"
        -    },
        -    "strategy_id": {
        -      "type": "string"
        -    },
        -    "strategy_name": {
        -      "type": "string"
        -    },
        -    "summary": {
        -      "type": "string"
        -    },
        -    "symbol": {
        -      "type": "string"
        -    },
        -    "title": {
        -      "type": "string"
        -    },
        -    "updated_at": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "symbol",
        -    "company_name",
        -    "market",
        -    "title",
        -    "summary",
        -    "strategy_id",
        -    "strategy_name",
        -    "recommend_by",
        -    "expression",
        -    "key_fact_id",
        -    "key_catalyst",
        -    "analysis_price",
        -    "conservative_price",
        -    "benchmark_price",
        -    "optimistic_price",
        -    "outlook",
        -    "outlook_desc",
        -    "status",
        -    "created_at",
        -    "updated_at"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedsignals2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "SignalItem": {
        -      "properties": {
        -        "analysis": {},
        -        "analysis_price": {
        -          "format": "double",
        -          "type": "number"
        -        },
        -        "benchmark_price": {
        -          "format": "double",
        -          "type": "number"
        -        },
        -        "company_name": {
        -          "type": "string"
        -        },
        -        "conservative_price": {
        -          "format": "double",
        -          "type": "number"
        -        },
        -        "created_at": {
        -          "type": "string"
        -        },
        -        "expression": {
        -          "type": "string"
        -        },
        -        "id": {
        -          "type": "string"
        -        },
        -        "key_catalyst": {
        -          "type": "string"
        -        },
        -        "key_fact_id": {
        -          "type": "string"
        -        },
        -        "market": {
        -          "type": "string"
        -        },
        -        "optimistic_price": {
        -          "format": "double",
        -          "type": "number"
        -        },
        -        "outlook": {
        -          "$ref": "#/$defs/SignalOutlook"
        -        },
        -        "outlook_desc": {
        -          "type": "string"
        -        },
        -        "recommend_by": {
        -          "type": "string"
        -        },
        -        "status": {
        -          "$ref": "#/$defs/SignalStatus"
        -        },
        -        "strategy_id": {
        -          "type": "string"
        -        },
        -        "strategy_name": {
        -          "type": "string"
        -        },
        -        "summary": {
        -          "type": "string"
        -        },
        -        "symbol": {
        -          "type": "string"
        -        },
        -        "title": {
        -          "type": "string"
        -        },
        -        "updated_at": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "symbol",
        -        "company_name",
        -        "market",
        -        "title",
        -        "summary",
        -        "strategy_id",
        -        "strategy_name",
        -        "recommend_by",
        -        "expression",
        -        "key_fact_id",
        -        "key_catalyst",
        -        "analysis_price",
        -        "conservative_price",
        -        "benchmark_price",
        -        "optimistic_price",
        -        "outlook",
        -        "outlook_desc",
        -        "status",
        -        "created_at",
        -        "updated_at"
        -      ],
        -      "type": "object"
        -    },
        -    "SignalOutlook": {
        -      "enum": [
        -        "Strong bullish",
        -        "Bullish",
        -        "Neutral",
        -        "Bearish",
        -        "Strong bearish",
        -        "Unknown"
        -      ],
        -      "type": "string"
        -    },
        -    "SignalStatus": {
        -      "enum": [
        -        "Pending",
        -        "Active",
        -        "Deleted",
        -        "AiFailed",
        -        "FilteredByManual",
        -        "AiSubmitFailed",
        -        "Unknown"
        -      ],
        -      "type": "string"
        -    }
        -  },
        -  "properties": {
        -    "signals": {
        -      "items": {
        -        "$ref": "#/$defs/SignalItem"
        -      },
        -      "type": "array"
        -    },
        -    "total": {
        -      "format": "int32",
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "signals",
        -    "total"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedstatement_export2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "url": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "url"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedstatement_list2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "StatementItem": {
        -      "properties": {
        -        "dt": {
        -          "format": "int32",
        -          "type": "integer"
        -        },
        -        "file_key": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "dt",
        -        "file_key"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "list": {
        -      "items": {
        -        "$ref": "#/$defs/StatementItem"
        -      },
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "list"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedstatic_info1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedstock_positions2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "StockPosition": {
        -      "properties": {
        -        "available_quantity": {
        -          "type": "string"
        -        },
        -        "cost_price": {
        -          "type": "string"
        -        },
        -        "currency": {
        -          "type": "string"
        -        },
        -        "init_quantity": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "market": {
        -          "type": "string"
        -        },
        -        "quantity": {
        -          "type": "string"
        -        },
        -        "symbol": {
        -          "type": "string"
        -        },
        -        "symbol_name": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "symbol",
        -        "symbol_name",
        -        "quantity",
        -        "available_quantity",
        -        "currency",
        -        "cost_price",
        -        "market"
        -      ],
        -      "type": "object"
        -    },
        -    "StockPositionChannel": {
        -      "properties": {
        -        "account_channel": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "stock_info": {
        -          "items": {
        -            "$ref": "#/$defs/StockPosition"
        -          },
        -          "type": "array"
        -        }
        -      },
        -      "required": [
        -        "stock_info"
        -      ],
        -      "type": "object"
        -    },
        -    "UsAssetOverview": {
        -      "properties": {
        -        "account_type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "cash_buy_power": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "cash_list": {
        -          "items": {
        -            "$ref": "#/$defs/UsCashPosition"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "crypto_list": {
        -          "items": {
        -            "$ref": "#/$defs/UsCryptoPosition"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "multi_leg": {},
        -        "option_list": {
        -          "items": {
        -            "$ref": "#/$defs/UsOptionPosition"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "overnight_buy_power": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "stock_list": {
        -          "items": {
        -            "$ref": "#/$defs/UsStockPosition"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "UsCashPosition": {
        -      "properties": {
        -        "currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "frozen_buy_cash": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "outstanding": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "settled_cash": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "total_amount": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "total_cash": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "UsCryptoPosition": {
        -      "properties": {
        -        "average_cost": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "UsOptionPosition": {
        -      "properties": {
        -        "average_cost": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "due_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "market_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "position_side": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "quantity": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "strike_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "today_pl": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "underlying_code": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "UsStockPosition": {
        -      "properties": {
        -        "average_cost": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "currency": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "industry_name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "last_done": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "market": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "market_price": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "position_side": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "prev_close": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "quantity": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "today_pl": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "list": {
        -      "items": {
        -        "$ref": "#/$defs/StockPositionChannel"
        -      },
        -      "type": "array"
        -    },
        -    "us_asset_overview": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/UsAssetOverview"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    },
        -    "warnings": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "list"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedsubmit_order11 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_activate_order_type
        Added value: +{
        +  "description": "Order type the attached leg is submitted as once triggered, e.g. \"LO\"\n(then set the matching attached_*_submit_price) or \"MO\".",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_expire_time
        Added value: +{
        +  "description": "Expiry of the attached leg as a unix timestamp in seconds (e.g.\n\"1767139200\"). Required when attached_time_in_force is GTD.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_order_type
        Added value: +{
        +  "description": "Attach a take-profit / stop-loss leg to this order: \"PROFIT_TAKER\"\n(take-profit only), \"STOP_LOSS\" (stop-loss only) or \"BRACKET\" (both).\nOmit for a plain order; every other attached_* field is ignored without\nit.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_outside_rth
        Added value: +{
        +  "description": "Outside-RTH setting of the triggered leg: \"RTH_ONLY\" / \"ANY_TIME\" /\n\"OVERNIGHT\".",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_profit_taker_price
        Added value: +{
        +  "description": "Take-profit trigger price. Required for PROFIT_TAKER and BRACKET.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_profit_taker_submit_price
        Added value: +{
        +  "description": "Limit price of the take-profit leg, for an LO attached_activate_order_type.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_stop_loss_price
        Added value: +{
        +  "description": "Stop-loss trigger price. Required for STOP_LOSS and BRACKET.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_stop_loss_submit_price
        Added value: +{
        +  "description": "Limit price of the stop-loss leg, for an LO attached_activate_order_type.",
        +  "type": "string"
        +}
      • addedInput schema / properties / attached_time_in_force
        Added value: +{
        +  "description": "Time-in-force of the attached leg: \"Day\" / \"GTC\" / \"GTD\". Defaults to\nthe parent order's setting when omitted.",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "dry_run": {
        -      "type": "boolean"
        -    },
        -    "next_step": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "order_id": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "preview": {}
        -  },
        -  "required": [
        -    "dry_run"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedtoday_executions1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedtoday_orders6 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / is_attached
        Added value: +{
        +  "description": "Only meaningful together with order_id: it says that order_id is the ID\nof an attached take-profit / stop-loss leg, and the response then\ncarries that leg itself as an order entry. On its own it does nothing,\nand it has no effect for US accounts either.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / order_id
        Added value: +{
        +  "description": "Filter by order ID: a parent order ID, or (with is_attached=true) the ID\nof an attached take-profit / stop-loss leg. Has no effect for\nUS accounts, which are served by the US order endpoint.",
        +  "type": "string"
        +}
      • changedInput schema / properties / us_action / description
        Previous value: -"US accounts only: filter by side, \"Buy\" or \"Sell\". Omit for all."New value: +"US accounts only: filter by side, \"Buy\" or \"Sell\". Omit for\nall. Ignored for AP accounts (the region is inferred from the\naccount — do not pass it)."
      • changedInput schema / properties / us_limit / description
        Previous value: -"US accounts only: page size (default 20)."New value: +"US accounts only: page size (default 20). Ignored for\nAP accounts."
      • changedInput schema / properties / us_page / description
        Previous value: -"US accounts only: page number (default 1)."New value: +"US accounts only: page number (default 1). Ignored for\nAP accounts."
    • Changedtop_movers2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "TopMoverEvent": {
        -      "properties": {
        -        "alert_reason": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "alert_type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "stock": {
        -          "anyOf": [
        -            {
        -              "$ref": "#/$defs/TopMoverStock"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        },
        -        "timestamp": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "TopMoverStock": {
        -      "properties": {
        -        "change": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "intro": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "labels": {
        -          "items": {
        -            "type": "string"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "last_done": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "events": {
        -      "items": {
        -        "$ref": "#/$defs/TopMoverEvent"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    },
        -    "next_params": {},
        -    "updated_at": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedtopic1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedtopic_create2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "id": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "id"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedtopic_create_reply2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "TopicAuthor": {
        -      "properties": {
        -        "avatar": {
        -          "type": "string"
        -        },
        -        "member_id": {
        -          "type": "string"
        -        },
        -        "name": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "member_id",
        -        "name",
        -        "avatar"
        -      ],
        -      "type": "object"
        -    },
        -    "TopicImage": {
        -      "properties": {
        -        "lg": {
        -          "type": "string"
        -        },
        -        "sm": {
        -          "type": "string"
        -        },
        -        "url": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "url",
        -        "sm",
        -        "lg"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "author": {
        -      "$ref": "#/$defs/TopicAuthor"
        -    },
        -    "body": {
        -      "type": "string"
        -    },
        -    "comments_count": {
        -      "format": "int32",
        -      "type": "integer"
        -    },
        -    "created_at": {
        -      "type": "string"
        -    },
        -    "id": {
        -      "type": "string"
        -    },
        -    "images": {
        -      "items": {
        -        "$ref": "#/$defs/TopicImage"
        -      },
        -      "type": "array"
        -    },
        -    "likes_count": {
        -      "format": "int32",
        -      "type": "integer"
        -    },
        -    "reply_to_id": {
        -      "type": "string"
        -    },
        -    "topic_id": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "topic_id",
        -    "body",
        -    "reply_to_id",
        -    "author",
        -    "images",
        -    "likes_count",
        -    "comments_count",
        -    "created_at"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedtopic_detail2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "TopicAuthor": {
        -      "properties": {
        -        "avatar": {
        -          "type": "string"
        -        },
        -        "member_id": {
        -          "type": "string"
        -        },
        -        "name": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "member_id",
        -        "name",
        -        "avatar"
        -      ],
        -      "type": "object"
        -    },
        -    "TopicImage": {
        -      "properties": {
        -        "lg": {
        -          "type": "string"
        -        },
        -        "sm": {
        -          "type": "string"
        -        },
        -        "url": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "url",
        -        "sm",
        -        "lg"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "author": {
        -      "$ref": "#/$defs/TopicAuthor"
        -    },
        -    "body": {
        -      "type": "string"
        -    },
        -    "comments_count": {
        -      "format": "int32",
        -      "type": "integer"
        -    },
        -    "created_at": {
        -      "type": "string"
        -    },
        -    "description": {
        -      "type": "string"
        -    },
        -    "detail_url": {
        -      "type": "string"
        -    },
        -    "hashtags": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "id": {
        -      "type": "string"
        -    },
        -    "images": {
        -      "items": {
        -        "$ref": "#/$defs/TopicImage"
        -      },
        -      "type": "array"
        -    },
        -    "likes_count": {
        -      "format": "int32",
        -      "type": "integer"
        -    },
        -    "shares_count": {
        -      "format": "int32",
        -      "type": "integer"
        -    },
        -    "tickers": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "title": {
        -      "type": "string"
        -    },
        -    "topic_type": {
        -      "type": "string"
        -    },
        -    "updated_at": {
        -      "type": "string"
        -    },
        -    "views_count": {
        -      "format": "int32",
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "title",
        -    "description",
        -    "body",
        -    "author",
        -    "tickers",
        -    "hashtags",
        -    "images",
        -    "likes_count",
        -    "comments_count",
        -    "views_count",
        -    "shares_count",
        -    "topic_type",
        -    "detail_url",
        -    "created_at",
        -    "updated_at"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedtopic_replies1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedtopic_search1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedtrade_stats1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedtrades1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedtrading_days2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "half_trading_days": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "trading_days": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "trading_days",
        -    "half_trading_days"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedtrading_session1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedupdate_watchlist_group2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "id": {
        -      "format": "int64",
        -      "type": "integer"
        -    },
        -    "updated": {
        -      "type": "boolean"
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "updated"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedvaluation2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "ValuationMetric": {
        -      "properties": {
        -        "5yr_avg": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "current": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "desc": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "industry_avg": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "industry_median": {
        -          "format": "double",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "metric": {
        -          "format": "double",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "percentile": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "ValuationMetrics": {
        -      "properties": {
        -        "dividend_yield": {
        -          "anyOf": [
        -            {
        -              "$ref": "#/$defs/ValuationMetric"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        },
        -        "pb": {
        -          "anyOf": [
        -            {
        -              "$ref": "#/$defs/ValuationMetric"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        },
        -        "pe": {
        -          "anyOf": [
        -            {
        -              "$ref": "#/$defs/ValuationMetric"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        },
        -        "ps": {
        -          "anyOf": [
        -            {
        -              "$ref": "#/$defs/ValuationMetric"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "ai_summary": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "ccy_symbol": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "date": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "indicator": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "metrics": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/ValuationMetrics"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    },
        -    "range": {
        -      "format": "int32",
        -      "type": [
        -        "integer",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedvaluation_comparison2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "ValuationComparisonHistoryPoint": {
        -      "properties": {
        -        "date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "pb": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "pe": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "ps": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "ValuationComparisonItem": {
        -      "properties": {
        -        "history": {
        -          "items": {
        -            "$ref": "#/$defs/ValuationComparisonHistoryPoint"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "market_value": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "pb": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "pe": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "price_close": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "ps": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "symbol": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "list": {
        -      "items": {
        -        "$ref": "#/$defs/ValuationComparisonItem"
        -      },
        -      "type": [
        -        "array",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedvaluation_history2 fields changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "$defs": {
        -    "ValuationHistoryBlock": {
        -      "properties": {
        -        "metrics": {
        -          "anyOf": [
        -            {
        -              "$ref": "#/$defs/ValuationHistoryMetrics"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "ValuationHistoryMetrics": {
        -      "properties": {
        -        "dividend_yield": {
        -          "items": {
        -            "$ref": "#/$defs/ValuationHistoryPoint"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "pb": {
        -          "items": {
        -            "$ref": "#/$defs/ValuationHistoryPoint"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "pe": {
        -          "items": {
        -            "$ref": "#/$defs/ValuationHistoryPoint"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        },
        -        "ps": {
        -          "items": {
        -            "$ref": "#/$defs/ValuationHistoryPoint"
        -          },
        -          "type": [
        -            "array",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "ValuationHistoryPoint": {
        -      "properties": {
        -        "timestamp": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "value": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "properties": {
        -    "history": {
        -      "anyOf": [
        -        {
        -          "$ref": "#/$defs/ValuationHistoryBlock"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedvaluation_rank1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedwarrant_issuers1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedwarrant_list1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedwarrant_quote1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedwatchlist1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
    • Changedwithdrawals1 field changed
      • addedInput schema / properties / _jq
        Added value: +{
        +  "type": "string"
        +}
  3. 13 tool updatesv0.10.2
    • Changedcancel_order2 fields changed
      • addedInput schema / properties / execute
        Added value: +{
        +  "description": "The `confirmation_code` from this order's dry run. WITHOUT IT NOTHING IS\nSENT.\n\nOmitted (the default) makes this a DRY RUN: the request is validated and\nechoed back with a three-digit `confirmation_code`, and nothing reaches\nthe exchange.\n\nRequired protocol: call once without `execute`, show the returned\npreview to the user, and call again quoting the code only after the user\nhas explicitly confirmed that exact order. The code is single use,\nexpires in 10 minutes, and applies only to this exact order — change any\nfield and it stops working. Never quote it back on your own initiative,\nand never in the same turn the user first asks.",
        +  "type": "string"
        +}
      • changedInput schema / properties / order_id / description
        Previous value: -"Order ID (from today's orders or order history)"New value: +"Order ID to cancel (from today's orders or order history)"
    • Changedfinance_calendar5 fields changed
      • changedInput schema / properties / end / description
        Previous value: -"End date in YYYY-MM-DD format (inclusive)"New value: +"End date in YYYY-MM-DD format (inclusive). Defaults to 7 days after `start`."
      • changedInput schema / properties / start / description
        Previous value: -"Start date in YYYY-MM-DD format (inclusive)"New value: +"Start date in YYYY-MM-DD format (inclusive). Defaults to today (UTC)."
      • changedInput schema / required
        Previous value: -[
        -  "category",
        -  "start",
        -  "end"
        -]New value: +[
        +  "category"
        +]
      • addedOutput schema / properties / partial
        Added value: +{
        +  "type": [
        +    "boolean",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / partial_reason
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedgrid_cancel1 field changed
      • addedInput schema / properties / execute
        Added value: +{
        +  "description": "The `confirmation_code` from this request's dry run. WITHOUT IT NOTHING\nIS SENT.\n\nOmitted (the default) makes this a DRY RUN: the request is validated and\nechoed back with a three-digit `confirmation_code`, and nothing reaches\nthe exchange.\n\nRequired protocol: call once without `execute`, show the returned\npreview to the user, and call again quoting the code only after the user\nhas explicitly confirmed it. The code is single use, expires in 10\nminutes, and applies only to this exact request — change any field and\nit stops working. A grid strategy keeps placing orders on its own once\nlive, so never quote the code back on your own initiative.",
        +  "type": "string"
        +}
    • Changedgrid_replace1 field changed
      • addedInput schema / properties / execute
        Added value: +{
        +  "description": "The `confirmation_code` from this request's dry run. WITHOUT IT NOTHING\nIS SENT.\n\nOmitted (the default) makes this a DRY RUN: the request is validated and\nechoed back with a three-digit `confirmation_code`, and nothing reaches\nthe exchange.\n\nRequired protocol: call once without `execute`, show the returned\npreview to the user, and call again quoting the code only after the user\nhas explicitly confirmed it. The code is single use, expires in 10\nminutes, and applies only to this exact request — change any field and\nit stops working. A grid strategy keeps placing orders on its own once\nlive, so never quote the code back on your own initiative.",
        +  "type": "string"
        +}
    • Changedgrid_restart1 field changed
      • addedInput schema / properties / execute
        Added value: +{
        +  "description": "The `confirmation_code` from this request's dry run. WITHOUT IT NOTHING\nIS SENT.\n\nOmitted (the default) makes this a DRY RUN: the request is validated and\nechoed back with a three-digit `confirmation_code`, and nothing reaches\nthe exchange.\n\nRequired protocol: call once without `execute`, show the returned\npreview to the user, and call again quoting the code only after the user\nhas explicitly confirmed it. The code is single use, expires in 10\nminutes, and applies only to this exact request — change any field and\nit stops working. A grid strategy keeps placing orders on its own once\nlive, so never quote the code back on your own initiative.",
        +  "type": "string"
        +}
    • Changedgrid_submit6 fields changed
      • addedInput schema / properties / execute
        Added value: +{
        +  "description": "The `confirmation_code` from this request's dry run. WITHOUT IT NOTHING\nIS SENT.\n\nOmitted (the default) makes this a DRY RUN: the request is validated and\nechoed back with a three-digit `confirmation_code`, and nothing reaches\nthe exchange.\n\nRequired protocol: call once without `execute`, show the returned\npreview to the user, and call again quoting the code only after the user\nhas explicitly confirmed it. The code is single use, expires in 10\nminutes, and applies only to this exact request — change any field and\nit stops working. A grid strategy keeps placing orders on its own once\nlive, so never quote the code back on your own initiative.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / dry_run
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / next_step
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / order_id / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedOutput schema / properties / preview
        Added value: +{}
      • changedOutput schema / required
        Previous value: -[
        -  "order_id"
        -]New value: +[
        +  "dry_run"
        +]
    • Changedgrid_suspend1 field changed
      • addedInput schema / properties / execute
        Added value: +{
        +  "description": "The `confirmation_code` from this request's dry run. WITHOUT IT NOTHING\nIS SENT.\n\nOmitted (the default) makes this a DRY RUN: the request is validated and\nechoed back with a three-digit `confirmation_code`, and nothing reaches\nthe exchange.\n\nRequired protocol: call once without `execute`, show the returned\npreview to the user, and call again quoting the code only after the user\nhas explicitly confirmed it. The code is single use, expires in 10\nminutes, and applies only to this exact request — change any field and\nit stops working. A grid strategy keeps placing orders on its own once\nlive, so never quote the code back on your own initiative.",
        +  "type": "string"
        +}
    • Changedhistory_candlesticks_by_date7 fields changed
      • addedInput schema / properties / forward_adjust / default
        Added value: +false
      • changedInput schema / properties / forward_adjust / description
        Previous value: -"Whether to forward-adjust for splits/dividends"New value: +"Whether to forward-adjust for splits/dividends (default: false / no adjust)"
      • addedInput schema / properties / period / default
        Added value: +"day"
      • changedInput schema / properties / period / description
        Previous value: -"Period: 1m, 5m, 15m, 30m, 60m, day, week, month, year"New value: +"Period: 1m, 5m, 15m, 30m, 60m, day, week, month, year (default: day)"
      • addedInput schema / properties / trade_sessions / default
        Added value: +"all"
      • changedInput schema / properties / trade_sessions / description
        Previous value: -"Trade sessions: \"intraday\" (regular hours only) or \"all\" (include pre-market and post-market)"New value: +"Trade sessions: \"intraday\" (regular hours only) or \"all\" (include pre-market and post-market; default \"all\")"
      • changedInput schema / required
        Previous value: -[
        -  "symbol",
        -  "period",
        -  "forward_adjust",
        -  "trade_sessions"
        -]New value: +[
        +  "symbol"
        +]
    • Changedhistory_candlesticks_by_offset11 fields changed
      • addedInput schema / properties / count / default
        Added value: +100
      • changedInput schema / properties / count / description
        Previous value: -"Number of candlesticks (max 1000)"New value: +"Number of candlesticks (optional, max 1000; default 100)"
      • addedInput schema / properties / forward / default
        Added value: +false
      • changedInput schema / properties / forward / description
        Previous value: -"Whether to query forward in time (true) or backward (false)"New value: +"Whether to query forward in time (true) or backward (false; default)"
      • addedInput schema / properties / forward_adjust / default
        Added value: +false
      • changedInput schema / properties / forward_adjust / description
        Previous value: -"Whether to forward-adjust for splits/dividends"New value: +"Whether to forward-adjust for splits/dividends (default: false / no adjust)"
      • addedInput schema / properties / period / default
        Added value: +"day"
      • changedInput schema / properties / period / description
        Previous value: -"Period: 1m, 5m, 15m, 30m, 60m, day, week, month, year"New value: +"Period: 1m, 5m, 15m, 30m, 60m, day, week, month, year (default: day)"
      • addedInput schema / properties / trade_sessions / default
        Added value: +"all"
      • changedInput schema / properties / trade_sessions / description
        Previous value: -"Trade sessions: \"intraday\" (regular hours only) or \"all\" (include pre-market and post-market)"New value: +"Trade sessions: \"intraday\" (regular hours only) or \"all\" (include pre-market and post-market; default \"all\")"
      • changedInput schema / required
        Previous value: -[
        -  "symbol",
        -  "period",
        -  "forward_adjust",
        -  "forward",
        -  "count",
        -  "trade_sessions"
        -]New value: +[
        +  "symbol"
        +]
    • Changedinstitution_rating1 field changed
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": [
        +    "array",
        +    "null"
        +  ]
        +}
    • Changedreplace_order1 field changed
      • addedInput schema / properties / execute
        Added value: +{
        +  "description": "The `confirmation_code` from this order's dry run. WITHOUT IT NOTHING IS\nSENT.\n\nOmitted (the default) makes this a DRY RUN: the request is validated and\nechoed back with a three-digit `confirmation_code`, and nothing reaches\nthe exchange.\n\nRequired protocol: call once without `execute`, show the returned\npreview to the user, and call again quoting the code only after the user\nhas explicitly confirmed that exact order. The code is single use,\nexpires in 10 minutes, and applies only to this exact order — change any\nfield and it stops working. Never quote it back on your own initiative,\nand never in the same turn the user first asks.",
        +  "type": "string"
        +}
    • Changedstock_positions1 field changed
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": [
        +    "array",
        +    "null"
        +  ]
        +}
    • Changedsubmit_order6 fields changed
      • addedInput schema / properties / execute
        Added value: +{
        +  "description": "The `confirmation_code` from this order's dry run. WITHOUT IT NOTHING IS\nSENT.\n\nOmitted (the default) makes this a DRY RUN: the request is validated and\nechoed back with a three-digit `confirmation_code`, and nothing reaches\nthe exchange.\n\nRequired protocol: call once without `execute`, show the returned\npreview to the user, and call again quoting the code only after the user\nhas explicitly confirmed that exact order. The code is single use,\nexpires in 10 minutes, and applies only to this exact order — change any\nfield and it stops working. Never quote it back on your own initiative,\nand never in the same turn the user first asks.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / dry_run
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / next_step
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / order_id / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedOutput schema / properties / preview
        Added value: +{}
      • changedOutput schema / required
        Previous value: -[
        -  "order_id"
        -]New value: +[
        +  "dry_run"
        +]
  4. 5 tool updatesv0.10.0
    • Addedsecurity_facts
    • Addedsignal_detail
    • Addedsignals
    • Changedstatement_list2 fields changed
      • removedInput schema / properties / limit / default
        Removed value: -null
      • changedInput schema / properties / limit / description
        Previous value: -"Number of records to return. Defaults to 30 for \"daily\" or 12 for \"monthly\"."New value: +"Number of records to return. Defaults to 30 for \"daily\" or 12 for \"monthly\".\n\nThe default depends on `statement_type`, so the schema declares none:\n`skip_serializing_if` is what stops schemars deriving `default: null`\nfrom `serde(default)`, which would contradict the integer type."
    • Changedtopic_replies2 fields changed
      • changedInput schema / properties / page / default
        Previous value: -nullNew value: +1
      • changedInput schema / properties / size / default
        Previous value: -nullNew value: +20
  5. 30 tool updatesv0.8.7
    • Changedcancel_order1 field changed
      • changedInput schema / properties / order_id / description
        Previous value: -"Order ID (returned by submit_order or listed in today_orders / history_orders)"New value: +"Order ID (from today's orders or order history)"
    • Changedcompany1 field changed
      • addedOutput schema / properties / description
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedcorp_action1 field changed
      • addedOutput schema / $defs / CorpActionItem / properties / description
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedexecutive1 field changed
      • addedOutput schema / $defs / ExecutiveMember / properties / title
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Addedgrid_cancel
    • Addedgrid_detail
    • Addedgrid_list
    • Addedgrid_list_by_ids
    • Addedgrid_questionnaire
    • Addedgrid_replace
    • Addedgrid_restart
    • Addedgrid_submit
    • Addedgrid_suspend
    • Addedgrid_symbol_info
    • Addedgrid_trigger_history
    • Changedhistory_market_temperature1 field changed
      • addedOutput schema / $defs / MarketTemperatureResponse / properties / description
        Added value: +{
        +  "type": "string"
        +}
    • Changedinvest_relation2 fields changed
      • addedOutput schema / $defs / InvestRelationItem / properties / description
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / $defs / InvestRelationItem / properties / title
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedmarket_temperature1 field changed
      • addedOutput schema / properties / description
        Added value: +{
        +  "type": "string"
        +}
    • Addednews_detail
    • Changedorder_detail1 field changed
      • changedInput schema / properties / order_id / description
        Previous value: -"Order ID (returned by submit_order or listed in today_orders / history_orders)"New value: +"Order ID (from today's orders or order history)"
    • Changedscreener_recommend_strategies1 field changed
      • addedOutput schema / $defs / ScreenerStrategyItem / properties / description
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedscreener_search2 fields changed
      • changedInput schema / properties / conditions / description
        Previous value: -"Mode B — Filter conditions as objects, passed directly to the API.\nEach item: {\"key\": \"KEY\", \"min\": \"10\", \"max\": \"50\", \"tech_values\": {}}\nThe \"filter_\" prefix is added automatically to the key if missing.\n\nFundamental keys (pass with or without filter_ prefix):\n  pettm  pbmrq  roe  roa  netmargin\n  salesgrowthyoy  netincomegrowthyoy  marketcap(亿)\n  circulating_marketcap(亿)  prevclose  prevchg(%)\n  divyld  la  epsttm  netincome(亿)  sales(亿)  turnover_rate  balance(万)\n\nTechnical indicator keys (tech_values required; call screener_indicators for schema):\n  macd_day/week  → {\"category\":\"goldenfork\"|\"deadcross\",\"period\":\"day\"|\"week\"}\n  rsi_day/week   → {\"value_type\":\"overbought\"|\"oversold\"}\n  kdj_day/week   → {\"category\":\"goldenfork\"|\"deadcross\"}\n  boll_day/week  → {\"category\":\"breakthrough_up\"|\"breakthrough_down\"}"New value: +"Mode B — Filter conditions, passed directly to the API. Omit for Mode A.\n\nFundamental keys (pass with or without filter_ prefix):\n  pettm  pbmrq  roe  roa  netmargin\n  salesgrowthyoy  netincomegrowthyoy  marketcap(亿)\n  circulating_marketcap(亿)  prevclose  prevchg(%)\n  divyld  la  epsttm  netincome(亿)  sales(亿)  turnover_rate  balance(万)\n\nTechnical indicator keys (tech_values required; call screener_indicators for schema):\n  macd_day/week  → {\"category\":\"goldenfork\"|\"deadcross\",\"period\":\"day\"|\"week\"}\n  rsi_day/week   → {\"value_type\":\"overbought\"|\"oversold\"}\n  kdj_day/week   → {\"category\":\"goldenfork\"|\"deadcross\"}\n  boll_day/week  → {\"category\":\"breakthrough_up\"|\"breakthrough_down\"}"
      • changedInput schema / properties / conditions / items
        Previous value: -trueNew value: +{
        +  "properties": {
        +    "key": {
        +      "description": "Indicator key; the \"filter_\" prefix is added automatically if missing.\nFundamental: pettm, pbmrq, roe, roa, netmargin, salesgrowthyoy, netincomegrowthyoy, marketcap, circulating_marketcap, prevclose, prevchg, divyld, la, epsttm, netincome, sales, turnover_rate, balance.\nTechnical: macd_day, macd_week, rsi_day, rsi_week, kdj_day, kdj_week, boll_day, boll_week.",
        +      "type": "string"
        +    },
        +    "max": {
        +      "description": "Upper bound as a numeric string, e.g. \"50\". Pass an empty string when unbounded or for technical keys.",
        +      "type": "string"
        +    },
        +    "min": {
        +      "description": "Lower bound as a numeric string, e.g. \"10\". Pass an empty string when unbounded or for technical keys.",
        +      "type": "string"
        +    },
        +    "tech_values": {
        +      "description": "Technical-indicator params as a JSON string (empty string for fundamental keys):\nmacd_day/week: {\"category\":\"goldenfork\"|\"deadcross\",\"period\":\"day\"|\"week\"}\nrsi_day/week: {\"value_type\":\"overbought\"|\"oversold\"}\nkdj_day/week: {\"category\":\"goldenfork\"|\"deadcross\"}\nboll_day/week: {\"category\":\"breakthrough_up\"|\"breakthrough_down\"}",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "key"
        +  ],
        +  "type": "object"
        +}
    • Changedscreener_user_strategies1 field changed
      • addedOutput schema / $defs / ScreenerStrategyItem / properties / description
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedshareholder_top1 field changed
      • addedOutput schema / $defs / ShareholderTopHolder / properties / title
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedsharelist_create1 field changed
      • addedOutput schema / properties / description
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedsharelist_detail1 field changed
      • addedOutput schema / properties / description
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedsharelist_list1 field changed
      • addedOutput schema / $defs / SharelistSummary / properties / description
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedsharelist_popular1 field changed
      • addedOutput schema / $defs / SharelistSummary / properties / description
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedtop_movers3 fields changed
      • removedInput schema / properties / next_params / additionalProperties
        Removed value: -true
      • addedInput schema / properties / next_params / properties / visited
        Added value: +{
        +  "description": "Event IDs already seen in previous pages. Pass back verbatim from the previous response — do not fabricate.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / next_params / required
        Added value: +[
        +  "visited"
        +]
    • Changedtopic_detail2 fields changed
      • addedOutput schema / properties / description
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / title
        Added value: +{
        +  "type": "string"
        +}
  6. 14 tool updatesv0.8.4
    • Changedcompany5 fields changed
      • addedOutput schema / properties / ccy_symbol
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / detail_url
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / intro
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / share_list
        Added value: +{
        +  "items": true,
        +  "type": [
        +    "array",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / top_rank_tags
        Added value: +{
        +  "items": true,
        +  "type": [
        +    "array",
        +    "null"
        +  ]
        +}
    • Changedconsensus7 fields changed
      • addedOutput schema / $defs / UsConsensusEstimate
        Added value: +{
        +  "properties": {
        +    "actual": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "estimate": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / $defs / UsConsensusPeriod
        Added value: +{
        +  "properties": {
        +    "ebit": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/UsConsensusEstimate"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "eps": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/UsConsensusEstimate"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "fiscal_year": {
        +      "format": "int32",
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "report_txt": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "revenue": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/UsConsensusEstimate"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / ai_summary
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / currency
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / list
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/UsConsensusPeriod"
        +  },
        +  "type": [
        +    "array",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / opt_reports
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": [
        +    "array",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / report
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changeddividend7 fields changed
      • addedOutput schema / $defs / UsDividendHistoryYear
        Added value: +{
        +  "properties": {
        +    "currency": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "dividend": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "dividend_growth_rate": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "dividend_payout_ratio": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "dividend_to_cashflow_ratio": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "dividend_yield": {
        +      "format": "double",
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "fiscal_year": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "fiscal_year_range": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / $defs / UsDividendPayout
        Added value: +{
        +  "properties": {
        +    "currency": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "dividend": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "dividend_type": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "ex_date": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "payment_date": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "record_date": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / $defs / UsRecentDividends
        Added value: +{
        +  "properties": {
        +    "currency": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "dividend_ttm": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "dividend_yield_ttm": {
        +      "format": "double",
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "payouts": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / dividend_history
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/UsDividendHistoryYear"
        +  },
        +  "type": [
        +    "array",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / dividend_payout_history
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/UsDividendPayout"
        +  },
        +  "type": [
        +    "array",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / payout_ratios
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/UsDividendHistoryYear"
        +  },
        +  "type": [
        +    "array",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / recent_dividends
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/UsRecentDividends"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Addedetf_docs
    • Changedfinancial_report1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "FinancialReportBalancePeriod": {
        +      "properties": {
        +        "debt_assets_ratio": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "report": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/FinancialReportPeriodMeta"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "total_assets": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "total_liabilities": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "FinancialReportCashFlowPeriod": {
        +      "properties": {
        +        "financing": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "investing": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "operating": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "report": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/FinancialReportPeriodMeta"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "FinancialReportField": {
        +      "properties": {
        +        "display_order": {
        +          "format": "int32",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "field": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "level": {
        +          "format": "int32",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "value": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "value_type": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "yoy": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "FinancialReportIncomePeriod": {
        +      "properties": {
        +        "net_income": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "net_margin": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "report": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/FinancialReportPeriodMeta"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "revenue": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "FinancialReportPeriodMeta": {
        +      "properties": {
        +        "end_date": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "report_txt": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "start_date": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "FinancialStatementPeriod": {
        +      "properties": {
        +        "ff_period": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "ff_year": {
        +          "format": "int32",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "fields": {
        +          "items": {
        +            "$ref": "#/$defs/FinancialReportField"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "fp_end": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "report_txt": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "rpt_date": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "bs_list": {
        +      "items": {
        +        "$ref": "#/$defs/FinancialReportBalancePeriod"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "ccy_symbol": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "cf_list": {
        +      "items": {
        +        "$ref": "#/$defs/FinancialReportCashFlowPeriod"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "currency": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "empty_fields": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "is_list": {
        +      "items": {
        +        "$ref": "#/$defs/FinancialReportIncomePeriod"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "list": {
        +      "items": {
        +        "$ref": "#/$defs/FinancialStatementPeriod"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "report": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "report_type": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedfinancial_report_key_metrics
    • Changedfinancial_statement1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "FinancialReportField": {
        +      "properties": {
        +        "display_order": {
        +          "format": "int32",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "field": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "level": {
        +          "format": "int32",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "value": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "value_type": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "yoy": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "FinancialStatementKind": {
        +      "properties": {
        +        "currency": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "empty_fields": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "list": {
        +          "items": {
        +            "$ref": "#/$defs/FinancialStatementPeriod"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "report": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "FinancialStatementPeriod": {
        +      "properties": {
        +        "ff_period": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "ff_year": {
        +          "format": "int32",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "fields": {
        +          "items": {
        +            "$ref": "#/$defs/FinancialReportField"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "fp_end": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "report_txt": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "rpt_date": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "balance_sheet": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/FinancialStatementKind"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "cash_flow": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/FinancialStatementKind"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "currency": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "empty_fields": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "income_statement": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/FinancialStatementKind"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "list": {
        +      "items": {
        +        "$ref": "#/$defs/FinancialStatementPeriod"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "report": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedhistory_executions2 fields changed
      • addedInput schema / properties / us_limit
        Added value: +{
        +  "description": "US accounts only, history_orders tool only: page size (default 20).",
        +  "format": "int32",
        +  "type": "integer"
        +}
      • addedInput schema / properties / us_page
        Added value: +{
        +  "description": "US accounts only, history_orders tool only: page number (default 1).",
        +  "format": "int32",
        +  "type": "integer"
        +}
    • Changedhistory_orders2 fields changed
      • addedInput schema / properties / us_limit
        Added value: +{
        +  "description": "US accounts only, history_orders tool only: page size (default 20).",
        +  "format": "int32",
        +  "type": "integer"
        +}
      • addedInput schema / properties / us_page
        Added value: +{
        +  "description": "US accounts only, history_orders tool only: page number (default 1).",
        +  "format": "int32",
        +  "type": "integer"
        +}
    • Changedorder_detail17 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "UsOrderDetail": {
        +    "properties": {
        +      "action": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "currency": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "done_at": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "executed_amount": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "executed_price": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "executed_qty": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "id": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "operate_direction": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "order_histories": {
        +        "items": {
        +          "$ref": "#/$defs/UsOrderHistoryEntry"
        +        },
        +        "type": [
        +          "array",
        +          "null"
        +        ]
        +      },
        +      "order_type": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "price": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "quantity": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "security_type": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "submitted_at": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "symbol": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "time_in_force": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "UsOrderHistoryEntry": {
        +    "properties": {
        +      "occurred_at": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "price": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "qty": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "status": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • changedOutput schema / properties / currency / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedOutput schema / properties / current_millisecond
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / executed_quantity / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / msg / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • addedOutput schema / properties / order
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/UsOrderDetail"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / order_id / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / order_type / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / quantity / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / side / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / status / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / stock_name / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / submitted_at / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / symbol / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / tag / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / time_in_force / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / required
        Removed value: -[
        -  "order_id",
        -  "status",
        -  "symbol",
        -  "stock_name",
        -  "quantity",
        -  "executed_quantity",
        -  "submitted_at",
        -  "side",
        -  "order_type",
        -  "msg",
        -  "tag",
        -  "time_in_force",
        -  "currency"
        -]
    • Addedprofit_analysis_realized
    • Changedstock_positions6 fields changed
      • addedOutput schema / $defs / UsAssetOverview
        Added value: +{
        +  "properties": {
        +    "account_type": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "cash_buy_power": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "cash_list": {
        +      "items": {
        +        "$ref": "#/$defs/UsCashPosition"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "crypto_list": {
        +      "items": {
        +        "$ref": "#/$defs/UsCryptoPosition"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "currency": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "multi_leg": {},
        +    "option_list": {
        +      "items": {
        +        "$ref": "#/$defs/UsOptionPosition"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "overnight_buy_power": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "stock_list": {
        +      "items": {
        +        "$ref": "#/$defs/UsStockPosition"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / $defs / UsCashPosition
        Added value: +{
        +  "properties": {
        +    "currency": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "frozen_buy_cash": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "outstanding": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "settled_cash": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "total_amount": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "total_cash": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / $defs / UsCryptoPosition
        Added value: +{
        +  "properties": {
        +    "average_cost": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "currency": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "symbol": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / $defs / UsOptionPosition
        Added value: +{
        +  "properties": {
        +    "average_cost": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "currency": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "due_date": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "market_price": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "name": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "position_side": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "quantity": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "strike_price": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "symbol": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "today_pl": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "type": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "underlying_code": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / $defs / UsStockPosition
        Added value: +{
        +  "properties": {
        +    "average_cost": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "currency": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "industry_name": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "last_done": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "market": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "market_price": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "name": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "position_side": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "prev_close": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "quantity": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "symbol": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "today_pl": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / us_asset_overview
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/UsAssetOverview"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Changedtoday_orders3 fields changed
      • addedInput schema / properties / us_action
        Added value: +{
        +  "description": "US accounts only: filter by side, \"Buy\" or \"Sell\". Omit for all.",
        +  "type": "string"
        +}
      • addedInput schema / properties / us_limit
        Added value: +{
        +  "description": "US accounts only: page size (default 20).",
        +  "format": "int32",
        +  "type": "integer"
        +}
      • addedInput schema / properties / us_page
        Added value: +{
        +  "description": "US accounts only: page number (default 1).",
        +  "format": "int32",
        +  "type": "integer"
        +}
    • Changedvaluation8 fields changed
      • addedOutput schema / $defs / ValuationMetric / properties / desc
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / $defs / ValuationMetric / properties / industry_median
        Added value: +{
        +  "format": "double",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / $defs / ValuationMetric / properties / metric
        Added value: +{
        +  "format": "double",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / ai_summary
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / ccy_symbol
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / date
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / indicator
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / range
        Added value: +{
        +  "format": "int32",
        +  "type": [
        +    "integer",
        +    "null"
        +  ]
        +}
  7. 2 tool updatesv0.7.4
    • Changedmacrodata1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "MacroeconomicDataPoint": {
        +      "properties": {
        +        "actual_value": {
        +          "type": "string"
        +        },
        +        "forecast_value": {
        +          "type": "string"
        +        },
        +        "period": {
        +          "type": "string"
        +        },
        +        "previous_value": {
        +          "type": "string"
        +        },
        +        "release_at": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "unit": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "period",
        +        "actual_value",
        +        "previous_value",
        +        "forecast_value",
        +        "unit"
        +      ],
        +      "type": "object"
        +    },
        +    "MacroeconomicIndicator": {
        +      "properties": {
        +        "country": {
        +          "type": "string"
        +        },
        +        "describe": {
        +          "type": "string"
        +        },
        +        "importance": {
        +          "format": "int32",
        +          "type": "integer"
        +        },
        +        "indicator_code": {
        +          "type": "string"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "periodicity": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "indicator_code",
        +        "country",
        +        "name",
        +        "describe",
        +        "periodicity",
        +        "importance"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "count": {
        +      "format": "int32",
        +      "type": "integer"
        +    },
        +    "data": {
        +      "items": {
        +        "$ref": "#/$defs/MacroeconomicDataPoint"
        +      },
        +      "type": "array"
        +    },
        +    "info": {
        +      "$ref": "#/$defs/MacroeconomicIndicator"
        +    }
        +  },
        +  "required": [
        +    "info",
        +    "data",
        +    "count"
        +  ],
        +  "type": "object"
        +}
    • Changedmacrodata_indicators1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "MacroeconomicIndicator": {
        +      "properties": {
        +        "country": {
        +          "type": "string"
        +        },
        +        "describe": {
        +          "type": "string"
        +        },
        +        "importance": {
        +          "format": "int32",
        +          "type": "integer"
        +        },
        +        "indicator_code": {
        +          "type": "string"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "periodicity": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "indicator_code",
        +        "country",
        +        "name",
        +        "describe",
        +        "periodicity",
        +        "importance"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "count": {
        +      "format": "int32",
        +      "type": "integer"
        +    },
        +    "list": {
        +      "items": {
        +        "$ref": "#/$defs/MacroeconomicIndicator"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "list",
        +    "count"
        +  ],
        +  "type": "object"
        +}
  8. 132 tool updatesv0.7.1
    • Changedaccount_balance1 field changed
      • removedInput schema / title
        Removed value: -"AccountBalanceParam"
    • Changedah_premium1 field changed
      • removedInput schema / title
        Removed value: -"AhPremiumParam"
    • Changedah_premium_intraday1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedalert_add1 field changed
      • removedInput schema / title
        Removed value: -"AlertAddParam"
    • Changedalert_delete1 field changed
      • removedInput schema / title
        Removed value: -"AlertIdParam"
    • Changedalert_disable1 field changed
      • removedInput schema / title
        Removed value: -"AlertIdParam"
    • Changedalert_enable1 field changed
      • removedInput schema / title
        Removed value: -"AlertIdParam"
    • Changedanomaly1 field changed
      • removedInput schema / title
        Removed value: -"AnomalyParam"
    • Changedbroker_holding1 field changed
      • removedInput schema / title
        Removed value: -"BrokerHoldingParam"
    • Changedbroker_holding_daily1 field changed
      • removedInput schema / title
        Removed value: -"BrokerHoldingDailyParam"
    • Changedbroker_holding_detail1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedbrokers1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedbusiness_segments1 field changed
      • removedInput schema / title
        Removed value: -"BusinessSegmentsParam"
    • Changedbusiness_segments_history1 field changed
      • removedInput schema / title
        Removed value: -"BusinessSegmentsHistoryParam"
    • Changedcalc_indexes1 field changed
      • removedInput schema / title
        Removed value: -"CalcIndexesParam"
    • Changedcancel_order1 field changed
      • removedInput schema / title
        Removed value: -"OrderIdParam"
    • Changedcandlesticks1 field changed
      • removedInput schema / title
        Removed value: -"CandlesticksParam"
    • Changedcapital_distribution1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedcapital_flow1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedcash_flow1 field changed
      • removedInput schema / title
        Removed value: -"CashFlowParam"
    • Changedcompany1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedconsensus1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedconstituent1 field changed
      • removedInput schema / title
        Removed value: -"IndexSymbolParam"
    • Changedcorp_action1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedcreate_watchlist_group1 field changed
      • removedInput schema / title
        Removed value: -"CreateWatchlistGroupParam"
    • Changeddca_check1 field changed
      • removedInput schema / title
        Removed value: -"DcaCheckParam"
    • Changeddca_create1 field changed
      • removedInput schema / title
        Removed value: -"DcaCreateParam"
    • Changeddca_history1 field changed
      • removedInput schema / title
        Removed value: -"DcaHistoryParam"
    • Changeddca_list1 field changed
      • removedInput schema / title
        Removed value: -"DcaListParam"
    • Changeddca_pause1 field changed
      • removedInput schema / title
        Removed value: -"DcaPlanIdParam"
    • Changeddca_resume1 field changed
      • removedInput schema / title
        Removed value: -"DcaPlanIdParam"
    • Changeddca_stats1 field changed
      • removedInput schema / title
        Removed value: -"DcaStatsParam"
    • Changeddca_stop1 field changed
      • removedInput schema / title
        Removed value: -"DcaPlanIdParam"
    • Changeddca_update1 field changed
      • removedInput schema / title
        Removed value: -"DcaUpdateParam"
    • Changeddelete_watchlist_group1 field changed
      • removedInput schema / title
        Removed value: -"DeleteWatchlistGroupParam"
    • Changeddeposits1 field changed
      • removedInput schema / title
        Removed value: -"DepositParam"
    • Changeddepth1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changeddividend1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changeddividend_detail1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedestimate_max_purchase_quantity1 field changed
      • removedInput schema / title
        Removed value: -"EstimateMaxQtyParam"
    • Changedexecutive1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedfilings1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedfinance_calendar1 field changed
      • removedInput schema / title
        Removed value: -"FinanceCalendarParam"
    • Changedfinancial_report1 field changed
      • removedInput schema / title
        Removed value: -"FinancialReportParam"
    • Changedfinancial_report_latest1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedfinancial_report_snapshot1 field changed
      • removedInput schema / title
        Removed value: -"FinancialReportSnapshotParam"
    • Changedfinancial_statement1 field changed
      • removedInput schema / title
        Removed value: -"FinancialStatementParam"
    • Changedforecast_eps1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedfund_holder1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedhistory_candlesticks_by_date1 field changed
      • removedInput schema / title
        Removed value: -"HistoryCandlesticksByDateParam"
    • Changedhistory_candlesticks_by_offset1 field changed
      • removedInput schema / title
        Removed value: -"HistoryCandlesticksByOffsetParam"
    • Changedhistory_executions1 field changed
      • removedInput schema / title
        Removed value: -"HistoryOrdersParam"
    • Changedhistory_market_temperature1 field changed
      • removedInput schema / title
        Removed value: -"MarketDateRangeParam"
    • Changedhistory_orders1 field changed
      • removedInput schema / title
        Removed value: -"HistoryOrdersParam"
    • Changedindustry_peers1 field changed
      • removedInput schema / title
        Removed value: -"IndustryPeersParam"
    • Changedindustry_rank1 field changed
      • removedInput schema / title
        Removed value: -"IndustryRankParam"
    • Changedindustry_valuation1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedindustry_valuation_dist1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedinstitution_rating1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedinstitution_rating_detail1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedinstitution_rating_history1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedinstitution_rating_industry_rank1 field changed
      • removedInput schema / title
        Removed value: -"InstitutionRatingIndustryRankParam"
    • Changedinstitutional_views1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedintraday1 field changed
      • removedInput schema / title
        Removed value: -"IntradayParam"
    • Changedinvest_relation1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedipo_detail1 field changed
      • removedInput schema / title
        Removed value: -"IpoDetailParam"
    • Changedipo_listed1 field changed
      • removedInput schema / title
        Removed value: -"IpoListedParam"
    • Changedipo_order_detail1 field changed
      • removedInput schema / title
        Removed value: -"IpoOrderDetailParam"
    • Changedipo_orders1 field changed
      • removedInput schema / title
        Removed value: -"IpoOrdersParam"
    • Changedipo_profit_loss1 field changed
      • removedInput schema / title
        Removed value: -"IpoProfitLossParam"
    • Addedmacrodata
    • Addedmacrodata_indicators
    • Changedmargin_ratio1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedmarket_temperature1 field changed
      • removedInput schema / title
        Removed value: -"MarketParam"
    • Changednews1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changednews_search1 field changed
      • removedInput schema / title
        Removed value: -"NewsSearchParam"
    • Changedoperating1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedoption_chain_expiry_date_list1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedoption_chain_info_by_date1 field changed
      • removedInput schema / title
        Removed value: -"SymbolDateParam"
    • Changedoption_quote1 field changed
      • removedInput schema / title
        Removed value: -"SymbolsParam"
    • Changedoption_volume1 field changed
      • removedInput schema / title
        Removed value: -"OptionVolumeParam"
    • Changedoption_volume_daily1 field changed
      • removedInput schema / title
        Removed value: -"OptionVolumeDailyParam"
    • Changedorder_detail1 field changed
      • removedInput schema / title
        Removed value: -"OrderIdParam"
    • Changedprofit_analysis1 field changed
      • removedInput schema / title
        Removed value: -"ProfitAnalysisParam"
    • Changedprofit_analysis_detail1 field changed
      • removedInput schema / title
        Removed value: -"ProfitAnalysisDetailParam"
    • Changedquant_run2 fields changed
      • removedInput schema / description
        Removed value: -"Parameters for running an indicator script against historical K-line data:\ntarget symbol, date range, K-line period, the script source itself, and\noptional script inputs."
      • removedInput schema / title
        Removed value: -"RunScriptParam"
    • Changedquote1 field changed
      • removedInput schema / title
        Removed value: -"SymbolsParam"
    • Changedrank_list1 field changed
      • removedInput schema / title
        Removed value: -"RankListParam"
    • Changedreplace_order1 field changed
      • removedInput schema / title
        Removed value: -"ReplaceOrderParam"
    • Changedscreener_indicators1 field changed
      • removedInput schema / title
        Removed value: -"ScreenerIndicatorsParam"
    • Changedscreener_recommend_strategies1 field changed
      • removedInput schema / title
        Removed value: -"ScreenerRecommendStrategiesParam"
    • Changedscreener_search1 field changed
      • removedInput schema / title
        Removed value: -"ScreenerSearchParam"
    • Changedscreener_strategy1 field changed
      • removedInput schema / title
        Removed value: -"ScreenerStrategyParam"
    • Changedscreener_user_strategies1 field changed
      • removedInput schema / title
        Removed value: -"ScreenerUserStrategiesParam"
    • Changedsecurity_list1 field changed
      • removedInput schema / title
        Removed value: -"SecurityListParam"
    • Changedshareholder1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedshareholder_detail1 field changed
      • removedInput schema / title
        Removed value: -"ShareholderDetailParam"
    • Changedshareholder_top1 field changed
      • removedInput schema / title
        Removed value: -"ShareholderTopParam"
    • Changedsharelist_add1 field changed
      • removedInput schema / title
        Removed value: -"SharelistItemsParam"
    • Changedsharelist_create1 field changed
      • removedInput schema / title
        Removed value: -"SharelistCreateParam"
    • Changedsharelist_delete1 field changed
      • removedInput schema / title
        Removed value: -"SharelistIdParam"
    • Changedsharelist_detail1 field changed
      • removedInput schema / title
        Removed value: -"SharelistIdParam"
    • Changedsharelist_list1 field changed
      • removedInput schema / title
        Removed value: -"SharelistCountParam"
    • Changedsharelist_popular1 field changed
      • removedInput schema / title
        Removed value: -"SharelistCountParam"
    • Changedsharelist_remove1 field changed
      • removedInput schema / title
        Removed value: -"SharelistItemsParam"
    • Changedsharelist_sort1 field changed
      • removedInput schema / title
        Removed value: -"SharelistItemsParam"
    • Changedshort_positions1 field changed
      • removedInput schema / title
        Removed value: -"ShortPositionsParam"
    • Changedshort_trades1 field changed
      • removedInput schema / title
        Removed value: -"ShortTradesParam"
    • Changedstatement_export1 field changed
      • removedInput schema / title
        Removed value: -"StatementExportParam"
    • Changedstatement_list1 field changed
      • removedInput schema / title
        Removed value: -"StatementListParam"
    • Changedstatic_info1 field changed
      • removedInput schema / title
        Removed value: -"SymbolsParam"
    • Changedsubmit_order1 field changed
      • removedInput schema / title
        Removed value: -"SubmitOrderParam"
    • Changedtoday_executions1 field changed
      • removedInput schema / title
        Removed value: -"TodayExecutionsParam"
    • Changedtoday_orders1 field changed
      • removedInput schema / title
        Removed value: -"TodayOrdersParam"
    • Changedtop_movers1 field changed
      • removedInput schema / title
        Removed value: -"StockEventsParam"
    • Changedtopic1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedtopic_create1 field changed
      • removedInput schema / title
        Removed value: -"TopicCreateParam"
    • Changedtopic_create_reply1 field changed
      • removedInput schema / title
        Removed value: -"TopicCreateReplyParam"
    • Changedtopic_detail1 field changed
      • removedInput schema / title
        Removed value: -"TopicIdParam"
    • Changedtopic_replies1 field changed
      • removedInput schema / title
        Removed value: -"TopicRepliesParam"
    • Changedtopic_search1 field changed
      • removedInput schema / title
        Removed value: -"TopicSearchParam"
    • Changedtrade_stats1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedtrades1 field changed
      • removedInput schema / title
        Removed value: -"SymbolCountParam"
    • Changedtrading_days1 field changed
      • removedInput schema / title
        Removed value: -"MarketDateRangeParam"
    • Changedupdate_watchlist_group1 field changed
      • removedInput schema / title
        Removed value: -"UpdateWatchlistGroupParam"
    • Changedvaluation1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedvaluation_comparison1 field changed
      • removedInput schema / title
        Removed value: -"ValuationComparisonParam"
    • Changedvaluation_history1 field changed
      • removedInput schema / title
        Removed value: -"SymbolParam"
    • Changedvaluation_rank1 field changed
      • removedInput schema / title
        Removed value: -"ValuationRankParam"
    • Changedwarrant_list1 field changed
      • removedInput schema / title
        Removed value: -"WarrantListParam"
    • Changedwarrant_quote1 field changed
      • removedInput schema / title
        Removed value: -"SymbolsParam"
    • Changedwithdrawals1 field changed
      • removedInput schema / title
        Removed value: -"WithdrawalParam"
  9. 81 tool updatesv0.6.0
    • Changedalert_disable5 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `alert_enable` / `alert_disable`. The handler builds this exact\nobject on success."
      • removedOutput schema / properties / alert_id / description
        Removed value: -"The alert (indicator) ID that was toggled."
      • removedOutput schema / properties / enabled / description
        Removed value: -"New enabled state: `true` for enable, `false` for disable."
      • removedOutput schema / title
        Removed value: -"AlertToggleResponse"
    • Changedalert_enable5 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `alert_enable` / `alert_disable`. The handler builds this exact\nobject on success."
      • removedOutput schema / properties / alert_id / description
        Removed value: -"The alert (indicator) ID that was toggled."
      • removedOutput schema / properties / enabled / description
        Removed value: -"New enabled state: `true` for enable, `false` for disable."
      • removedOutput schema / title
        Removed value: -"AlertToggleResponse"
    • Changedalert_list15 fields changed
      • removedOutput schema / $defs / AlertIndicator / description
        Removed value: -"A single configured price-alert indicator."
      • removedOutput schema / $defs / AlertIndicator / properties / condition / description
        Removed value: -"Alert condition."
      • removedOutput schema / $defs / AlertIndicator / properties / enabled / description
        Removed value: -"Whether the alert is currently enabled."
      • removedOutput schema / $defs / AlertIndicator / properties / frequency / description
        Removed value: -"Alert frequency."
      • removedOutput schema / $defs / AlertIndicator / properties / id / description
        Removed value: -"Alert (indicator) ID. Use as `alert_id` in alert_delete/enable/disable."
      • removedOutput schema / $defs / AlertIndicator / properties / indicator_id / description
        Removed value: -"Indicator type ID."
      • removedOutput schema / $defs / AlertIndicator / properties / price / description
        Removed value: -"Threshold price or percentage value."
      • removedOutput schema / $defs / AlertIndicator / properties / triggered_at / description
        Removed value: -"Time the alert last triggered (RFC3339), if any."
      • removedOutput schema / $defs / AlertSymbolGroup / description
        Removed value: -"A group of alert indicators configured for one security."
      • removedOutput schema / $defs / AlertSymbolGroup / properties / indicators / description
        Removed value: -"Configured alert indicators for this symbol."
      • removedOutput schema / $defs / AlertSymbolGroup / properties / symbol / description
        Removed value: -"Security symbol (upstream `counter_id`, normalized to `<CODE>.<MARKET>`)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `alert_list`. The upstream price-alert payload, forwarded after\nthe standard transform (note: upstream `counter_id` is renamed to `symbol`\nand `*_at` timestamps become RFC3339). Subset of the wire payload — only the\ndocumented fields are declared; all are optional."
      • removedOutput schema / properties / lists / description
        Removed value: -"Per-symbol alert groups."
      • removedOutput schema / title
        Removed value: -"AlertListResponse"
    • Changedanomaly9 fields changed
      • removedOutput schema / $defs / AnomalyChange / properties / change_rate / description
        Removed value: -"Price change rate (decimal ratio)."
      • removedOutput schema / $defs / AnomalyChange / properties / name / description
        Removed value: -"Display name of the security."
      • removedOutput schema / $defs / AnomalyChange / properties / symbol / description
        Removed value: -"Security symbol, e.g. \"700.HK\"."
      • removedOutput schema / $defs / AnomalyChange / properties / volume / description
        Removed value: -"Traded volume associated with the anomaly."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `anomaly`. Wraps a `changes` array of unusual price/volume\nalerts plus an `all_off` flag. Subset of the wire response — the\ndescription marks `changes[]` as having further undocumented fields."
      • removedOutput schema / properties / all_off / description
        Removed value: -"Whether anomaly alerting is globally off for the market."
      • removedOutput schema / properties / changes / description
        Removed value: -"Anomaly alert entries."
      • removedOutput schema / title
        Removed value: -"AnomalyResponse"
    • Changedbroker_holding8 fields changed
      • removedOutput schema / $defs / BrokerHoldingItem / properties / broker_name / description
        Removed value: -"Broker (participant) name."
      • removedOutput schema / $defs / BrokerHoldingItem / properties / holding_change / description
        Removed value: -"Change in shares held over the period."
      • removedOutput schema / $defs / BrokerHoldingItem / properties / holding_quantity / description
        Removed value: -"Shares held by this broker."
      • removedOutput schema / $defs / BrokerHoldingItem / properties / holding_ratio / description
        Removed value: -"Holding as a ratio of total issued shares."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `broker_holding`. Wraps an `items` array of top broker holdings\nfor an HK stock (HKEX CCASS participant disclosure). Subset of the wire\nresponse."
      • removedOutput schema / properties / items / description
        Removed value: -"Top broker holding entries for the requested period."
      • removedOutput schema / title
        Removed value: -"BrokerHoldingResponse"
    • Changedbroker_holding_daily8 fields changed
      • removedOutput schema / $defs / BrokerHoldingDailyItem / properties / date / description
        Removed value: -"Disclosure date (yyyy-mm-dd)."
      • removedOutput schema / $defs / BrokerHoldingDailyItem / properties / holding_change / description
        Removed value: -"Change in shares held versus the prior day."
      • removedOutput schema / $defs / BrokerHoldingDailyItem / properties / holding_quantity / description
        Removed value: -"Shares held by this broker on that date."
      • removedOutput schema / $defs / BrokerHoldingDailyItem / properties / holding_ratio / description
        Removed value: -"Holding as a ratio of total issued shares."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `broker_holding_daily`. Wraps an `items` array of the daily\nholding history for one broker in an HK stock. Subset of the wire response."
      • removedOutput schema / properties / items / description
        Removed value: -"Daily holding history entries."
      • removedOutput schema / title
        Removed value: -"BrokerHoldingDailyResponse"
    • Changedbroker_holding_detail10 fields changed
      • removedOutput schema / $defs / BrokerHoldingDetailItem / properties / broker_id / description
        Removed value: -"Broker (participant) number."
      • removedOutput schema / $defs / BrokerHoldingDetailItem / properties / broker_name / description
        Removed value: -"Broker (participant) name."
      • removedOutput schema / $defs / BrokerHoldingDetailItem / properties / date / description
        Removed value: -"Disclosure date (yyyy-mm-dd)."
      • removedOutput schema / $defs / BrokerHoldingDetailItem / properties / holding_change / description
        Removed value: -"Change in shares held."
      • removedOutput schema / $defs / BrokerHoldingDetailItem / properties / holding_quantity / description
        Removed value: -"Shares held by this broker."
      • removedOutput schema / $defs / BrokerHoldingDetailItem / properties / holding_ratio / description
        Removed value: -"Holding as a ratio of total issued shares."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `broker_holding_detail`. Wraps an `items` array of the full\nbroker holding list for an HK stock (HKEX CCASS participant disclosure).\nSubset of the wire response."
      • removedOutput schema / properties / items / description
        Removed value: -"Full broker holding detail entries."
      • removedOutput schema / title
        Removed value: -"BrokerHoldingDetailResponse"
    • Changedbrokers7 fields changed
      • removedOutput schema / $defs / BrokerLevel / properties / broker_ids / description
        Removed value: -"Broker IDs queueing at this level. Map them to names via `participants`."
      • removedOutput schema / $defs / BrokerLevel / properties / position / description
        Removed value: -"Position number (1-based, depth ordering)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `brokers`. Bid/ask broker queues for a security."
      • removedOutput schema / properties / ask_brokers / description
        Removed value: -"Ask brokers, best price first."
      • removedOutput schema / properties / bid_brokers / description
        Removed value: -"Bid brokers, best price first."
      • removedOutput schema / title
        Removed value: -"BrokersResponse"
    • Changedbusiness_segments_history14 fields changed
      • removedOutput schema / $defs / BusinessSegmentsHistoryPeriod / description
        Removed value: -"One period snapshot in `business_segments_history`'s `historical`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / BusinessSegmentsHistoryPeriod / properties / business / description
        Removed value: -"Revenue by business line."
      • removedOutput schema / $defs / BusinessSegmentsHistoryPeriod / properties / currency / description
        Removed value: -"Settlement currency."
      • removedOutput schema / $defs / BusinessSegmentsHistoryPeriod / properties / date / description
        Removed value: -"Period date."
      • removedOutput schema / $defs / BusinessSegmentsHistoryPeriod / properties / regionals / description
        Removed value: -"Revenue by region."
      • removedOutput schema / $defs / BusinessSegmentsHistoryPeriod / properties / total / description
        Removed value: -"Total revenue for the period."
      • removedOutput schema / $defs / SegmentBreakdown / description
        Removed value: -"One segment breakdown entry in `business_segments_history`\n(`business[]` / `regionals[]`).\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / SegmentBreakdown / properties / name / description
        Removed value: -"Segment / region name."
      • removedOutput schema / $defs / SegmentBreakdown / properties / percent / description
        Removed value: -"Percentage of total."
      • removedOutput schema / $defs / SegmentBreakdown / properties / value / description
        Removed value: -"Absolute value."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `business_segments_history`. Wraps a `historical` array of\nper-period segment snapshots.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / historical / description
        Removed value: -"Per-period segment snapshots."
      • removedOutput schema / title
        Removed value: -"BusinessSegmentsHistoryResponse"
    • Changedcapital_distribution9 fields changed
      • removedOutput schema / $defs / CapitalDistribution / properties / large / description
        Removed value: -"Capital from large orders."
      • removedOutput schema / $defs / CapitalDistribution / properties / medium / description
        Removed value: -"Capital from medium orders."
      • removedOutput schema / $defs / CapitalDistribution / properties / small / description
        Removed value: -"Capital from small orders."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `capital_distribution`."
      • removedOutput schema / properties / capital_in / description
        Removed value: -"Inflow capital broken down by order size."
      • removedOutput schema / properties / capital_out / description
        Removed value: -"Outflow capital broken down by order size."
      • removedOutput schema / properties / timestamp / description
        Removed value: -"Snapshot timestamp (RFC3339)."
      • removedOutput schema / title
        Removed value: -"CapitalDistributionResponse"
    • Changedcompany12 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `company`. Company overview / profile.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / ceo / description
        Removed value: -"Chief Executive Officer."
      • removedOutput schema / properties / description
        Removed value: -{
        -  "description": "Business profile / description.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / employees / description
        Removed value: -"Number of employees."
      • removedOutput schema / properties / exchange / description
        Removed value: -"Listing exchange."
      • removedOutput schema / properties / founded_year / description
        Removed value: -"Year the company was founded."
      • removedOutput schema / properties / industry / description
        Removed value: -"Industry classification."
      • removedOutput schema / properties / market_cap / description
        Removed value: -"Market capitalization."
      • removedOutput schema / properties / name / description
        Removed value: -"Company name."
      • removedOutput schema / properties / website / description
        Removed value: -"Company website."
      • removedOutput schema / title
        Removed value: -"CompanyResponse"
    • Changedconsensus11 fields changed
      • removedOutput schema / $defs / ConsensusItem / description
        Removed value: -"One record in `consensus`'s `items`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / ConsensusItem / properties / analyst_count / description
        Removed value: -"Number of contributing analysts."
      • removedOutput schema / $defs / ConsensusItem / properties / eps_estimate / description
        Removed value: -"EPS estimate."
      • removedOutput schema / $defs / ConsensusItem / properties / last_updated / description
        Removed value: -"Last update time."
      • removedOutput schema / $defs / ConsensusItem / properties / net_income_estimate / description
        Removed value: -"Net income estimate."
      • removedOutput schema / $defs / ConsensusItem / properties / period / description
        Removed value: -"Estimate period."
      • removedOutput schema / $defs / ConsensusItem / properties / revenue_estimate / description
        Removed value: -"Revenue estimate."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `consensus`. Wraps an `items` array of consensus estimates.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / items / description
        Removed value: -"Consensus estimate records for upcoming periods."
      • removedOutput schema / title
        Removed value: -"ConsensusResponse"
    • Changedcorp_action9 fields changed
      • removedOutput schema / $defs / CorpActionItem / description
        Removed value: -"One event in `corp_action`'s `items`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / CorpActionItem / properties / action_type / description
        Removed value: -"Action type (split, buyback, name change, ...)."
      • removedOutput schema / $defs / CorpActionItem / properties / description
        Removed value: -{
        -  "description": "Free-text description.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / $defs / CorpActionItem / properties / effective_date / description
        Removed value: -"Effective date."
      • removedOutput schema / $defs / CorpActionItem / properties / ratio / description
        Removed value: -"Ratio (e.g. for splits)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `corp_action`. Wraps an `items` array of corporate actions.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / items / description
        Removed value: -"Corporate action events."
      • removedOutput schema / title
        Removed value: -"CorpActionResponse"
    • Changedcreate_watchlist_group4 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `create_watchlist_group`."
      • removedOutput schema / properties / id / description
        Removed value: -"The newly-created watchlist group ID. Pass this to\n`update_watchlist_group` / `delete_watchlist_group`."
      • removedOutput schema / title
        Removed value: -"CreateWatchlistGroupResponse"
    • Changeddca_check8 fields changed
      • removedOutput schema / $defs / DcaCheckItem / description
        Removed value: -"DCA-eligibility result for one symbol."
      • removedOutput schema / $defs / DcaCheckItem / properties / reason / description
        Removed value: -"Reason when unsupported."
      • removedOutput schema / $defs / DcaCheckItem / properties / support_dca / description
        Removed value: -"Whether the symbol supports DCA recurring investment."
      • removedOutput schema / $defs / DcaCheckItem / properties / symbol / description
        Removed value: -"Security symbol."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `dca_check`. DCA-eligibility result per queried symbol,\nforwarded after the standard transform (upstream `counter_ids` query →\nper-symbol items). Subset of the wire payload — only documented fields are\ndeclared; all optional."
      • removedOutput schema / properties / items / description
        Removed value: -"Per-symbol support results."
      • removedOutput schema / title
        Removed value: -"DcaCheckResponse"
    • Changeddca_history11 fields changed
      • removedOutput schema / $defs / DcaExecution / description
        Removed value: -"A single DCA plan execution record."
      • removedOutput schema / $defs / DcaExecution / properties / amount / description
        Removed value: -"Amount invested (decimal string)."
      • removedOutput schema / $defs / DcaExecution / properties / date / description
        Removed value: -"Execution date."
      • removedOutput schema / $defs / DcaExecution / properties / order_id / description
        Removed value: -"Resulting order ID, if any."
      • removedOutput schema / $defs / DcaExecution / properties / price / description
        Removed value: -"Execution price (decimal string)."
      • removedOutput schema / $defs / DcaExecution / properties / quantity / description
        Removed value: -"Quantity acquired (decimal string)."
      • removedOutput schema / $defs / DcaExecution / properties / status / description
        Removed value: -"Execution status."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `dca_history`. Execution records for one DCA plan, forwarded\nafter the standard transform. Subset of the wire payload — only documented\nfields are declared; all optional."
      • removedOutput schema / properties / executions / description
        Removed value: -"Execution records."
      • removedOutput schema / title
        Removed value: -"DcaHistoryResponse"
    • Changeddca_list12 fields changed
      • removedOutput schema / $defs / DcaPlan / description
        Removed value: -"A single DCA recurring-investment plan."
      • removedOutput schema / $defs / DcaPlan / properties / amount / description
        Removed value: -"Amount invested per cycle (decimal string)."
      • removedOutput schema / $defs / DcaPlan / properties / currency / description
        Removed value: -"Settlement currency."
      • removedOutput schema / $defs / DcaPlan / properties / frequency / description
        Removed value: -"Investment frequency (Daily / Weekly / Monthly)."
      • removedOutput schema / $defs / DcaPlan / properties / next_execution_date / description
        Removed value: -"Next scheduled execution date (RFC3339; upstream `next_trd_date`)."
      • removedOutput schema / $defs / DcaPlan / properties / plan_id / description
        Removed value: -"Plan ID. Use with dca_update / dca_pause / dca_resume / dca_stop."
      • removedOutput schema / $defs / DcaPlan / properties / status / description
        Removed value: -"Plan status (Active / Suspended / Finished)."
      • removedOutput schema / $defs / DcaPlan / properties / symbol / description
        Removed value: -"Security symbol (e.g. \"AAPL.US\")."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `dca_list`. Upstream DCA plan-query payload forwarded after the\nstandard transform; the `next_trd_date` unix field is converted to RFC3339.\nSubset of the wire payload — only documented fields are declared; all\noptional."
      • removedOutput schema / properties / plans / description
        Removed value: -"Recurring-investment (DCA) plans."
      • removedOutput schema / title
        Removed value: -"DcaListResponse"
    • Changeddca_stats14 fields changed
      • removedOutput schema / $defs / DcaStatsItem / description
        Removed value: -"Per-symbol DCA statistics line."
      • removedOutput schema / $defs / DcaStatsItem / properties / invested / description
        Removed value: -"Amount invested in this symbol (decimal string)."
      • removedOutput schema / $defs / DcaStatsItem / properties / return_rate / description
        Removed value: -"Return rate for this symbol (decimal string)."
      • removedOutput schema / $defs / DcaStatsItem / properties / symbol / description
        Removed value: -"Security symbol."
      • removedOutput schema / $defs / DcaStatsItem / properties / value / description
        Removed value: -"Current value of this symbol's position (decimal string)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `dca_stats`. Aggregate DCA statistics forwarded after the\nstandard transform. Subset of the wire payload — only documented fields are\ndeclared; all optional."
      • removedOutput schema / properties / items / description
        Removed value: -"Per-symbol breakdown."
      • removedOutput schema / properties / plan_count / description
        Removed value: -"Number of plans included."
      • removedOutput schema / properties / return_rate / description
        Removed value: -"Overall return rate (decimal string)."
      • removedOutput schema / properties / total_invested / description
        Removed value: -"Total amount invested across plans (decimal string)."
      • removedOutput schema / properties / total_return / description
        Removed value: -"Total return (decimal string)."
      • removedOutput schema / properties / total_value / description
        Removed value: -"Current total market value (decimal string)."
      • removedOutput schema / title
        Removed value: -"DcaStatsResponse"
    • Changeddelete_watchlist_group5 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `delete_watchlist_group`."
      • removedOutput schema / properties / deleted / description
        Removed value: -"Always `true` on success."
      • removedOutput schema / properties / id / description
        Removed value: -"The deleted watchlist group ID (echoed from the request)."
      • removedOutput schema / title
        Removed value: -"DeleteWatchlistGroupResponse"
    • Changeddepth9 fields changed
      • removedOutput schema / $defs / DepthLevel / properties / order_num / description
        Removed value: -"Number of orders sitting at this price level."
      • removedOutput schema / $defs / DepthLevel / properties / position / description
        Removed value: -"Position number (1-based, depth ordering)."
      • removedOutput schema / $defs / DepthLevel / properties / price / description
        Removed value: -"Price at this level. May be null when the level is empty."
      • removedOutput schema / $defs / DepthLevel / properties / volume / description
        Removed value: -"Total quantity at this price level."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `depth`. Snapshot of the bid/ask order book."
      • removedOutput schema / properties / asks / description
        Removed value: -"Ask levels, best price first."
      • removedOutput schema / properties / bids / description
        Removed value: -"Bid levels, best price first."
      • removedOutput schema / title
        Removed value: -"DepthResponse"
    • Changeddividend12 fields changed
      • removedOutput schema / $defs / DividendItem / description
        Removed value: -"One dividend event in `dividend`'s `items`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / DividendItem / properties / amount / description
        Removed value: -"Dividend amount."
      • removedOutput schema / $defs / DividendItem / properties / currency / description
        Removed value: -"Settlement currency."
      • removedOutput schema / $defs / DividendItem / properties / dividend_type / description
        Removed value: -"Dividend type."
      • removedOutput schema / $defs / DividendItem / properties / ex_date / description
        Removed value: -"Ex-dividend date."
      • removedOutput schema / $defs / DividendItem / properties / pay_date / description
        Removed value: -"Payment date."
      • removedOutput schema / $defs / DividendItem / properties / record_date / description
        Removed value: -"Record date."
      • removedOutput schema / $defs / DividendItem / properties / status / description
        Removed value: -"Dividend status."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `dividend`. Wraps an `items` array of dividend events.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / items / description
        Removed value: -"Dividend events for the symbol."
      • removedOutput schema / title
        Removed value: -"DividendResponse"
    • Changeddividend_detail12 fields changed
      • removedOutput schema / $defs / DividendDetailItem / description
        Removed value: -"One distribution scheme in `dividend_detail`'s `details`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / DividendDetailItem / properties / cash_dividend / description
        Removed value: -"Cash dividend per share."
      • removedOutput schema / $defs / DividendDetailItem / properties / currency / description
        Removed value: -"Settlement currency."
      • removedOutput schema / $defs / DividendDetailItem / properties / ex_date / description
        Removed value: -"Ex-dividend date."
      • removedOutput schema / $defs / DividendDetailItem / properties / pay_date / description
        Removed value: -"Payment date."
      • removedOutput schema / $defs / DividendDetailItem / properties / period / description
        Removed value: -"Reporting period."
      • removedOutput schema / $defs / DividendDetailItem / properties / record_date / description
        Removed value: -"Record date."
      • removedOutput schema / $defs / DividendDetailItem / properties / stock_dividend / description
        Removed value: -"Stock dividend ratio / amount."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `dividend_detail`. Wraps a `details` array of distribution\nschemes.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / details / description
        Removed value: -"Per-period distribution schemes."
      • removedOutput schema / title
        Removed value: -"DividendDetailResponse"
    • Changedestimate_max_purchase_quantity5 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `estimate_max_purchase_quantity`.\n\nBoth quantities are `Decimal` upstream and become strings after the\n`to_tool_json` serializer pipeline (snake_case + decimal stringification)."
      • removedOutput schema / properties / cash_max_qty / description
        Removed value: -"Maximum buy/sell quantity using cash buying power."
      • removedOutput schema / properties / margin_max_qty / description
        Removed value: -"Maximum buy/sell quantity using margin buying power."
      • removedOutput schema / title
        Removed value: -"EstimateMaxQtyResponse"
    • Changedexecutive11 fields changed
      • removedOutput schema / $defs / ExecutiveMember / description
        Removed value: -"One person in `executive`'s `members`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / ExecutiveMember / properties / age / description
        Removed value: -"Age."
      • removedOutput schema / $defs / ExecutiveMember / properties / appointed_date / description
        Removed value: -"Date appointed."
      • removedOutput schema / $defs / ExecutiveMember / properties / biography / description
        Removed value: -"Biography."
      • removedOutput schema / $defs / ExecutiveMember / properties / compensation / description
        Removed value: -"Compensation."
      • removedOutput schema / $defs / ExecutiveMember / properties / name / description
        Removed value: -"Full name."
      • removedOutput schema / $defs / ExecutiveMember / properties / title
        Removed value: -{
        -  "description": "Title / role.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `executive`. Wraps a `members` array of executives / board\nmembers.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / members / description
        Removed value: -"Executive and board members."
      • removedOutput schema / title
        Removed value: -"ExecutiveResponse"
    • Changedfinance_calendar10 fields changed
      • removedOutput schema / $defs / FinanceCalendarBucket / properties / date / description
        Removed value: -"Bucket date (yyyy-mm-dd)."
      • removedOutput schema / $defs / FinanceCalendarBucket / properties / infos / description
        Removed value: -"Events occurring on this date."
      • removedOutput schema / $defs / FinanceCalendarEvent / properties / datetime / description
        Removed value: -"Event time (RFC3339)."
      • removedOutput schema / $defs / FinanceCalendarEvent / properties / id / description
        Removed value: -"Event ID (may be empty for events without one, e.g. market closures)."
      • removedOutput schema / $defs / FinanceCalendarEvent / properties / market / description
        Removed value: -"Market code, e.g. \"US\" / \"HK\"."
      • removedOutput schema / $defs / FinanceCalendarEvent / properties / symbol / description
        Removed value: -"Security symbol when the event is stock-specific, e.g. \"AAPL.US\"."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `finance_calendar`. Wraps a `list` array of date buckets, each\nholding an `infos` array of events. Subset of the wire response — the\nevent field set varies by `category` (report / dividend / split / ipo /\nmacrodata / closed) and is only partially documented, so only the keys the\nmerge/dedup pipeline relies on are modeled here."
      • removedOutput schema / properties / list / description
        Removed value: -"Date buckets, sorted ascending by date."
      • removedOutput schema / title
        Removed value: -"FinanceCalendarResponse"
    • Changedfinancial_report_latest10 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `financial_report_latest`. Latest financial report summary.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / eps / description
        Removed value: -"Earnings per share."
      • removedOutput schema / properties / gross_margin / description
        Removed value: -"Gross margin."
      • removedOutput schema / properties / net_income / description
        Removed value: -"Net income."
      • removedOutput schema / properties / period / description
        Removed value: -"Reporting period."
      • removedOutput schema / properties / report_date / description
        Removed value: -"Report date."
      • removedOutput schema / properties / revenue / description
        Removed value: -"Revenue."
      • removedOutput schema / properties / roe / description
        Removed value: -"Return on equity."
      • removedOutput schema / title
        Removed value: -"FinancialReportLatestResponse"
    • Changedfinancial_report_snapshot10 fields changed
      • removedOutput schema / $defs / ForecastActual / description
        Removed value: -"An actual-vs-forecast comparison block in `financial_report_snapshot`\n(`fo_revenue` / `fo_ebit` / `fo_eps`).\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / ForecastActual / properties / cmp / description
        Removed value: -"Actual vs forecast comparison."
      • removedOutput schema / $defs / ForecastActual / properties / yoy / description
        Removed value: -"Year-over-year change."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `financial_report_snapshot`. Actual-vs-forecast comparison\nplus financial ratios.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / fo_ebit / description
        Removed value: -"EBIT: actual vs forecast."
      • removedOutput schema / properties / fo_eps / description
        Removed value: -"EPS: actual vs forecast."
      • removedOutput schema / properties / fo_revenue / description
        Removed value: -"Revenue: actual vs forecast."
      • removedOutput schema / properties / report_desc / description
        Removed value: -"Text summary of the report."
      • removedOutput schema / title
        Removed value: -"FinancialReportSnapshotResponse"
    • Changedforecast_eps11 fields changed
      • removedOutput schema / $defs / ForecastEpsItem / description
        Removed value: -"One record in `forecast_eps`'s `items`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / ForecastEpsItem / properties / analyst_count / description
        Removed value: -"Number of contributing analysts."
      • removedOutput schema / $defs / ForecastEpsItem / properties / eps_actual / description
        Removed value: -"Actual reported EPS."
      • removedOutput schema / $defs / ForecastEpsItem / properties / eps_estimate / description
        Removed value: -"Consensus EPS estimate."
      • removedOutput schema / $defs / ForecastEpsItem / properties / forecast_end_date / description
        Removed value: -"Forecast period end (RFC3339; rewritten from a unix-epoch field)."
      • removedOutput schema / $defs / ForecastEpsItem / properties / forecast_start_date / description
        Removed value: -"Forecast period start (RFC3339; rewritten from a unix-epoch field)."
      • removedOutput schema / $defs / ForecastEpsItem / properties / surprise_pct / description
        Removed value: -"Surprise percentage (actual vs estimate)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `forecast_eps`. Wraps an `items` array of EPS estimates.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / items / description
        Removed value: -"EPS forecast / actual records."
      • removedOutput schema / title
        Removed value: -"ForecastEpsResponse"
    • Changedfund_holder11 fields changed
      • removedOutput schema / $defs / FundHolderItem / description
        Removed value: -"One holder in `fund_holder`'s `fund_holders`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / FundHolderItem / properties / change / description
        Removed value: -"Change in shares."
      • removedOutput schema / $defs / FundHolderItem / properties / fund_name / description
        Removed value: -"Fund name."
      • removedOutput schema / $defs / FundHolderItem / properties / fund_symbol / description
        Removed value: -"Fund symbol."
      • removedOutput schema / $defs / FundHolderItem / properties / ratio / description
        Removed value: -"Ownership ratio."
      • removedOutput schema / $defs / FundHolderItem / properties / reported_at / description
        Removed value: -"Report date."
      • removedOutput schema / $defs / FundHolderItem / properties / shares / description
        Removed value: -"Shares held."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `fund_holder`. Wraps a `fund_holders` array.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / fund_holders / description
        Removed value: -"Funds / ETFs that hold the symbol."
      • removedOutput schema / title
        Removed value: -"FundHolderResponse"
    • Changedfund_positions12 fields changed
      • removedOutput schema / $defs / FundPosition / properties / cost_net_asset_value / description
        Removed value: -"Cost net asset value."
      • removedOutput schema / $defs / FundPosition / properties / currency / description
        Removed value: -"Settlement currency."
      • removedOutput schema / $defs / FundPosition / properties / current_net_asset_value / description
        Removed value: -"Net asset value at last settlement."
      • removedOutput schema / $defs / FundPosition / properties / holding_units / description
        Removed value: -"Number of fund units held."
      • removedOutput schema / $defs / FundPosition / properties / net_asset_value_day / description
        Removed value: -"Settlement timestamp (RFC3339)."
      • removedOutput schema / $defs / FundPosition / properties / symbol / description
        Removed value: -"Fund ISIN code."
      • removedOutput schema / $defs / FundPosition / properties / symbol_name / description
        Removed value: -"Display name of the fund."
      • removedOutput schema / $defs / FundPositionChannel / properties / account_channel / description
        Removed value: -"Broker channel identifier. Always emitted as `null` for privacy."
      • removedOutput schema / $defs / FundPositionChannel / properties / fund_info / description
        Removed value: -"Fund positions held in this channel."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `fund_positions`. Same channel-list shape as\n`StockPositionsResponse`, but with fund-specific position fields."
      • removedOutput schema / title
        Removed value: -"FundPositionsResponse"
    • Changedhistory_market_temperature11 fields changed
      • removedOutput schema / $defs / MarketTemperatureResponse / description
        Removed value: -"Returned by `market_temperature`."
      • removedOutput schema / $defs / MarketTemperatureResponse / properties / description
        Removed value: -{
        -  "description": "Human-readable temperature description (locale-aware).",
        -  "type": "string"
        -}
      • removedOutput schema / $defs / MarketTemperatureResponse / properties / sentiment / description
        Removed value: -"Market sentiment indicator (0-100)."
      • removedOutput schema / $defs / MarketTemperatureResponse / properties / temperature / description
        Removed value: -"Temperature value (0-100)."
      • removedOutput schema / $defs / MarketTemperatureResponse / properties / timestamp / description
        Removed value: -"Snapshot timestamp (RFC3339)."
      • removedOutput schema / $defs / MarketTemperatureResponse / properties / valuation / description
        Removed value: -"Market valuation indicator (0-100)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `history_market_temperature`."
      • removedOutput schema / properties / list / description
        Removed value: -"Per-period samples in chronological order."
      • removedOutput schema / properties / type / description
        Removed value: -"Granularity, e.g. \"day\"."
      • removedOutput schema / title
        Removed value: -"HistoryMarketTemperatureResponse"
    • Changedindustry_peers15 fields changed
      • removedOutput schema / $defs / IndustryPeersNode / description
        Removed value: -"One node in `industry_peers`' `chain` tree. Self-referential via `next`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / IndustryPeersNode / properties / chg / description
        Removed value: -"Daily change."
      • removedOutput schema / $defs / IndustryPeersNode / properties / counter_id / description
        Removed value: -"Node identifier (transformed from `counter_id`)."
      • removedOutput schema / $defs / IndustryPeersNode / properties / name / description
        Removed value: -"Node name."
      • removedOutput schema / $defs / IndustryPeersNode / properties / next / description
        Removed value: -"Child sub-sector nodes."
      • removedOutput schema / $defs / IndustryPeersNode / properties / stock_num / description
        Removed value: -"Number of stocks in this sub-sector."
      • removedOutput schema / $defs / IndustryPeersNode / properties / ytd_chg / description
        Removed value: -"Year-to-date change."
      • removedOutput schema / $defs / IndustryPeersTop / description
        Removed value: -"`top` block of `industry_peers`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / IndustryPeersTop / properties / market / description
        Removed value: -"Market code."
      • removedOutput schema / $defs / IndustryPeersTop / properties / name / description
        Removed value: -"Industry group name."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `industry_peers`. A hierarchical sub-sector tree (`chain`) plus\nthe originating industry group (`top`).\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / chain / description
        Removed value: -"Root node of the sub-sector tree."
      • removedOutput schema / properties / top / description
        Removed value: -"The originating industry group."
      • removedOutput schema / title
        Removed value: -"IndustryPeersResponse"
    • Changedindustry_valuation16 fields changed
      • removedOutput schema / $defs / IndustryValuationHistoryPoint / description
        Removed value: -"One history point in `industry_valuation`'s nested `history`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / IndustryValuationHistoryPoint / properties / date / description
        Removed value: -"Sample date (RFC3339; rewritten from a unix-epoch field)."
      • removedOutput schema / $defs / IndustryValuationHistoryPoint / properties / pb / description
        Removed value: -"Price-to-book at this date."
      • removedOutput schema / $defs / IndustryValuationHistoryPoint / properties / pe / description
        Removed value: -"Price-to-earnings at this date."
      • removedOutput schema / $defs / IndustryValuationItem / description
        Removed value: -"One peer in `industry_valuation`'s `list`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / IndustryValuationItem / properties / dividend_yield / description
        Removed value: -"Dividend yield."
      • removedOutput schema / $defs / IndustryValuationItem / properties / history / description
        Removed value: -"Per-date history of PE/PB."
      • removedOutput schema / $defs / IndustryValuationItem / properties / name / description
        Removed value: -"Display name."
      • removedOutput schema / $defs / IndustryValuationItem / properties / pb / description
        Removed value: -"Price-to-book."
      • removedOutput schema / $defs / IndustryValuationItem / properties / pe / description
        Removed value: -"Price-to-earnings."
      • removedOutput schema / $defs / IndustryValuationItem / properties / ps / description
        Removed value: -"Price-to-sales."
      • removedOutput schema / $defs / IndustryValuationItem / properties / symbol / description
        Removed value: -"Security symbol (transformed from `counter_id`)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `industry_valuation`. Wraps a `list` of industry peers.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / list / description
        Removed value: -"Peers in the same industry."
      • removedOutput schema / title
        Removed value: -"IndustryValuationResponse"
    • Changedindustry_valuation_dist15 fields changed
      • removedOutput schema / $defs / IndustryValuationDistribution / description
        Removed value: -"One indicator's distribution stats in `industry_valuation_dist`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / IndustryValuationDistribution / properties / current_percentile / description
        Removed value: -"Where the stock currently sits in this distribution."
      • removedOutput schema / $defs / IndustryValuationDistribution / properties / max / description
        Removed value: -"Maximum value."
      • removedOutput schema / $defs / IndustryValuationDistribution / properties / median / description
        Removed value: -"Median."
      • removedOutput schema / $defs / IndustryValuationDistribution / properties / min / description
        Removed value: -"Minimum value."
      • removedOutput schema / $defs / IndustryValuationDistribution / properties / p25 / description
        Removed value: -"25th percentile."
      • removedOutput schema / $defs / IndustryValuationDistribution / properties / p75 / description
        Removed value: -"75th percentile."
      • removedOutput schema / $defs / IndustryValuationDistributions / description
        Removed value: -"`distributions` block of `industry_valuation_dist`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / IndustryValuationDistributions / properties / pb / description
        Removed value: -"Price-to-book distribution."
      • removedOutput schema / $defs / IndustryValuationDistributions / properties / pe / description
        Removed value: -"Price-to-earnings distribution."
      • removedOutput schema / $defs / IndustryValuationDistributions / properties / ps / description
        Removed value: -"Price-to-sales distribution."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `industry_valuation_dist`. Per-indicator distribution stats\ngrouped under `distributions`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / distributions / description
        Removed value: -"Per-indicator distribution blocks."
      • removedOutput schema / title
        Removed value: -"IndustryValuationDistResponse"
    • Changedinstitution_rating13 fields changed
      • removedOutput schema / $defs / InstitutionRatingAnalyst / description
        Removed value: -"Analyst consensus block of `institution_rating`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / InstitutionRatingAnalyst / properties / buy / description
        Removed value: -"Number of analysts rating \"buy\"."
      • removedOutput schema / $defs / InstitutionRatingAnalyst / properties / consensus_rating / description
        Removed value: -"Consensus rating label."
      • removedOutput schema / $defs / InstitutionRatingAnalyst / properties / hold / description
        Removed value: -"Number of analysts rating \"hold\"."
      • removedOutput schema / $defs / InstitutionRatingAnalyst / properties / outperform / description
        Removed value: -"Number of analysts rating \"outperform\"."
      • removedOutput schema / $defs / InstitutionRatingAnalyst / properties / sell / description
        Removed value: -"Number of analysts rating \"sell\"."
      • removedOutput schema / $defs / InstitutionRatingAnalyst / properties / target_price / description
        Removed value: -"Consensus target price."
      • removedOutput schema / $defs / InstitutionRatingAnalyst / properties / underperform / description
        Removed value: -"Number of analysts rating \"underperform\"."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `institution_rating`.\n\nThe tool combines two upstream calls into\n`{\"analyst\": {...}, \"instratings\": [...]}`. Only the `analyst` fields are\ndocumented; the `instratings` payload shape is unspecified and left as raw\nJSON. Subset of documented fields; upstream may return more."
      • removedOutput schema / properties / analyst / description
        Removed value: -"Analyst rating consensus summary."
      • removedOutput schema / properties / instratings / description
        Removed value: -"Per-institution rating list. Shape is unspecified by the tool\ndescription; passed through as raw JSON."
      • removedOutput schema / title
        Removed value: -"InstitutionRatingResponse"
    • Changedinstitution_rating_detail12 fields changed
      • removedOutput schema / $defs / InstitutionRatingDetailItem / description
        Removed value: -"One per-institution record in `institution_rating_detail`'s `target.list`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / InstitutionRatingDetailItem / properties / analyst / description
        Removed value: -"Analyst name."
      • removedOutput schema / $defs / InstitutionRatingDetailItem / properties / firm / description
        Removed value: -"Issuing firm / institution name."
      • removedOutput schema / $defs / InstitutionRatingDetailItem / properties / rating / description
        Removed value: -"Rating label."
      • removedOutput schema / $defs / InstitutionRatingDetailItem / properties / target_price / description
        Removed value: -"Target price."
      • removedOutput schema / $defs / InstitutionRatingDetailItem / properties / timestamp / description
        Removed value: -"Rating timestamp (RFC3339; rewritten from a unix-epoch field)."
      • removedOutput schema / $defs / InstitutionRatingDetailTarget / description
        Removed value: -"`target` block of `institution_rating_detail`."
      • removedOutput schema / $defs / InstitutionRatingDetailTarget / properties / list / description
        Removed value: -"Per-institution rating records."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `institution_rating_detail`.\n\nDetailed historical institution ratings and target price history, grouped\nunder `target.list[]`. Subset of documented fields; upstream may return\nmore."
      • removedOutput schema / properties / target / description
        Removed value: -"Target-price / rating history container."
      • removedOutput schema / title
        Removed value: -"InstitutionRatingDetailResponse"
    • Changedinstitution_rating_history16 fields changed
      • removedOutput schema / $defs / EvaluateHistoryItem / description
        Removed value: -"One rating-evaluation change in `institution_rating_history`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / EvaluateHistoryItem / properties / date / description
        Removed value: -"Change date."
      • removedOutput schema / $defs / EvaluateHistoryItem / properties / firm / description
        Removed value: -"Issuing firm."
      • removedOutput schema / $defs / EvaluateHistoryItem / properties / new_rating / description
        Removed value: -"New rating."
      • removedOutput schema / $defs / EvaluateHistoryItem / properties / old_rating / description
        Removed value: -"Prior rating."
      • removedOutput schema / $defs / TargetHistoryItem / description
        Removed value: -"One target-price revision in `institution_rating_history`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / TargetHistoryItem / properties / analyst / description
        Removed value: -"Analyst name."
      • removedOutput schema / $defs / TargetHistoryItem / properties / date / description
        Removed value: -"Revision date."
      • removedOutput schema / $defs / TargetHistoryItem / properties / firm / description
        Removed value: -"Issuing firm."
      • removedOutput schema / $defs / TargetHistoryItem / properties / new_target / description
        Removed value: -"New target price."
      • removedOutput schema / $defs / TargetHistoryItem / properties / old_target / description
        Removed value: -"Prior target price."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `institution_rating_history`. Two history arrays: target-price\nrevisions and rating-evaluation changes.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / evaluate_history / description
        Removed value: -"Rating-evaluation changes."
      • removedOutput schema / properties / target_history / description
        Removed value: -"Target-price revisions."
      • removedOutput schema / title
        Removed value: -"InstitutionRatingHistoryResponse"
    • Changedinstitution_rating_industry_rank12 fields changed
      • removedOutput schema / $defs / InstitutionRatingIndustryRankItem / description
        Removed value: -"One peer in `institution_rating_industry_rank`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / InstitutionRatingIndustryRankItem / properties / buy_count / description
        Removed value: -"Buy rating count."
      • removedOutput schema / $defs / InstitutionRatingIndustryRankItem / properties / consensus_rating / description
        Removed value: -"Consensus rating label."
      • removedOutput schema / $defs / InstitutionRatingIndustryRankItem / properties / name / description
        Removed value: -"Display name."
      • removedOutput schema / $defs / InstitutionRatingIndustryRankItem / properties / sell_count / description
        Removed value: -"Sell rating count."
      • removedOutput schema / $defs / InstitutionRatingIndustryRankItem / properties / symbol / description
        Removed value: -"Security symbol (transformed from `counter_id`)."
      • removedOutput schema / $defs / InstitutionRatingIndustryRankItem / properties / target_price / description
        Removed value: -"Target price."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `institution_rating_industry_rank`. Peers ranked by analyst\nratings.\n\nThe tool description says `list[]`, while the implementation transforms a\ntop-level `items[]` array (rewriting `counter_id` → `symbol`). Both names\nare modelled so the schema matches whichever the upstream emits. Subset of\ndocumented fields; upstream may return more."
      • removedOutput schema / properties / items / description
        Removed value: -"Ranked peers (key the implementation transforms in place)."
      • removedOutput schema / properties / list / description
        Removed value: -"Ranked peers (description's documented key)."
      • removedOutput schema / title
        Removed value: -"InstitutionRatingIndustryRankResponse"
    • Changedinstitutional_views12 fields changed
      • removedOutput schema / $defs / InstitutionalViewsMonth / description
        Removed value: -"One month in `institutional_views`'s `months`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / InstitutionalViewsMonth / properties / buy / description
        Removed value: -"Buy count."
      • removedOutput schema / $defs / InstitutionalViewsMonth / properties / date / description
        Removed value: -"Month date (RFC3339; rewritten from a unix-epoch field)."
      • removedOutput schema / $defs / InstitutionalViewsMonth / properties / hold / description
        Removed value: -"Hold count."
      • removedOutput schema / $defs / InstitutionalViewsMonth / properties / outperform / description
        Removed value: -"Outperform count."
      • removedOutput schema / $defs / InstitutionalViewsMonth / properties / sell / description
        Removed value: -"Sell count."
      • removedOutput schema / $defs / InstitutionalViewsMonth / properties / total / description
        Removed value: -"Total ratings."
      • removedOutput schema / $defs / InstitutionalViewsMonth / properties / underperform / description
        Removed value: -"Underperform count."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `institutional_views`. Wraps a `months` array of monthly\nrating-distribution snapshots.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / months / description
        Removed value: -"Monthly rating-distribution snapshots."
      • removedOutput schema / title
        Removed value: -"InstitutionalViewsResponse"
    • Changedinvest_relation10 fields changed
      • removedOutput schema / $defs / InvestRelationItem / description
        Removed value: -"One event in `invest_relation`'s `items`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / InvestRelationItem / properties / description
        Removed value: -{
        -  "description": "Free-text description.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / $defs / InvestRelationItem / properties / event_date / description
        Removed value: -"Event date."
      • removedOutput schema / $defs / InvestRelationItem / properties / event_type / description
        Removed value: -"Event type."
      • removedOutput schema / $defs / InvestRelationItem / properties / title
        Removed value: -{
        -  "description": "Event title.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / $defs / InvestRelationItem / properties / url / description
        Removed value: -"Related URL."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `invest_relation`. Wraps an `items` array of IR events.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / items / description
        Removed value: -"Investor-relations events and announcements."
      • removedOutput schema / title
        Removed value: -"InvestRelationResponse"
    • Changedipo_calendar14 fields changed
      • removedOutput schema / $defs / IpoItem / description
        Removed value: -"A single IPO entry as it appears in the subscription / calendar / listed\nfeeds. Subset of the upstream item; field availability varies by feed and\nmarket. Numeric/price fields are stringified by the transform pipeline."
      • removedOutput schema / $defs / IpoItem / properties / issue_price / description
        Removed value: -"Issue price (stringified decimal)."
      • removedOutput schema / $defs / IpoItem / properties / listing_date / description
        Removed value: -"Listing date (yyyy-mm-dd)."
      • removedOutput schema / $defs / IpoItem / properties / market / description
        Removed value: -"Market code, e.g. \"HK\" / \"US\"."
      • removedOutput schema / $defs / IpoItem / properties / min_lot_size / description
        Removed value: -"Minimum lot size for subscription."
      • removedOutput schema / $defs / IpoItem / properties / name / description
        Removed value: -"Display name of the security."
      • removedOutput schema / $defs / IpoItem / properties / status / description
        Removed value: -"IPO status (calendar feed), e.g. upcoming / listed."
      • removedOutput schema / $defs / IpoItem / properties / sub_end_date / description
        Removed value: -"Subscription window end date (yyyy-mm-dd)."
      • removedOutput schema / $defs / IpoItem / properties / sub_start_date / description
        Removed value: -"Subscription window start date (yyyy-mm-dd)."
      • removedOutput schema / $defs / IpoItem / properties / symbol / description
        Removed value: -"Security symbol, e.g. \"6871.HK\" or \"ARM.US\"."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `ipo_calendar`. Passthrough of the upstream calendar payload;\nthe documented portion is `items[]`. The upstream `timestamp` is converted\nto RFC3339 by the unix-path transform."
      • removedOutput schema / properties / items / description
        Removed value: -"Calendar entries for upcoming and recent IPOs."
      • removedOutput schema / title
        Removed value: -"IpoCalendarResponse"
    • Changedipo_detail6 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `ipo_detail`. The tool combines three upstream payloads\n(`profile`, `timeline`, `eligibility`) under one wrapper object. Each part\nis a passthrough; only the documented portions are typed here."
      • removedOutput schema / properties / eligibility / description
        Removed value: -"Subscription eligibility payload (passthrough, shape upstream-defined)."
      • removedOutput schema / properties / profile / description
        Removed value: -"Business overview / profile payload (passthrough, shape upstream-defined)."
      • removedOutput schema / properties / timeline / description
        Removed value: -"Timeline events. The upstream payload may wrap this differently; the\ndocumented portion is a list of `{event, date}` entries."
      • removedOutput schema / title
        Removed value: -"IpoDetailResponse"
    • Changedipo_listed16 fields changed
      • removedOutput schema / $defs / IpoListedItem / description
        Removed value: -"A single recently-listed IPO entry. Subset of upstream fields; numeric and\nprice fields are stringified by the transform pipeline."
      • removedOutput schema / $defs / IpoListedItem / properties / first_day_close / description
        Removed value: -"First-day close price (stringified decimal)."
      • removedOutput schema / $defs / IpoListedItem / properties / first_day_return / description
        Removed value: -"First-day return (stringified decimal / percentage)."
      • removedOutput schema / $defs / IpoListedItem / properties / issue_price / description
        Removed value: -"Issue price (stringified decimal)."
      • removedOutput schema / $defs / IpoListedItem / properties / listing_date / description
        Removed value: -"Listing date (yyyy-mm-dd)."
      • removedOutput schema / $defs / IpoListedItem / properties / market / description
        Removed value: -"Market code, e.g. \"HK\" / \"US\"."
      • removedOutput schema / $defs / IpoListedItem / properties / name / description
        Removed value: -"Display name of the security."
      • removedOutput schema / $defs / IpoListedItem / properties / symbol / description
        Removed value: -"Security symbol, e.g. \"6871.HK\"."
      • removedOutput schema / $defs / IpoListedItem / properties / volume / description
        Removed value: -"First-day trading volume."
      • removedOutput schema / $defs / IpoListedMarketFeed / description
        Removed value: -"One side (HK or US) of the listed feed. The documented portion is `items[]`."
      • removedOutput schema / $defs / IpoListedMarketFeed / properties / items / description
        Removed value: -"Recently-listed IPO entries (documented subset of upstream fields)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `ipo_listed`. HK and US listed feeds combined under a\n`{hk, us}` wrapper object built by the tool."
      • removedOutput schema / properties / hk / description
        Removed value: -"Hong Kong recently-listed feed."
      • removedOutput schema / properties / us / description
        Removed value: -"US recently-listed feed."
      • removedOutput schema / title
        Removed value: -"IpoListedResponse"
    • Changedipo_order_detail11 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `ipo_order_detail`. Passthrough of a single IPO order; the\ndocumented subset is typed here. Amount fields are stringified decimals and\n`submitted_at` is RFC3339."
      • removedOutput schema / properties / allotted_quantity / description
        Removed value: -"Allotted quantity after the IPO drawing."
      • removedOutput schema / properties / market / description
        Removed value: -"Market code, e.g. \"HK\" / \"US\"."
      • removedOutput schema / properties / order_id / description
        Removed value: -"IPO order ID."
      • removedOutput schema / properties / quantity / description
        Removed value: -"Subscription quantity."
      • removedOutput schema / properties / status / description
        Removed value: -"Order status."
      • removedOutput schema / properties / submitted_at / description
        Removed value: -"Order submission time (RFC3339)."
      • removedOutput schema / properties / symbol / description
        Removed value: -"Security symbol, e.g. \"6871.HK\"."
      • removedOutput schema / properties / total_amount / description
        Removed value: -"Total subscription amount (stringified decimal)."
      • removedOutput schema / title
        Removed value: -"IpoOrderDetailResponse"
    • Changedipo_orders15 fields changed
      • removedOutput schema / $defs / IpoOrderItem / description
        Removed value: -"A single IPO order entry. Subset of upstream fields; amount fields are\nstringified by the transform pipeline and `submitted_at` is RFC3339."
      • removedOutput schema / $defs / IpoOrderItem / properties / market / description
        Removed value: -"Market code, e.g. \"HK\" / \"US\"."
      • removedOutput schema / $defs / IpoOrderItem / properties / order_id / description
        Removed value: -"IPO order ID."
      • removedOutput schema / $defs / IpoOrderItem / properties / quantity / description
        Removed value: -"Subscription quantity."
      • removedOutput schema / $defs / IpoOrderItem / properties / status / description
        Removed value: -"Order status."
      • removedOutput schema / $defs / IpoOrderItem / properties / submitted_at / description
        Removed value: -"Order submission time (RFC3339)."
      • removedOutput schema / $defs / IpoOrderItem / properties / symbol / description
        Removed value: -"Security symbol, e.g. \"6871.HK\"."
      • removedOutput schema / $defs / IpoOrderItem / properties / total_amount / description
        Removed value: -"Total subscription amount (stringified decimal)."
      • removedOutput schema / $defs / IpoOrdersFeed / description
        Removed value: -"One side of the IPO orders feed (active or historical). The documented\nportion is `orders[]`."
      • removedOutput schema / $defs / IpoOrdersFeed / properties / orders / description
        Removed value: -"IPO order entries (documented subset of upstream fields)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `ipo_orders`. Active orders and order history combined under an\n`{orders, history}` wrapper object built by the tool."
      • removedOutput schema / properties / history / description
        Removed value: -"Historical IPO orders feed."
      • removedOutput schema / properties / orders / description
        Removed value: -"Active IPO orders feed."
      • removedOutput schema / title
        Removed value: -"IpoOrdersResponse"
    • Changedipo_profit_loss16 fields changed
      • removedOutput schema / $defs / IpoProfitLossItem / description
        Removed value: -"A single per-stock IPO profit/loss breakdown item. Subset of upstream\nfields; monetary and rate fields are stringified by the transform pipeline."
      • removedOutput schema / $defs / IpoProfitLossItem / properties / cost / description
        Removed value: -"Cost basis for this stock (stringified decimal)."
      • removedOutput schema / $defs / IpoProfitLossItem / properties / current_value / description
        Removed value: -"Current market value for this stock (stringified decimal)."
      • removedOutput schema / $defs / IpoProfitLossItem / properties / return_rate / description
        Removed value: -"Return rate for this stock (stringified decimal / percentage)."
      • removedOutput schema / $defs / IpoProfitLossItem / properties / symbol / description
        Removed value: -"Security symbol, e.g. \"6871.HK\"."
      • removedOutput schema / $defs / IpoProfitLossItems / description
        Removed value: -"The items side of the IPO profit/loss feed. The documented portion is\n`items[]`."
      • removedOutput schema / $defs / IpoProfitLossItems / properties / items / description
        Removed value: -"Per-stock profit/loss breakdown entries."
      • removedOutput schema / $defs / IpoProfitLossSummary / description
        Removed value: -"The summary side of the IPO profit/loss feed. Documented totals are\nstringified decimals."
      • removedOutput schema / $defs / IpoProfitLossSummary / properties / total_cost / description
        Removed value: -"Total cost across all IPO holdings (stringified decimal)."
      • removedOutput schema / $defs / IpoProfitLossSummary / properties / total_return / description
        Removed value: -"Total return across all IPO holdings (stringified decimal)."
      • removedOutput schema / $defs / IpoProfitLossSummary / properties / total_value / description
        Removed value: -"Total current value across all IPO holdings (stringified decimal)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `ipo_profit_loss`. Summary and per-stock breakdown combined\nunder a `{summary, items}` wrapper object built by the tool."
      • removedOutput schema / properties / items / description
        Removed value: -"Per-stock breakdown items."
      • removedOutput schema / properties / summary / description
        Removed value: -"Aggregate cost/value/return totals."
      • removedOutput schema / title
        Removed value: -"IpoProfitLossResponse"
    • Changedipo_subscriptions17 fields changed
      • removedOutput schema / $defs / IpoItem / description
        Removed value: -"A single IPO entry as it appears in the subscription / calendar / listed\nfeeds. Subset of the upstream item; field availability varies by feed and\nmarket. Numeric/price fields are stringified by the transform pipeline."
      • removedOutput schema / $defs / IpoItem / properties / issue_price / description
        Removed value: -"Issue price (stringified decimal)."
      • removedOutput schema / $defs / IpoItem / properties / listing_date / description
        Removed value: -"Listing date (yyyy-mm-dd)."
      • removedOutput schema / $defs / IpoItem / properties / market / description
        Removed value: -"Market code, e.g. \"HK\" / \"US\"."
      • removedOutput schema / $defs / IpoItem / properties / min_lot_size / description
        Removed value: -"Minimum lot size for subscription."
      • removedOutput schema / $defs / IpoItem / properties / name / description
        Removed value: -"Display name of the security."
      • removedOutput schema / $defs / IpoItem / properties / status / description
        Removed value: -"IPO status (calendar feed), e.g. upcoming / listed."
      • removedOutput schema / $defs / IpoItem / properties / sub_end_date / description
        Removed value: -"Subscription window end date (yyyy-mm-dd)."
      • removedOutput schema / $defs / IpoItem / properties / sub_start_date / description
        Removed value: -"Subscription window start date (yyyy-mm-dd)."
      • removedOutput schema / $defs / IpoItem / properties / symbol / description
        Removed value: -"Security symbol, e.g. \"6871.HK\" or \"ARM.US\"."
      • removedOutput schema / $defs / IpoMarketFeed / description
        Removed value: -"One side (HK or US) of an IPO feed that splits results by market. Each side\nis the raw upstream payload; the documented portion is `items[]`."
      • removedOutput schema / $defs / IpoMarketFeed / properties / items / description
        Removed value: -"IPO entries for this market (documented subset of upstream fields)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `ipo_subscriptions`. HK and US subscription feeds combined under\na `{hk, us}` wrapper object built by the tool."
      • removedOutput schema / properties / hk / description
        Removed value: -"Hong Kong subscription / pre-filing feed."
      • removedOutput schema / properties / us / description
        Removed value: -"US subscription / pre-filing feed."
      • removedOutput schema / title
        Removed value: -"IpoSubscriptionsResponse"
    • Changedmargin_ratio6 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `margin_ratio`.\n\nDecimals are stringified by `to_tool_json`."
      • removedOutput schema / properties / fm_factor / description
        Removed value: -"Forced close-out margin ratio (`fm_factor`)."
      • removedOutput schema / properties / im_factor / description
        Removed value: -"Initial-margin ratio (`im_factor`)."
      • removedOutput schema / properties / mm_factor / description
        Removed value: -"Maintenance-margin ratio (`mm_factor`)."
      • removedOutput schema / title
        Removed value: -"MarginRatioResponse"
    • Changedmarket_status9 fields changed
      • removedOutput schema / $defs / MarketStatusEntry / properties / delay_timestamp / description
        Removed value: -"Delayed-quote status timestamp (RFC3339)."
      • removedOutput schema / $defs / MarketStatusEntry / properties / delay_trade_status / description
        Removed value: -"Delayed-quote trading status label (same value set as `trade_status`)."
      • removedOutput schema / $defs / MarketStatusEntry / properties / market / description
        Removed value: -"Market code, e.g. \"US\" / \"HK\" / \"CN\" / \"SG\"."
      • removedOutput schema / $defs / MarketStatusEntry / properties / timestamp / description
        Removed value: -"Status snapshot timestamp (RFC3339)."
      • removedOutput schema / $defs / MarketStatusEntry / properties / trade_status / description
        Removed value: -"Trading status label, e.g. Trading / Closed / Mid-Day Break /\nPre-Market / Post-Market / Overnight / Unknown."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `market_status`. Wraps a `market_time` array, one entry per\nmarket. Subset of the wire response — `trade_status` is mapped from the\nupstream numeric code to a human label, and `timestamp` is converted to\nRFC3339."
      • removedOutput schema / properties / market_time / description
        Removed value: -"Per-market trading status entries."
      • removedOutput schema / title
        Removed value: -"MarketStatusResponse"
    • Changedmarket_temperature8 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `market_temperature`."
      • removedOutput schema / properties / description
        Removed value: -{
        -  "description": "Human-readable temperature description (locale-aware).",
        -  "type": "string"
        -}
      • removedOutput schema / properties / sentiment / description
        Removed value: -"Market sentiment indicator (0-100)."
      • removedOutput schema / properties / temperature / description
        Removed value: -"Temperature value (0-100)."
      • removedOutput schema / properties / timestamp / description
        Removed value: -"Snapshot timestamp (RFC3339)."
      • removedOutput schema / properties / valuation / description
        Removed value: -"Market valuation indicator (0-100)."
      • removedOutput schema / title
        Removed value: -"MarketTemperatureResponse"
    • Changedoperating9 fields changed
      • removedOutput schema / $defs / OperatingItem / description
        Removed value: -"One record in `operating`'s `items`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / OperatingItem / properties / metric_name / description
        Removed value: -"Metric name (e.g. passenger traffic, cargo volume)."
      • removedOutput schema / $defs / OperatingItem / properties / period / description
        Removed value: -"Reporting period."
      • removedOutput schema / $defs / OperatingItem / properties / unit / description
        Removed value: -"Unit of measure."
      • removedOutput schema / $defs / OperatingItem / properties / value / description
        Removed value: -"Metric value."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `operating`. Wraps an `items` array of operating metrics\n(HK stocks only).\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / items / description
        Removed value: -"Operating metric records."
      • removedOutput schema / title
        Removed value: -"OperatingResponse"
    • Changedorder_detail28 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `order_detail`. Single order with full lifecycle metadata."
      • removedOutput schema / properties / currency / description
        Removed value: -"Settlement currency."
      • removedOutput schema / properties / executed_price / description
        Removed value: -"Volume-weighted average executed price (null when unfilled)."
      • removedOutput schema / properties / executed_quantity / description
        Removed value: -"Quantity already executed."
      • removedOutput schema / properties / expire_date / description
        Removed value: -"GTD expiry date (yyyy-mm-dd)."
      • removedOutput schema / properties / last_done / description
        Removed value: -"Latest price snapshot at order time (null if missing)."
      • removedOutput schema / properties / limit_offset / description
        Removed value: -"Trailing-stop limit offset (TSLPAMT/TSLPPCT)."
      • removedOutput schema / properties / msg / description
        Removed value: -"Reject message or remark."
      • removedOutput schema / properties / order_id / description
        Removed value: -"Order ID."
      • removedOutput schema / properties / order_type / description
        Removed value: -"Order type enum, e.g. `LO`, `MO`, `LIT`."
      • removedOutput schema / properties / outside_rth / description
        Removed value: -"Outside-RTH setting: `RTH_ONLY` / `ANY_TIME` / `OVERNIGHT`."
      • removedOutput schema / properties / price / description
        Removed value: -"Submitted limit price (null for market orders)."
      • removedOutput schema / properties / quantity / description
        Removed value: -"Submitted quantity."
      • removedOutput schema / properties / side / description
        Removed value: -"Buy or Sell."
      • removedOutput schema / properties / status / description
        Removed value: -"Status enum (e.g. `Filled`, `WaitToNew`, `Canceled`)."
      • removedOutput schema / properties / stock_name / description
        Removed value: -"Display name of the security."
      • removedOutput schema / properties / submitted_at / description
        Removed value: -"Order submission time (RFC3339)."
      • removedOutput schema / properties / symbol / description
        Removed value: -"Security symbol, e.g. \"700.HK\"."
      • removedOutput schema / properties / tag / description
        Removed value: -"Order tag (e.g. `Normal`, `LongTerm`)."
      • removedOutput schema / properties / time_in_force / description
        Removed value: -"Time-in-force: `Day` / `GTC` / `GTD`."
      • removedOutput schema / properties / trailing_amount / description
        Removed value: -"Trailing-stop trail amount (TSLPAMT)."
      • removedOutput schema / properties / trailing_percent / description
        Removed value: -"Trailing-stop trail percent (TSLPPCT, decimal)."
      • removedOutput schema / properties / trigger_at / description
        Removed value: -"Conditional-order trigger time (RFC3339)."
      • removedOutput schema / properties / trigger_price / description
        Removed value: -"Trigger price for LIT/MIT/trailing orders."
      • removedOutput schema / properties / trigger_status / description
        Removed value: -"Trigger status, e.g. `Deactive` / `Active` / `Released`."
      • removedOutput schema / properties / updated_at / description
        Removed value: -"Last update time (RFC3339)."
      • removedOutput schema / title
        Removed value: -"OrderDetailResponse"
    • Changedrank_categories10 fields changed
      • removedOutput schema / $defs / RankFirstTag / properties / key / description
        Removed value: -"Category key."
      • removedOutput schema / $defs / RankFirstTag / properties / name / description
        Removed value: -"Display name."
      • removedOutput schema / $defs / RankFirstTag / properties / second_tags / description
        Removed value: -"Sub-categories. Pass a `second_tags[].key` to `rank_list`."
      • removedOutput schema / $defs / RankSecondTag / properties / key / description
        Removed value: -"Tab key to pass to `rank_list` (e.g. \"hot_all-us\")."
      • removedOutput schema / $defs / RankSecondTag / properties / market / description
        Removed value: -"Market this tab covers, e.g. \"US\" / \"HK\"."
      • removedOutput schema / $defs / RankSecondTag / properties / name / description
        Removed value: -"Display name."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `rank_categories`. Wraps a `first_tags` array of rank tab\ncategory configurations for the popularity leaderboard. Subset of the wire\nresponse."
      • removedOutput schema / properties / first_tags / description
        Removed value: -"Top-level rank category tags."
      • removedOutput schema / title
        Removed value: -"RankCategoriesResponse"
    • Changedrank_list22 fields changed
      • removedOutput schema / $defs / RankListItem / properties / amplitude / description
        Removed value: -"Intraday amplitude."
      • removedOutput schema / $defs / RankListItem / properties / chg / description
        Removed value: -"Price change (decimal ratio)."
      • removedOutput schema / $defs / RankListItem / properties / five_day_chg / description
        Removed value: -"5-day price change (decimal ratio)."
      • removedOutput schema / $defs / RankListItem / properties / industry / description
        Removed value: -"Industry/sector name."
      • removedOutput schema / $defs / RankListItem / properties / inflow / description
        Removed value: -"Net capital inflow."
      • removedOutput schema / $defs / RankListItem / properties / intro / description
        Removed value: -"Short company introduction."
      • removedOutput schema / $defs / RankListItem / properties / last_done / description
        Removed value: -"Latest traded price."
      • removedOutput schema / $defs / RankListItem / properties / market_cap / description
        Removed value: -"Total market capitalization."
      • removedOutput schema / $defs / RankListItem / properties / name / description
        Removed value: -"Display name of the security."
      • removedOutput schema / $defs / RankListItem / properties / pre_post_chg / description
        Removed value: -"Pre-/post-market price change (decimal ratio)."
      • removedOutput schema / $defs / RankListItem / properties / pre_post_price / description
        Removed value: -"Pre-/post-market price."
      • removedOutput schema / $defs / RankListItem / properties / symbol / description
        Removed value: -"Security symbol, e.g. \"700.HK\"."
      • removedOutput schema / $defs / RankListItem / properties / ten_day_chg / description
        Removed value: -"10-day price change (decimal ratio)."
      • removedOutput schema / $defs / RankListItem / properties / this_year_chg / description
        Removed value: -"Year-to-date price change (decimal ratio)."
      • removedOutput schema / $defs / RankListItem / properties / turnover_rate / description
        Removed value: -"Turnover rate."
      • removedOutput schema / $defs / RankListItem / properties / twenty_day_chg / description
        Removed value: -"20-day price change (decimal ratio)."
      • removedOutput schema / $defs / RankListItem / properties / volume_rate / description
        Removed value: -"Volume ratio versus average."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `rank_list`. Wraps a `lists` array of ranked stocks for a\nleaderboard tab, plus a refresh time. Subset of the wire response."
      • removedOutput schema / properties / lists / description
        Removed value: -"Ranked stock entries."
      • removedOutput schema / properties / updated_at / description
        Removed value: -"Last refresh time (RFC3339)."
      • removedOutput schema / title
        Removed value: -"RankListResponse"
    • Changedscreener_indicators17 fields changed
      • removedOutput schema / $defs / ScreenerIndicator / description
        Removed value: -"A single screener indicator's metadata. The `filter_` prefix is stripped\nfrom `key` by the tool. `tech_values`, when present, is a synthesized schema\n(`{tech_key: [{value, label}, ...]}`) describing the options a technical\nindicator accepts."
      • removedOutput schema / $defs / ScreenerIndicator / properties / default_range / description
        Removed value: -"Default value range for the indicator."
      • removedOutput schema / $defs / ScreenerIndicator / properties / id / description
        Removed value: -"Indicator ID."
      • removedOutput schema / $defs / ScreenerIndicator / properties / key / description
        Removed value: -"Indicator key (without the `filter_` prefix)."
      • removedOutput schema / $defs / ScreenerIndicator / properties / name / description
        Removed value: -"Indicator display name."
      • removedOutput schema / $defs / ScreenerIndicator / properties / tech_values / description
        Removed value: -"For technical indicators: synthesized schema of accepted option values,\nkeyed by technical sub-key, each mapping to a list of `{value, label}`."
      • removedOutput schema / $defs / ScreenerIndicator / properties / unit / description
        Removed value: -"Value unit, where applicable."
      • removedOutput schema / $defs / ScreenerIndicatorGroup / description
        Removed value: -"A named group of screener indicators."
      • removedOutput schema / $defs / ScreenerIndicatorGroup / properties / group_name / description
        Removed value: -"Group display name."
      • removedOutput schema / $defs / ScreenerIndicatorGroup / properties / indicators / description
        Removed value: -"Indicators in this group."
      • removedOutput schema / $defs / ScreenerIndicatorRange / description
        Removed value: -"Default value range for a screener indicator."
      • removedOutput schema / $defs / ScreenerIndicatorRange / properties / max / description
        Removed value: -"Default upper bound (string)."
      • removedOutput schema / $defs / ScreenerIndicatorRange / properties / min / description
        Removed value: -"Default lower bound (string)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `screener_indicators`. Documented portion is `groups[]`."
      • removedOutput schema / properties / groups / description
        Removed value: -"Indicator metadata grouped by category."
      • removedOutput schema / title
        Removed value: -"ScreenerIndicatorsResponse"
    • Changedscreener_recommend_strategies11 fields changed
      • removedOutput schema / $defs / ScreenerStrategyItem / description
        Removed value: -"A single screener strategy entry. Subset of upstream fields; the change\nfigure is stringified by the transform pipeline."
      • removedOutput schema / $defs / ScreenerStrategyItem / properties / description
        Removed value: -{
        -  "description": "Strategy description.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / $defs / ScreenerStrategyItem / properties / id / description
        Removed value: -"Strategy ID. Pass to `screener_search` `strategy_id` to run, or to\n`screener_strategy` to inspect the filter conditions."
      • removedOutput schema / $defs / ScreenerStrategyItem / properties / market / description
        Removed value: -"Market the strategy targets, e.g. \"US\" / \"HK\" / \"CN\" / \"SG\"."
      • removedOutput schema / $defs / ScreenerStrategyItem / properties / name / description
        Removed value: -"Strategy display name."
      • removedOutput schema / $defs / ScreenerStrategyItem / properties / risk / description
        Removed value: -"Risk classification label."
      • removedOutput schema / $defs / ScreenerStrategyItem / properties / three_months_chg / description
        Removed value: -"Trailing three-month change (stringified decimal / percentage)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `screener_recommend_strategies` and `screener_user_strategies`.\nThe documented portion is `strategys[]`."
      • removedOutput schema / properties / strategys / description
        Removed value: -"Screener strategies (note the upstream `strategys` spelling)."
      • removedOutput schema / title
        Removed value: -"ScreenerStrategiesResponse"
    • Changedscreener_search14 fields changed
      • removedOutput schema / $defs / ScreenerResultIndicator / description
        Removed value: -"A single indicator value attached to a screener search result row. The\n`filter_` prefix is stripped from `key` by the tool."
      • removedOutput schema / $defs / ScreenerResultIndicator / properties / key / description
        Removed value: -"Indicator key (without the `filter_` prefix)."
      • removedOutput schema / $defs / ScreenerResultIndicator / properties / name / description
        Removed value: -"Indicator display name."
      • removedOutput schema / $defs / ScreenerResultIndicator / properties / unit / description
        Removed value: -"Value unit, where applicable."
      • removedOutput schema / $defs / ScreenerResultIndicator / properties / value / description
        Removed value: -"Indicator value (stringified by the transform pipeline)."
      • removedOutput schema / $defs / ScreenerResultItem / description
        Removed value: -"A single screener search result row. Subset of upstream fields."
      • removedOutput schema / $defs / ScreenerResultItem / properties / indicators / description
        Removed value: -"Per-indicator values for this row (condition + extra-return columns)."
      • removedOutput schema / $defs / ScreenerResultItem / properties / name / description
        Removed value: -"Display name of the security."
      • removedOutput schema / $defs / ScreenerResultItem / properties / symbol / description
        Removed value: -"Security symbol, e.g. \"AAPL.US\"."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `screener_search`. Documented portion is `total` plus the\n`items[]` result rows."
      • removedOutput schema / properties / items / description
        Removed value: -"Result rows for the current page."
      • removedOutput schema / properties / total / description
        Removed value: -"Total number of matching securities."
      • removedOutput schema / title
        Removed value: -"ScreenerSearchResponse"
    • Changedscreener_strategy12 fields changed
      • removedOutput schema / $defs / ScreenerStrategyFilter / description
        Removed value: -"A single filter condition within a screener strategy. The `filter_` prefix\nis stripped from `key` by the tool so it matches `screener_indicators` and\n`screener_search` condition input."
      • removedOutput schema / $defs / ScreenerStrategyFilter / properties / key / description
        Removed value: -"Indicator key (without the `filter_` prefix)."
      • removedOutput schema / $defs / ScreenerStrategyFilter / properties / max / description
        Removed value: -"Upper bound for the condition (string, may be empty)."
      • removedOutput schema / $defs / ScreenerStrategyFilter / properties / min / description
        Removed value: -"Lower bound for the condition (string, may be empty)."
      • removedOutput schema / $defs / ScreenerStrategyFilter / properties / tech_values / description
        Removed value: -"Technical-indicator value selection for technical keys. Passthrough\nobject whose shape depends on the indicator (see `screener_indicators`)."
      • removedOutput schema / $defs / ScreenerStrategyFilterGroup / description
        Removed value: -"The `filter` wrapper of a screener strategy, holding the condition list."
      • removedOutput schema / $defs / ScreenerStrategyFilterGroup / properties / filters / description
        Removed value: -"Filter conditions making up the strategy."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `screener_strategy`. Documented portion is `market` plus the\n`filter.filters[]` condition list."
      • removedOutput schema / properties / filter / description
        Removed value: -"Filter group containing the strategy's conditions."
      • removedOutput schema / properties / market / description
        Removed value: -"Market the strategy targets, e.g. \"US\" / \"HK\" / \"CN\" / \"SG\"."
      • removedOutput schema / title
        Removed value: -"ScreenerStrategyResponse"
    • Changedscreener_user_strategies11 fields changed
      • removedOutput schema / $defs / ScreenerStrategyItem / description
        Removed value: -"A single screener strategy entry. Subset of upstream fields; the change\nfigure is stringified by the transform pipeline."
      • removedOutput schema / $defs / ScreenerStrategyItem / properties / description
        Removed value: -{
        -  "description": "Strategy description.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / $defs / ScreenerStrategyItem / properties / id / description
        Removed value: -"Strategy ID. Pass to `screener_search` `strategy_id` to run, or to\n`screener_strategy` to inspect the filter conditions."
      • removedOutput schema / $defs / ScreenerStrategyItem / properties / market / description
        Removed value: -"Market the strategy targets, e.g. \"US\" / \"HK\" / \"CN\" / \"SG\"."
      • removedOutput schema / $defs / ScreenerStrategyItem / properties / name / description
        Removed value: -"Strategy display name."
      • removedOutput schema / $defs / ScreenerStrategyItem / properties / risk / description
        Removed value: -"Risk classification label."
      • removedOutput schema / $defs / ScreenerStrategyItem / properties / three_months_chg / description
        Removed value: -"Trailing three-month change (stringified decimal / percentage)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `screener_recommend_strategies` and `screener_user_strategies`.\nThe documented portion is `strategys[]`."
      • removedOutput schema / properties / strategys / description
        Removed value: -"Screener strategies (note the upstream `strategys` spelling)."
      • removedOutput schema / title
        Removed value: -"ScreenerStrategiesResponse"
    • Changedsecurity_list11 fields changed
      • removedOutput schema / $defs / SecurityListItem / properties / name_cn / description
        Removed value: -"Security name (zh-CN)."
      • removedOutput schema / $defs / SecurityListItem / properties / name_en / description
        Removed value: -"Security name (en)."
      • removedOutput schema / $defs / SecurityListItem / properties / name_hk / description
        Removed value: -"Security name (zh-HK)."
      • removedOutput schema / $defs / SecurityListItem / properties / symbol / description
        Removed value: -"Security symbol, e.g. \"AAPL.US\"."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `security_list`. Top-level pagination envelope built in\n`quote::security_list` around the upstream `Vec<Security>`."
      • removedOutput schema / properties / count / description
        Removed value: -"Records-per-page echoed back from the request."
      • removedOutput schema / properties / items / description
        Removed value: -"The securities on this page."
      • removedOutput schema / properties / page / description
        Removed value: -"1-based page number echoed back from the request."
      • removedOutput schema / properties / total / description
        Removed value: -"Total number of securities available for this market/category (before\npagination)."
      • removedOutput schema / title
        Removed value: -"SecurityListResponse"
    • Changedshareholder11 fields changed
      • removedOutput schema / $defs / ShareholderItem / description
        Removed value: -"One holder in `shareholder`'s `shareholders`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / ShareholderItem / properties / change / description
        Removed value: -"Change in shares."
      • removedOutput schema / $defs / ShareholderItem / properties / change_type / description
        Removed value: -"Direction / kind of change."
      • removedOutput schema / $defs / ShareholderItem / properties / institution / description
        Removed value: -"Institution name."
      • removedOutput schema / $defs / ShareholderItem / properties / ratio / description
        Removed value: -"Ownership ratio."
      • removedOutput schema / $defs / ShareholderItem / properties / reported_at / description
        Removed value: -"Report date."
      • removedOutput schema / $defs / ShareholderItem / properties / shares / description
        Removed value: -"Shares held."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `shareholder`. Wraps a `shareholders` array.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / shareholders / description
        Removed value: -"Institutional shareholders."
      • removedOutput schema / title
        Removed value: -"ShareholderResponse"
    • Changedshareholder_detail22 fields changed
      • removedOutput schema / $defs / ShareholderTrading / description
        Removed value: -"One per-period trading record in `shareholder_detail`'s `tradings`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / ShareholderTrading / properties / accum_buy / description
        Removed value: -"Accumulated buys."
      • removedOutput schema / $defs / ShareholderTrading / properties / accum_sell / description
        Removed value: -"Accumulated sells."
      • removedOutput schema / $defs / ShareholderTrading / properties / net_buy / description
        Removed value: -"Net buys."
      • removedOutput schema / $defs / ShareholderTrading / properties / period / description
        Removed value: -"Reporting period."
      • removedOutput schema / $defs / ShareholderTrading / properties / trading_details / description
        Removed value: -"Individual trades. Empty for institutional (13F) holders; populated\nonly for insider / individual filers (Form 4)."
      • removedOutput schema / $defs / ShareholderTradingDetail / description
        Removed value: -"One trade in `shareholder_detail`'s `trading_details`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / ShareholderTradingDetail / properties / filing_date / description
        Removed value: -"Filing date."
      • removedOutput schema / $defs / ShareholderTradingDetail / properties / security_type / description
        Removed value: -"Security type."
      • removedOutput schema / $defs / ShareholderTradingDetail / properties / trading_date / description
        Removed value: -"Trade date."
      • removedOutput schema / $defs / ShareholderTradingDetail / properties / trading_price / description
        Removed value: -"Trade price."
      • removedOutput schema / $defs / ShareholderTradingDetail / properties / trading_shares / description
        Removed value: -"Number of shares traded."
      • removedOutput schema / $defs / ShareholderTradingDetail / properties / trading_type / description
        Removed value: -"Trade type (buy / sell)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `shareholder_detail`. A single holder's holding and trade\nhistory.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / holding_periods / description
        Removed value: -"Holding periods. Shape unspecified by the description; raw JSON."
      • removedOutput schema / properties / holding_summary / description
        Removed value: -"Holding summary. Shape unspecified by the description; raw JSON."
      • removedOutput schema / properties / name / description
        Removed value: -"Holder name."
      • removedOutput schema / properties / owner_source / description
        Removed value: -"Holder source: Company / Institution / Person / Insider."
      • removedOutput schema / properties / trading_periods / description
        Removed value: -"Trading periods. Shape unspecified by the description; raw JSON."
      • removedOutput schema / properties / tradings / description
        Removed value: -"Per-period trading records."
      • removedOutput schema / title
        Removed value: -"ShareholderDetailResponse"
    • Changedshareholder_top15 fields changed
      • removedOutput schema / $defs / ShareholderTopHolder / description
        Removed value: -"One holder in `shareholder_top`'s `share_holders`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / ShareholderTopHolder / properties / filing_date / description
        Removed value: -"Filing date."
      • removedOutput schema / $defs / ShareholderTopHolder / properties / name / description
        Removed value: -"Holder name."
      • removedOutput schema / $defs / ShareholderTopHolder / properties / object_id / description
        Removed value: -"Holder object id. Pass to `shareholder_detail`."
      • removedOutput schema / $defs / ShareholderTopHolder / properties / percent_shares_held / description
        Removed value: -"Percentage of shares held."
      • removedOutput schema / $defs / ShareholderTopHolder / properties / shares_changed / description
        Removed value: -"Change in shares held."
      • removedOutput schema / $defs / ShareholderTopHolder / properties / shares_held / description
        Removed value: -"Shares held."
      • removedOutput schema / $defs / ShareholderTopHolder / properties / title
        Removed value: -{
        -  "description": "Holder title / role.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / $defs / ShareholderTopPeriod / description
        Removed value: -"One period snapshot in `shareholder_top`'s `info`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / ShareholderTopPeriod / properties / period / description
        Removed value: -"Reporting period."
      • removedOutput schema / $defs / ShareholderTopPeriod / properties / share_holders / description
        Removed value: -"Holders for this period."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `shareholder_top`. Wraps an `info` array of per-period\nsnapshots, each with a `share_holders` list.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / info / description
        Removed value: -"Per-period holder snapshots."
      • removedOutput schema / title
        Removed value: -"ShareholderTopResponse"
    • Changedsharelist_create6 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `sharelist_create`. The created sharelist object; documented\nfields are `id`, `name`, and `description`."
      • removedOutput schema / properties / description
        Removed value: -{
        -  "description": "List description.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / id / description
        Removed value: -"Newly-created sharelist ID."
      • removedOutput schema / properties / name / description
        Removed value: -"List name."
      • removedOutput schema / title
        Removed value: -"SharelistCreateResponse"
    • Changedsharelist_detail12 fields changed
      • removedOutput schema / $defs / SharelistConstituent / description
        Removed value: -"A single constituent of a sharelist detail. Subset of upstream fields;\nquote fields are stringified by the transform pipeline."
      • removedOutput schema / $defs / SharelistConstituent / properties / change_rate / description
        Removed value: -"Change rate (stringified decimal / percentage)."
      • removedOutput schema / $defs / SharelistConstituent / properties / last_done / description
        Removed value: -"Latest traded price (stringified decimal)."
      • removedOutput schema / $defs / SharelistConstituent / properties / name / description
        Removed value: -"Display name of the security."
      • removedOutput schema / $defs / SharelistConstituent / properties / symbol / description
        Removed value: -"Security symbol, e.g. \"AAPL.US\"."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `sharelist_detail`. Subset of the upstream detail payload: list\nmetadata plus the constituent rows. Additional quote and subscription\nfields may be present but are not enumerated here."
      • removedOutput schema / properties / constituents / description
        Removed value: -"Constituent securities with quote snapshots."
      • removedOutput schema / properties / description
        Removed value: -{
        -  "description": "List description.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / id / description
        Removed value: -"Sharelist ID."
      • removedOutput schema / properties / name / description
        Removed value: -"List name."
      • removedOutput schema / title
        Removed value: -"SharelistDetailResponse"
    • Changedsharelist_list12 fields changed
      • removedOutput schema / $defs / SharelistSummary / description
        Removed value: -"A single sharelist summary entry. Subset of upstream fields."
      • removedOutput schema / $defs / SharelistSummary / properties / creator / description
        Removed value: -"Creator info (`sharelist_popular` only); passthrough, shape\nupstream-defined."
      • removedOutput schema / $defs / SharelistSummary / properties / description
        Removed value: -{
        -  "description": "List description.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / $defs / SharelistSummary / properties / follower_count / description
        Removed value: -"Number of followers / subscribers of this list."
      • removedOutput schema / $defs / SharelistSummary / properties / id / description
        Removed value: -"Sharelist ID."
      • removedOutput schema / $defs / SharelistSummary / properties / is_owner / description
        Removed value: -"Whether the current user owns this list (`sharelist_list` only)."
      • removedOutput schema / $defs / SharelistSummary / properties / name / description
        Removed value: -"List name."
      • removedOutput schema / $defs / SharelistSummary / properties / symbol_count / description
        Removed value: -"Number of securities in the list."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `sharelist_list` and `sharelist_popular`. Documented portion is\n`lists[]`."
      • removedOutput schema / properties / lists / description
        Removed value: -"Sharelist summaries."
      • removedOutput schema / title
        Removed value: -"SharelistListResponse"
    • Changedsharelist_popular12 fields changed
      • removedOutput schema / $defs / SharelistSummary / description
        Removed value: -"A single sharelist summary entry. Subset of upstream fields."
      • removedOutput schema / $defs / SharelistSummary / properties / creator / description
        Removed value: -"Creator info (`sharelist_popular` only); passthrough, shape\nupstream-defined."
      • removedOutput schema / $defs / SharelistSummary / properties / description
        Removed value: -{
        -  "description": "List description.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / $defs / SharelistSummary / properties / follower_count / description
        Removed value: -"Number of followers / subscribers of this list."
      • removedOutput schema / $defs / SharelistSummary / properties / id / description
        Removed value: -"Sharelist ID."
      • removedOutput schema / $defs / SharelistSummary / properties / is_owner / description
        Removed value: -"Whether the current user owns this list (`sharelist_list` only)."
      • removedOutput schema / $defs / SharelistSummary / properties / name / description
        Removed value: -"List name."
      • removedOutput schema / $defs / SharelistSummary / properties / symbol_count / description
        Removed value: -"Number of securities in the list."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `sharelist_list` and `sharelist_popular`. Documented portion is\n`lists[]`."
      • removedOutput schema / properties / lists / description
        Removed value: -"Sharelist summaries."
      • removedOutput schema / title
        Removed value: -"SharelistListResponse"
    • Changedshort_trades12 fields changed
      • removedOutput schema / $defs / ShortTradesItem / properties / balance / description
        Removed value: -"HK only — outstanding short balance (HKD)."
      • removedOutput schema / $defs / ShortTradesItem / properties / close / description
        Removed value: -"Close price for the day."
      • removedOutput schema / $defs / ShortTradesItem / properties / market_vol / description
        Removed value: -"HK only — total market trading volume for the day."
      • removedOutput schema / $defs / ShortTradesItem / properties / nasdaq_vol / description
        Removed value: -"US only — NASDAQ short volume."
      • removedOutput schema / $defs / ShortTradesItem / properties / nyse_vol / description
        Removed value: -"US only — NYSE short volume."
      • removedOutput schema / $defs / ShortTradesItem / properties / rate / description
        Removed value: -"Short volume as a ratio of total volume (decimal, e.g. 0.36 = 36%)."
      • removedOutput schema / $defs / ShortTradesItem / properties / short_vol / description
        Removed value: -"Daily short-sale volume in shares."
      • removedOutput schema / $defs / ShortTradesItem / properties / timestamp / description
        Removed value: -"Trade date (RFC3339)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `short_trades`. Wraps a unified `data` array of daily short-sale\nvolume history for HK or US stocks. Market-specific fields are populated\nonly for their respective market (US: `nasdaq_vol`/`nyse_vol`; HK:\n`balance`/`market_vol`). Subset of the wire response."
      • removedOutput schema / properties / data / description
        Removed value: -"Daily short-sale volume entries."
      • removedOutput schema / title
        Removed value: -"ShortTradesResponse"
    • Changedstatement_export4 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `statement_export`."
      • removedOutput schema / properties / url / description
        Removed value: -"Pre-signed HTTPS URL for downloading the statement JSON. Short-lived\n— fetch it promptly."
      • removedOutput schema / title
        Removed value: -"StatementUrlResponse"
    • Changedstatement_list6 fields changed
      • removedOutput schema / $defs / StatementItem / properties / dt / description
        Removed value: -"Statement date as a `yyyymmdd` integer (e.g. `20240115`)."
      • removedOutput schema / $defs / StatementItem / properties / file_key / description
        Removed value: -"Opaque file key identifying this statement. Pass to `statement_export`\nto obtain a pre-signed download URL."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `statement_list`.\n\nWraps a `list` array of statement entries. The SDK's `StatementItem`\n(`{ dt: i32, file_key: String }`) is emitted unchanged by the transform\npipeline: `dt` is a plain integer date (`yyyymmdd`, e.g. `20240115`) that is\nnot a `*_at` field and so is left as a number, and `file_key` does not match\nthe counter_id pattern."
      • removedOutput schema / properties / list / description
        Removed value: -"Available statements in the requested range."
      • removedOutput schema / title
        Removed value: -"StatementListResponse"
    • Changedstock_positions14 fields changed
      • removedOutput schema / $defs / StockPosition / properties / available_quantity / description
        Removed value: -"Quantity available to sell (excludes locked / pending)."
      • removedOutput schema / $defs / StockPosition / properties / cost_price / description
        Removed value: -"Cost price (per the client's choice of average or diluted cost)."
      • removedOutput schema / $defs / StockPosition / properties / currency / description
        Removed value: -"Settlement currency, e.g. \"USD\" / \"HKD\"."
      • removedOutput schema / $defs / StockPosition / properties / init_quantity / description
        Removed value: -"Holding quantity at market open (pre-market baseline)."
      • removedOutput schema / $defs / StockPosition / properties / market / description
        Removed value: -"Market code, e.g. \"US\" / \"HK\"."
      • removedOutput schema / $defs / StockPosition / properties / quantity / description
        Removed value: -"Total holding quantity."
      • removedOutput schema / $defs / StockPosition / properties / symbol / description
        Removed value: -"Security symbol, e.g. \"700.HK\"."
      • removedOutput schema / $defs / StockPosition / properties / symbol_name / description
        Removed value: -"Display name of the security."
      • removedOutput schema / $defs / StockPositionChannel / properties / account_channel / description
        Removed value: -"Broker channel identifier. Always emitted as `null` for privacy."
      • removedOutput schema / $defs / StockPositionChannel / properties / stock_info / description
        Removed value: -"Stock positions held in this channel."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `stock_positions`. Top-level wraps a `list` array\n(one entry per linked broker channel), each carrying its own positions."
      • removedOutput schema / properties / list / description
        Removed value: -"Position channels — one entry per broker channel."
      • removedOutput schema / title
        Removed value: -"StockPositionsResponse"
    • Changedsubmit_order4 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `submit_order`."
      • removedOutput schema / properties / order_id / description
        Removed value: -"The newly-created order ID. Pass this to `cancel_order` /\n`replace_order` / `order_detail`."
      • removedOutput schema / title
        Removed value: -"OrderIdResponse"
    • Changedtop_movers16 fields changed
      • removedOutput schema / $defs / TopMoverEvent / properties / alert_reason / description
        Removed value: -"Human-readable reason for the alert."
      • removedOutput schema / $defs / TopMoverEvent / properties / alert_type / description
        Removed value: -"Alert type/category."
      • removedOutput schema / $defs / TopMoverEvent / properties / stock / description
        Removed value: -"The stock that moved."
      • removedOutput schema / $defs / TopMoverEvent / properties / timestamp / description
        Removed value: -"Event time (RFC3339)."
      • removedOutput schema / $defs / TopMoverStock / properties / change / description
        Removed value: -"Price change (decimal ratio, e.g. 0.0445 = +4.45%)."
      • removedOutput schema / $defs / TopMoverStock / properties / intro / description
        Removed value: -"Short company introduction."
      • removedOutput schema / $defs / TopMoverStock / properties / labels / description
        Removed value: -"Tag labels associated with the stock."
      • removedOutput schema / $defs / TopMoverStock / properties / last_done / description
        Removed value: -"Latest traded price."
      • removedOutput schema / $defs / TopMoverStock / properties / name / description
        Removed value: -"Display name of the security."
      • removedOutput schema / $defs / TopMoverStock / properties / symbol / description
        Removed value: -"Security symbol, e.g. \"700.HK\"."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `top_movers`. Wraps an `events` array of stocks whose price\nfluctuation exceeded the 20-trading-day standard deviation, with correlated\nnews reasons, plus pagination metadata. Subset of the wire response."
      • removedOutput schema / properties / events / description
        Removed value: -"Mover events."
      • removedOutput schema / properties / next_params / description
        Removed value: -"Pagination cursor. Pass back verbatim as `next_params` to fetch the\nnext page. Opaque object — exact fields are an implementation detail."
      • removedOutput schema / properties / updated_at / description
        Removed value: -"Last refresh time (RFC3339)."
      • removedOutput schema / title
        Removed value: -"TopMoversResponse"
    • Changedtopic_create4 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `topic_create`. The handler wraps the new topic ID in a single\n`{ \"id\": ... }` object."
      • removedOutput schema / properties / id / description
        Removed value: -"ID of the newly-created topic. Pass to `topic_detail` / `topic_replies`."
      • removedOutput schema / title
        Removed value: -"TopicCreateResponse"
    • Changedtopic_create_reply20 fields changed
      • removedOutput schema / $defs / TopicAuthor / description
        Removed value: -"Author of a topic or reply."
      • removedOutput schema / $defs / TopicAuthor / properties / avatar / description
        Removed value: -"Avatar URL."
      • removedOutput schema / $defs / TopicAuthor / properties / member_id / description
        Removed value: -"Member ID."
      • removedOutput schema / $defs / TopicAuthor / properties / name / description
        Removed value: -"Display name."
      • removedOutput schema / $defs / TopicImage / description
        Removed value: -"An image attached to a topic or reply."
      • removedOutput schema / $defs / TopicImage / properties / lg / description
        Removed value: -"Large image URL."
      • removedOutput schema / $defs / TopicImage / properties / sm / description
        Removed value: -"Small thumbnail URL."
      • removedOutput schema / $defs / TopicImage / properties / url / description
        Removed value: -"Original image URL."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `topic_create_reply`. The created reply.\n\nSDK-typed (`longbridge::content::TopicReply`) and serialized via `tool_json`.\n`created_at` is emitted as an RFC3339 string."
      • removedOutput schema / properties / author / description
        Removed value: -"Reply author."
      • removedOutput schema / properties / body / description
        Removed value: -"Reply body (plain text)."
      • removedOutput schema / properties / comments_count / description
        Removed value: -"Nested replies count."
      • removedOutput schema / properties / created_at / description
        Removed value: -"Created time (RFC3339)."
      • removedOutput schema / properties / id / description
        Removed value: -"Reply ID."
      • removedOutput schema / properties / images / description
        Removed value: -"Attached images."
      • removedOutput schema / properties / likes_count / description
        Removed value: -"Likes count."
      • removedOutput schema / properties / reply_to_id / description
        Removed value: -"Parent reply ID (`\"0\"` means top-level)."
      • removedOutput schema / properties / topic_id / description
        Removed value: -"Topic ID this reply belongs to."
      • removedOutput schema / title
        Removed value: -"TopicCreateReplyResponse"
    • Changedtopic_detail27 fields changed
      • removedOutput schema / $defs / TopicAuthor / description
        Removed value: -"Author of a topic or reply."
      • removedOutput schema / $defs / TopicAuthor / properties / avatar / description
        Removed value: -"Avatar URL."
      • removedOutput schema / $defs / TopicAuthor / properties / member_id / description
        Removed value: -"Member ID."
      • removedOutput schema / $defs / TopicAuthor / properties / name / description
        Removed value: -"Display name."
      • removedOutput schema / $defs / TopicImage / description
        Removed value: -"An image attached to a topic or reply."
      • removedOutput schema / $defs / TopicImage / properties / lg / description
        Removed value: -"Large image URL."
      • removedOutput schema / $defs / TopicImage / properties / sm / description
        Removed value: -"Small thumbnail URL."
      • removedOutput schema / $defs / TopicImage / properties / url / description
        Removed value: -"Original image URL."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `topic_detail`. Full details of a single community topic.\n\nSDK-typed (`longbridge::content::OwnedTopic`) and serialized via `tool_json`.\n`created_at` / `updated_at` are emitted as RFC3339 strings."
      • removedOutput schema / properties / author / description
        Removed value: -"Topic author."
      • removedOutput schema / properties / body / description
        Removed value: -"Markdown body."
      • removedOutput schema / properties / comments_count / description
        Removed value: -"Comments count."
      • removedOutput schema / properties / created_at / description
        Removed value: -"Created time (RFC3339)."
      • removedOutput schema / properties / description
        Removed value: -{
        -  "description": "Plain-text excerpt / description.",
        -  "type": "string"
        -}
      • removedOutput schema / properties / detail_url / description
        Removed value: -"URL to the full topic page."
      • removedOutput schema / properties / hashtags / description
        Removed value: -"Hashtag names."
      • removedOutput schema / properties / id / description
        Removed value: -"Topic ID."
      • removedOutput schema / properties / images / description
        Removed value: -"Attached images."
      • removedOutput schema / properties / likes_count / description
        Removed value: -"Likes count."
      • removedOutput schema / properties / shares_count / description
        Removed value: -"Shares count."
      • removedOutput schema / properties / tickers / description
        Removed value: -"Related stock tickers, format `<CODE>.<MARKET>` (e.g. \"TSLA.US\")."
      • removedOutput schema / properties / title
        Removed value: -{
        -  "description": "Title.",
        -  "type": "string"
        -}
      • removedOutput schema / properties / topic_type / description
        Removed value: -"Content type: \"article\" or \"post\"."
      • removedOutput schema / properties / updated_at / description
        Removed value: -"Last updated time (RFC3339)."
      • removedOutput schema / properties / views_count / description
        Removed value: -"Views count."
      • removedOutput schema / title
        Removed value: -"TopicDetailResponse"
    • Changedtrading_days5 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `trading_days`."
      • removedOutput schema / properties / half_trading_days / description
        Removed value: -"Half-day trading sessions in the requested range (yyyy-mm-dd)."
      • removedOutput schema / properties / trading_days / description
        Removed value: -"Full trading days in the requested range (yyyy-mm-dd)."
      • removedOutput schema / title
        Removed value: -"TradingDaysResponse"
    • Changedupdate_watchlist_group5 fields changed
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `update_watchlist_group`."
      • removedOutput schema / properties / id / description
        Removed value: -"The updated watchlist group ID (echoed from the request)."
      • removedOutput schema / properties / updated / description
        Removed value: -"Always `true` on success."
      • removedOutput schema / title
        Removed value: -"UpdateWatchlistGroupResponse"
    • Changedvaluation14 fields changed
      • removedOutput schema / $defs / ValuationMetric / description
        Removed value: -"A single valuation indicator block in `valuation`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / ValuationMetric / properties / 5yr_avg / description
        Removed value: -"5-year average. (camelCase `5yr_avg` per description.)"
      • removedOutput schema / $defs / ValuationMetric / properties / current / description
        Removed value: -"Current value."
      • removedOutput schema / $defs / ValuationMetric / properties / industry_avg / description
        Removed value: -"Industry average."
      • removedOutput schema / $defs / ValuationMetric / properties / percentile / description
        Removed value: -"Historical percentile."
      • removedOutput schema / $defs / ValuationMetrics / description
        Removed value: -"`metrics` block of `valuation`. Each indicator carries the same shape.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / ValuationMetrics / properties / dividend_yield / description
        Removed value: -"Dividend-yield block."
      • removedOutput schema / $defs / ValuationMetrics / properties / pb / description
        Removed value: -"Price-to-book block."
      • removedOutput schema / $defs / ValuationMetrics / properties / pe / description
        Removed value: -"Price-to-earnings block."
      • removedOutput schema / $defs / ValuationMetrics / properties / ps / description
        Removed value: -"Price-to-sales block."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `valuation`. The valuation overview groups per-metric blocks\nunder `metrics`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / metrics / description
        Removed value: -"Valuation metric blocks keyed by indicator."
      • removedOutput schema / title
        Removed value: -"ValuationResponse"
    • Changedvaluation_comparison18 fields changed
      • removedOutput schema / $defs / ValuationComparisonHistoryPoint / description
        Removed value: -"One history point in `valuation_comparison`'s nested `history`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / ValuationComparisonHistoryPoint / properties / date / description
        Removed value: -"Sample date (RFC3339; rewritten from a unix-epoch field)."
      • removedOutput schema / $defs / ValuationComparisonHistoryPoint / properties / pb / description
        Removed value: -"Price-to-book at this date."
      • removedOutput schema / $defs / ValuationComparisonHistoryPoint / properties / pe / description
        Removed value: -"Price-to-earnings at this date."
      • removedOutput schema / $defs / ValuationComparisonHistoryPoint / properties / ps / description
        Removed value: -"Price-to-sales at this date."
      • removedOutput schema / $defs / ValuationComparisonItem / description
        Removed value: -"One stock in `valuation_comparison`'s `list`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / ValuationComparisonItem / properties / history / description
        Removed value: -"Per-date valuation history."
      • removedOutput schema / $defs / ValuationComparisonItem / properties / market_value / description
        Removed value: -"Market value."
      • removedOutput schema / $defs / ValuationComparisonItem / properties / name / description
        Removed value: -"Display name."
      • removedOutput schema / $defs / ValuationComparisonItem / properties / pb / description
        Removed value: -"Price-to-book."
      • removedOutput schema / $defs / ValuationComparisonItem / properties / pe / description
        Removed value: -"Price-to-earnings."
      • removedOutput schema / $defs / ValuationComparisonItem / properties / price_close / description
        Removed value: -"Latest close price."
      • removedOutput schema / $defs / ValuationComparisonItem / properties / ps / description
        Removed value: -"Price-to-sales."
      • removedOutput schema / $defs / ValuationComparisonItem / properties / symbol / description
        Removed value: -"Security symbol (transformed from `counter_id`)."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `valuation_comparison`. Wraps a `list` of compared stocks.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / list / description
        Removed value: -"Compared stocks (primary + peers)."
      • removedOutput schema / title
        Removed value: -"ValuationComparisonResponse"
    • Changedvaluation_history14 fields changed
      • removedOutput schema / $defs / ValuationHistoryBlock / description
        Removed value: -"`history` block of `valuation_history`."
      • removedOutput schema / $defs / ValuationHistoryBlock / properties / metrics / description
        Removed value: -"Per-indicator time series."
      • removedOutput schema / $defs / ValuationHistoryMetrics / description
        Removed value: -"`history.metrics` block of `valuation_history`. Each indicator is an array\nof time-series samples.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / ValuationHistoryMetrics / properties / dividend_yield / description
        Removed value: -"Dividend-yield series."
      • removedOutput schema / $defs / ValuationHistoryMetrics / properties / pb / description
        Removed value: -"Price-to-book series."
      • removedOutput schema / $defs / ValuationHistoryMetrics / properties / pe / description
        Removed value: -"Price-to-earnings series."
      • removedOutput schema / $defs / ValuationHistoryMetrics / properties / ps / description
        Removed value: -"Price-to-sales series."
      • removedOutput schema / $defs / ValuationHistoryPoint / description
        Removed value: -"One sample in a `valuation_history` metric time series.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / $defs / ValuationHistoryPoint / properties / timestamp / description
        Removed value: -"Sample timestamp (RFC3339; rewritten from a unix-epoch field)."
      • removedOutput schema / $defs / ValuationHistoryPoint / properties / value / description
        Removed value: -"Metric value at this timestamp."
      • removedOutput schema / $schema
        Removed value: -"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / description
        Removed value: -"Returned by `valuation_history`. Time-series valuation metrics grouped\nunder `history.metrics`.\n\nSubset of documented fields; upstream may return more."
      • removedOutput schema / properties / history / description
        Removed value: -"History container."
      • removedOutput schema / title
        Removed value: -"ValuationHistoryResponse"
  10. 1 tool updatev0.5.8
    • Changedmarket_status1 field changed
      • changedOutput schema / $defs / MarketStatusEntry / properties / trade_status / description
        Previous value: -"Trading status label: one of Pre-Open / Trading / Lunch Break /\nPost-Trading / Closed / Pre-Market / Post-Market / Unknown."New value: +"Trading status label, e.g. Trading / Closed / Mid-Day Break /\nPre-Market / Post-Market / Overnight / Unknown."
  11. 68 tool updatesv0.5.6
    • Changedalert_disable1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `alert_enable` / `alert_disable`. The handler builds this exact\nobject on success.",
        +  "properties": {
        +    "alert_id": {
        +      "description": "The alert (indicator) ID that was toggled.",
        +      "type": "string"
        +    },
        +    "enabled": {
        +      "description": "New enabled state: `true` for enable, `false` for disable.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "alert_id",
        +    "enabled"
        +  ],
        +  "title": "AlertToggleResponse",
        +  "type": "object"
        +}
    • Changedalert_enable1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `alert_enable` / `alert_disable`. The handler builds this exact\nobject on success.",
        +  "properties": {
        +    "alert_id": {
        +      "description": "The alert (indicator) ID that was toggled.",
        +      "type": "string"
        +    },
        +    "enabled": {
        +      "description": "New enabled state: `true` for enable, `false` for disable.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "alert_id",
        +    "enabled"
        +  ],
        +  "title": "AlertToggleResponse",
        +  "type": "object"
        +}
    • Changedalert_list1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "AlertIndicator": {
        +      "description": "A single configured price-alert indicator.",
        +      "properties": {
        +        "condition": {
        +          "description": "Alert condition.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "enabled": {
        +          "description": "Whether the alert is currently enabled.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "frequency": {
        +          "description": "Alert frequency.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "Alert (indicator) ID. Use as `alert_id` in alert_delete/enable/disable.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "indicator_id": {
        +          "description": "Indicator type ID.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "price": {
        +          "description": "Threshold price or percentage value.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "triggered_at": {
        +          "description": "Time the alert last triggered (RFC3339), if any.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "AlertSymbolGroup": {
        +      "description": "A group of alert indicators configured for one security.",
        +      "properties": {
        +        "indicators": {
        +          "description": "Configured alert indicators for this symbol.",
        +          "items": {
        +            "$ref": "#/$defs/AlertIndicator"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol (upstream `counter_id`, normalized to `<CODE>.<MARKET>`).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `alert_list`. The upstream price-alert payload, forwarded after\nthe standard transform (note: upstream `counter_id` is renamed to `symbol`\nand `*_at` timestamps become RFC3339). Subset of the wire payload — only the\ndocumented fields are declared; all are optional.",
        +  "properties": {
        +    "lists": {
        +      "description": "Per-symbol alert groups.",
        +      "items": {
        +        "$ref": "#/$defs/AlertSymbolGroup"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "AlertListResponse",
        +  "type": "object"
        +}
    • Changedanomaly1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "AnomalyChange": {
        +      "properties": {
        +        "change_rate": {
        +          "description": "Price change rate (decimal ratio).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Display name of the security.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol, e.g. \"700.HK\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "volume": {
        +          "description": "Traded volume associated with the anomaly.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `anomaly`. Wraps a `changes` array of unusual price/volume\nalerts plus an `all_off` flag. Subset of the wire response — the\ndescription marks `changes[]` as having further undocumented fields.",
        +  "properties": {
        +    "all_off": {
        +      "description": "Whether anomaly alerting is globally off for the market.",
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "changes": {
        +      "description": "Anomaly alert entries.",
        +      "items": {
        +        "$ref": "#/$defs/AnomalyChange"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "AnomalyResponse",
        +  "type": "object"
        +}
    • Changedbroker_holding1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "BrokerHoldingItem": {
        +      "properties": {
        +        "broker_name": {
        +          "description": "Broker (participant) name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "holding_change": {
        +          "description": "Change in shares held over the period.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "holding_quantity": {
        +          "description": "Shares held by this broker.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "holding_ratio": {
        +          "description": "Holding as a ratio of total issued shares.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `broker_holding`. Wraps an `items` array of top broker holdings\nfor an HK stock (HKEX CCASS participant disclosure). Subset of the wire\nresponse.",
        +  "properties": {
        +    "items": {
        +      "description": "Top broker holding entries for the requested period.",
        +      "items": {
        +        "$ref": "#/$defs/BrokerHoldingItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "BrokerHoldingResponse",
        +  "type": "object"
        +}
    • Changedbroker_holding_daily1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "BrokerHoldingDailyItem": {
        +      "properties": {
        +        "date": {
        +          "description": "Disclosure date (yyyy-mm-dd).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "holding_change": {
        +          "description": "Change in shares held versus the prior day.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "holding_quantity": {
        +          "description": "Shares held by this broker on that date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "holding_ratio": {
        +          "description": "Holding as a ratio of total issued shares.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `broker_holding_daily`. Wraps an `items` array of the daily\nholding history for one broker in an HK stock. Subset of the wire response.",
        +  "properties": {
        +    "items": {
        +      "description": "Daily holding history entries.",
        +      "items": {
        +        "$ref": "#/$defs/BrokerHoldingDailyItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "BrokerHoldingDailyResponse",
        +  "type": "object"
        +}
    • Changedbroker_holding_detail1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "BrokerHoldingDetailItem": {
        +      "properties": {
        +        "broker_id": {
        +          "description": "Broker (participant) number.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "broker_name": {
        +          "description": "Broker (participant) name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "date": {
        +          "description": "Disclosure date (yyyy-mm-dd).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "holding_change": {
        +          "description": "Change in shares held.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "holding_quantity": {
        +          "description": "Shares held by this broker.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "holding_ratio": {
        +          "description": "Holding as a ratio of total issued shares.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `broker_holding_detail`. Wraps an `items` array of the full\nbroker holding list for an HK stock (HKEX CCASS participant disclosure).\nSubset of the wire response.",
        +  "properties": {
        +    "items": {
        +      "description": "Full broker holding detail entries.",
        +      "items": {
        +        "$ref": "#/$defs/BrokerHoldingDetailItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "BrokerHoldingDetailResponse",
        +  "type": "object"
        +}
    • Changedbusiness_segments_history1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "BusinessSegmentsHistoryPeriod": {
        +      "description": "One period snapshot in `business_segments_history`'s `historical`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "business": {
        +          "description": "Revenue by business line.",
        +          "items": {
        +            "$ref": "#/$defs/SegmentBreakdown"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "currency": {
        +          "description": "Settlement currency.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "date": {
        +          "description": "Period date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "regionals": {
        +          "description": "Revenue by region.",
        +          "items": {
        +            "$ref": "#/$defs/SegmentBreakdown"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "total": {
        +          "description": "Total revenue for the period.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "SegmentBreakdown": {
        +      "description": "One segment breakdown entry in `business_segments_history`\n(`business[]` / `regionals[]`).\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "name": {
        +          "description": "Segment / region name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "percent": {
        +          "description": "Percentage of total.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "value": {
        +          "description": "Absolute value.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `business_segments_history`. Wraps a `historical` array of\nper-period segment snapshots.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "historical": {
        +      "description": "Per-period segment snapshots.",
        +      "items": {
        +        "$ref": "#/$defs/BusinessSegmentsHistoryPeriod"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "BusinessSegmentsHistoryResponse",
        +  "type": "object"
        +}
    • Changedcompany1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `company`. Company overview / profile.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "ceo": {
        +      "description": "Chief Executive Officer.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "description": {
        +      "description": "Business profile / description.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "employees": {
        +      "description": "Number of employees.",
        +      "format": "int64",
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "exchange": {
        +      "description": "Listing exchange.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "founded_year": {
        +      "description": "Year the company was founded.",
        +      "format": "int64",
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "industry": {
        +      "description": "Industry classification.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "market_cap": {
        +      "description": "Market capitalization.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "name": {
        +      "description": "Company name.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "website": {
        +      "description": "Company website.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "CompanyResponse",
        +  "type": "object"
        +}
    • Changedconsensus1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ConsensusItem": {
        +      "description": "One record in `consensus`'s `items`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "analyst_count": {
        +          "description": "Number of contributing analysts.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "eps_estimate": {
        +          "description": "EPS estimate.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "last_updated": {
        +          "description": "Last update time.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "net_income_estimate": {
        +          "description": "Net income estimate.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "period": {
        +          "description": "Estimate period.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "revenue_estimate": {
        +          "description": "Revenue estimate.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `consensus`. Wraps an `items` array of consensus estimates.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "items": {
        +      "description": "Consensus estimate records for upcoming periods.",
        +      "items": {
        +        "$ref": "#/$defs/ConsensusItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "ConsensusResponse",
        +  "type": "object"
        +}
    • Changedcorp_action1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "CorpActionItem": {
        +      "description": "One event in `corp_action`'s `items`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "action_type": {
        +          "description": "Action type (split, buyback, name change, ...).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "description": {
        +          "description": "Free-text description.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "effective_date": {
        +          "description": "Effective date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "ratio": {
        +          "description": "Ratio (e.g. for splits).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `corp_action`. Wraps an `items` array of corporate actions.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "items": {
        +      "description": "Corporate action events.",
        +      "items": {
        +        "$ref": "#/$defs/CorpActionItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "CorpActionResponse",
        +  "type": "object"
        +}
    • Changedcreate_watchlist_group1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `create_watchlist_group`.",
        +  "properties": {
        +    "id": {
        +      "description": "The newly-created watchlist group ID. Pass this to\n`update_watchlist_group` / `delete_watchlist_group`.",
        +      "format": "int64",
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "id"
        +  ],
        +  "title": "CreateWatchlistGroupResponse",
        +  "type": "object"
        +}
    • Changeddca_check1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "DcaCheckItem": {
        +      "description": "DCA-eligibility result for one symbol.",
        +      "properties": {
        +        "reason": {
        +          "description": "Reason when unsupported.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "support_dca": {
        +          "description": "Whether the symbol supports DCA recurring investment.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `dca_check`. DCA-eligibility result per queried symbol,\nforwarded after the standard transform (upstream `counter_ids` query →\nper-symbol items). Subset of the wire payload — only documented fields are\ndeclared; all optional.",
        +  "properties": {
        +    "items": {
        +      "description": "Per-symbol support results.",
        +      "items": {
        +        "$ref": "#/$defs/DcaCheckItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "DcaCheckResponse",
        +  "type": "object"
        +}
    • Changeddca_history1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "DcaExecution": {
        +      "description": "A single DCA plan execution record.",
        +      "properties": {
        +        "amount": {
        +          "description": "Amount invested (decimal string).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "date": {
        +          "description": "Execution date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "order_id": {
        +          "description": "Resulting order ID, if any.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "price": {
        +          "description": "Execution price (decimal string).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "quantity": {
        +          "description": "Quantity acquired (decimal string).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "status": {
        +          "description": "Execution status.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `dca_history`. Execution records for one DCA plan, forwarded\nafter the standard transform. Subset of the wire payload — only documented\nfields are declared; all optional.",
        +  "properties": {
        +    "executions": {
        +      "description": "Execution records.",
        +      "items": {
        +        "$ref": "#/$defs/DcaExecution"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "DcaHistoryResponse",
        +  "type": "object"
        +}
    • Changeddca_list1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "DcaPlan": {
        +      "description": "A single DCA recurring-investment plan.",
        +      "properties": {
        +        "amount": {
        +          "description": "Amount invested per cycle (decimal string).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "currency": {
        +          "description": "Settlement currency.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "frequency": {
        +          "description": "Investment frequency (Daily / Weekly / Monthly).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "next_execution_date": {
        +          "description": "Next scheduled execution date (RFC3339; upstream `next_trd_date`).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "plan_id": {
        +          "description": "Plan ID. Use with dca_update / dca_pause / dca_resume / dca_stop.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "status": {
        +          "description": "Plan status (Active / Suspended / Finished).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol (e.g. \"AAPL.US\").",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `dca_list`. Upstream DCA plan-query payload forwarded after the\nstandard transform; the `next_trd_date` unix field is converted to RFC3339.\nSubset of the wire payload — only documented fields are declared; all\noptional.",
        +  "properties": {
        +    "plans": {
        +      "description": "Recurring-investment (DCA) plans.",
        +      "items": {
        +        "$ref": "#/$defs/DcaPlan"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "DcaListResponse",
        +  "type": "object"
        +}
    • Changeddca_stats1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "DcaStatsItem": {
        +      "description": "Per-symbol DCA statistics line.",
        +      "properties": {
        +        "invested": {
        +          "description": "Amount invested in this symbol (decimal string).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "return_rate": {
        +          "description": "Return rate for this symbol (decimal string).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "value": {
        +          "description": "Current value of this symbol's position (decimal string).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `dca_stats`. Aggregate DCA statistics forwarded after the\nstandard transform. Subset of the wire payload — only documented fields are\ndeclared; all optional.",
        +  "properties": {
        +    "items": {
        +      "description": "Per-symbol breakdown.",
        +      "items": {
        +        "$ref": "#/$defs/DcaStatsItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "plan_count": {
        +      "description": "Number of plans included.",
        +      "format": "int64",
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "return_rate": {
        +      "description": "Overall return rate (decimal string).",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "total_invested": {
        +      "description": "Total amount invested across plans (decimal string).",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "total_return": {
        +      "description": "Total return (decimal string).",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "total_value": {
        +      "description": "Current total market value (decimal string).",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "DcaStatsResponse",
        +  "type": "object"
        +}
    • Changeddelete_watchlist_group1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `delete_watchlist_group`.",
        +  "properties": {
        +    "deleted": {
        +      "description": "Always `true` on success.",
        +      "type": "boolean"
        +    },
        +    "id": {
        +      "description": "The deleted watchlist group ID (echoed from the request).",
        +      "format": "int64",
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "deleted"
        +  ],
        +  "title": "DeleteWatchlistGroupResponse",
        +  "type": "object"
        +}
    • Changeddividend1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "DividendItem": {
        +      "description": "One dividend event in `dividend`'s `items`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "amount": {
        +          "description": "Dividend amount.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "currency": {
        +          "description": "Settlement currency.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "dividend_type": {
        +          "description": "Dividend type.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "ex_date": {
        +          "description": "Ex-dividend date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "pay_date": {
        +          "description": "Payment date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "record_date": {
        +          "description": "Record date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "status": {
        +          "description": "Dividend status.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `dividend`. Wraps an `items` array of dividend events.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "items": {
        +      "description": "Dividend events for the symbol.",
        +      "items": {
        +        "$ref": "#/$defs/DividendItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "DividendResponse",
        +  "type": "object"
        +}
    • Changeddividend_detail1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "DividendDetailItem": {
        +      "description": "One distribution scheme in `dividend_detail`'s `details`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "cash_dividend": {
        +          "description": "Cash dividend per share.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "currency": {
        +          "description": "Settlement currency.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "ex_date": {
        +          "description": "Ex-dividend date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "pay_date": {
        +          "description": "Payment date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "period": {
        +          "description": "Reporting period.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "record_date": {
        +          "description": "Record date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "stock_dividend": {
        +          "description": "Stock dividend ratio / amount.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `dividend_detail`. Wraps a `details` array of distribution\nschemes.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "details": {
        +      "description": "Per-period distribution schemes.",
        +      "items": {
        +        "$ref": "#/$defs/DividendDetailItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "DividendDetailResponse",
        +  "type": "object"
        +}
    • Changedexecutive1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ExecutiveMember": {
        +      "description": "One person in `executive`'s `members`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "age": {
        +          "description": "Age.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "appointed_date": {
        +          "description": "Date appointed.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "biography": {
        +          "description": "Biography.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "compensation": {
        +          "description": "Compensation.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Full name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "title": {
        +          "description": "Title / role.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `executive`. Wraps a `members` array of executives / board\nmembers.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "members": {
        +      "description": "Executive and board members.",
        +      "items": {
        +        "$ref": "#/$defs/ExecutiveMember"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "ExecutiveResponse",
        +  "type": "object"
        +}
    • Changedfinance_calendar1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "FinanceCalendarBucket": {
        +      "properties": {
        +        "date": {
        +          "description": "Bucket date (yyyy-mm-dd).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "infos": {
        +          "description": "Events occurring on this date.",
        +          "items": {
        +            "$ref": "#/$defs/FinanceCalendarEvent"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "FinanceCalendarEvent": {
        +      "properties": {
        +        "datetime": {
        +          "description": "Event time (RFC3339).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "Event ID (may be empty for events without one, e.g. market closures).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "market": {
        +          "description": "Market code, e.g. \"US\" / \"HK\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol when the event is stock-specific, e.g. \"AAPL.US\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `finance_calendar`. Wraps a `list` array of date buckets, each\nholding an `infos` array of events. Subset of the wire response — the\nevent field set varies by `category` (report / dividend / split / ipo /\nmacrodata / closed) and is only partially documented, so only the keys the\nmerge/dedup pipeline relies on are modeled here.",
        +  "properties": {
        +    "list": {
        +      "description": "Date buckets, sorted ascending by date.",
        +      "items": {
        +        "$ref": "#/$defs/FinanceCalendarBucket"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "FinanceCalendarResponse",
        +  "type": "object"
        +}
    • Changedfinancial_report_latest1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `financial_report_latest`. Latest financial report summary.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "eps": {
        +      "description": "Earnings per share.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "gross_margin": {
        +      "description": "Gross margin.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "net_income": {
        +      "description": "Net income.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "period": {
        +      "description": "Reporting period.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "report_date": {
        +      "description": "Report date.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "revenue": {
        +      "description": "Revenue.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "roe": {
        +      "description": "Return on equity.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "FinancialReportLatestResponse",
        +  "type": "object"
        +}
    • Changedfinancial_report_snapshot1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ForecastActual": {
        +      "description": "An actual-vs-forecast comparison block in `financial_report_snapshot`\n(`fo_revenue` / `fo_ebit` / `fo_eps`).\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "cmp": {
        +          "description": "Actual vs forecast comparison.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "yoy": {
        +          "description": "Year-over-year change.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `financial_report_snapshot`. Actual-vs-forecast comparison\nplus financial ratios.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "fo_ebit": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/ForecastActual"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "EBIT: actual vs forecast."
        +    },
        +    "fo_eps": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/ForecastActual"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "EPS: actual vs forecast."
        +    },
        +    "fo_revenue": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/ForecastActual"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Revenue: actual vs forecast."
        +    },
        +    "report_desc": {
        +      "description": "Text summary of the report.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "FinancialReportSnapshotResponse",
        +  "type": "object"
        +}
    • Changedforecast_eps1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ForecastEpsItem": {
        +      "description": "One record in `forecast_eps`'s `items`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "analyst_count": {
        +          "description": "Number of contributing analysts.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "eps_actual": {
        +          "description": "Actual reported EPS.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "eps_estimate": {
        +          "description": "Consensus EPS estimate.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "forecast_end_date": {
        +          "description": "Forecast period end (RFC3339; rewritten from a unix-epoch field).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "forecast_start_date": {
        +          "description": "Forecast period start (RFC3339; rewritten from a unix-epoch field).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "surprise_pct": {
        +          "description": "Surprise percentage (actual vs estimate).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `forecast_eps`. Wraps an `items` array of EPS estimates.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "items": {
        +      "description": "EPS forecast / actual records.",
        +      "items": {
        +        "$ref": "#/$defs/ForecastEpsItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "ForecastEpsResponse",
        +  "type": "object"
        +}
    • Changedfund_holder1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "FundHolderItem": {
        +      "description": "One holder in `fund_holder`'s `fund_holders`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "change": {
        +          "description": "Change in shares.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "fund_name": {
        +          "description": "Fund name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "fund_symbol": {
        +          "description": "Fund symbol.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "ratio": {
        +          "description": "Ownership ratio.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "reported_at": {
        +          "description": "Report date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "shares": {
        +          "description": "Shares held.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `fund_holder`. Wraps a `fund_holders` array.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "fund_holders": {
        +      "description": "Funds / ETFs that hold the symbol.",
        +      "items": {
        +        "$ref": "#/$defs/FundHolderItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "FundHolderResponse",
        +  "type": "object"
        +}
    • Changedindustry_peers1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "IndustryPeersNode": {
        +      "description": "One node in `industry_peers`' `chain` tree. Self-referential via `next`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "chg": {
        +          "description": "Daily change.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "counter_id": {
        +          "description": "Node identifier (transformed from `counter_id`).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Node name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "next": {
        +          "description": "Child sub-sector nodes.",
        +          "items": {
        +            "$ref": "#/$defs/IndustryPeersNode"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "stock_num": {
        +          "description": "Number of stocks in this sub-sector.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "ytd_chg": {
        +          "description": "Year-to-date change.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "IndustryPeersTop": {
        +      "description": "`top` block of `industry_peers`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "market": {
        +          "description": "Market code.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Industry group name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `industry_peers`. A hierarchical sub-sector tree (`chain`) plus\nthe originating industry group (`top`).\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "chain": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/IndustryPeersNode"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Root node of the sub-sector tree."
        +    },
        +    "top": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/IndustryPeersTop"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The originating industry group."
        +    }
        +  },
        +  "title": "IndustryPeersResponse",
        +  "type": "object"
        +}
    • Changedindustry_valuation1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "IndustryValuationHistoryPoint": {
        +      "description": "One history point in `industry_valuation`'s nested `history`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "date": {
        +          "description": "Sample date (RFC3339; rewritten from a unix-epoch field).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "pb": {
        +          "description": "Price-to-book at this date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "pe": {
        +          "description": "Price-to-earnings at this date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "IndustryValuationItem": {
        +      "description": "One peer in `industry_valuation`'s `list`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "dividend_yield": {
        +          "description": "Dividend yield.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "history": {
        +          "description": "Per-date history of PE/PB.",
        +          "items": {
        +            "$ref": "#/$defs/IndustryValuationHistoryPoint"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Display name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "pb": {
        +          "description": "Price-to-book.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "pe": {
        +          "description": "Price-to-earnings.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "ps": {
        +          "description": "Price-to-sales.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol (transformed from `counter_id`).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `industry_valuation`. Wraps a `list` of industry peers.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "list": {
        +      "description": "Peers in the same industry.",
        +      "items": {
        +        "$ref": "#/$defs/IndustryValuationItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "IndustryValuationResponse",
        +  "type": "object"
        +}
    • Changedindustry_valuation_dist1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "IndustryValuationDistribution": {
        +      "description": "One indicator's distribution stats in `industry_valuation_dist`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "current_percentile": {
        +          "description": "Where the stock currently sits in this distribution.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "max": {
        +          "description": "Maximum value.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "median": {
        +          "description": "Median.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "min": {
        +          "description": "Minimum value.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "p25": {
        +          "description": "25th percentile.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "p75": {
        +          "description": "75th percentile.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "IndustryValuationDistributions": {
        +      "description": "`distributions` block of `industry_valuation_dist`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "pb": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/IndustryValuationDistribution"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Price-to-book distribution."
        +        },
        +        "pe": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/IndustryValuationDistribution"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Price-to-earnings distribution."
        +        },
        +        "ps": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/IndustryValuationDistribution"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Price-to-sales distribution."
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `industry_valuation_dist`. Per-indicator distribution stats\ngrouped under `distributions`.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "distributions": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/IndustryValuationDistributions"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Per-indicator distribution blocks."
        +    }
        +  },
        +  "title": "IndustryValuationDistResponse",
        +  "type": "object"
        +}
    • Changedinstitution_rating1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "InstitutionRatingAnalyst": {
        +      "description": "Analyst consensus block of `institution_rating`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "buy": {
        +          "description": "Number of analysts rating \"buy\".",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "consensus_rating": {
        +          "description": "Consensus rating label.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "hold": {
        +          "description": "Number of analysts rating \"hold\".",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "outperform": {
        +          "description": "Number of analysts rating \"outperform\".",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "sell": {
        +          "description": "Number of analysts rating \"sell\".",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "target_price": {
        +          "description": "Consensus target price.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "underperform": {
        +          "description": "Number of analysts rating \"underperform\".",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `institution_rating`.\n\nThe tool combines two upstream calls into\n`{\"analyst\": {...}, \"instratings\": [...]}`. Only the `analyst` fields are\ndocumented; the `instratings` payload shape is unspecified and left as raw\nJSON. Subset of documented fields; upstream may return more.",
        +  "properties": {
        +    "analyst": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/InstitutionRatingAnalyst"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Analyst rating consensus summary."
        +    },
        +    "instratings": {
        +      "description": "Per-institution rating list. Shape is unspecified by the tool\ndescription; passed through as raw JSON."
        +    }
        +  },
        +  "title": "InstitutionRatingResponse",
        +  "type": "object"
        +}
    • Changedinstitution_rating_detail1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "InstitutionRatingDetailItem": {
        +      "description": "One per-institution record in `institution_rating_detail`'s `target.list`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "analyst": {
        +          "description": "Analyst name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "firm": {
        +          "description": "Issuing firm / institution name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "rating": {
        +          "description": "Rating label.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "target_price": {
        +          "description": "Target price.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "timestamp": {
        +          "description": "Rating timestamp (RFC3339; rewritten from a unix-epoch field).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "InstitutionRatingDetailTarget": {
        +      "description": "`target` block of `institution_rating_detail`.",
        +      "properties": {
        +        "list": {
        +          "description": "Per-institution rating records.",
        +          "items": {
        +            "$ref": "#/$defs/InstitutionRatingDetailItem"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `institution_rating_detail`.\n\nDetailed historical institution ratings and target price history, grouped\nunder `target.list[]`. Subset of documented fields; upstream may return\nmore.",
        +  "properties": {
        +    "target": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/InstitutionRatingDetailTarget"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Target-price / rating history container."
        +    }
        +  },
        +  "title": "InstitutionRatingDetailResponse",
        +  "type": "object"
        +}
    • Changedinstitution_rating_history1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "EvaluateHistoryItem": {
        +      "description": "One rating-evaluation change in `institution_rating_history`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "date": {
        +          "description": "Change date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "firm": {
        +          "description": "Issuing firm.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "new_rating": {
        +          "description": "New rating.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "old_rating": {
        +          "description": "Prior rating.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "TargetHistoryItem": {
        +      "description": "One target-price revision in `institution_rating_history`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "analyst": {
        +          "description": "Analyst name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "date": {
        +          "description": "Revision date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "firm": {
        +          "description": "Issuing firm.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "new_target": {
        +          "description": "New target price.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "old_target": {
        +          "description": "Prior target price.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `institution_rating_history`. Two history arrays: target-price\nrevisions and rating-evaluation changes.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "evaluate_history": {
        +      "description": "Rating-evaluation changes.",
        +      "items": {
        +        "$ref": "#/$defs/EvaluateHistoryItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "target_history": {
        +      "description": "Target-price revisions.",
        +      "items": {
        +        "$ref": "#/$defs/TargetHistoryItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "InstitutionRatingHistoryResponse",
        +  "type": "object"
        +}
    • Changedinstitution_rating_industry_rank1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "InstitutionRatingIndustryRankItem": {
        +      "description": "One peer in `institution_rating_industry_rank`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "buy_count": {
        +          "description": "Buy rating count.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "consensus_rating": {
        +          "description": "Consensus rating label.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Display name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "sell_count": {
        +          "description": "Sell rating count.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol (transformed from `counter_id`).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "target_price": {
        +          "description": "Target price.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `institution_rating_industry_rank`. Peers ranked by analyst\nratings.\n\nThe tool description says `list[]`, while the implementation transforms a\ntop-level `items[]` array (rewriting `counter_id` → `symbol`). Both names\nare modelled so the schema matches whichever the upstream emits. Subset of\ndocumented fields; upstream may return more.",
        +  "properties": {
        +    "items": {
        +      "description": "Ranked peers (key the implementation transforms in place).",
        +      "items": {
        +        "$ref": "#/$defs/InstitutionRatingIndustryRankItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "list": {
        +      "description": "Ranked peers (description's documented key).",
        +      "items": {
        +        "$ref": "#/$defs/InstitutionRatingIndustryRankItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "InstitutionRatingIndustryRankResponse",
        +  "type": "object"
        +}
    • Changedinstitutional_views1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "InstitutionalViewsMonth": {
        +      "description": "One month in `institutional_views`'s `months`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "buy": {
        +          "description": "Buy count.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "date": {
        +          "description": "Month date (RFC3339; rewritten from a unix-epoch field).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "hold": {
        +          "description": "Hold count.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "outperform": {
        +          "description": "Outperform count.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "sell": {
        +          "description": "Sell count.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "total": {
        +          "description": "Total ratings.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "underperform": {
        +          "description": "Underperform count.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `institutional_views`. Wraps a `months` array of monthly\nrating-distribution snapshots.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "months": {
        +      "description": "Monthly rating-distribution snapshots.",
        +      "items": {
        +        "$ref": "#/$defs/InstitutionalViewsMonth"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "InstitutionalViewsResponse",
        +  "type": "object"
        +}
    • Changedinvest_relation1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "InvestRelationItem": {
        +      "description": "One event in `invest_relation`'s `items`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "description": {
        +          "description": "Free-text description.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "event_date": {
        +          "description": "Event date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "event_type": {
        +          "description": "Event type.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "title": {
        +          "description": "Event title.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "url": {
        +          "description": "Related URL.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `invest_relation`. Wraps an `items` array of IR events.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "items": {
        +      "description": "Investor-relations events and announcements.",
        +      "items": {
        +        "$ref": "#/$defs/InvestRelationItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "InvestRelationResponse",
        +  "type": "object"
        +}
    • Changedipo_calendar1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "IpoItem": {
        +      "description": "A single IPO entry as it appears in the subscription / calendar / listed\nfeeds. Subset of the upstream item; field availability varies by feed and\nmarket. Numeric/price fields are stringified by the transform pipeline.",
        +      "properties": {
        +        "issue_price": {
        +          "description": "Issue price (stringified decimal).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "listing_date": {
        +          "description": "Listing date (yyyy-mm-dd).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "market": {
        +          "description": "Market code, e.g. \"HK\" / \"US\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "min_lot_size": {
        +          "description": "Minimum lot size for subscription.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Display name of the security.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "status": {
        +          "description": "IPO status (calendar feed), e.g. upcoming / listed.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "sub_end_date": {
        +          "description": "Subscription window end date (yyyy-mm-dd).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "sub_start_date": {
        +          "description": "Subscription window start date (yyyy-mm-dd).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol, e.g. \"6871.HK\" or \"ARM.US\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `ipo_calendar`. Passthrough of the upstream calendar payload;\nthe documented portion is `items[]`. The upstream `timestamp` is converted\nto RFC3339 by the unix-path transform.",
        +  "properties": {
        +    "items": {
        +      "description": "Calendar entries for upcoming and recent IPOs.",
        +      "items": {
        +        "$ref": "#/$defs/IpoItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "IpoCalendarResponse",
        +  "type": "object"
        +}
    • Changedipo_detail1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `ipo_detail`. The tool combines three upstream payloads\n(`profile`, `timeline`, `eligibility`) under one wrapper object. Each part\nis a passthrough; only the documented portions are typed here.",
        +  "properties": {
        +    "eligibility": {
        +      "description": "Subscription eligibility payload (passthrough, shape upstream-defined)."
        +    },
        +    "profile": {
        +      "description": "Business overview / profile payload (passthrough, shape upstream-defined)."
        +    },
        +    "timeline": {
        +      "description": "Timeline events. The upstream payload may wrap this differently; the\ndocumented portion is a list of `{event, date}` entries."
        +    }
        +  },
        +  "title": "IpoDetailResponse",
        +  "type": "object"
        +}
    • Changedipo_listed1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "IpoListedItem": {
        +      "description": "A single recently-listed IPO entry. Subset of upstream fields; numeric and\nprice fields are stringified by the transform pipeline.",
        +      "properties": {
        +        "first_day_close": {
        +          "description": "First-day close price (stringified decimal).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "first_day_return": {
        +          "description": "First-day return (stringified decimal / percentage).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "issue_price": {
        +          "description": "Issue price (stringified decimal).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "listing_date": {
        +          "description": "Listing date (yyyy-mm-dd).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "market": {
        +          "description": "Market code, e.g. \"HK\" / \"US\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Display name of the security.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol, e.g. \"6871.HK\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "volume": {
        +          "description": "First-day trading volume.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "IpoListedMarketFeed": {
        +      "description": "One side (HK or US) of the listed feed. The documented portion is `items[]`.",
        +      "properties": {
        +        "items": {
        +          "description": "Recently-listed IPO entries (documented subset of upstream fields).",
        +          "items": {
        +            "$ref": "#/$defs/IpoListedItem"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `ipo_listed`. HK and US listed feeds combined under a\n`{hk, us}` wrapper object built by the tool.",
        +  "properties": {
        +    "hk": {
        +      "$ref": "#/$defs/IpoListedMarketFeed",
        +      "description": "Hong Kong recently-listed feed."
        +    },
        +    "us": {
        +      "$ref": "#/$defs/IpoListedMarketFeed",
        +      "description": "US recently-listed feed."
        +    }
        +  },
        +  "required": [
        +    "hk",
        +    "us"
        +  ],
        +  "title": "IpoListedResponse",
        +  "type": "object"
        +}
    • Changedipo_order_detail1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `ipo_order_detail`. Passthrough of a single IPO order; the\ndocumented subset is typed here. Amount fields are stringified decimals and\n`submitted_at` is RFC3339.",
        +  "properties": {
        +    "allotted_quantity": {
        +      "description": "Allotted quantity after the IPO drawing.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "market": {
        +      "description": "Market code, e.g. \"HK\" / \"US\".",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "order_id": {
        +      "description": "IPO order ID.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "quantity": {
        +      "description": "Subscription quantity.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "description": "Order status.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "submitted_at": {
        +      "description": "Order submission time (RFC3339).",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "symbol": {
        +      "description": "Security symbol, e.g. \"6871.HK\".",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "total_amount": {
        +      "description": "Total subscription amount (stringified decimal).",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "IpoOrderDetailResponse",
        +  "type": "object"
        +}
    • Changedipo_orders1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "IpoOrderItem": {
        +      "description": "A single IPO order entry. Subset of upstream fields; amount fields are\nstringified by the transform pipeline and `submitted_at` is RFC3339.",
        +      "properties": {
        +        "market": {
        +          "description": "Market code, e.g. \"HK\" / \"US\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "order_id": {
        +          "description": "IPO order ID.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "quantity": {
        +          "description": "Subscription quantity.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "status": {
        +          "description": "Order status.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "submitted_at": {
        +          "description": "Order submission time (RFC3339).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol, e.g. \"6871.HK\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "total_amount": {
        +          "description": "Total subscription amount (stringified decimal).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "IpoOrdersFeed": {
        +      "description": "One side of the IPO orders feed (active or historical). The documented\nportion is `orders[]`.",
        +      "properties": {
        +        "orders": {
        +          "description": "IPO order entries (documented subset of upstream fields).",
        +          "items": {
        +            "$ref": "#/$defs/IpoOrderItem"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `ipo_orders`. Active orders and order history combined under an\n`{orders, history}` wrapper object built by the tool.",
        +  "properties": {
        +    "history": {
        +      "$ref": "#/$defs/IpoOrdersFeed",
        +      "description": "Historical IPO orders feed."
        +    },
        +    "orders": {
        +      "$ref": "#/$defs/IpoOrdersFeed",
        +      "description": "Active IPO orders feed."
        +    }
        +  },
        +  "required": [
        +    "orders",
        +    "history"
        +  ],
        +  "title": "IpoOrdersResponse",
        +  "type": "object"
        +}
    • Changedipo_profit_loss1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "IpoProfitLossItem": {
        +      "description": "A single per-stock IPO profit/loss breakdown item. Subset of upstream\nfields; monetary and rate fields are stringified by the transform pipeline.",
        +      "properties": {
        +        "cost": {
        +          "description": "Cost basis for this stock (stringified decimal).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "current_value": {
        +          "description": "Current market value for this stock (stringified decimal).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "return_rate": {
        +          "description": "Return rate for this stock (stringified decimal / percentage).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol, e.g. \"6871.HK\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "IpoProfitLossItems": {
        +      "description": "The items side of the IPO profit/loss feed. The documented portion is\n`items[]`.",
        +      "properties": {
        +        "items": {
        +          "description": "Per-stock profit/loss breakdown entries.",
        +          "items": {
        +            "$ref": "#/$defs/IpoProfitLossItem"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "IpoProfitLossSummary": {
        +      "description": "The summary side of the IPO profit/loss feed. Documented totals are\nstringified decimals.",
        +      "properties": {
        +        "total_cost": {
        +          "description": "Total cost across all IPO holdings (stringified decimal).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "total_return": {
        +          "description": "Total return across all IPO holdings (stringified decimal).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "total_value": {
        +          "description": "Total current value across all IPO holdings (stringified decimal).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `ipo_profit_loss`. Summary and per-stock breakdown combined\nunder a `{summary, items}` wrapper object built by the tool.",
        +  "properties": {
        +    "items": {
        +      "$ref": "#/$defs/IpoProfitLossItems",
        +      "description": "Per-stock breakdown items."
        +    },
        +    "summary": {
        +      "$ref": "#/$defs/IpoProfitLossSummary",
        +      "description": "Aggregate cost/value/return totals."
        +    }
        +  },
        +  "required": [
        +    "summary",
        +    "items"
        +  ],
        +  "title": "IpoProfitLossResponse",
        +  "type": "object"
        +}
    • Changedipo_subscriptions1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "IpoItem": {
        +      "description": "A single IPO entry as it appears in the subscription / calendar / listed\nfeeds. Subset of the upstream item; field availability varies by feed and\nmarket. Numeric/price fields are stringified by the transform pipeline.",
        +      "properties": {
        +        "issue_price": {
        +          "description": "Issue price (stringified decimal).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "listing_date": {
        +          "description": "Listing date (yyyy-mm-dd).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "market": {
        +          "description": "Market code, e.g. \"HK\" / \"US\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "min_lot_size": {
        +          "description": "Minimum lot size for subscription.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Display name of the security.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "status": {
        +          "description": "IPO status (calendar feed), e.g. upcoming / listed.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "sub_end_date": {
        +          "description": "Subscription window end date (yyyy-mm-dd).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "sub_start_date": {
        +          "description": "Subscription window start date (yyyy-mm-dd).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol, e.g. \"6871.HK\" or \"ARM.US\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "IpoMarketFeed": {
        +      "description": "One side (HK or US) of an IPO feed that splits results by market. Each side\nis the raw upstream payload; the documented portion is `items[]`.",
        +      "properties": {
        +        "items": {
        +          "description": "IPO entries for this market (documented subset of upstream fields).",
        +          "items": {
        +            "$ref": "#/$defs/IpoItem"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `ipo_subscriptions`. HK and US subscription feeds combined under\na `{hk, us}` wrapper object built by the tool.",
        +  "properties": {
        +    "hk": {
        +      "$ref": "#/$defs/IpoMarketFeed",
        +      "description": "Hong Kong subscription / pre-filing feed."
        +    },
        +    "us": {
        +      "$ref": "#/$defs/IpoMarketFeed",
        +      "description": "US subscription / pre-filing feed."
        +    }
        +  },
        +  "required": [
        +    "hk",
        +    "us"
        +  ],
        +  "title": "IpoSubscriptionsResponse",
        +  "type": "object"
        +}
    • Changedmarket_status1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "MarketStatusEntry": {
        +      "properties": {
        +        "delay_timestamp": {
        +          "description": "Delayed-quote status timestamp (RFC3339).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "delay_trade_status": {
        +          "description": "Delayed-quote trading status label (same value set as `trade_status`).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "market": {
        +          "description": "Market code, e.g. \"US\" / \"HK\" / \"CN\" / \"SG\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "timestamp": {
        +          "description": "Status snapshot timestamp (RFC3339).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "trade_status": {
        +          "description": "Trading status label: one of Pre-Open / Trading / Lunch Break /\nPost-Trading / Closed / Pre-Market / Post-Market / Unknown.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `market_status`. Wraps a `market_time` array, one entry per\nmarket. Subset of the wire response — `trade_status` is mapped from the\nupstream numeric code to a human label, and `timestamp` is converted to\nRFC3339.",
        +  "properties": {
        +    "market_time": {
        +      "description": "Per-market trading status entries.",
        +      "items": {
        +        "$ref": "#/$defs/MarketStatusEntry"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "MarketStatusResponse",
        +  "type": "object"
        +}
    • Changedoperating1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "OperatingItem": {
        +      "description": "One record in `operating`'s `items`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "metric_name": {
        +          "description": "Metric name (e.g. passenger traffic, cargo volume).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "period": {
        +          "description": "Reporting period.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "unit": {
        +          "description": "Unit of measure.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "value": {
        +          "description": "Metric value.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `operating`. Wraps an `items` array of operating metrics\n(HK stocks only).\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "items": {
        +      "description": "Operating metric records.",
        +      "items": {
        +        "$ref": "#/$defs/OperatingItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "OperatingResponse",
        +  "type": "object"
        +}
    • Changedrank_categories1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "RankFirstTag": {
        +      "properties": {
        +        "key": {
        +          "description": "Category key.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Display name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "second_tags": {
        +          "description": "Sub-categories. Pass a `second_tags[].key` to `rank_list`.",
        +          "items": {
        +            "$ref": "#/$defs/RankSecondTag"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "RankSecondTag": {
        +      "properties": {
        +        "key": {
        +          "description": "Tab key to pass to `rank_list` (e.g. \"hot_all-us\").",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "market": {
        +          "description": "Market this tab covers, e.g. \"US\" / \"HK\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Display name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `rank_categories`. Wraps a `first_tags` array of rank tab\ncategory configurations for the popularity leaderboard. Subset of the wire\nresponse.",
        +  "properties": {
        +    "first_tags": {
        +      "description": "Top-level rank category tags.",
        +      "items": {
        +        "$ref": "#/$defs/RankFirstTag"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "RankCategoriesResponse",
        +  "type": "object"
        +}
    • Changedrank_list1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "RankListItem": {
        +      "properties": {
        +        "amplitude": {
        +          "description": "Intraday amplitude.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "chg": {
        +          "description": "Price change (decimal ratio).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "five_day_chg": {
        +          "description": "5-day price change (decimal ratio).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "industry": {
        +          "description": "Industry/sector name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "inflow": {
        +          "description": "Net capital inflow.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "intro": {
        +          "description": "Short company introduction.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "last_done": {
        +          "description": "Latest traded price.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "market_cap": {
        +          "description": "Total market capitalization.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Display name of the security.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "pre_post_chg": {
        +          "description": "Pre-/post-market price change (decimal ratio).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "pre_post_price": {
        +          "description": "Pre-/post-market price.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol, e.g. \"700.HK\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "ten_day_chg": {
        +          "description": "10-day price change (decimal ratio).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "this_year_chg": {
        +          "description": "Year-to-date price change (decimal ratio).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "turnover_rate": {
        +          "description": "Turnover rate.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "twenty_day_chg": {
        +          "description": "20-day price change (decimal ratio).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "volume_rate": {
        +          "description": "Volume ratio versus average.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `rank_list`. Wraps a `lists` array of ranked stocks for a\nleaderboard tab, plus a refresh time. Subset of the wire response.",
        +  "properties": {
        +    "lists": {
        +      "description": "Ranked stock entries.",
        +      "items": {
        +        "$ref": "#/$defs/RankListItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "updated_at": {
        +      "description": "Last refresh time (RFC3339).",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "RankListResponse",
        +  "type": "object"
        +}
    • Changedscreener_indicators1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ScreenerIndicator": {
        +      "description": "A single screener indicator's metadata. The `filter_` prefix is stripped\nfrom `key` by the tool. `tech_values`, when present, is a synthesized schema\n(`{tech_key: [{value, label}, ...]}`) describing the options a technical\nindicator accepts.",
        +      "properties": {
        +        "default_range": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/ScreenerIndicatorRange"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Default value range for the indicator."
        +        },
        +        "id": {
        +          "description": "Indicator ID.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "key": {
        +          "description": "Indicator key (without the `filter_` prefix).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Indicator display name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "tech_values": {
        +          "description": "For technical indicators: synthesized schema of accepted option values,\nkeyed by technical sub-key, each mapping to a list of `{value, label}`."
        +        },
        +        "unit": {
        +          "description": "Value unit, where applicable.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "ScreenerIndicatorGroup": {
        +      "description": "A named group of screener indicators.",
        +      "properties": {
        +        "group_name": {
        +          "description": "Group display name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "indicators": {
        +          "description": "Indicators in this group.",
        +          "items": {
        +            "$ref": "#/$defs/ScreenerIndicator"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "ScreenerIndicatorRange": {
        +      "description": "Default value range for a screener indicator.",
        +      "properties": {
        +        "max": {
        +          "description": "Default upper bound (string).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "min": {
        +          "description": "Default lower bound (string).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `screener_indicators`. Documented portion is `groups[]`.",
        +  "properties": {
        +    "groups": {
        +      "description": "Indicator metadata grouped by category.",
        +      "items": {
        +        "$ref": "#/$defs/ScreenerIndicatorGroup"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "ScreenerIndicatorsResponse",
        +  "type": "object"
        +}
    • Changedscreener_recommend_strategies1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ScreenerStrategyItem": {
        +      "description": "A single screener strategy entry. Subset of upstream fields; the change\nfigure is stringified by the transform pipeline.",
        +      "properties": {
        +        "description": {
        +          "description": "Strategy description.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "Strategy ID. Pass to `screener_search` `strategy_id` to run, or to\n`screener_strategy` to inspect the filter conditions.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "market": {
        +          "description": "Market the strategy targets, e.g. \"US\" / \"HK\" / \"CN\" / \"SG\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Strategy display name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "risk": {
        +          "description": "Risk classification label.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "three_months_chg": {
        +          "description": "Trailing three-month change (stringified decimal / percentage).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `screener_recommend_strategies` and `screener_user_strategies`.\nThe documented portion is `strategys[]`.",
        +  "properties": {
        +    "strategys": {
        +      "description": "Screener strategies (note the upstream `strategys` spelling).",
        +      "items": {
        +        "$ref": "#/$defs/ScreenerStrategyItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "ScreenerStrategiesResponse",
        +  "type": "object"
        +}
    • Changedscreener_search1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ScreenerResultIndicator": {
        +      "description": "A single indicator value attached to a screener search result row. The\n`filter_` prefix is stripped from `key` by the tool.",
        +      "properties": {
        +        "key": {
        +          "description": "Indicator key (without the `filter_` prefix).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Indicator display name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "unit": {
        +          "description": "Value unit, where applicable.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "value": {
        +          "description": "Indicator value (stringified by the transform pipeline).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "ScreenerResultItem": {
        +      "description": "A single screener search result row. Subset of upstream fields.",
        +      "properties": {
        +        "indicators": {
        +          "description": "Per-indicator values for this row (condition + extra-return columns).",
        +          "items": {
        +            "$ref": "#/$defs/ScreenerResultIndicator"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Display name of the security.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol, e.g. \"AAPL.US\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `screener_search`. Documented portion is `total` plus the\n`items[]` result rows.",
        +  "properties": {
        +    "items": {
        +      "description": "Result rows for the current page.",
        +      "items": {
        +        "$ref": "#/$defs/ScreenerResultItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "total": {
        +      "description": "Total number of matching securities.",
        +      "format": "int64",
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "ScreenerSearchResponse",
        +  "type": "object"
        +}
    • Changedscreener_strategy1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ScreenerStrategyFilter": {
        +      "description": "A single filter condition within a screener strategy. The `filter_` prefix\nis stripped from `key` by the tool so it matches `screener_indicators` and\n`screener_search` condition input.",
        +      "properties": {
        +        "key": {
        +          "description": "Indicator key (without the `filter_` prefix).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "max": {
        +          "description": "Upper bound for the condition (string, may be empty).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "min": {
        +          "description": "Lower bound for the condition (string, may be empty).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "tech_values": {
        +          "description": "Technical-indicator value selection for technical keys. Passthrough\nobject whose shape depends on the indicator (see `screener_indicators`)."
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "ScreenerStrategyFilterGroup": {
        +      "description": "The `filter` wrapper of a screener strategy, holding the condition list.",
        +      "properties": {
        +        "filters": {
        +          "description": "Filter conditions making up the strategy.",
        +          "items": {
        +            "$ref": "#/$defs/ScreenerStrategyFilter"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `screener_strategy`. Documented portion is `market` plus the\n`filter.filters[]` condition list.",
        +  "properties": {
        +    "filter": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/ScreenerStrategyFilterGroup"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Filter group containing the strategy's conditions."
        +    },
        +    "market": {
        +      "description": "Market the strategy targets, e.g. \"US\" / \"HK\" / \"CN\" / \"SG\".",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "ScreenerStrategyResponse",
        +  "type": "object"
        +}
    • Changedscreener_user_strategies1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ScreenerStrategyItem": {
        +      "description": "A single screener strategy entry. Subset of upstream fields; the change\nfigure is stringified by the transform pipeline.",
        +      "properties": {
        +        "description": {
        +          "description": "Strategy description.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "Strategy ID. Pass to `screener_search` `strategy_id` to run, or to\n`screener_strategy` to inspect the filter conditions.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "market": {
        +          "description": "Market the strategy targets, e.g. \"US\" / \"HK\" / \"CN\" / \"SG\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Strategy display name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "risk": {
        +          "description": "Risk classification label.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "three_months_chg": {
        +          "description": "Trailing three-month change (stringified decimal / percentage).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `screener_recommend_strategies` and `screener_user_strategies`.\nThe documented portion is `strategys[]`.",
        +  "properties": {
        +    "strategys": {
        +      "description": "Screener strategies (note the upstream `strategys` spelling).",
        +      "items": {
        +        "$ref": "#/$defs/ScreenerStrategyItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "ScreenerStrategiesResponse",
        +  "type": "object"
        +}
    • Changedsecurity_list1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "SecurityListItem": {
        +      "properties": {
        +        "name_cn": {
        +          "description": "Security name (zh-CN).",
        +          "type": "string"
        +        },
        +        "name_en": {
        +          "description": "Security name (en).",
        +          "type": "string"
        +        },
        +        "name_hk": {
        +          "description": "Security name (zh-HK).",
        +          "type": "string"
        +        },
        +        "symbol": {
        +          "description": "Security symbol, e.g. \"AAPL.US\".",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "symbol",
        +        "name_cn",
        +        "name_en",
        +        "name_hk"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `security_list`. Top-level pagination envelope built in\n`quote::security_list` around the upstream `Vec<Security>`.",
        +  "properties": {
        +    "count": {
        +      "description": "Records-per-page echoed back from the request.",
        +      "format": "uint",
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "items": {
        +      "description": "The securities on this page.",
        +      "items": {
        +        "$ref": "#/$defs/SecurityListItem"
        +      },
        +      "type": "array"
        +    },
        +    "page": {
        +      "description": "1-based page number echoed back from the request.",
        +      "format": "uint",
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "total": {
        +      "description": "Total number of securities available for this market/category (before\npagination).",
        +      "format": "uint",
        +      "minimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "total",
        +    "page",
        +    "count",
        +    "items"
        +  ],
        +  "title": "SecurityListResponse",
        +  "type": "object"
        +}
    • Changedshareholder1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ShareholderItem": {
        +      "description": "One holder in `shareholder`'s `shareholders`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "change": {
        +          "description": "Change in shares.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "change_type": {
        +          "description": "Direction / kind of change.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "institution": {
        +          "description": "Institution name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "ratio": {
        +          "description": "Ownership ratio.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "reported_at": {
        +          "description": "Report date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "shares": {
        +          "description": "Shares held.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `shareholder`. Wraps a `shareholders` array.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "shareholders": {
        +      "description": "Institutional shareholders.",
        +      "items": {
        +        "$ref": "#/$defs/ShareholderItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "ShareholderResponse",
        +  "type": "object"
        +}
    • Changedshareholder_detail1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ShareholderTrading": {
        +      "description": "One per-period trading record in `shareholder_detail`'s `tradings`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "accum_buy": {
        +          "description": "Accumulated buys.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "accum_sell": {
        +          "description": "Accumulated sells.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "net_buy": {
        +          "description": "Net buys.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "period": {
        +          "description": "Reporting period.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "trading_details": {
        +          "description": "Individual trades. Empty for institutional (13F) holders; populated\nonly for insider / individual filers (Form 4).",
        +          "items": {
        +            "$ref": "#/$defs/ShareholderTradingDetail"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "ShareholderTradingDetail": {
        +      "description": "One trade in `shareholder_detail`'s `trading_details`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "filing_date": {
        +          "description": "Filing date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "security_type": {
        +          "description": "Security type.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "trading_date": {
        +          "description": "Trade date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "trading_price": {
        +          "description": "Trade price.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "trading_shares": {
        +          "description": "Number of shares traded.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "trading_type": {
        +          "description": "Trade type (buy / sell).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `shareholder_detail`. A single holder's holding and trade\nhistory.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "holding_periods": {
        +      "description": "Holding periods. Shape unspecified by the description; raw JSON."
        +    },
        +    "holding_summary": {
        +      "description": "Holding summary. Shape unspecified by the description; raw JSON."
        +    },
        +    "name": {
        +      "description": "Holder name.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "owner_source": {
        +      "description": "Holder source: Company / Institution / Person / Insider.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "trading_periods": {
        +      "description": "Trading periods. Shape unspecified by the description; raw JSON."
        +    },
        +    "tradings": {
        +      "description": "Per-period trading records.",
        +      "items": {
        +        "$ref": "#/$defs/ShareholderTrading"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "ShareholderDetailResponse",
        +  "type": "object"
        +}
    • Changedshareholder_top1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ShareholderTopHolder": {
        +      "description": "One holder in `shareholder_top`'s `share_holders`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "filing_date": {
        +          "description": "Filing date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Holder name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "object_id": {
        +          "description": "Holder object id. Pass to `shareholder_detail`.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "percent_shares_held": {
        +          "description": "Percentage of shares held.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "shares_changed": {
        +          "description": "Change in shares held.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "shares_held": {
        +          "description": "Shares held.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "title": {
        +          "description": "Holder title / role.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "ShareholderTopPeriod": {
        +      "description": "One period snapshot in `shareholder_top`'s `info`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "period": {
        +          "description": "Reporting period.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "share_holders": {
        +          "description": "Holders for this period.",
        +          "items": {
        +            "$ref": "#/$defs/ShareholderTopHolder"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `shareholder_top`. Wraps an `info` array of per-period\nsnapshots, each with a `share_holders` list.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "info": {
        +      "description": "Per-period holder snapshots.",
        +      "items": {
        +        "$ref": "#/$defs/ShareholderTopPeriod"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "ShareholderTopResponse",
        +  "type": "object"
        +}
    • Changedsharelist_create1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `sharelist_create`. The created sharelist object; documented\nfields are `id`, `name`, and `description`.",
        +  "properties": {
        +    "description": {
        +      "description": "List description.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "id": {
        +      "description": "Newly-created sharelist ID.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "name": {
        +      "description": "List name.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "SharelistCreateResponse",
        +  "type": "object"
        +}
    • Changedsharelist_detail1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "SharelistConstituent": {
        +      "description": "A single constituent of a sharelist detail. Subset of upstream fields;\nquote fields are stringified by the transform pipeline.",
        +      "properties": {
        +        "change_rate": {
        +          "description": "Change rate (stringified decimal / percentage).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "last_done": {
        +          "description": "Latest traded price (stringified decimal).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Display name of the security.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol, e.g. \"AAPL.US\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `sharelist_detail`. Subset of the upstream detail payload: list\nmetadata plus the constituent rows. Additional quote and subscription\nfields may be present but are not enumerated here.",
        +  "properties": {
        +    "constituents": {
        +      "description": "Constituent securities with quote snapshots.",
        +      "items": {
        +        "$ref": "#/$defs/SharelistConstituent"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "description": {
        +      "description": "List description.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "id": {
        +      "description": "Sharelist ID.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "name": {
        +      "description": "List name.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "SharelistDetailResponse",
        +  "type": "object"
        +}
    • Changedsharelist_list1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "SharelistSummary": {
        +      "description": "A single sharelist summary entry. Subset of upstream fields.",
        +      "properties": {
        +        "creator": {
        +          "description": "Creator info (`sharelist_popular` only); passthrough, shape\nupstream-defined."
        +        },
        +        "description": {
        +          "description": "List description.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "follower_count": {
        +          "description": "Number of followers / subscribers of this list.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "Sharelist ID.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "is_owner": {
        +          "description": "Whether the current user owns this list (`sharelist_list` only).",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "List name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol_count": {
        +          "description": "Number of securities in the list.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `sharelist_list` and `sharelist_popular`. Documented portion is\n`lists[]`.",
        +  "properties": {
        +    "lists": {
        +      "description": "Sharelist summaries.",
        +      "items": {
        +        "$ref": "#/$defs/SharelistSummary"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "SharelistListResponse",
        +  "type": "object"
        +}
    • Changedsharelist_popular1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "SharelistSummary": {
        +      "description": "A single sharelist summary entry. Subset of upstream fields.",
        +      "properties": {
        +        "creator": {
        +          "description": "Creator info (`sharelist_popular` only); passthrough, shape\nupstream-defined."
        +        },
        +        "description": {
        +          "description": "List description.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "follower_count": {
        +          "description": "Number of followers / subscribers of this list.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "Sharelist ID.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "is_owner": {
        +          "description": "Whether the current user owns this list (`sharelist_list` only).",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "List name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol_count": {
        +          "description": "Number of securities in the list.",
        +          "format": "int64",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `sharelist_list` and `sharelist_popular`. Documented portion is\n`lists[]`.",
        +  "properties": {
        +    "lists": {
        +      "description": "Sharelist summaries.",
        +      "items": {
        +        "$ref": "#/$defs/SharelistSummary"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "SharelistListResponse",
        +  "type": "object"
        +}
    • Changedshort_trades1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ShortTradesItem": {
        +      "properties": {
        +        "balance": {
        +          "description": "HK only — outstanding short balance (HKD).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "close": {
        +          "description": "Close price for the day.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "market_vol": {
        +          "description": "HK only — total market trading volume for the day.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "nasdaq_vol": {
        +          "description": "US only — NASDAQ short volume.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "nyse_vol": {
        +          "description": "US only — NYSE short volume.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "rate": {
        +          "description": "Short volume as a ratio of total volume (decimal, e.g. 0.36 = 36%).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "short_vol": {
        +          "description": "Daily short-sale volume in shares.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "timestamp": {
        +          "description": "Trade date (RFC3339).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `short_trades`. Wraps a unified `data` array of daily short-sale\nvolume history for HK or US stocks. Market-specific fields are populated\nonly for their respective market (US: `nasdaq_vol`/`nyse_vol`; HK:\n`balance`/`market_vol`). Subset of the wire response.",
        +  "properties": {
        +    "data": {
        +      "description": "Daily short-sale volume entries.",
        +      "items": {
        +        "$ref": "#/$defs/ShortTradesItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "ShortTradesResponse",
        +  "type": "object"
        +}
    • Changedstatement_list1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "StatementItem": {
        +      "properties": {
        +        "dt": {
        +          "description": "Statement date as a `yyyymmdd` integer (e.g. `20240115`).",
        +          "format": "int32",
        +          "type": "integer"
        +        },
        +        "file_key": {
        +          "description": "Opaque file key identifying this statement. Pass to `statement_export`\nto obtain a pre-signed download URL.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "dt",
        +        "file_key"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `statement_list`.\n\nWraps a `list` array of statement entries. The SDK's `StatementItem`\n(`{ dt: i32, file_key: String }`) is emitted unchanged by the transform\npipeline: `dt` is a plain integer date (`yyyymmdd`, e.g. `20240115`) that is\nnot a `*_at` field and so is left as a number, and `file_key` does not match\nthe counter_id pattern.",
        +  "properties": {
        +    "list": {
        +      "description": "Available statements in the requested range.",
        +      "items": {
        +        "$ref": "#/$defs/StatementItem"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "list"
        +  ],
        +  "title": "StatementListResponse",
        +  "type": "object"
        +}
    • Changedtop_movers1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "TopMoverEvent": {
        +      "properties": {
        +        "alert_reason": {
        +          "description": "Human-readable reason for the alert.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "alert_type": {
        +          "description": "Alert type/category.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "stock": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/TopMoverStock"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "The stock that moved."
        +        },
        +        "timestamp": {
        +          "description": "Event time (RFC3339).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "TopMoverStock": {
        +      "properties": {
        +        "change": {
        +          "description": "Price change (decimal ratio, e.g. 0.0445 = +4.45%).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "intro": {
        +          "description": "Short company introduction.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "labels": {
        +          "description": "Tag labels associated with the stock.",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "last_done": {
        +          "description": "Latest traded price.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Display name of the security.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol, e.g. \"700.HK\".",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `top_movers`. Wraps an `events` array of stocks whose price\nfluctuation exceeded the 20-trading-day standard deviation, with correlated\nnews reasons, plus pagination metadata. Subset of the wire response.",
        +  "properties": {
        +    "events": {
        +      "description": "Mover events.",
        +      "items": {
        +        "$ref": "#/$defs/TopMoverEvent"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    },
        +    "next_params": {
        +      "description": "Pagination cursor. Pass back verbatim as `next_params` to fetch the\nnext page. Opaque object — exact fields are an implementation detail."
        +    },
        +    "updated_at": {
        +      "description": "Last refresh time (RFC3339).",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "TopMoversResponse",
        +  "type": "object"
        +}
    • Changedtopic_create1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `topic_create`. The handler wraps the new topic ID in a single\n`{ \"id\": ... }` object.",
        +  "properties": {
        +    "id": {
        +      "description": "ID of the newly-created topic. Pass to `topic_detail` / `topic_replies`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id"
        +  ],
        +  "title": "TopicCreateResponse",
        +  "type": "object"
        +}
    • Changedtopic_create_reply1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "TopicAuthor": {
        +      "description": "Author of a topic or reply.",
        +      "properties": {
        +        "avatar": {
        +          "description": "Avatar URL.",
        +          "type": "string"
        +        },
        +        "member_id": {
        +          "description": "Member ID.",
        +          "type": "string"
        +        },
        +        "name": {
        +          "description": "Display name.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "member_id",
        +        "name",
        +        "avatar"
        +      ],
        +      "type": "object"
        +    },
        +    "TopicImage": {
        +      "description": "An image attached to a topic or reply.",
        +      "properties": {
        +        "lg": {
        +          "description": "Large image URL.",
        +          "type": "string"
        +        },
        +        "sm": {
        +          "description": "Small thumbnail URL.",
        +          "type": "string"
        +        },
        +        "url": {
        +          "description": "Original image URL.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "url",
        +        "sm",
        +        "lg"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `topic_create_reply`. The created reply.\n\nSDK-typed (`longbridge::content::TopicReply`) and serialized via `tool_json`.\n`created_at` is emitted as an RFC3339 string.",
        +  "properties": {
        +    "author": {
        +      "$ref": "#/$defs/TopicAuthor",
        +      "description": "Reply author."
        +    },
        +    "body": {
        +      "description": "Reply body (plain text).",
        +      "type": "string"
        +    },
        +    "comments_count": {
        +      "description": "Nested replies count.",
        +      "format": "int32",
        +      "type": "integer"
        +    },
        +    "created_at": {
        +      "description": "Created time (RFC3339).",
        +      "type": "string"
        +    },
        +    "id": {
        +      "description": "Reply ID.",
        +      "type": "string"
        +    },
        +    "images": {
        +      "description": "Attached images.",
        +      "items": {
        +        "$ref": "#/$defs/TopicImage"
        +      },
        +      "type": "array"
        +    },
        +    "likes_count": {
        +      "description": "Likes count.",
        +      "format": "int32",
        +      "type": "integer"
        +    },
        +    "reply_to_id": {
        +      "description": "Parent reply ID (`\"0\"` means top-level).",
        +      "type": "string"
        +    },
        +    "topic_id": {
        +      "description": "Topic ID this reply belongs to.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "topic_id",
        +    "body",
        +    "reply_to_id",
        +    "author",
        +    "images",
        +    "likes_count",
        +    "comments_count",
        +    "created_at"
        +  ],
        +  "title": "TopicCreateReplyResponse",
        +  "type": "object"
        +}
    • Changedtopic_detail1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "TopicAuthor": {
        +      "description": "Author of a topic or reply.",
        +      "properties": {
        +        "avatar": {
        +          "description": "Avatar URL.",
        +          "type": "string"
        +        },
        +        "member_id": {
        +          "description": "Member ID.",
        +          "type": "string"
        +        },
        +        "name": {
        +          "description": "Display name.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "member_id",
        +        "name",
        +        "avatar"
        +      ],
        +      "type": "object"
        +    },
        +    "TopicImage": {
        +      "description": "An image attached to a topic or reply.",
        +      "properties": {
        +        "lg": {
        +          "description": "Large image URL.",
        +          "type": "string"
        +        },
        +        "sm": {
        +          "description": "Small thumbnail URL.",
        +          "type": "string"
        +        },
        +        "url": {
        +          "description": "Original image URL.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "url",
        +        "sm",
        +        "lg"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `topic_detail`. Full details of a single community topic.\n\nSDK-typed (`longbridge::content::OwnedTopic`) and serialized via `tool_json`.\n`created_at` / `updated_at` are emitted as RFC3339 strings.",
        +  "properties": {
        +    "author": {
        +      "$ref": "#/$defs/TopicAuthor",
        +      "description": "Topic author."
        +    },
        +    "body": {
        +      "description": "Markdown body.",
        +      "type": "string"
        +    },
        +    "comments_count": {
        +      "description": "Comments count.",
        +      "format": "int32",
        +      "type": "integer"
        +    },
        +    "created_at": {
        +      "description": "Created time (RFC3339).",
        +      "type": "string"
        +    },
        +    "description": {
        +      "description": "Plain-text excerpt / description.",
        +      "type": "string"
        +    },
        +    "detail_url": {
        +      "description": "URL to the full topic page.",
        +      "type": "string"
        +    },
        +    "hashtags": {
        +      "description": "Hashtag names.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "id": {
        +      "description": "Topic ID.",
        +      "type": "string"
        +    },
        +    "images": {
        +      "description": "Attached images.",
        +      "items": {
        +        "$ref": "#/$defs/TopicImage"
        +      },
        +      "type": "array"
        +    },
        +    "likes_count": {
        +      "description": "Likes count.",
        +      "format": "int32",
        +      "type": "integer"
        +    },
        +    "shares_count": {
        +      "description": "Shares count.",
        +      "format": "int32",
        +      "type": "integer"
        +    },
        +    "tickers": {
        +      "description": "Related stock tickers, format `<CODE>.<MARKET>` (e.g. \"TSLA.US\").",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "title": {
        +      "description": "Title.",
        +      "type": "string"
        +    },
        +    "topic_type": {
        +      "description": "Content type: \"article\" or \"post\".",
        +      "type": "string"
        +    },
        +    "updated_at": {
        +      "description": "Last updated time (RFC3339).",
        +      "type": "string"
        +    },
        +    "views_count": {
        +      "description": "Views count.",
        +      "format": "int32",
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "title",
        +    "description",
        +    "body",
        +    "author",
        +    "tickers",
        +    "hashtags",
        +    "images",
        +    "likes_count",
        +    "comments_count",
        +    "views_count",
        +    "shares_count",
        +    "topic_type",
        +    "detail_url",
        +    "created_at",
        +    "updated_at"
        +  ],
        +  "title": "TopicDetailResponse",
        +  "type": "object"
        +}
    • Changedupdate_watchlist_group1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `update_watchlist_group`.",
        +  "properties": {
        +    "id": {
        +      "description": "The updated watchlist group ID (echoed from the request).",
        +      "format": "int64",
        +      "type": "integer"
        +    },
        +    "updated": {
        +      "description": "Always `true` on success.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "updated"
        +  ],
        +  "title": "UpdateWatchlistGroupResponse",
        +  "type": "object"
        +}
    • Changedvaluation1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ValuationMetric": {
        +      "description": "A single valuation indicator block in `valuation`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "5yr_avg": {
        +          "description": "5-year average. (camelCase `5yr_avg` per description.)",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "current": {
        +          "description": "Current value.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "industry_avg": {
        +          "description": "Industry average.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "percentile": {
        +          "description": "Historical percentile.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "ValuationMetrics": {
        +      "description": "`metrics` block of `valuation`. Each indicator carries the same shape.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "dividend_yield": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/ValuationMetric"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Dividend-yield block."
        +        },
        +        "pb": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/ValuationMetric"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Price-to-book block."
        +        },
        +        "pe": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/ValuationMetric"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Price-to-earnings block."
        +        },
        +        "ps": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/ValuationMetric"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Price-to-sales block."
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `valuation`. The valuation overview groups per-metric blocks\nunder `metrics`.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "metrics": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/ValuationMetrics"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Valuation metric blocks keyed by indicator."
        +    }
        +  },
        +  "title": "ValuationResponse",
        +  "type": "object"
        +}
    • Changedvaluation_comparison1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ValuationComparisonHistoryPoint": {
        +      "description": "One history point in `valuation_comparison`'s nested `history`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "date": {
        +          "description": "Sample date (RFC3339; rewritten from a unix-epoch field).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "pb": {
        +          "description": "Price-to-book at this date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "pe": {
        +          "description": "Price-to-earnings at this date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "ps": {
        +          "description": "Price-to-sales at this date.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "ValuationComparisonItem": {
        +      "description": "One stock in `valuation_comparison`'s `list`.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "history": {
        +          "description": "Per-date valuation history.",
        +          "items": {
        +            "$ref": "#/$defs/ValuationComparisonHistoryPoint"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "market_value": {
        +          "description": "Market value.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "name": {
        +          "description": "Display name.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "pb": {
        +          "description": "Price-to-book.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "pe": {
        +          "description": "Price-to-earnings.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "price_close": {
        +          "description": "Latest close price.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "ps": {
        +          "description": "Price-to-sales.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "symbol": {
        +          "description": "Security symbol (transformed from `counter_id`).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `valuation_comparison`. Wraps a `list` of compared stocks.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "list": {
        +      "description": "Compared stocks (primary + peers).",
        +      "items": {
        +        "$ref": "#/$defs/ValuationComparisonItem"
        +      },
        +      "type": [
        +        "array",
        +        "null"
        +      ]
        +    }
        +  },
        +  "title": "ValuationComparisonResponse",
        +  "type": "object"
        +}
    • Changedvaluation_history1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "ValuationHistoryBlock": {
        +      "description": "`history` block of `valuation_history`.",
        +      "properties": {
        +        "metrics": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/ValuationHistoryMetrics"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Per-indicator time series."
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "ValuationHistoryMetrics": {
        +      "description": "`history.metrics` block of `valuation_history`. Each indicator is an array\nof time-series samples.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "dividend_yield": {
        +          "description": "Dividend-yield series.",
        +          "items": {
        +            "$ref": "#/$defs/ValuationHistoryPoint"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "pb": {
        +          "description": "Price-to-book series.",
        +          "items": {
        +            "$ref": "#/$defs/ValuationHistoryPoint"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "pe": {
        +          "description": "Price-to-earnings series.",
        +          "items": {
        +            "$ref": "#/$defs/ValuationHistoryPoint"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        },
        +        "ps": {
        +          "description": "Price-to-sales series.",
        +          "items": {
        +            "$ref": "#/$defs/ValuationHistoryPoint"
        +          },
        +          "type": [
        +            "array",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "ValuationHistoryPoint": {
        +      "description": "One sample in a `valuation_history` metric time series.\n\nSubset of documented fields; upstream may return more.",
        +      "properties": {
        +        "timestamp": {
        +          "description": "Sample timestamp (RFC3339; rewritten from a unix-epoch field).",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "value": {
        +          "description": "Metric value at this timestamp.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "description": "Returned by `valuation_history`. Time-series valuation metrics grouped\nunder `history.metrics`.\n\nSubset of documented fields; upstream may return more.",
        +  "properties": {
        +    "history": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/$defs/ValuationHistoryBlock"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "History container."
        +    }
        +  },
        +  "title": "ValuationHistoryResponse",
        +  "type": "object"
        +}
  12. 3 tool updatesv0.4.9
    • Changedcalc_indexes3 fields changed
      • addedInput schema / properties / indexes / default
        Added value: +[]
      • changedInput schema / properties / indexes / description
        Previous value: -"Calc indexes: LastDone, ChangeValue, ChangeRate, Volume, Turnover, YtdChangeRate, TurnoverRate, TotalMarketValue, CapitalFlow, Amplitude, VolumeRatio, PeTtmRatio, PbRatio, DividendRatioTtm, FiveDayChangeRate, TenDayChangeRate, HalfYearChangeRate, FiveMinutesChangeRate, ExpiryDate, StrikePrice, UpperStrikePrice, LowerStrikePrice, OutstandingQty, OutstandingRatio, Premium, ItmOtm, ImpliedVolatility, WarrantDelta, CallPrice, ToCallPrice, EffectiveLeverage, LeverageRatio, ConversionRatio, BalancePoint, OpenInterest, Delta, Gamma, Theta, Vega, Rho"New value: +"Calc indexes (optional; defaults to LastDone, ChangeValue, ChangeRate, Volume, PeTtmRatio, PbRatio, DividendRatioTtm, TurnoverRate, TotalMarketValue): LastDone, ChangeValue, ChangeRate, Volume, Turnover, YtdChangeRate, TurnoverRate, TotalMarketValue, CapitalFlow, Amplitude, VolumeRatio, PeTtmRatio, PbRatio, DividendRatioTtm, FiveDayChangeRate, TenDayChangeRate, HalfYearChangeRate, FiveMinutesChangeRate, ExpiryDate, StrikePrice, UpperStrikePrice, LowerStrikePrice, OutstandingQty, OutstandingRatio, Premium, ItmOtm, ImpliedVolatility, WarrantDelta, CallPrice, ToCallPrice, EffectiveLeverage, LeverageRatio, ConversionRatio, BalancePoint, OpenInterest, Delta, Gamma, Theta, Vega, Rho"
      • changedInput schema / required
        Previous value: -[
        -  "symbols",
        -  "indexes"
        -]New value: +[
        +  "symbols"
        +]
    • Changedcandlesticks9 fields changed
      • addedInput schema / properties / count / default
        Added value: +100
      • changedInput schema / properties / count / description
        Previous value: -"Number of candlesticks (max 1000)"New value: +"Number of candlesticks (optional, max 1000; default 100)"
      • addedInput schema / properties / forward_adjust / default
        Added value: +false
      • changedInput schema / properties / forward_adjust / description
        Previous value: -"Whether to forward-adjust for splits/dividends"New value: +"Whether to forward-adjust for splits/dividends (default: false / no adjust)"
      • addedInput schema / properties / period / default
        Added value: +"day"
      • changedInput schema / properties / period / description
        Previous value: -"Period: 1m, 5m, 15m, 30m, 60m, day, week, month, year"New value: +"Period: 1m, 5m, 15m, 30m, 60m, day, week, month, year (default: day)"
      • addedInput schema / properties / trade_sessions / default
        Added value: +"all"
      • changedInput schema / properties / trade_sessions / description
        Previous value: -"Trade sessions: \"intraday\" (regular hours only) or \"all\" (include pre-market and post-market)"New value: +"Trade sessions: \"intraday\" (regular hours only) or \"all\" (include pre-market and post-market; default \"all\")"
      • changedInput schema / required
        Previous value: -[
        -  "symbol",
        -  "period",
        -  "count",
        -  "forward_adjust",
        -  "trade_sessions"
        -]New value: +[
        +  "symbol"
        +]
    • Changedestimate_max_purchase_quantity5 fields changed
      • addedInput schema / properties / order_type / default
        Added value: +"LO"
      • changedInput schema / properties / order_type / description
        Previous value: -"Order type: LO (Limit Order) / ELO (Enhanced Limit Order) / MO (Market Order) / AO (At-auction) / ALO (At-auction Limit Order)"New value: +"Order type, case-insensitive (default: LO): LO (Limit Order) / ELO (Enhanced Limit Order) / MO (Market Order) / AO (At-auction) / ALO (At-auction Limit Order)"
      • addedInput schema / properties / side / default
        Added value: +"Buy"
      • changedInput schema / properties / side / description
        Previous value: -"Buy or Sell"New value: +"Buy or Sell (case-insensitive; default: Buy)"
      • changedInput schema / required
        Previous value: -[
        -  "symbol",
        -  "side",
        -  "order_type"
        -]New value: +[
        +  "symbol"
        +]

TDQS

B3/5.0

Scored across 165 tools

Disambiguation2/5

Many tools have unclear boundaries, especially financial_report vs financial_statement (nearly identical IS/BS/CF interfaces), candlesticks vs history_candlesticks_by_date vs history_candlesticks_by_offset, and the cluster of institution_rating/shareholder tools. The broad domain coverage helps, but agents would frequently misselect between near-duplicate market-data and financial-data tools.

Naming Consistency3/5

Names are consistently snake_case and many use readable domain prefixes like alert_, dca_, grid_, and sharelist_. However, the pattern is mixed: retrieval tools are bare nouns (quote, depth, dividend, company) while others use verb_noun (submit_order, cancel_order, create_watchlist_group), and oddities like now and operating break the convention.

Tool Count1/5

165 tools is extreme bloat for a single server, far beyond the well-scoped 3-15 range. Even accounting for the many domains (trading, market data, IPOs, screener, community, macro), the tool surface is overwhelming and could be consolidated significantly.

Completeness4/5

The server covers an unusually wide breadth of brokerage and market-data workflows: order lifecycle, account operations, positions, deposits/withdrawals, alerts, DCA, grid trading, watchlists, sharelists, options, warrants, IPOs, screener, news, fundamentals, and macro data. There are minor dead ends such as no create/update/delete for screener user strategies and no IPO order submission/cancellation, but agents can generally work around these.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables trading and market analysis through Tiger Brokers API integration. Provides real-time market data, portfolio management, order execution, and technical analysis tools with a comprehensive web dashboard for monitoring.
    8
    -
  • F
    license
    D
    quality
    D
    maintenance
    Provides real-time stock data and AI-powered analysis for A-shares, Hong Kong stocks, and US stocks. Features sentiment analysis of financial news, deep research reports, and comprehensive market data through multiple integrated data sources.
    22
    177
    -
  • A
    license
    C
    quality
    C
    maintenance
    Enables financial research and analysis through AI agents that combine web search, content crawling, entity extraction, and deep research workflows. Supports extracting stock/fund entities with security codes and conducting structured financial investigations.
    9
    26
    Apache 2.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides comprehensive stock market data across US, Hong Kong, and Chinese markets, combining real-time quotes, historical data, fundamentals, and financial statements from multiple sources including Yahoo Finance, Finnhub, Tushare, and Futu OpenAPI.
    -