Skip to main content
Glama
longbridge

longbridge

Official

Official MCP server for the Longbridge brokerage. 163 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

  • 163 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 163 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

14

Order submission/cancellation/replacement, 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) instead of production. --canary=false forces production even when the config file enables it

Upstream endpoints are fixed by the mode, not by the environment:

Production (default)

Canary (--canary)

OpenAPI

https://openapi.longbridge.com

https://openapi-global.longbridge.xyz

Quote WebSocket

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

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

Trade WebSocket

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

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

OAuth / connect page

openapi.longbridge.com / open.longbridge.com

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

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.

All three are set explicitly on the SDK, so LONGBRIDGE_HTTP_URL, LONGBRIDGE_QUOTE_WS_URL, LONGBRIDGE_TRADE_WS_URL, their LONGPORT_* aliases, LONGBRIDGE_REGION, and a .env file are all inert — as is the SDK's geolocation probe, which means the openapi.longbridge.cn access point is never selected. Which data center serves a request is unaffected: that is decided by the x-dc-region header the SDK derives from the credential's us_ / ap_ prefix.

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.

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

164 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
_jqNo
currencyNoFilter by currency code (e.g. "USD", "HKD"). Omit to return all currencies.

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, covering the safety profile. The description adds the return format (balances[]{...}) and the filter behavior, which is useful but does not go beyond what annotations already imply. 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?

Two concise sentences. The first states the purpose and return fields, the second gives filter guidance. Front-loaded, no redundant 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 annotations covering safety, the description is nearly complete. It lists return fields and filter behavior. The main gap is the undocumented '_jq' parameter and lack of explanation for terms like 'risk_level' or 'margin_call', but these are likely self-explanatory in a financial 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?

The schema describes only the 'currency' parameter (50% coverage); 'currency' is also explained in the description with examples, adding meaning beyond the schema. However, '_jq' is not described in either the schema or the description, leaving a gap. The description partially compensates for the coverage shortfall but not completely.

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) and the verb (get), and lists the exact return fields, making it distinct from siblings like stock_positions or bank_cards.

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 provide guidance on when to use this tool versus alternatives. It mentions filtering by currency but gives no exclusions or alternative recommendations, leaving the agent to infer usage from the purpose. With over 100 siblings, some differentiation would be helpful, but the purpose is clear enough for basic selection.

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
_jqNo
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"

TDQS

A4/5.0
Behavior4/5

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

The description goes beyond the annotations by stating exactly what the returned items represent (premium percentage) and their field structure. Since annotations already flag readOnly/openWorld/idempotent and non-destructive, the description does not need to restate safety; it adds useful payload-level context that the structured data alone would not 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?

A single, front-loaded sentence that names the operation, object, and purpose, then gives the minimal return contract. There is no filler or backtracking, and all needed high-level information is visible without scrolling.

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 historical K-line tool, the description covers the endpoint role, the time-field semantics, and the return item shapes, which is especially important given there is no output schema. The main missing element is an explicit note about the closely related intraday sibling, but that absence is more of an usage-guidance gap than a completeness gap for this simple 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 75%, so symbol, period, and count are already documented at the JSON-schema level. The description adds no parameter-specific details beyond the general notion of a period, and it leaves the '_jq' parameter undocumented in both the schema coverage and the prose. Baseline 3 fits because the schema carries most of the semantic weight.

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 deliverable ('A/H share premium historical K-line data') and provides a concrete return shape ('items[]{timestamp, open, high, low, close}'). The word 'historical' distinguishes it from the sibling ah_premium_intraday without requiring the agent to inspect either schema.

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' and 'over the given period' imply this tool is for a retrospective K-line view, and the schema further clarifies period and count. However, no explicit exclusions are given—such as 'use ah_premium_intraday for real-time data'—and no alternative is referenced, leaving the caller to infer when this tool is preferred.

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)B
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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

B3/5.0
Behavior3/5

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

Annotations already mark this as read-only and idempotent, covering side effects. The description adds that it returns minute-by-minute items with timestamp and premium_rate, but it does not disclose potential quirks like market-hours availability, timezone, or whether data is delayed.

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 short sentences that front-load the core purpose ('Get A/H premium intraday time-share data') and immediately follow with the output shape. No wasted words, though the response format detail is concise.

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 data fetch, the description plus schema covers the essentials: symbol parameter, output array, and field names. Missing are operational details like time range, timezone, and whether the data is delayed, but these are not critical for basic invocation.

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 documentation covers only 'symbol' with an example, while '_jq' is undocumented. The description adds no parameter-level meaning, so an agent gets no help understanding the '_jq' parameter or accepted symbol formats 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 uses a specific verb-resource pair ('Get A/H premium intraday time-share data') and names the return shape, which clearly identifies this as the intraday variant of an A/H premium endpoint. It is distinguishable from the sibling 'intraday' tool by the 'A/H premium' qualifier, though it does not explicitly contrast itself with non-intraday A/H premium 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 given on when to use this tool versus sibling tools such as 'intraday' or other premium-related endpoints. There are no example use cases, prerequisite conditions, or notes on symbol formats beyond the schema.

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
_jqNo
priceYesThreshold price or percentage value
symbolYesSecurity symbol, e.g. "700.HK"
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 declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, indicating this is a non-read, non-idempotent operation. The description adds that it 'Returns created alert object,' which is useful behavioral context. However, it doesn't disclose side effects like whether adding an alert overwrites existing alerts, whether there are limits on the number of alerts, or whether the operation requires authentication. The description doesn't contradict annotations, but it doesn't add much beyond what annotations already 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?

The description is concise and front-loaded: it starts with the action ('Add a price alert'), then explains the key parameters in a compact format. Every sentence earns its place, and the return value is mentioned at the end. 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 creation tool with no output schema, the description covers the essential aspects: what it does, the key parameters, and the return value. It doesn't mention error cases, rate limits, or prerequisites (e.g., authentication), but these are not typically required for a simple alert creation tool. The description is complete enough for an agent to invoke the tool correctly, though it could benefit from noting that the alert is created for the authenticated user.

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 80%, so the schema already documents most parameters. The description adds value by explaining the semantics of 'condition' (price_rise/price_fall vs percent_rise/percent_fall) and 'frequency' (once/daily/every), which clarifies the meaning of the 'price' parameter (threshold price or percentage value). The description also clarifies that 'price' is the threshold value, which is not fully explicit in the schema. The only undocumented parameter is '_jq', which is likely a query parameter and not critical for the agent's understanding.

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: 'Add a price alert.' It specifies the resource (price alert) and the action (add), and distinguishes it from sibling tools like alert_delete, alert_disable, alert_enable, and alert_list. The description also enumerates the condition and frequency options, making the tool's scope 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 clear context for when to use this tool: when creating a price alert. It explains the condition and frequency parameters, which are essential for correct usage. However, it does not explicitly state when not to use it or mention alternatives (e.g., for managing existing alerts, use alert_list/alert_delete/alert_enable/alert_disable). The sibling names imply these alternatives, but the description itself doesn't route the agent away from them.

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
_jqNo
alert_idYesAlert indicator id

TDQS

A4/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, so the description correctly avoids repeating those. It adds value by specifying that it returns the upstream API response on success and errors on an invalid alert_id, which is useful behavioral context beyond the annotations. No contradictions found.

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 core action and identifier are front-loaded, and the error/return behavior is stated efficiently. 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 covers the essential details: what to pass, where the ID comes from, what to expect on success, and the error condition. Annotations already handle the destructive and idempotent hints. No output schema exists, so the return value description is sufficient. It is complete enough for an agent to call 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 only 50% (alert_id has a minimal schema description, _jq has none). The description compensates for alert_id by clarifying it is a numeric string from alert_list, but it does not explain the optional _jq parameter. While the main parameter is well covered, the secondary one remains undocumented, so the description only partially bridges the gap.

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 (delete), resource (price alert), and key identifier (alert_id). It also tells the agent where the ID comes from (alert_list), which clearly distinguishes it from siblings like alert_disable, alert_enable, and alert_add. 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 the use case (permanently remove an alert) and even points to alert_list as the source of the ID. However, it does not explicitly contrast with alert_disable (which might be a non-destructive alternative) or state when not to use this tool. The guidance is adequate but leaves comparison 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.

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
_jqNo
alert_idYesAlert indicator id

TDQS

A3.7/5.0
Behavior3/5

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

The annotations already cover the key behavioral traits: readOnlyHint=false, destructiveHint=false, and idempotentHint=true. The description adds no behavioral detail beyond stating the disabling action itself, which is appropriate but not enriching enough to justify a higher score.

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 contain the core action and a concrete lookup direction with no redundant wording. The description is small and front-loaded, serving its 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?

The tool is simple, requires only one parameter, and its annotations cover idempotency and mutability. The description is adequate for invocation; the only notable omission is guidance on choosing between similarly named alert operations, but that gap is minor for the agent to successfully call this 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?

The schema only describes alert_id as 'Alert indicator id', while the description adds the valuable detail that the alert_id is numeric and can be obtained via alert_list. This helps the agent construct a correct call, though the optional _jq parameter remains unexplained.

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 the specific action ('Disable') and the resource ('a price alert') and identifies the key parameter by name. It does not explicitly differentiate this from sibling tools like alert_delete and alert_enable, but the verb 'disable' is semantically clear enough for basic selection.

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 practical guidance by telling the agent to use alert_list to discover the numeric alert_id. However, it does not explain when to choose this tool over alert_delete or alert_enable, so usage context among the alert siblings is only 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.

alert_enableEnable Price AlertB
Idempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
alert_idYesAlert indicator id

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true, readOnlyHint=false, and destructiveHint=false. The description adds no additional behavioral context, such as what happens if the alert is already enabled, whether it requires specific permissions, or what the response contains. It simply restates the action, so it adds little 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 short sentences with no wasted words. The primary action is stated first, and the helpful hint about alert_list follows. It is efficiently structured.

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 enable operation with one required parameter, the description provides the essential information: the action and how to get the ID. However, it does not describe the return value or error conditions, which might be useful since there is no output schema. The idempotency is covered by annotations, so it is reasonably complete but could benefit from a note about the expected 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 description clarifies that alert_id is numeric and can be obtained via alert_list, which adds meaning beyond the schema's 'Alert indicator id'. However, the _jq parameter (the other parameter) is not mentioned at all, and with 50% schema coverage, the description does not fully compensate for the undocumented _jq parameter. It helps for alert_id but leaves _jq unexplained.

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: 'Enable a price alert by alert_id.' It identifies the resource (price alert) and the required identifier. It also points to alert_list for finding the ID, which helps differentiate from the list tool. However, it does not explicitly contrast with alert_disable or alert_add, so it doesn't fully distinguish among sibling alert 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?

The description provides no guidance on when to use this tool versus alternatives like alert_disable or alert_add. It only says to use alert_list to find the ID, which is about obtaining the parameter, not about choosing this tool. There is no statement about enabling being appropriate for existing alerts or that it should not be used for creating alerts.

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

alert_listList Price AlertsB
Read-onlyIdempotent
Inspect

Get all configured price alerts.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations (readOnlyHint, idempotentHint, openWorldHint, destructiveHint=false) already define the safety profile. The description adds minimal behavioral nuance ('configured', 'all'), but says nothing about pagination, completeness limits, or response format. It does not contradict annotations, and the annotation-provided context justifies a baseline score.

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 compact single sentence that focuses on the core action and object. There is no filler or redundancy, and the key information appears up front. It is appropriately brief for a tool whose burden falls only on the brief statement.

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 an undocumented parameter and no output schema, the description is insufficiently complete. An agent cannot determine whether `_jq` must be supplied or what return shape to expect, and no usage fallback is given. The description leaves the most delicate semantic gaps open.

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

Parameters1/5

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

The single parameter `_jq` has a schema description coverage of 0%, and the description does not hint at its meaning or effect. The agent is left entirely uninformed about whether this parameter is required, optional, or what values control behavior. There is no effort to compensate for the missing schema 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 uses a specific verb ('Get') and a specific resource ('all configured price alerts'), and clearly distinguishes this tool from the alert mutation siblings (alert_add, alert_delete, alert_disable, alert_enable). The intent is immediately understandable 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?

The description gives no guidance on when to choose this tool over alternatives, nor does it mention prerequisites such as having alerts configured. It is a bare imperative statement, leaving the agent to infer usage from the tool name and sibling set.

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

anomalyMarket AnomalyB
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
_jqNo
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

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, so the safety profile is covered. The description adds context about what constitutes an anomaly and clarifies the count pagination, but it does not disclose additional behavioral traits like response format or rate limits. With strong annotations, 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. It front-loads the purpose and then lists parameters concisely, making it easy for an agent 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 simple read-only tool with rich annotations and a small parameter set, the description covers the essential information: purpose, parameters, and pagination. It omits the meaning of _jq and return format, but given the tool's simplicity and annotations, these are minor 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 75% (three of four parameters have descriptions). The description repeats the market codes, symbol example, and count defaults, adding little beyond the schema. The _jq parameter lacks any description in both schema and tool description, leaving a gap, but the overall parameter guidance 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 the tool fetches market anomaly alerts and defines them as unusual price/volume changes. It specifies the resource and verb, making the purpose clear. It does not explicitly differentiate from sibling tools like alert_list or signals, but the description's specificity is sufficient for basic understanding.

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 does it mention exclusions or prerequisites. It only explains parameters, leaving the agent to infer when anomaly alerts are appropriate relative to other alert and signal tools.

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
_jqNo

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, destructiveHint=false, which informs the agent that this is a safe read operation. The description adds the detail that the returned data includes masked account numbers and status, which is useful. However, it does not disclose potential limitations such as only returning cards for the current account (implying no filtering), which is a minor gap but the description already states 'linked... for the current account'.

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 concise and information-dense. It front-loads the action and resource, and includes the exact output shape. There is zero wasted words; every phrase 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?

For a simple read-only tool with one optional parameterasi and a clear output structure described, the description is essentially complete. It lacks explicit response limitations (e.g., pagination) but given the tool's simplicity and the presence of annotations, the description provides enough context for an agent to call it correctly. The output schema is not provided, but the description compensates by listing the fields.

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?

The schema has only one parameter '_jq' with no description, and schema description coverage is 0%. The description does not explain the '_jq' parameter. However, since the parameter is optional (0 required) and likely a jq filter for output transformation, the schema itself is sparse电能; the description's lack of detail on '_jq' is not a major issue because it is optional and the core behavior is clear. The description provides a clear output structure.

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: listing linked withdrawal bank cards for the current account FAQs. It specifies the resource (bank cards) and the verb (list). Although it does not explicitly differentiate from sibling tools like 'withdrawals', the resource is distinct enough that an agent can infer it is the appropriate tool for accessing card information.

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: it lists linked cards for the current account, which is clear for the primary use case. However, it does not provide explicit guidance on when to use this tool over siblings like 'withdrawals' (which likely handles withdrawal records) or 'deposits'. There are no exclusions or alternative suggestions.

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

broker_holdingBroker HoldingB
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
periodNoPeriod: "rct_1" (1 day, default), "rct_5" (5 days), "rct_20" (20 days), "rct_60" (60 days)
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

B3/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 the data source (HKEX CCASS) and market restriction, which is useful but does not disclose return format or pagination. Given annotations carry the safety burden, the description adds some value beyond them, 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.

Conciseness4/5

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

The description is a single, front-loaded sentence that conveys the core purpose, market scope, and data source with zero waste. It is concise, though it omits any usage guidance or parameter hints that might be expected for a tool with siblings.

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 three parameters and no output schema, the description covers the purpose and scope. However, given the presence of sibling tools (broker_holding_daily, broker_holding_detail, brokers) that overlap in domain, the description does not help an agent decide which one to call. This is a notable gap in completeness.

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 description coverage is 67% (symbol and period have descriptions, _jq does not). The description does not elaborate on any parameters, nor does it compensate for the undocumented _jq field. It adds no parameter-level meaning beyond what the schema already provides, so the score is below the baseline for full 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 states a clear verb ('Get') and resource ('top broker holding data for a symbol'), plus a market scope ('HK stocks only') and data source. It does not explicitly differentiate from siblings like broker_holding_daily or broker_holding_detail, but the core 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 mentions that it applies only to HK stocks and is sourced from HKEX CCASS, which gives some context, but it does not state when to use this tool versus the sibling broker_holding_daily, broker_holding_detail, or brokers. There are no explicit alternatives or when-not conditions.

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)B
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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"
broker_idYesBroker participant number

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 this is safely a read operation. The description adds the data source (HKEX CCASS) and coverage (daily history, HK stocks), which is useful. However, it does not disclose any potential rate limits or pagination behavior, which might matter for historical queries.

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, information-dense sentence: it states the verb (get), the resource (daily holding history), the key parameters (broker_id and symbol), and the scope (HK stocks, HKEX CCASS). No filler 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 description covers the basic purpose and source, but given that there is no output schema, it does not describe return fields or data quality. It also doesn't clarify the relationship to sibling tools like 'broker_holding' or 'broker_holding_detail', which is a moderate gap for a data-retrieval 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 schema describes both required parameters with good detail: 'symbol' explains format (e.g., '700.HK') and 'broker_id' as 'Broker participant number'. With 67% schema coverage, the description adds minimal extra parameter context. The optional '_jq' parameter remains undocumented in both schema and description, but being optional and likely a filter, the baseline 3 is reasonable.

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 daily holding history for a broker in a symbol, with a specific scope (HK stocks, HKEX CCASS source). It is distinguishable from sibling tools like 'broker_holding' (likely current holdings) and 'broker_holding_detail' (likely more granular), though it doesn't explicitly differentiate from 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?

The description implies when to use it (historical daily data for brokers) but does not explicitly state when not to use it or which alternatives are better (e.g., 'broker_holding' for current holdings, 'broker_holding_detail' for detailed changes). An agent would need to infer the differentiation from sibling names.

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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

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, covering safety. The description adds value by specifying the market restriction (HK stocks only) and the data source (HKEX CCASS), which are behavioral constraints not captured in the annotations. However, it does not describe pagination or the structure of the returned list, though this is partially mitigated by the strong 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 a single, front-loaded sentence that immediately states the tool's action and scope. It contains no filler and every word adds information (full list, symbol, HK only, source). This is an exemplar of concise, structured writing.

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 the tool has only two parameters, no output schema, and rich annotations, the description is adequate but not complete. It covers the core purpose and market scope, but does not explain what 'full broker holding detail list' includes, nor does it document the '_jq' parameter or any prerequisites beyond HK stocks. For a detail-list tool, an agent might need more context on return fields, but the absence of an output schema shifts that burden to the description, which does not fully meet it.

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 description coverage is 50% (only 'symbol' is documented). The description mentions 'for a symbol' but does not elaborate on the meaning or format beyond what the schema already provides. The '_jq' parameter is entirely undocumented in both schema and description, leaving an agent without guidance on its purpose or usage. The description fails to compensate for the coverage gap.

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 ('Get'), the resource ('full broker holding detail list'), and the scope ('for a symbol' with 'HK stocks only'). It also specifies the data source (HKEX CCASS participant disclosure), which differentiates it from sibling tools like broker_holding or broker_holding_daily. This is a precise and specific statement of 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 provides useful context (HK stocks only, data source) but does not explicitly guide when to use this tool versus alternatives such as broker_holding or broker_holding_daily. There is no mention of exclusions or conditions that would route an agent to a sibling, so usage guidance is 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.

brokersBroker QueueA
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already convey readOnlyHint=true and idempotentHint=true, so the description only adds scoping ('HK stocks only') and a data dependency ('Map broker IDs to names via participants'). These add some behavioral context, but the description does not disclose response format, pagination, or any limitations beyond the scope note.

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, action first, with no filler or redundant details. The key scope restriction is front-loaded and the participants hint is included efficiently.

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 its simplicity and the annotations provided, the description is adequate for understanding what it does, but it leaves the output shape unexplained and assumes the agent knows which 'participants' tool or resource to use. Without an output schema, this is a noticeable gap.

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 description coverage is 50%; symbol has a description with an example, but _jq has none. The description indirectly constrains symbol to HK stocks, which adds some meaning, but it provides no information about the _jq parameter and does not compensate for the missing schema 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 ('Get broker queue'), adds an explicit scope restriction ('HK stocks only'), and references a companion step ('Map broker IDs to names via participants') that distinguishes it from sibling tools like broker_holding or broker_holding_detail. An agent can immediately understand what this tool does and how it fits into a workflow.

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 gives a context clue ('HK stocks only') but does not explicitly say when to use this tool versus alternatives, nor does it name any sibling tools as superior for other cases. The 'map via participants' hint implies a workflow, but there is no explicit when-to-use/when-not-to-use guidance.

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
_jqNo
symbolYesSecurity symbol, 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 declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the operation's safety profile. The description adds useful context by enumerating the returned fields and the 'current-period' temporal scope, but does not disclose behaviors such as period definition, data availability, or input format normalization.

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-loaded with the primary action and scope, and every word contributes. It is appropriately compact for a simple read-only query tool with no nested objects or output 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 tool with strong annotations and only one required, documented parameter (symbol), the description supplies the essential output fields and the current-period scope. It could further clarify what 'current-period' means or describe _jq, but the tool's simplicity makes this level of detail adequate.

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 description coverage is only 50%; symbol is documented with an example, but _jq has no description. The tool description only restates 'for a symbol' and does not explain _jq or add any format/validation details beyond the schema. It fails to compensate for the missing 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 uses a specific verb 'Get' with a clear resource: 'business segment revenue breakdown'. It also states the scope ('current-period', 'for a symbol') and lists the key output fields (name, percent, total, currency). The 'current-period' qualifier distinguishes it from the sibling business_segments_history 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 Guidelines4/5

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

The 'current-period' qualifier gives clear context that this tool is for present-period data, implying that historical data should be retrieved elsewhere (e.g., business_segments_history). However, it does not explicitly name that alternative or state when not to use the tool, stopping 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.

business_segments_historyBusiness Segments HistoryA
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
cateNoSegment category filter
reportNoReport period: "qf" (quarterly), "saf" (semi-annual), "af" (annual)
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?

The annotations already declare this as read-only, idempotent, and non-destructive. The description adds only the idea of 'revenue trends by period and category' but does not explain output shape, pagination, or any other behavioral details that the annotations do not cover.

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 leads with the action and resource, then adds the key dimensions. 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.

Completeness3/5

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

The tool is simple, with annotations covering side effects and the schema covering required parameters. However, the description omits any mention of return shape or how results are organized (e.g., chronological order, units), and does not clarify edge cases like missing segment data. It is adequate but thin.

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 covers 3 of 4 parameters with descriptions, and the tool description's mention of 'period' and 'category' lightly reinforces the `report` and `cate` parameters. However, it does not add meaningful meaning beyond the schema, and `_jq` remains unexplained.

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 clear resource ('historical business segment revenue trends'), and the parenthetical ('by period and category') adds useful dimensions. It does not explicitly contrast with the sibling tool `business_segments`, but the word 'historical' and 'trends' provide a reasonable distinction from the likely current-snapshot tool.

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 for historical trend retrieval, but it does not explicitly state when to choose this over `business_segments` or other alternatives. There is no 'when to use' or 'when not to use' guidance beyond the implied historical focus.

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
_jqNo
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"]

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. The description adds valuable behavior beyond that: the full default index list and the precise normalization semantics for Greek indexes (theta per-day, vega per 1% IV, rho per 1% rate). 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?

The description is moderately long but every sentence serves a purpose: purpose, parameters, defaults, output, and Greek normalization. The default list repeats schema content but functions as a convenient reference; there is no unnecessary 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 calculation tool, it adequately covers required inputs, optional inputs with defaults, output shape, and special behavior for Greek indexes. Since there is no output schema, the statement 'Returns per-symbol index values' gives sufficient but not exhaustive return-value context.

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?

The schema already describes symbols and indexes, but the description enriches the indexes parameter with concrete examples, the default set when omitted/empty, and special interpretation for Greek indexes. It leaves _jq undocumented, but schema coverage is still 67% and the description adds meaningful guidance 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 opens with a specific verb and resource: 'Calculate financial indexes for symbols,' and later clarifies it returns per-symbol index values. This distinguishes it from many siblings, though it does not explicitly name an alternative tool.

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 explains how to invoke the tool: pass symbols, optionally indexes, and what happens when indexes is omitted or empty. However, it does not explicitly state when to prefer this tool over siblings like quote or now, 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.

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
_jqNo
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

A4.8/5.0
Behavior5/5

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

The description discloses a critical behavioral trait that annotations do not fully capture: the tool is a dry run unless a confirmation code is passed. It explains the generated code is order-specific, single-use, expires in 10 minutes, and that changing any field invalidates it. The destructiveHint is true, but the description goes beyond by specifying the exact safety protocol, which is essential 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 dense but well-structured, front-loading the core action and then the critical confirmation requirement. It is longer than ideal, but every sentence serves a purpose (e.g., dry-run mechanics, code properties, leg cancellation). The structure is logical: action, success response, confirmation protocol, special case, and safety rules.

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 there is no output schemaторit, the description adequately explains the return value ('plain text order cancelled') and error conditions. It fully covers the tool's behavior, including the dry-run preview echo and the distinction between parent and attached-leg cancellation. An agent has all information needed to call the tool correctly without external documentation.

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?

The schema already has high coverage (75%) with detailed parameter descriptions, including the purpose of 'execute' and 'is_attached'. The description adds value by explicitly tying the confirmation code to the dry-run flow in prose form)Skip, reinforcing the two-step protocol beyond the schema's parameter-level explanation. It clarifies the parent-leg behavior that is partially in the schema but reiterated for emphasis.

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 clear verb ('Cancel') and resource ('an open order by order_id'), and immediately distinguishes two use cases: cancelling a parent order versus an attached leg. This differentiates it from siblings like 'replace_order' and 'grid_cancel' and tells the agent exactly what 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 Guidelines5/5

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

It explicitly states the mandatory two-step confirmation protocol: first call without execute to get a preview, show it to the user, then call again with the confirmation code after explicit approval. It also names the alternative for cancelling a single leg (is_attached=true) and clarifies that cancelling a parent also cancels legs, which addresses common ambiguity.

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
_jqNo
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"
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.5/5.0
Behavior4/5

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

The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds a meaningful behavioral detail: when the entitlement caps out, the tool returns as many candles as allowed instead of erroring, and it advises checking the array length. This goes beyond what annotations convey and is valuable for the agent.

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 concise and front-loaded with the core purpose. It lists defaults and edge-case behavior in a structured manner without unnecessary fluff. Every sentence provides 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 read-only tool with 6 parameters and no output schema, the description covers the defaults, allowed values, and an important edge case. However, it omits the _jq parameter entirely and does not describe the response structure beyond 'candlestick data (OHLCV)', which is vague. Given that there is no output schema, this is a notable 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 high (83%), so the schema already documents all parameters except _jq. The description repeats defaults and enum-like values that are also in the schema, but it does add the clarification that only symbol is required and explains the entitlement behavior. However, it does not explain _jq, which is undocumented in both schema and description. Overall, 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 verb 'Get' and the resource 'candlestick data (OHLCV)', making the purpose specific and unambiguous. It also lists the default values and required field, but it does not explicitly differentiate from sibling tools like history_candlesticks_by_date or history_candlesticks_by_offset, which likely serve a different purpose (historical vs. periodic).

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 that this is for recent/periodic data, nor does it point to sibling tools for historical queries. The only usage hint is the behavior when the entitlement caps out, but that is not a usage guideline.

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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

A3.6/5.0
Behavior5/5

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

Beyond the readOnlyHint/idempotentHint annotations, the description discloses a non-obvious edge case: symbols like indices produce data_available=false while other fields remain present but as meaningless zeros. This directly prevents an agent from misinterpreting zeros as real data, which is substantial added 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?

Two sentences: the first states the action and object, the second delivers the critical caveat. No filler or repetition of schema content; the structure is front-loaded with the core 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 a simple read-only symbol lookup with one required parameter, the description covers the key gotcha (missing data yields data_available=false with meaningless zeros). However, it doesn't enumerate the returned capital distribution fields, so an agent must infer the payload structure beyond the single flag. Given no output schema, this leaves minor uncertainty about the response shape.

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 already documents symbol and its format. The description reiterates 'for a symbol' but adds no parameter-specific semantics for the undocumented _jq parameter axes. With 50% schema coverage, this lack of additional explanation leaves _jq ambiguous.

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 the clear verb 'Get' with the object 'capital distribution for a symbol', making the tool's purpose immediately understandable. It doesn't explicitly contrast against sibling tools like capital_flow, but the scope ('for a symbol') is specific enough that a caller can infer what this endpoint returns.

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 choose this tool over siblings. It only explains a data-availability edge case (data_available false for indices). Without explicit routing to alternatives such as capital_flow, an agent gets limited conditional context but no decision framework.

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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld. The description adds a meaningful behavioral caveat ('same-day data') and specifies the item shape (timestamp, inflow, outflow, net_flow), which helps set expectations without contradicting the annotations.

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

Conciseness5/5

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

A single sentence that front-loads the core action and return shape with zero 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?

Returns fields and same-day caveat are stated, and the read-only profile is already covered by annotations. It is slightly light on how the time series is bounded (default range, intraday vs. historical daily), but for a simple read tool this is nearly complete.

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 ~50% since symbol is documented but _jq is not. The description only restates 'for the symbol' and does not clarify the _jq filtering parameter. At this coverage level, the description needed to compensate but largely repeats what the schema already conveys.

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: 'Get capital flow time series' and lists the exact return fields (items[]{timestamp, inflow, outflow, net_flow}), making the tool's purpose clear. However, it does not differentiate itself from the sibling 'cash_flow' tool, which could plausibly be confused with it despite being a different concept.

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. Given the large sibling set including cash_flow and capital_distribution, the description provides no exclusions or routing hints that would help an agent choose between them.

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
_jqNo
end_atYesEnd time (RFC3339)
start_atYesStart time (RFC3339)

TDQS

B3.3/5.0
Behavior3/5

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

Read-only and non-destructive behavior is already covered by annotations. The description adds useful behavior context by listing the returned items[] fields and the RFC3339 date format, but does not disclose pagination, result limits, or response envelope details.

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 tight sentences deliver purpose, allowed record types, return shape, and date format with 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?

The description provides the return fields and date format, which is valuable given there is no output schema. Still, it omits context an agent may need such as pagination, maximum date range, ordering, and why an agent should choose this instead of the sibling deposit/withdrawal/dividend tools.

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 documents start_at and end_at, and the description reinforces the RFC3339 format. However, the _jq parameter is left undocumented, and no parameter relationships, constraints, or defaults are explained. With 67% schema coverage, the description partially compensates but not fully.

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 and resource ('Get cash flow records') and enumerates the record types (deposits, withdrawals, dividends). This is clear about what the tool does, but it does not differentiate itself from sibling tools like deposits, withdrawals, or dividend_detail, which may already cover those subsets.

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?

Implies it is a unified view of deposits, withdrawals, and dividends, but never explicitly says when to choose cash_flow over the dedicated deposits/withdrawals/dividend sibling tools. No guidance on exclusions, prerequisites, or alternatives.

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

companyCompany ProfileB
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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

B3.4/5.0
Behavior4/5

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

The description adds a useful behavioral disclosure beyond the read-only annotations: the region is auto-detected from the account, and US accounts get a variant with specific fields. It doesn't describe the non-US behavior, which 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?

Two concise sentences with no filler. The core purpose is front-loaded, and the conditional variant is explained efficiently.

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, low-complexity overview tool, the description is mostly complete: it covers the main purpose and an important conditional behavior. The lack of an output schema and any detail on non-US responses is a minor gap, but not critical given the tool's simplicity.

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?

The description does not mention parameters at all. The symbol parameter is covered by the schema with an example, but the optional _jq parameter remains undocumented in both schema and description, so the description does not compensate for the coverage gap.

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 action ('Get company overview') and resource, with a specific verb. It does not explicitly name or contrast sibling tools like static_info or security_facts, so the differentiation is left to the agent's inference.

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. The only conditional context is the US-specific variant, which is a behavioral detail rather than a routing rule.

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

consensusAnalyst ConsensusB
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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

B3.4/5.0
Behavior4/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 meaningful runtime behavior: US accounts querying .US symbols receive a different response shape (ai_summary plus details[] instead of items[]). This is useful 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?

Two concise sentences, front-loaded with the core purpose. The regional variant is stated immediately after the main behavior, and 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?

The essential context is present: what is returned, the regional variant, and automatic account-based region detection. Since there is no output schema, a bit more detail about the general response structure for non-US accounts would improve completeness, but the description covers the main agent decision points.

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 only 50% (symbol is described; _jq is not). The description does not add meaning for either parameter beyond what the schema already provides, so it fails to compensate for the undocumented _jq parameter.

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 consensus estimates for upcoming periods, with a specific verb and resource. It does not explicitly distinguish this from related tools like forecast_eps or institution_rating_history, but the regional variant detail adds useful specificity.

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 sibling alternatives such as forecast_eps, institution_rating_history, or finance_calendar. The only usage nuance is the US-account variant, which is a behavioral note rather than a selection guideline.

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
_jqNo
symbolYesIndex symbol, e.g. "HSI.HK"

TDQS

A4.2/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, lowering the bar for the description. The description goes beyond that by detailing the response structure: for indices it returns constituents[] with specific fields, and for ETFs it returns info[] grouped by asset_type (1-4), including nested details like holding_detail and report_date. This gives the agent a precise understanding of what to expect without needing an 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?

The description is long but every sentence contributes meaningful detail. It front-loads the core purpose, then systematically explains the index case and the four ETF asset-type groups, including field names and nested structures. While it is more verbose than a minimal definition, the complexity of the output justifies the length, and it remains well-organized.

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 carries the full responsibility for explaining return values. It does so thoroughly: it covers both index constituents (listing all fields) and ETF asset allocation (explaining the four groups, their fields, and nested objects). No critical information about the response is missing, making the tool callable correctly without additional schema 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?

Schema coverage is exactly 50%: the 'symbol' parameter has a description, but '_jq' does not. The tool description adds value for 'symbol' by providing concrete examples (HSI.HK, QQQ.US) and explaining how the symbol determines index vs ETF behavior. However, it does not address '_jq' at all, and the overall parameter documentation is not complete. Since coverage is borderline and the description partially compensates, 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 clearly states the tool's purpose: 'Get the constituents of an index or the asset allocation of an ETF.' It provides specific examples (HSI.HK, .DJI.US for indices; QQQ.US, 2800.HK for ETFs) and explains the distinct outputs for each case. This unambiguously distinguishes it from any sibling that might handle similar data, such as fund_positions or etf_docs, without needing to 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 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 you need index constituents or ETF asset allocation. It does not explicitly list when not to use it or name alternative tools, but the usage context is well-defined through the index/ETF distinction. This meets the 'clear context, no exclusions' level.

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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

B3.1/5.0
Behavior3/5

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

Annotations mark the tool as read-only and open-world, so no side-effect warning is needed. The description is consistent with those annotations and provides basic examples. It does not disclose any additional behavior such as time range, pagination limits, or how current data is, but for a simple read-only lookup this is 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?

A single, direct sentence that front-loads the verb and resource. It wastes no tokens and the parenthetical examples add useful detail without bloat.

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 annotations and a simple schema, the description is close to adequate, but it omits when this is the right tool (vs dividend_detail/capital_distribution) and what the response format looks like. No output schema exists to fill that gap, so a bit more context would help.

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?

The description does not explain how to use the parameters, and the schema only documents 'symbol' while '_jq' has no description. With 50% schema coveragethe description should compensate but does not mention either parameter.

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 'corporate actions' with concrete examples (splits, buybacks, name changes). This makes the primary purpose evident and distinguishes it from related tools like dividend_detail or cash_flow, though it doesn't explicitly contrast with 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 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 sibling tools such as dividend_detail, capital_distribution, or company. The description implies it covers various corporate actions but gives no use-case context, exclusions, or selection criteria.

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 GroupAInspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
nameYesGroup name
securitiesNoSecurities to add, e.g. ["700.HK", "AAPL.US"]

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false, and the description adds that securities can optionally be passed to pre-populate the group. However, it does not disclose duplicate-name behavior, ownership requirements, or other side effects. 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 concise, front-loaded sentences with no filler. It states the core action first and the optional behavior second.

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 the schema covers the main parameters, but with no output schema the description does not mention what the tool returns or how success/failure is signaled. It also omits behavior around duplicate group names or whether an empty group is created when securities are omitted.

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 documents 'name' and 'securities' with descriptions and an example. The description reinforces the securities example and adds the 'pre-populate' intent, but the '_jq' parameter remains undocumented, and no additional semantic detail beyond the schema is 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 uses a specific verb ('Create') and resource ('watchlist group'), and clarifies the optional pre-population behavior with securities. This clearly distinguishes it from sibling tools like update_watchlist_group and delete_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 Guidelines3/5

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

The description makes the tool's purpose clear, but it does not explicitly state when to use this tool versus updating or deleting a watchlist group. The usage context is implied by the name and siblings rather than spelled out.

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
_jqNo
symbolsYesSecurity symbols to check, e.g. ["AAPL.US", "TSLA.US"]

TDQS

A3.6/5.0
Behavior3/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, so no side-effect warning is required. The description adds little behavioral detail beyond that, such as return format or handling of unsupported symbols, 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?

A single sentence carries the full purpose with no filler, and the key object (`symbols`) appears early. It is easy to parse 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 simple read-only check the description is close to adequate, but there is no output schema and no statement of what the tool returns, such as a boolean, per-symbol status, or filtered result. It also does not explain how unsupported or unknown symbols are reported, leaving some ambiguity.

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?

The schema documents `symbols` with an example, and the description only restates 'given symbols' without adding parameter-level detail. `_jq` is entirely undocumented in both the schema and the description, so the 50% coverage gap is not compensated.

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 a specific predicate operation: it checks whether given symbols support DCA recurring investment. This is plainly distinct from sibling DCA actions such as dca_create, dca_history, or dca_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?

No explicit when-to-use or when-not-to-use guidance is provided, and no alternative tool is named. The description implies its use as a preflight eligibility check, but it does not say to use it before dca_create or distinguish it from dca_list or dca_history.

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
_jqNo
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.6/5.0
Behavior3/5

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

Annotations already supply readOnlyHint=false and idempotentHint=false, so 'Create' correctly signals mutation and non-idempotency. The description adds the recurring nature of the plan but does not mention consequences such as automatic later investments or duplicate-plan creation on repeated calls.

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 short clauses front-load the verb and then map directly to frequency, day_of_week, and day_of_month with no filler. Slightly telegraphic, but every fragment carries useful parameter 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?

The description covers the core inputs and frequency values, but with no output schema it leaves the return shape unstated. It also does not explicitly explain conditional dependencies such as 'day_of_week applies only when frequency=Weekly' beyond a parenthetical, though the schema already conveys much of this.

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 86%, so the high-coverage baseline applies. The description largely restates schema fields ('Daily, Weekly, Monthly', 'Mon/Tue/Wed/Thu/Fri', '1-28') rather than adding new meaning such as conditional-required logic or interaction with allow_margin.

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 ('Create') and resource ('DCA recurring investment plan'), immediately distinguishing it from management siblings like dca_update, dca_pause, and dca_stop. The scheduling parameters reinforce the tool's domain and scope.

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 setting up a new DCA plan, but it never names alternatives or says when not to use this tool. With a large DCA family (dca_update/dca_stop/dca_resume), an explicit routing note would elevate this dimension.

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

dca_historyDCA Execution HistoryB
Read-onlyIdempotent
Inspect

Get execution history records for a DCA plan by plan_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
pageNoPage number (default 1)
limitNoRecords per page (default 20)
plan_idYesPlan 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=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that records are scoped by plan_id, which is useful. However, it doesn't disclose pagination behavior, ordering, or what fields the records contain. 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 action and resource. It's concise and to the point. It could add a bit more context about pagination or return format, but for its length it's 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 read-only list tool with annotations covering safety and schema covering most parameters, the description is adequate. However, there's no output schema, and the description doesn't mention what the execution history records contain, how they're ordered, or how pagination works. An agent could call it correctly with plan_id, but might not know 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?

Schema description coverage is 75%: plan_id, page, and limit have descriptions, while _jq has none. The description adds minimal value beyond the schema—it confirms plan_id is the key filter. The _jq parameter is undocumented in both schema and description, which is a gap, but the core parameters are already well-described 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 verb ('Get'), a resource ('execution history records'), and a scope ('for a DCA plan by plan_id'). It clearly identifies what the tool does. It doesn't explicitly distinguish from siblings like today_executions or history_executions, but the DCA plan scoping is a clear differentiator.

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: use this when you need execution history for a specific DCA plan. It doesn't explicitly state when not to use it or name alternatives like history_executions or today_executions. The context is clear enough for an agent to infer, but no explicit routing guidance is provided.

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
_jqNo
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?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds the filtering behavior (by status or symbol) and the fact that omitting filters returns all plans, which is useful. It does not disclose pagination behavior beyond the schema's page/limit defaults, but that is a minor gap given the annotations carry the main behavioral 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 sentences, zero filler. The main action and resource are front-loaded, and the filter options are stated compactly. 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 no output schema, the description plus annotations cover the essential call context: what it lists, how to filter, and that it is safe/idempotent. Pagination defaults are in the schema. It could mention that the response is a paginated list, but the schema's page/limit parameters already imply that. Slightly more detail on return shape would push this to 5, but it is not necessary 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 80%, so the schema already documents most parameters. The description adds the meaning of the status filter (Active/Suspended/Finished) and the symbol filter example ('AAPL.US'), which slightly enriches the schema. The _jq parameter is undocumented in both schema and description, but at 80% coverage the description is not required to compensate fully. 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 ('List') and resource ('DCA recurring investment plans'), and immediately distinguishes itself from sibling tools like dca_history, dca_stats, dca_update, dca_create, dca_pause, dca_resume, dca_stop, and dca_check. It also names the two filter dimensions (status and symbol), which makes the tool's scope unmistakable.

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: when you need a list of DCA plans, optionally filtered by status or symbol. It does not explicitly name alternatives or exclusions, but the sibling set is large and the description's filter hints (status/symbol) plus the title 'List DCA Plans' make the use case clear. It could be improved by explicitly saying 'use dca_history for past executions' or similar, but the context is sufficient.

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
_jqNo
plan_idYesPlan ID

TDQS

A4.1/5.0
Behavior4/5

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

The description discloses the core behavioral effect: the plan stops executing until resumed. It also mentions the return value ('Returns upstream API response'). The annotations already indicate readOnlyHint=false and idempotentHint=true, so the description adds context about reversibility and the specific effect on executions. It does not contradict the annotations and adds meaningful behavior 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.

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 each sentence contributes either the purpose, the effect, or the pointer to the resume tool. It is minimal yet complete.

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 state-change tool, the description covers the key points: what it does, the effect, and the path to undo (via resume). It does not discuss required parameters beyond plan_id or error handling, but given the schema and annotations are available, it is fairly complete. A mention of the difference from dca_stop or the _jq parameter would have made it more robust.

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?

The description references plan_id as the identifier ('by plan_id') but does not explain the second parameter _jq, which is present in the schema and lacks a description (schema coverage is only 50%). The description adds value for plan_id by clarifying its role but fails to compensate for the undocumented _jq parameter. It would need to mention _jq or its purpose to be more helpful.

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 clear action ('Pause (suspend)'), a specific resource ('a DCA plan'), and the mechanism ('by plan_id'). It also differentiates from the sibling tool by explicitly naming dca_resume as the restart counterpart. This leaves no ambiguity about what the tool does.

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

Usage Guidelines4/5

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

The description tells the agent when to use this tool (to pause a plan) and points to an explicit alternative ('Use dca_resume to restart'). However, it does not mention the sibling dca_stop, which is a related but distinct operation. Since it names one clear alternative and implicitly contrasts pause with resume, it provides solid guidance, but a mention of dca_stop would have made it more complete.

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

dca_resumeResume DCA PlanB
Idempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
plan_idYesPlan ID

TDQS

B3.4/5.0
Behavior4/5

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

The description adds useful behavioral context beyond the annotations: it states that execution resumes on the configured schedule and that the result is an upstream API response. It still withholds details like error cases or what happens when the plan is not already suspended, but the annotations already cover the basic mutation/idempotency profile.

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 and front-loaded: the first sentence gives the core action, and the second gives the behavioral outcome. No filler is present, though the third sentence about the upstream response is useful but slightly generic.

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 the relatively simple one-required-input tool and the available annotations, the description provides adequate context on what it does and what is returned. It does not fully explain the undocumented `_jq` parameter, possible error conditions for non-suspended plans, or details about the upstream response structure, so the overall picture remains partially incomplete.

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?

The description mentions 'by plan_id' but this only repeats the schema, adding little meaning beyond the parameter name and type. Schema description coverage is only 50% because `_jq` has no description, and the tool description does not clarify the purpose or whether it should be provided, leaving a significant gap for agent understanding.

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 action ('resume'), the resource ('DCA plan'), and the key input ('plan_id'), which is enough to understand the tool's core purpose. It differentiates from obvious siblings by the resume/suspend relationship, but it does not explicitly name any sibling it is distinct from.

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 'Resume a suspended DCA plan' implies the appropriate condition for use, and 'resumes automated execution on the configured schedule' clarifies the expected effect. However, there is no explicit guidance about when not to use this tool or which sibling alternatives (e.g., dca_pause, dca_stop, dca_update) should be selected instead.

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

dca_statsDCA StatisticsB
Read-onlyIdempotent
Inspect

Get DCA investment statistics.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
symbolNoFilter by symbol, e.g. "AAPL.US". Omit to return stats for all plans.

TDQS

B3/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 structurally. The description adds no behavioral context beyond the word 'Get', but it does not contradict the annotations. Since the annotations carry the behavioral burden, this is minimally 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 a single front-loaded sentence with zero filler. Every word contributes to identifying the operation, and it is appropriately sized for such a simple tool definition.

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 compensate by explaining what statistics are included, how symbol filtering behaves, and how this differs from related DCA tools. The description provides none of this, leaving an agent to infer the response shape and appropriate usage from the name alone.

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 description coverage is only 50%, with the symbol parameter documented and _jq completely undocumented. The description does not compensate by explaining either parameter or the meaning of the returned statistics. An agent must guess what '_jq' is for and what statistical measures are provided.

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 DCA investment statistics.' It is unambiguous about what the tool does, though it does not explicitly differentiate itself from sibling tools like dca_history, trade_stats, or dca_list. The 'DCA' qualifier narrows it enough for basic identification.

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 siblings such as dca_history, dca_list, or trade_stats. It does not state when it should be preferred, what it returns that others do not, or any exclusions. Given the large sibling set, this is a clear gap.

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
_jqNo
plan_idYesPlan ID

TDQS

A4.4/5.0
Behavior4/5

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

The annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true. The description adds crucial context beyond the annotations: 'This cannot be undone' and 'Returns upstream API response.' The irreversibility warning is a meaningful behavioral disclosure that the annotations alone don't fully convey. The description doesn't contradict the annotations. It could go further by noting whether the action requires special permissions or what happens to associated orders, but the irreversibility warning is strong. A 4 is appropriate because it adds value beyond annotations without fully describing all behavioral consequences.

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, each earning its place: the action and irreversibility, the alternative tool, and the return behavior. The most important information (permanent, irreversible) is front-loaded. 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 single-required-parameter mutation tool with no output schema, the description covers the essential context: what it does, that it's irreversible, the alternative for pausing, and what it returns. The annotations cover idempotency and destructiveness. The only minor gap is that it doesn't describe error conditions or side effects on related resources (e.g., pending orders), but given the tool's simplicity, this is adequate. A 4 is appropriate.

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 50%: plan_id has a description ('Plan ID') but _jq has none. The description mentions 'by plan_id', which reinforces the key parameter's role. However, the description doesn't explain what _jq is for or how to format plan_id. With 50% coverage, the description partially compensates but doesn't fully close the gap. Baseline 3 is fair since the main parameter is documented in the schema and the description confirms its 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?

The description states a specific verb ('Permanently stop'), a specific resource ('DCA plan'), and the key identifier ('by plan_id'). It also explicitly distinguishes itself from the sibling dca_pause, which is critical given the large sibling list. This is a clear, 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 Guidelines5/5

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

The description explicitly says when to use this tool ('Permanently stop') and when not to ('To temporarily pause, use dca_pause instead'). It names the alternative tool directly, giving the agent a clear decision rule. This is exactly the kind of usage guidance that helps an agent select between siblings.

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
_jqNo
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.5/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=true mirroring the mutation intent; the description adds the return value ('Returns updated plan') but doesn't disclose any side effects, idempotency, or partial-update semantics. With no annotation contradiction ****and some description of the return, 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 dense sentence that front-loads the main action ('Update an existing DCA plan by plan_id') and then lists modifiable fields. It avoids redundancy with the schema. However, it could be slightly more scannable with bullets or a second sentence for exclusions.

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?

Annotations indicate readOnlyHint=false, idempotent=false, and destructiveHint=true, signaling a mutating endpoint with side effectsikuha—but the description doesn't warn about consequences (e.g., whether changing frequency resets the schedule, whether old values are irreversibly replaced, or whether margin changes trigger a re-evaluation). No output schema exists to describe the response. For a mutation tool, this is a notable gap.

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 high (86%), with parameter descriptions already present. The description adds meaning by explaining the update semantics, e.g., day_of_month applies only to Monthly frequency per the 1-28 range, and frequency choices are explicit. This fills the small parametric gap (e.g., _jq) and reinforces usage.

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 clear verb ('Update') and resource ('DCA plan'), and explicitly lists the mutable fields (amount, frequency, day_of_week, day_of_month). This distinguishes it from sibling tools like dca_history and dca_pause, and the update intent 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 is provided on when to use this tool instead of other DCA tools (e.g., dca_create, dca_pause, dca_stop). There is no mention of prerequisites, whether plans are in active status, or whether syncing is needed. The description covers what but not when or why.

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
_jqNo
purgeYesWhether to also remove the securities from other groups

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already signal destructive behavior and non-read-only status; the description adds specific context by explaining the purge side effect: removing securities from all other groups. This goes beyond the generic destructiveHint and gives the agent a clearer picture of consequences.

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 that front-loads the core action ('Delete a watchlist group by id') before adding the conditional purge detail. Every word earns its place, with 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 delete operation with annotations and schema covering the required parameters, the description is nearly complete. It covers the key destructive nuance (purge behavior) and required inputs, though it omits details about return values/errors and the _jq parameter.

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 id and purge, and the description reinforces id as numeric and clarifies purge behavior. However, it does not explain the undocumented _jq parameter, and only 67% of parameters have schema descriptions, leaving a gap the description does not fill.

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 ('Delete a watchlist group') and the targeted resource, plus the key parameter semantics ('by id (numeric)'). It is specific enough to differentiate from generic tools, though it does not explicitly distinguish itself from create_watchlist_group or update_watchlist_group, 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 provided about when to use this tool versus alternatives, and there are no exclusion conditions or mention of prerequisites. The only conditional instruction ('Set purge=true...') describes an option within the tool, not when to choose this tool over siblings.

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
_jqNo
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.2/5.0
Behavior4/5

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

The annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, and the description adds value by disclosing the exact return shape (items[]{id, amount, currency, status, created_at, updated_at}) and filter semantics (states and currencies). No contradiction with annotations 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?

Three short, information-dense sentences: purpose, return shape, and filter hints. The purpose is front-loaded, and every sentence adds value without repetition 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 read-only list endpoint with no output schema and five optional parameters, the description covers the essential invocation details: action, account scope, return fields, and filter values. It does not describe pagination behavior or sort order, but the schema already documents page and size defaults, so this is a minor gap.

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?

The schema already describes page, size, states, and currencies, so baseline is 3. The description adds meaningful detail beyond the schema by enumerating the allowed state values (Pending/Finished/Failed) and confirming the comma-separated format for both filters. It does not cover _jq, but that is an unclear power-user parameter not essential to basic invocation.

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: 'List deposit history for the current account.' This clearly distinguishes the tool from siblings like account_balance, withdrawals, and bank_cards, and the added return-field list makes its scope 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 when to use the tool—when deposit history is needed for the current account—but it does not explicitly contrast it with alternatives such as withdrawals or account_balance. There is clear context and filter guidance, but no explicit when-not-to-use or sibling routing.

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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

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, covering safety. The description adds the 'up to 10 price levels' limit, which is useful behavioral context beyond annotations. However, it doesn't mention return format (e.g., bids/asks structure) or any rate limiting, so it's 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, short sentence that gets to the point quickly. It front-loads the core functionality and adds the level limit. No wasted words, but it could be slightly more detailed without much bloat.

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?

This is a simple tool with no output schema. The description covers the essential purpose and a key limit, but doesn't explain the response structure (bids/asks) or the '_jq' parameter. For a simple market data tool with safe annotations, it's reasonably complete, but missing the parameter explanation is a gap.

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?

The schema covers the 'symbol' parameter well (with example '700.HK'), but the '_jq' parameter has no description in the schema (coverage 50%). The description doesn't mention '_jq' at all, leaving it undocumented. Since the description fails to explain the one undocumented parameter, it doesn't fully compensate, but the symbol is well-covered, so it's slightly above 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 ('order book depth'), and it mentions a key constraint ('Up to 10 price levels'). It is clear what the tool does, though it doesn't explicitly differentiate it from sibling tools like 'quote' or 'intraday', but the purpose is unambiguous given the resource name.

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. It doesn't mention context (e.g., for market analysis) or any exclusions (e.g., not for historical data). Without sibling differentiation, an agent might confuse it with quote or candlesticks, as the description lacks usage context.

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

dividendDividendB
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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

B3.3/5.0
Behavior4/5

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

The description adds valuable behavioral detail beyond the annotations: it discloses that US accounts querying .US symbols get a US-specific variant and explains the percent-value convention (0.34 = 0.34%). While annotations already declare readOnly, idempotent, and non-destructive, this description enriches behavior and 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 purposeful sentences. The first sentence clearly states the core action, and the second adds an important regional variant. There is zero fluff or redundancy; the message is front-loaded with the primary 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?

The description is sufficient to invoke the tool correctly in terms of the required 'symbol' parameter, but it leaves gaps: it doesn't explain what the returned dividend history contains, doesn't touch upon the undocumented '_jq' parameter, and doesn't clarify how 'dividend' differs from 'dividend_detail'. Given no output schema, more context about return data would have been valuable.

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?

The schema description already covers 'symbol' with an example, and the description does not add any new meaning to that parameter. The _jq parameter is undocumented in the schema, and the description also fails to explain it. With 50% schema coverage, the description does little to compensate for the missing 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 states a clear verb and resource: 'Get dividend history for the symbol.' This distinguishes it from a generic 'process' tool and makes its purpose obvious. However, it does not explicitly differentiate itself from the sibling tool 'dividend_detail', so it loses one point against the sibling-differentiation criterion.

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 over alternatives like 'dividend_detail'. There is no mention of exclusions, prerequisites, or alternative tools. The only context is the US/US-symbol variant, which is not a usage-direction clue, so the guidance is essentially absent.

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

dividend_detailDividend DetailC
Read-onlyIdempotent
Inspect

Get detailed dividend distribution scheme.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

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=false, so the description does not add behavioral context beyond them. It offers no information about response shape, pagination, or operational behavior, although 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, direct sentence with no filler or redundant restatement. It is front-loaded and every word contributes to identifying the operation, even if the overall definition is sparse.

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 'detailed dividend distribution scheme' includes and how it differs from the sibling `dividend` tool. It provides only a vague noun phrase, leaving the agent without enough information to anticipate the response or choose confidently between related tools.

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 only 50%: `symbol` is described but `_jq` is not. The description does not explain either parameter or how the dividend detail is keyed, so an agent cannot fully infer the meaning of `_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 action ('Get') and resource ('detailed dividend distribution scheme'), making it clear this is a read operation for dividend details. It reasonably distinguishes from the sibling `dividend` tool by emphasizing 'detailed', though it does not specify what the scheme 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?

There is no guidance on when to use this tool versus sibling tools like `dividend`, nor any context about prerequisites or selection criteria. The description only implies utility through its purpose, leaving alternatives undocumented.

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
_jqNo
sideNoBuy or Sell (case-insensitive; default: Buy)Buy
priceNoLimit price for limit-style orders. Omit for market orders.
symbolYesSecurity symbol, e.g. "700.HK"
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.7/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. The description adds no further behavioral context (e.g., that this does not place an order, or that it uses current account balances). It focuses on parameter defaults rather than disclosing non-obvious behavior, but given the annotations, it does not contradict 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, well-structured sentence that immediately states the purpose and then lists the default behaviors in a compact, readable way. There is no redundancy or filler; every clause contributes to understanding the tool's 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?

While the tool is simple and the annotations cover safety, the description does not specify what the return value represents (e.g., a numeric quantity, an error structure) or any prerequisites like market data availability. Given there is no output schema, a brief explanation of the expected result would improve completeness, but the core purpose is adequately conveyed.

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 80%, with clear descriptions for side, price, order_type, and symbol. The description essentially restates what the schema already says (only symbol required, defaults for side and order_type, price optional). It adds no new parameter semantics that aren't already present 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 a specific action ('Estimate maximum buy/sell quantity') and a specific resource ('for a symbol'). It distinguishes itself from siblings by focusing on estimation rather than order placement or other operations. It also conveys the essential input requirements compactly.

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 context on required versus optional parameters ('Only symbol is required') and notes defaults, which informs when the tool could be called. However, it does not explicitly name alternatives or conditions for using this tool over other order-related siblings, leaving the 'when to use vs. alternatives' guidance largely implicit.

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
_jqNo
limitNoMaximum number of documents to return. Omit for all.
symbolYesETF symbol, e.g. "SPY.US"

TDQS

A4.1/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations by specifying the region restriction and the exact error name (DcRegionRestricted) for AP accounts. Annotations already declare readOnly and idempotent, so no side effects need disclosure. This extra error detail is valuable and not redundant.

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 zero filler. The primary purpose is front-loaded, followed by the region restriction. Every word serves a purpose, and the length is appropriate 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?

The description covers the essential purpose and a critical region-specific behavior. The schema documents the required symbol and optional limit, which is sufficient for a read-only document retrieval tool. It does not describe return format or pagination, but for a safe, idempotent read operation these are less critical. The undocumented _jq parameter is a minor gap.

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?

The description adds no parameter-specific information. Schema descriptions cover symbol and limit, but the optional _jq parameter has no description in either the schema or the tool description. With 67% schema coverage (moderate, not high), the description should compensate for the undocumented parameter but does not, leaving _jq ambiguous.

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 'regulatory/prospectus documents (etf-files) for a US ETF'. It is specific enough to distinguish from sibling tools like filings or financial_report, which cover broader or different document types. The US-only scope further narrows 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 explicitly states 'US accounts only' and mentions that AP accounts will error with DcRegionRestricted, giving a clear condition for when not to use this tool. However, it does not mention alternative tools or when to prefer this over other document-related tools, so it lacks a full comparison.

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

exchange_rateExchange RateB
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
_jqNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare the tool read-only, open-world, idempotent, and non-destructive, and the description's 'Get' matches those semantics. It adds the return field names and scope, which is useful, but it does not disclose behavior such as data freshness, rate basis, or whether results are static vs. real-time.

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-loads the action and result, and wastes no words. The return structure and currency examples are placed immediately after the main 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 read-only lookup, the description gives adequate scope and output shape. But it leaves the only parameter completely unexplained and provides no caveats about rate timing, supported currency list, or response size, so an agent still has open questions before calling it.

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

Parameters1/5

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

The only parameter, _jq, has 0% schema description coverage and the tool description does not mention it at all. Since the description must add meaning beyond the schema and it does not compensate for this gap, an agent has no way to know what _jq does or whether it is required.

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-plus-resource construction: 'Get exchange rates for all supported currencies.' It names the output shape (list of from/to currency, rate, timestamp) and example currency scope, so an agent can distinguish this from the many sibling market-data tools 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 Guidelines3/5

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

The description implies a general read-only lookup use case ('all supported currencies'), and no sibling tool appears to compete with this purpose. However, it gives no explicit guidance on when to choose this over alternatives, nor does it mention that no currency-scoping parameters are needed.

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

executiveExecutiveC
Read-onlyIdempotent
Inspect

Get company executive and board member information.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

C2.7/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, covering the safety profile. The description adds no behavioral context beyond the purpose—it does not describe the response structure, whether data is snapshot or historical, pagination, or any other implementation detail. For a tool with no output schema, this is a notable gap.

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 concise—a single sentence with no filler. It front-loads the core action clearly. However, its brevity edges toward under-specification, as it omits useful detail without becoming verbose; it earns a high score for efficiency but not perfection.

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 information is actually returned. It only says 'executive and board member information,' which is vague and does not specify fields, formatting, or any prerequisites. Given the complexity of financial data tools and the large sibling set, this description is incomplete for effective agent usage.

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?

The schema describes the required 'symbol' parameter with an example, but the optional '_jq' parameter has no schema description, and overall schema description coverage is only 50%. The description itself makes no mention of any parameters, so it does not compensate for the missing '_jq' explanation or add any parameter-related context 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?

The description is a single clear sentence stating it retrieves executive and board member information. It specifies the resource type but does not explicitly differentiate it from sibling tools like 'company' or 'institutional_views', though the focus on executives/board members is distinct enough for an agent to infer.

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 does not mention any conditions, exclusions, or related tools, leaving the agent without context for selecting it among many similar data-query siblings.

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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

A3.9/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. The description adds the return format and scope ('for the symbol'), which is useful but not extensive. 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 concise sentences, front-loaded with the core purpose and return structure. No wasted words; 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?

For a simple read-only tool with annotations covering safety, the description provides the return items and scope. It lacks pagination or filtering details, but these are not critical given the tool's simplicity and the presence of annotations.

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 only 50% (symbol documented, _jq undocumented). The description mentions 'for the symbol' which aligns with the symbol parameter, but it does not explain _jq or add any detail beyond the schema. It fails to compensate for the coverage gap.

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', the resource 'regulatory filings', and lists example types (8-K, 10-Q, 10-K). It also specifies the return structure, making the tool's purpose unmistakable and distinct from siblings like etf_docs.

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 implies use when regulatory filings for a symbol are needed, but it does not explicitly contrast with alternative tools or state when not to use it. The context is clear enough for a data-retrieval tool, though exclusions are absent.

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
_jqNo
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?

Adds meaningful behavior beyond the read-only annotations: it discloses default date behavior and the truncation risk for ranges over two weeks. No contradiction with readOnly/openWorld/idempotent 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?

Two compact sentences front-load the tool's purpose, then cover optional parameters, defaults, and a critical usage constraint (2-week range cap). 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?

Complete enough for a read-only calendar query: category values, date defaults, and truncation behavior are all disclosed. It does not explicitly repeat the required category parameter, but that is present in the schema, and no output schema exists to detail return values.

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?

Adds value beyond the schema by explaining that start and end default to today plus 7 days and that ranges over 2 weeks may be truncated. With 80% schema coverage, the description complements rather than duplicates the schema, though _jq remains unexplained.

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?

Names a specific resource (finance calendar) and enumerates the exact event categories it covers, which makes its purpose immediately clear. It does not explicitly contrast itself with overlapping sibling tools like corp_action or dividend, but the category list provides enough differentiation for selection.

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 usage context: start/end are optional, default to today plus 7 days, and ranges should stay under 2 weeks to avoid truncation. It does not explicitly state when to prefer this over sibling tools, but the category-driven description gives sufficient guidance for most cases.

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

financial_reportFinancial ReportB
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
_jqNo
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

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the description is not required to restate these. It adds no extra behavioral context such as rate limits, response volume, or handling of invalid symbols. The description is consistent with annotations and does not contradict them, but it does not enrich the behavioral picture.

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

Conciseness5/5

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

The description is a single sentence that front-loads the core purpose ('Get financial reports') and then packs the parameter value definitions into a compact shorthand. There is zero fluff, and every part earns its place. It is highly concise while conveying essential 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 data retrieval tool with a required symbol parameter and two optional parameters fully explained in the schema, the description covers the essential calling information. It does not describe the return format, but no output schema exists and annotations already cover safety. The main gap is the lack of usage guidance relative to siblings, but that is captured in a separate dimension. Overall, the description is sufficient 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 75%, with kind, report_type, and symbol each having descriptions. The description repeats the kind and report_type values in shorthand (IS/BS/CF/ALL, af/saf/q1/q2/q3/qf) but does not add meaning beyond what the schema already provides. It does not clarify edge cases like default values (kind defaults to ALL per schema) beyond what the schema states. Baseline 3 is appropriate given high schema coverage.

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

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 financial reports (income statement, balance sheet, cash flow) and enumerates the kind and report_type values. The purpose is specific and understandable. However, it does not explicitly differentiate itself from sibling tools like financial_report_latest or financial_report_snapshot, which limits sibling 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 such as financial_report_latest or financial_statement. It does not mention prerequisites, exclusions, or conditions that would route an agent to a different tool. The agent must infer usage from the name and parameters alone.

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
_jqNo
reportNoReport period: "af" (annual, default), "saf" (semi-annual), "qf" (quarterly full), "q1"/"q2"/"q3".
symbolYesSecurity symbol, 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 cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false). The description adds useful behavioral context beyond that: the region restriction and the specific DcRegionRestricted error for AP accounts. 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 tight sentences with no filler. It front-loads the core action and resource, then packs the report options and regional constraint 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?

For a read-only data retrieval tool with three parameters and no output schema, the description covers the essential invocation details: action, resource, report choices, default, and error condition. It omits return-format details and _jq semantics, but the core usage is sufficiently complete 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 coverage is 67%, with _jq undocumented. The description repeats the report option values already present in the schema and mentions the US-symbol context, but adds no substantive parameter meaning beyond the schema. A baseline 3 is appropriate since description coverage is in the mid range.

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 resource ('key financial metrics (fin-keyfactor)') for US symbols, and includes report-period terms. However, it does not distinguish this tool from sibling tools like financial_report_latest or financial_report_snapshot, 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 Guidelines3/5

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

There is an explicit usage restriction ('US accounts only') and a concrete failure signal ('errors with DcRegionRestricted for AP accounts'), which gives some when-not guidance. But the description does not mention any alternative tool to use for non-US accounts or for other financial report needs, so the guidance is incomplete.

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 ReportB
Read-onlyIdempotent
Inspect

Get the latest financial report summary for a security.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

B3/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is clear. The description adds a modest behavioral cue by specifying a 'summary' result and 'latest' time scope, but it does not disclose what the summary contains, data freshness, or any limitations.

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 clear sentence with no filler. It front-loads the action and object, and every word contributes to the core purpose.

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 a 'latest financial report summary' actually returns, but it does not. It also fails to route the agent among the many financial-report sibling tools, leaving a significant completeness gap for a data-retrieval tool.

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 50%, with the symbol parameter described and the _jq parameter left undocumented. The description only says 'for a security,' which adds little beyond the schema's symbol description and does not compensate for the undocumented parameter or clarify symbol format or requirements.

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 ('latest financial report summary') plus a target ('a security'). It clearly states what the tool does, but it does not distinguish itself from the many sibling financial-report tools such as financial_report, financial_report_snapshot, or financial_report_key_metrics.

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 instead of alternatives. With multiple closely related financial-report siblings, an agent has no basis for choosing this tool over financial_report_snapshot or financial_report_key_metrics.

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 SnapshotB
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
_jqNo
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

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 destructiveHint=false, covering the safety profile. The description adds some context about the returned content (e.g., yoy/cmp, ratio types), which is useful but not behavioral in nature. No additional behavioral traits (rate limits, pagination, auth) are disclosed, 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.

Conciseness4/5

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

The description is a single, compact sentence that front-loads the purpose and uses a colon and commas to organize field groups. It is efficient with no filler, though the dense comma-separated list could be slightly more readable. Still, it earns a 4 for economy and structure.

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 5 parameters, no output schema, and a moderately complex data structure, the description is only partially complete. It lists some return fields but omits how fiscal_year/fiscal_period interact or the meaning of the '_jq' parameter. It does not explain the full return shape or edge cases, so it meets the minimum but leaves 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?

The schema covers 80% of parameters with descriptions, so the baseline is 3. The description adds a redundant mention of report types ('qf/saf/af') already present in the schema, and mentions output fields (fo_revenue etc.) but not parameter specifics. It does not compensate for the undocumented '_jq' parameter, but overall it adds minimal 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 financial report snapshot') and lists the specific data fields returned (report_desc, fo_revenue/ebit/eps, fr_* ratios). It is specific enough to distinguish from generic report tools, though it does not explicitly differentiate from close siblings like financial_report_latest or financial_report.

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 the many sibling financial report tools. It neither states prerequisites nor excludes alternatives, leaving 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.

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
_jqNo
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?

The readOnly, idempotent, and non-destructive hints are already provided by the annotations)Skip; the description confirms a read-only retrieval operation. It adds no extra behavioral caveats (e.g., pagination, default report period fallback), but no annotation 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?

Two compact sentences: the first states the tool's purpose Capitalization, the second explains parameter values. The list of report periods is packed but readable. No 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?

Given the readOnly and idempotent annotations, the usage context is mostly safe. However, the description does not clarify when to prefer this tool over financial_report, financial_report_snapshot, or financial_report_key_metrics, and does not describe the response shape. From a decision perspective, an agent might struggle to differentiate from those siblings.

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?

The description explains the meaning of 'kind' (IS/BS/CF) and 'report' (af, qf, q1/q2/q3), which is valuable because the schema only describes 'symbol'. However, _jq remains unexplained, and the mapping between q1/q2/q3 and quarters is implied rather than explicit.

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'), a clear resource ('financial statements'), and enumerates the statement types (income statement, balance sheet, cash flow) via the kind parameter. This distinguishes it from broad tools like company or dividend, though it doesn't explicitly differentiate from closely named siblings like financial_report or financial_report_snapshot.

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 siblings such as financial_report, financial_report_snapshot, or statement_export. It doesn't mention prerequisites, common use cases, or which statement type to request under which circumstances.

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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

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 clear. The description adds that the tool returns both forecast and historical estimates, which is useful. However, it does not disclose details like whether the data is delayed, what time range is covered, or whether it requires specific market data subscriptions. With annotations covering the core 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 a single, concise sentence that front-loads the main purpose. It is efficient and easy to parse, though it could have added a brief note on usage 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 read-only data retrieval tool with one required parameter and no output schema, the description is adequate but not complete. It does not explain what the returned data looks like (e.g., fields like forecast EPS, number of analysts, estimate history period) or any limitations. Given the tool's simplicity, this is a minor gap, but the description could be more helpful.

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 50%: the 'symbol' parameter is documented with an example, but '_jq' has no description. The description does not add meaning for '_jq' or clarify the expected format of the response. Since the schema covers half the parameters and the description adds no extra parameter context, 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 'Get EPS forecast and analyst estimate history' clearly states the verb (Get) and resource (EPS forecast and analyst estimate history). It distinguishes itself from siblings like financial_report_latest or consensus, though it doesn't explicitly name an alternative. The title 'Forecast EPS' reinforces the purpose, so the agent can infer what data this 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 description implies usage for retrieving EPS forecast data, but it does not explicitly state when to use this tool versus alternatives like 'consensus' or 'financial_report_latest'. There is no mention of prerequisites or context (e.g., requires a symbol, only for stocks with analyst coverage). The guidance is minimal but not misleading.

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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds that the lookup covers funds and ETFs holding a given symbol, but it does not note limitations such as pagination, date scoping, or whether only certain markets are 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 concise sentence with no filler. It states the action and resource clearly.

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 lookup this is mostly sufficient, but there is no output schema and no mention of list size limits, ordering, or whether only funds listed on certain markets are covered. The omission of _jq semantics leaves an agent guessing about an optional parameter.

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?

The schema documents 'symbol' with an example, and the description merely restates that the symbol is the search input. The second parameter (_jq) is unexplained in both schema and description, so the description does not compensate for the low schema coverage of that parameter.

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 that the tool returns funds/ETFs holding a given security, using a specific verb and object. It does not explicitly distinguish itself from sibling tools like fund_positions or broker_holding, but the inverse-holding lookup scope is evident.

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 other lookup tools such as fund_positions, broker_holding, or dividend_detail. An agent is given no selection criteria or distinguishing constraints.

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
_jqNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already communicate that this is read-only, idempotent, and non-destructive. The description adds the word 'current', implying a snapshot of live positions, which is a mild behavioral cue beyond the annotations. It does not detail pagination, output shape, or any rate-limit/session requirements, but given the strong annotation coverage, this is an acceptable baseline.

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 directly states the operation. There is no filler or redundancy, and it is front-loaded with the essential information. This is an example of appropriate 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 is simple (one optional parameter, no output schema), but the description is still incomplete because it fails to clarify the meaning of 'fund positions' and provides no insight into the '_jq' parameter. While annotations carry the safe-read signal, context about result shape or record types is missing, leaving an agent may struggle to call it correctly.

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

Parameters1/5

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

Schema coverage is 0% for a single '_jq' parameter, so the description must explain its purpose, and it does not. The description does not mention that '_jq' may be a query filter or how it affects results. With no schema descriptions and no guidance, an agent would be completely in the dark about this parameter; this is a severe gap.

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 clear resource ('current fund positions'), which adequately states the tool's purpose. It is sufficiently distinct from siblings like 'stock_positions' by the asset type, though it does not explicitly reference a sibling or nuance. The main ambiguity lies in whether 'fund positions' refers to mutual fund holdings or position reports, but the core operation is clear 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 gives no guidance on when to use this tool as opposed to alternatives. It does not mention prerequisites, context, or cases where a different tool (e.g., stock_positions, account_balance) would be more appropriate. The agent is left to infer usage solely from the name and the generic description.

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
_jqNo
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 mark destructiveHint: true and idempotentHint: true, but the description adds substantial behavioral context beyond that: the dry-run-then-execute mechanism, the single-use confirmation code, the 10-minute expiry, the requirement to show the preview to the user, and the explicit warning never to quote the code on the agent's own initiative. This goes far beyond the structured annotations and is essential 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 well-structured: it leads with the purpose, then emphasizes the mandatory confirmation in caps, and provides a clear step-by-step protocol. It is somewhat repetitive (the confirmation process is described in both the description and the execute parameter), but the tool description itself is appropriately sized and front-loaded, with each sentence contributing to the necessary workflow.

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 the complexity of the two-step confirmation and the absence of an output schema, the description is remarkably complete. It explains the dry run, the preview, the confirmation code's single-use and expiry, the requirement to wait for user confirmation, and the prohibition on autonomous quoting. An agent has everything needed to call the tool correctly, including the return values (preview and confirmation_code) even though there is no 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 67%, and the execute parameter already has an extensive description in the schema explaining the dry-run and confirmation code semantics. The tool description reinforces the flow but does not add new meaning beyond what the schema provides for execute. order_id is simply described as 'Grid order ID' in both the schema and the description, so no additional parameter semantics are added. Baseline of 3 is appropriate since the schema carries most of 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 states a specific verb and resource ('Cancel (terminate) a grid order by order_id') and makes the scope unambiguous by naming grid orders, distinguishing it from siblings like cancel_order (which presumably handles non-grid orders) and grid_suspend (pause vs terminate). The purpose is clear and precise.

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 details the two-step confirmation protocol: call without execute for a dry run, show the preview, then call again with the confirmation code after user confirmation. It clearly states when to use this tool (for grid orders) and provides the mandatory usage flow. It does not explicitly contrast with alternatives like cancel_order, but the grid-order specificity implies the context, and the step-by-step instructions are strong guidance.

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
_jqNo
limitNoPage size for the embedded sub-order / history lists.
order_idYesGrid order ID.
history_idNoHistory cursor for paging the embedded trigger history.

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 openWorldHint=true, covering safety and dynamic data. The description adds value by specifying the return content (embedded sub-orders, history) and the paging mechanism (history_id cursor + limit), which is beyond what annotations provide. No contradiction detected.

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 first sentence front-loads the core purpose and content, the second covers paging. Every word earns its place, and the structure is ideal for quick agent scanning.

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 detail tool with no output schema, the description fully covers what the agent needs: what it returns (parameters, status, child orders, history), how to page (history_id + limit), and the resource identity (order_id). 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 75%, and the schema already describes limit, order_id, and history_id with accurate definitions. The description reinforces the paging relationship ('history_id cursor + limit paging') but adds little beyond the schema's own descriptions. The _jq parameter remains undocumented, but that's a common query param. With strong schema coverage, 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 ('Full detail for') and resource ('one grid order'), and enumerates the exact content: rule parameters, status, embedded child orders (grid_sub_orders), and lifecycle history (grid_order_history). This clearly differentiates it from siblings like grid_list (summary) and grid_trigger_history (only history), leaving no ambiguity about 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?

The phrase 'Full detail for one grid order' implies use when comprehensive single-order detail is needed, and the mention of paging indicates it handles large histories. However, it does not explicitly exclude alternatives like grid_list or grid_trigger_history, nor state when to prefer them. It gives clear context but lacks explicit when-not guidance.

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

grid_listList Grid OrdersA
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
_jqNo
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

A3.5/5.0
Behavior3/5

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

Annotations already mark the operation read-only and open-world, so the description need not re-state safety. It adds that results are paginated and sortable and that status accepts a comma-joined set, which is useful behavioral context. It does not describe response format or any rate-limit behavior, but that is a minor gap for a read-only list.

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 tight sentences: the core purpose is front-loaded, then the filtering and pagination/sort capabilities follow. No filler or repetition of 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?

For a simple read-only listing tool, the description plus schema cover purpose, filters, pagination, and sorting. However, it leaves _jq undocumented and, with no output schema, says nothing about the response shape; it also does not contrast with grid_list_by_ids. These gaps 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.

Parameters3/5

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

Schema description coverage is 86%, so most parameter meaning is already in the schema; the description mostly restates page/limit/sort support and the status example already present in the schema. It adds no new semantics for the undocumented _jq 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 uses a specific verb ('List') and resource ('grid trading orders'), and the filtering/pagination details make clear this is the general listing tool rather than grid_detail or grid_submit. The only minor ambiguity is grid_list_by_ids, but the lack of an id parameter and the symbol/status filters distinguish 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 about when to choose this over grid_list_by_ids or grid_detail, nor any exclusions. The description implies a listing use case but never states when-not-to-use or names alternatives.

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
_jqNo
order_idsYesGrid order IDs to fetch, e.g. ["123", "456"].

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 and openWorldHint=true, so the safety profile is covered. However, the description adds no extra behavioral context such as error handling, return format, or potential limitations (e.g., maximum number of IDs). It simply restates the core action without enriching the agent's understanding.

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 redundant words. It conveys the essential purpose efficiently without extraneous 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 read-only tool with two parameters and no output schema, the description is minimally adequate. However, it omits usage guidance (when to choose this over siblings) and does not address potential edge cases like invalid IDs or empty responses. These gaps are noticeable given the tool's simplicity.

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 description coverage is 50% because the _jq parameter lacks a description. The description text only reinforces order_ids, which is already documented in the schema. It does not compensate for the undocumented _jq parameter, leaving its purpose ambiguous.

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 clear verb ('fetch') and resource ('specific grid orders') with the selection criterion ('by their IDs'). It differentiates from sibling tools like grid_list (which likely lists all orders) and grid_detail (likely single order) by specifying the multi-ID retrieval scope.

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 grid_list (for all orders) or grid_detail (for a single order). The description does not state exclusions or provide context about scenarios where this tool is preferred.

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
_jqNo
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.9/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full responsibility. It clearly discloses the dry-run default, the irreversible effect of setting `execute`, the code invalidation rule, and the prohibition on auto‑confirmation. This makes the side-effect profile and workflow explicit.

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 paragraph that leads with the core action and immediately surfaces the most safety-critical behavior (dry-run vs. execute). No filler, every sentence carries operational meaning.

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?

The description is complete for its complexity: it explains the two-step protocol, the invalidation condition, and the prohibition on auto-confirmation. Combined with the richly documented schema, an agent has everything needed to call it correctly and safely.

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?

The schema already documents most parameters in detail high schema coverage. The description adds crucial semantics for `execute` (dry-run gate, invalidation, no auto-confirm) that go beyond the schema, and clarifies that the entire rule is replaced, implying all parameters are taken as a full snapshot. A small deduction because the description does not add anything about `order_id` or the numeric parameter ranges, but those are already 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?

States the exact operation ('Replace an existing grid rule's entire rule') with a specific verb and object. The 'entire rule' qualifier distinguishes it from partial updates, and the sibling names (place_grid_rule, cancel_grid_rule) make the contrast clear.

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 mandates the two-step protocol: call without `execute` to get a confirmation code, show the preview, then call with `execute` only after explicit user confirmation. It also warns that any parameter change invalidates the code and that auto-confirmation is forbidden. This is actionable, unambiguous guidance.

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
_jqNo
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.8/5.0
Behavior4/5

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

Annotations include readOnlyHint=false and destructiveHint=false; the description adds critical behavioral context: the tool is a dry run unless the confirmation code is passed, and restarted grids resume placing orders automatically. It also explains the confirmation code is single-use and tied to the exact request. The description doesn't explicitly state that no confirmation code means nothing is sent, but the schema's parameter description covers that. It adds rich context 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?

The description is dense but every sentence earns its place: the purpose is stated first, then the mandatory two-step protocol, then the safety warning about the auto-resuming grid. It is front-loaded with the key safety information and avoids redundancy.

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 this is a mutation tool with no output schemavii and annotations do not cover the confirmation protocol, the description provides all necessary information: how to use it safely, what to do before and after, the caveats about the confirmation code, and the behavior of the restarted grid. There is no missing information that would cause an agent to misuse the tool.

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 67%; the only required parameter (order_id) has a brief description ('Grid order ID'), and execute is fully described in the schema. The description adds essential meaning to the execute parameter: it explains the dry-run/confirmation protocol, single-use nature, expiration, and that changing any field invalidates the code. This compensates for the missing coverage of order_id with additional 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 clearly states the tool's purpose: restart (resume) a suspended grid order by order_id. It uses a specific verb ('restart') and a specific resource ('grid order'), and the domain of resuming a suspended order is distinct from siblings like grid_suspend and grid_cancel.

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 protocol: first call without execute for a dry run, show the preview to the user, and only call again with the confirmation code after explicit user confirmation. It also warns never to quote the code on the agent's own initiative. This clearly distinguishes when to use this tool and the required sequence.

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
_jqNo
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?

Reveals the tool performs a real order submission, requires a dry-run/confirmation protocol, has a 10-minute code expiry, is single-use, and that changing any field invalidates the code. This goes well beyond the annotations' simple read-only/destructive flags.

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 succinct yet dense with critical usage constraints, front-loads the action and protocol, and avoids redundant restating of schema fields.

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?

Covers the essential invocation context, including the two-phase confirmation, single-use code, expiry, and the irreversible nature of going live. It fully equips an agent to decide when and how to use this 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?

The description clarifies the critical `execute` parameter behavior (dry-run vs. confirming with the code) and its constraints. However, most other parameter semantics are left to the schema's own descriptions, which are already fairly complete.

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 clear verb and resource (

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 describes the two-step workflow: call without execute first, then re-call with the confirmation code only after user confirmation. Also warns against quoting the code on one's own initiative and explains the dry-run purpose.

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
_jqNo
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.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 the annotations: it is a DRY RUN unless a confirmation_code is passed, the code is single-use, expires in 10 minutes, and applies only to the exact request. It also warns that a grid strategy keeps placing orders once live, so the agent must never quote the code on its own initiative. This is rich, safety-critical context that the annotations (readOnlyHint=false, idempotentHint=true) do not fully convey.

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 the core action and resume sibling, then dives into the mandatory confirmation protocol. It is somewhat dense and repeats some details that also appear in the execute parameter's schema description, but every sentence carries safety-relevant information. Slightly redundant with the schema, but appropriately sized for a high-stakes mutation tool.

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, the description covers the essential context: what the tool does, the mandatory two-step confirmation, the dry-run behavior, the confirmation code's constraints, and the warning about autonomous grid behavior. The sibling list provides the alternative (grid_restart). Nothing critical is missing for an agent to invoke 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 67% (order_id and execute are described in the schema; _jq is not). The description adds important semantics for the execute parameter: it explains the dry-run/confirmation flow, single-use nature, expiry, and exact-request binding. This goes beyond the schema's own description and compensates for the undocumented _jq 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 states a specific verb ('Suspend (pause)') and resource ('a running grid order by order_id'), and explicitly names the sibling tool for resuming ('Resume with grid_restart'). This clearly distinguishes it from grid_cancel, grid_replace, and grid_restart in the sibling list.

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 is for pausing a running grid order, and it names the alternative for resuming (grid_restart). It also gives a mandatory two-step confirmation protocol, telling the agent exactly when to call the tool (first without execute, then with the confirmation code after user confirmation).

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 InfoB
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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK".

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 agent knows this is a safe read operation. The description adds useful context about the kind of data returned (security name, last price, board lot sizes, price-step table, channel/authorization info) and the input constraint (symbol, not order_id). It doesn't disclose rate limits, pagination, or what happens for invalid symbols, but for a read-only info tool with annotations covering safety, 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.

Conciseness4/5

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

The description is a single, information-dense sentence that front-loads the tool's purpose ('Pre-trade grid setup info') and the key disambiguation ('takes a symbol, not an order_id'). It lists the return fields efficiently. It is slightly long and trails off with 'supported s...' which appears truncated, but the structure is otherwise clean and every clause adds value.

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 info tool with no output schema, the description covers the main return fields and the input constraint. It doesn't explain the '_jq' parameter, doesn't specify the format of the price-step table, and doesn't mention error behavior for invalid symbols. Given the tool's moderate complexity and the absence of an output schema, the description 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?

Schema description coverage is 50%: the 'symbol' parameter is documented in the schema, but '_jq' has no description. The description adds meaning by clarifying that the symbol is a security symbol and that the tool does not take an order_id, which reinforces the schema. However, it doesn't explain the '_jq' parameter at all, and the description's mention of 'bid_size' table and channel info doesn't map to any additional parameters. Baseline 3 is appropriate since the schema covers the main parameter.

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+resource: 'Pre-trade grid setup info for a security' and explicitly disambiguates that it takes a symbol, not an order_id. It lists concrete fields (security name, last price, board lot sizes, price-step table, channel/authorization info), which distinguishes it from grid_detail and grid_list. It loses one point because it doesn't explicitly name a sibling alternative, though the 'not an order_id' note helps.

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: it is for pre-trade grid setup, so an agent would use it before submitting a grid order. It also hints at what it is not (takes a symbol, not an order_id), which helps distinguish it from order_id-based grid tools. However, it doesn't explicitly state when to prefer this over grid_detail, grid_list, or static_info, nor does it mention any exclusions or prerequisites.

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 HistoryA
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
_jqNo
pageNoPage number (default 1).
limitNoRecords per page (default 20).
order_idYesGrid order ID whose trigger history to fetch.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations provide readOnlyHint=true, indicating no side effects. The description adds the specific data returned (each triggered child order with its details) and pagination support. It does not disclose potential rate limits, field descriptions beyond the schema, or whether 'trigger time' is in a specific format. The additional context on return content is valuable 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?

The description is a single, focused sentence that states the purpose and lists key data fields, followed by a brief note on pagination support. No fluff, no repetition of schema details already available. It is appropriately front-loaded with the core 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 a read-only retrieval tool with annotations covering safety and a clear parameter list, the description is largely sufficient. It covers the essential data returned and pagination. The main gap is the _jq parameter and lack of explicit return format, but since there is no output schema, the description could have listed typical return structure. Still, it is complete enough for an agent to understand the tool's role 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 coverage is 75% (3 out of 4 parameters have descriptions). The description does not add beyond the schema for page, limit, and order_idcause the schema already explains them. The _jq parameter is undocumented in both the schema and description, so the 75% coverage leaves a gap that the description does not fill. It does clarify that order_id identifies the grid order, matching 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 the precise resource (trigger history for a grid order), the data fields returned (price, quantity, executed price/qty, trigger time), and the scope (one grid order identified by order_id). It clearly distinguishes from sibling tools like grid_list or grid_detail which are about the grid orders themselves, not their execution history.

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 it: to retrieve trigger history for a specific grid order. It does not explicitly mention alternatives or when not to use it, but given the context of many related grid tools, the purpose is clear enough for basic selection. Missing explicit exclusions or comparisons to siblings like grid_list or history_executions.

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 DateA
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
_jqNo
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"
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.2/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 agent knows this is a safe read operation. The description adds useful behavioral context by specifying default values for period, forward_adjust, and trade_sessions, which clarifies the tool's behavior when these parameters are omitted. 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, concise sentence that front-loads the core purpose and then efficiently lists the key defaults. Every word earns its place, 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 read-only, idempotent data retrieval tool with high schema coverage, the description is largely complete. It covers the required parameter, the defaults, and the date-range scope. The only minor gap is that it doesn't explicitly mention the output format or pagination, but since there is no output schema and the tool is a simple historical data fetch, this is a minor omission.

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 86%, so the schema already documents most parameters. The description adds value by clarifying that only symbol is required and by summarizing the defaults for period, forward_adjust, and trade_sessions. However, it does not add meaning beyond what the schema provides for parameters like start, end, and _jq. Baseline 3 is appropriate given the high schema 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 function: retrieving historical candlestick data by date range. It specifies the resource (candlestick data), the verb (get), and the key parameter (symbol required). It also distinguishes itself from the sibling tool history_candlesticks_by_offset by emphasizing date range, which is a clear differentiator.

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 when to use this tool: when you need historical candlestick data by date range. It mentions that only symbol is required and lists the default values for optional parameters. However, it does not explicitly state when NOT to use it or mention the alternative history_candlesticks_by_offset, which would have made the usage guidance more complete.

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
_jqNo
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"
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 readOnly/idempotent/non-destructive, so the description's job is to add behavior beyond that. It does: it documents all defaults (period, count, forward_adjust/forward, trade_sessions) and, critically, the entitlement-cap fallback that returns fewer candles instead of erroring, advising the caller to check array length. This is exactly the kind of non-obvious runtime behavior an agent 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?

Two concise sentences front-load the purpose, then list defaults, then the key edge-case caveat. Every clause earns its place; no verbosity.

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 8-parameter read-only tool this is almost complete: defaults are enumerated and the only failure/edge case is disclosed. The main gap is that with no output schema, the description does not describe the returned candlestick object's structure (fields/ordering), though it does imply an array of candles.

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 88%, so the schema already documents most parameters. The description adds the entitlement-cap behavior for count (returns as many as allowed when capped) and restates the defaults, which is modest added meaning beyond the schema. Overall the parameter information is adequate.

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 ('historical candlestick data'), and the distinguishing mechanism ('by offset from a reference time'). The name and description together make it clear this is the offset-based variant, distinguishing it from sibling history_candlesticks_by_date without needing to open that tool's schema.

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 (when you want candles offset from a reference time) but never explicitly contrasts it with alternatives like history_candlesticks_by_date or candlesticks. It provides no 'use X instead when...' guidance, so an agent must infer the applicable context.

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
_jqNo
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 readOnlyHint, idempotentHint, and destructiveHint=false. The description adds valuable behavioral context: auto-pagination ensures the complete set is never truncated at the 1000-per-page cap, and trade_id is a stable dedupe key. These details go beyond the annotations and clarify how results are delivered.

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 sentences, each earning its place: the first states purpose and pagination behavior, the second lists return fields and the dedupe key, the third specifies the time format. It is front-loaded with the core purpose and contains no 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?

Given the tool's complexity (6 params, no output schema), the description covers essential details: return fields, dedupe key, pagination behavior, and time format. It does not repeat the optional symbol filter or US/AP account distinctions, but those are documented in the schema. The description is adequate for an agent to call 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 coverage is 83% (5/6 parameters have descriptions). The description adds meaning to the start_at/end_at parameters by specifying RFC3339 format and clarifies that pagination is automatic, which impacts the interpretation of us_page/us_limit. It also notes filtering by execution time (trade_done_at), complementing the schema's basic field 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 clearly states the tool fetches all trade executions (fills) within a date range, filtering by execution time and auto-paginating to return the complete set. It uses specific verbs and resources, distinguishing it from siblings like today_executions and history_orders. 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 does not provide explicit guidance on when to use this tool versus alternatives. It implies historical context via the name and date-range parameters, but lacks any mention of alternative tools or conditions for selecting this one. An agent would need to infer usage from the name and schema, which is a notable gap.

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 TemperatureB
Read-onlyIdempotent
Inspect

Get historical market temperature time series.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
endYesEnd date (yyyy-mm-dd)
startYesStart date (yyyy-mm-dd)
marketYesMarket code: HK, US, CN, SG

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, so the safety profile is covered. The description adds only the 'time series' output notion, but no additional behavioral detail such as return format, date handling, or pagination. It is consistent with annotations though 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, concise sentence with no filler. Every word serves to state the purpose, and the content is front-loaded.

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 tool with no output schema, the description is minimal and relies on the schema for parameter meanings. It does not explain what the 'market temperature' data specifically represents or what the returned time series looks like, but it may be sufficient for a straightforward historical read.

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 75% — market, start, and end are explained, while _jq is undocumented. The description adds no parameter semantics beyond the schema, leaving _jq undefined. The baseline is adequate for the three documented parameters, but it doesn't compensate for the gap.

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 historical market temperature time series.' This clearly distinguishes the tool from its sibling market_temperature by adding the historical qualifier, though it doesn't explicitly name the alternative.

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 vs alternatives. It does not mention the sibling tool market_temperature for current readings, nor does it state when not to use this tool or any 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
_jqNo
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.4/5.0
Behavior4/5

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

Annotations already mark this as read-only/idempotent, and the description adds useful behavioral details: excluded today's orders, returned fields, and how pagination works via us_page. This gives the agent a concrete understanding of the API response and paging without overpromising.

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, dense with relevant information, and well-structured: purpose, return type, parameter details, and pagination behavior are all covered in three sentences without 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?

The description provides enough information for an agent to call the tool correctly: date range, return format, and pagination behavior. Minor omissions include timezone assumptions and explicit behavior for AP accounts regarding pagination, but the schema partially covers those.

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?

The schema already documents each parameter except _jq, but the description adds cross-parameter logic: us_page and us_limit are 'US accounts only', us_limit defaults to 20, and passing us_page retrieves additional pages. This goes beyond simple schema reuse and clarifies how the pagination parameters interact.

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 retrieves historical orders between dates, with the explicit note 'excludes today' to distinguish it from current-order tools. It also lists the returned order fields, making the resource type and content 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 implies when to use this tool: for historical orders, excluding today's ordersikuha. It does not explicitly name sibling alternatives, but the date scope and pagination caveat provide clear context. The 'US accounts only' note adds a usage restriction, though it does not explicitly discuss when to prefer a different tool.

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 BK counter_id from industry_rank (e.g. BK/US/IN00258). Each node shows stock count, daily change, and YTD change.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
symbolYesBK counter_id from `industry_rank`, e.g. "BK/US/IN00258".

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already state readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false, so no contradiction exists. The description adds that each node shows stock count, daily change, and YTD change, which is useful output context. It does not mention output ordering, pagination, or network behavior, but with the annotation coverage the added context is moderate.

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 defines the function and input source, while the second quickly lists the per-node output actions. An example is included, but it is essential for clarity.

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?

Without an output schema, the description does tell an agent what each node contains (stock count, daily change, YTD change) and what input is needed. It leaves the exact JSON structure of the tree implicit, but the term "hierarchical" and the node-level description give the kind of useful, minimal context to start calling the 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 only 50%: the symbol parameter has both schema and description coverage, but the optional `_jq` parameter has no description anywhere. The description repeats the schema example "BK/US/IN00258" for symbol, which is good, but does not compensate for the unexplained `_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 output: "Hierarchical sub-sector tree for an industry group," and names the input type via "Accepts BK counter_id from industry_rank (e.g. BK/US/IN00258)." It conveys what each node shows but lacks an explicit verb like "retrieve" or "list," leaving the action implied by the noun "tree."

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 a prerequisite: input comes from industry_rank, which tells agents when this tool can be used. However, it provides no exclusion criteria or explicit grain mentioning alternatives such as industry_valuation or industry_rank. Agents must infer that this tool is for hierarchical drill-down rather than aggregate metrics.

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[]{counter_id(BK/US/IN00258), name, chg, lists[]}. Pass counter_id directly to industry_peers.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
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.1/5.0
Behavior4/5

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

Annotations already mark it as read-only, idempotent, and non-destructive, so the safety profile is covered. The description goes beyond that by revealing the output shape (items[]{counter_id, name, chg, lists[]}) and the counter_id format (BK/US/IN00258). It still omits details like the meaning of lists[] and data freshness, but adds valuable 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.

Conciseness4/5

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

The description is a single dense paragraph with no filler. It front-loads the key controls, then gives return shape and a pointer to industry_peers. Could be split for readability, but 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?

Given a read-only, idempotent tool with 5 params and no output schema, the description covers inputs, outputs, and a usage cross-reference. It leaves lists[] unspecified and _jq unexplained, but it is still enough for an agent to make an informed call on a simple listing feature.

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 80% and the param descriptions already provide market choices, indicator mappings, and sort_type values. The description mostly duplicates these and adds no new parameter-level meaning beyond an output format note. It does not explain _jq or clarify limit usage, so it does not surpass the baseline for high schema 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 uses a specific verb and resource ('Industry ranking list') and differentiates itself from siblings by naming the market and indicator parameters. It also points to the downstream consumer (industry_peers), which makes its role distinct from related ranking/valuation 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 makes the usage context clear: it is a market- and indicator-filtered ranking list. It directly references the sibling industry_peers and says to pass counter_id to it, providing a concrete workflow. It does not explicitly state when to avoid it (e.g., for valuation use industry_valuation), so it misses a full 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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already carry readOnlyHint=true and idempotentHint=true, so the risk profile is covered. The description adds no behavioral detail beyond the annotation layer, but it does not contradict it either. For a read-only retrieval tool this is adequate, though nothing is said about output shape, data scope, or freshness.

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?

A single declarative sentence, front-loaded with the verb 'get'. No filler or redundancy. However, the name 'industry_valuation' is nearly identical to the description, which blunts the distinctiveness.

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 is the only place to explain what the comparison contains (metrics, periods, peer set). It supplies none of that. The agent knows it returns a comparison but not what shape it takes or how to interpret it.

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 50% (only symbol is described). The description does not explain the role of the second parameter or add meaning to symbol beyond the schema's example. It says 'for peers' but doesn't specify how symbol drives the comparison.

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?

States a clear verb+resource: get industry valuation comparison for peers. However, it does not differentiate from very similar siblings (industry_peers, industry_valuation_dist, valuation_rank), leaving ambiguity about which tool to use.

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 related siblings like industry_peers or valuation_comparison. Implies use for peer valuation but no explicit context or exclusions.

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 DistributionA
Read-onlyIdempotent
Inspect

Get industry PE/PB/PS valuation distribution.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare the tool read-only, idempotent, open-world, and non-destructive, so the safety profile is covered. The description adds little behavioral detail beyond that: it does not explain what 'distribution' means in terms of returned data, how the symbol maps to an industry, or any pagination/filtering behavior. This is acceptable 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 sentence with no filler. It front-loads the core purpose and every word contributes meaning. For a tool of this simplicity, this is appropriately concise.

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 relatively simple and the annotations cover safety and idempotence, but there is no output schema and the description does not describe the return shape of the distribution or the role of the '_jq' parameter. An agent can infer the intended call, but some contextual gaps remain.

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?

Only the 'symbol' parameter is documented in the schema; '_jq' is left undocumented. The description does not clarify how 'symbol' selects an industry or what values are expected, nor does it explain '_jq'. Its mention of PE/PB/PS adds domain context but does not materially compensate for the partial schema 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 names a specific verb ('Get'), a precise resource ('industry PE/PB/PS valuation distribution'), and the metric set (PE/PB/PS). This is concrete enough to distinguish the tool from sibling tools such as industry_valuation, valuation_rank, and industry_peers, which target different resources or perspectives.

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: whenever an industry-level valuation distribution across PE, PB, and PS is needed. However, it does not explicitly contrast it with alternatives like industry_valuation or valuation_rank, and provides no exclusion criteria or conditional routing guidance.

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

institutional_viewsInstitutional ViewsB
Read-onlyIdempotent
Inspect

Get monthly institutional rating distribution timeline.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

B3/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 only the monthly granularity and 'distribution timeline' but does not disclose data range, pagination, or any other behavioral traits beyond the annotations. With annotations present, a 3 is appropriate—the description contributes modest context but leaves key behaviors unspecified.

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, direct sentence that front-loads the action and resource. It is efficient with no wasted words, though it is so brief that it misses opportunities to add helpful context. It earns a 4 for conciseness but loses a point for being under-informative.

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) and read-only, so a minimal description can be sufficient. However, the lack of an output schema and the absence of any detail about the returned data (e.g., time range, format, or whether it's an array) means an agent may not know what to expect. Given the low complexity, a 3 is reasonable, but it could be more complete by mentioning the response structure or available time filters.

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 only 50% (only 'symbol' is documented, and it already has an example). The description does not add any parameter meaning beyond the schema. Since coverage is low, the description should compensate for the undocumented '_jq' parameter and clarify the role of 'symbol', but it remains silent, leaving the agent to guess.

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 ('monthly institutional rating distribution timeline'), which is specific enough to indicate a distinct data product. However, it does not explicitly differentiate itself from sibling tools like institution_rating_history or institution_rating_detail, so the distinction relies on the word 'distribution' rather than an 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 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 institution_rating_history, institution_rating, or institution_rating_detail. An agent has to infer that 'distribution timeline' differs from 'history' or 'detail' without any explicit direction.

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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

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, so the safety profile is covered. The description adds almost no behavioral context beyond labeling the result a 'summary' — no mention of what fields are returned, whether multiple institutions can be queried, or any aggregation semantics. The bar for adding value beyond annotations is not met.

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 filler. It states the operation and the resource in the most compact form possible.

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 only a terse one-sentence description, the tool lacks needed context: what a rating summary contains, how it differs from institution_rating_history, and what the _jq parameter does. The simple interface lowers the burden, but the description is too thin to fully disambiguate from its many siblings.

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?

The input schema description coverage is only 50% (symbol is described, _jq is not). The description adds nothing about either parameter, so it does not compensate for the uncovered _jq parameter. The agent is left to infer that symbol is required and what _jq means.

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 ('institution rating summary'), making the tool's core purpose clear. It is distinguishable from the sibling institution_rating_history (summary vs. history), though it does not explicitly differentiate itself.

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 like institution_rating_history or institution_rating_detail. The description is too terse for an agent to know which tool to pick in a given context.

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 DetailB
Read-onlyIdempotent
Inspect

Get detailed historical institution ratings and target price history.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already disclose that this is read-only, idempotent, open-world, and non-destructive, and the description does not contradict them. The description adds that the output covers historical ratings and target prices, but does not disclose potential quirks such as date ranges, pagination, or data availability limits, so the bar is only partially met.

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 immediately states the action and the resource. Every word earns its place, and there is no redundant 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?

The tool has a simple required parameter and rich annotations that establish safety and idempotency, so the description is mostly sufficient. However, it does not specify what time range, granularity, or format the 'historical' data covers, which could matter for agent 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?

The input schema documents 'symbol' with an example, but '_jq' is left undocumented with no type description. The description does not clarify the '_jq' parameter or how the query parameters relate to the returned history, so it provides minimal semantic 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 uses a specific verb ('Get') and resource ('detailed historical institution ratings and target price history'), which is clear about what the tool returns. However, it does not explicitly distinguish itself from the sibling tool `institution_rating_history`, creating mild ambiguity about which one to choose.

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 information is given about when to use this tool versus alternatives like institution_rating_history, consensus, or broker_holding_detail. There is no mention of use cases, exclusions, or conditions that would help an agent decide between this and related tools.

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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

C2.7/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 name, such as what 'history' includes (e.g., time range, pagination, or rating changes). 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.

Conciseness3/5

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

The description is a single short sentence, which is concise, but it is under-specified. It earns its place but does not add enough value to justify a higher score.

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 sibling set with several institution_rating tools, the description is too thin to let an agent confidently select this tool. There is no output schema, no mention of what the history contains, and no differentiation from institution_rating_detail. The description is minimally viable but leaves significant 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 50%: the 'symbol' parameter is documented with an example, but '_jq' has no description. The description does not add meaning beyond the schema, so it neither compensates for the undocumented '_jq' nor clarifies the expected output. Baseline 3 is appropriate because the schema covers the key required parameter.

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 a clear verb and resource ('Get institution rating history'), but it is generic and does not distinguish this tool from closely related siblings like institution_rating, institution_rating_detail, and institution_rating_industry_rank. An agent would need to inspect schemas or infer differences.

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 institution_rating or institution_rating_detail. The description only states what it does, leaving the agent to guess which history granularity or context is intended.

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 RankB
Read-onlyIdempotent
Inspect

Get peers ranked by institution analyst ratings in the same industry. Paginated.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
pageNoPage number (default: 1)
sizeNoPage size (default: 20)
symbolYesSecurity symbol, e.g. "AAPL.US"

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 clear. The description adds the pagination behavior ('Paginated'), which is useful, but it does not disclose details like default sort order, whether the result includes the input symbol itself, or how pagination interacts with the ranking. 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 sentence that front-loads the core purpose and ends with the pagination note. It is concise and free of filler, though it could be slightly more informative about the ranking basis 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 read-only paginated list tool with annotations covering safety and idempotency, the description is mostly sufficient. However, it lacks details about the response shape (no output schema), the meaning of the ranking (e.g., whether higher ratings rank first), and how it differs from sibling tools like industry_peers or industry_rank. An agent could call it correctly but might not know 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?

Schema description coverage is 75%, with 'symbol' and pagination parameters documented in the schema. The description adds the concept of 'peers ranked by institution analyst ratings in the same industry', which clarifies the meaning of the symbol parameter, but it does not add detail beyond the schema for page/size. The _jq parameter remains undocumented in both schema and description, but the description's industry-ranking context helps interpret the overall call.

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 ('peers ranked by institution analyst ratings in the same industry'), which clearly distinguishes it from generic ranking tools. It does not explicitly name sibling alternatives like industry_peers or industry_rank, but the phrasing is specific enough to convey the core 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 implies usage context: it is for retrieving peer rankings based on institution analyst ratings within an industry. However, it does not explicitly state when to use this tool versus alternatives like industry_peers, industry_rank, or institution_rating_history, nor does it mention any exclusions or prerequisites.

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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"
trade_sessionsNoTrade sessions to include: "intraday" (default, regular hours only) or "all" (include pre-market and post-market).

TDQS

B3.3/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 extra behavioral context—only the trade_sessions parameter meaning, which is already in the schema. It does not disclose rate limits, pagination, or the exact return 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?

The description is a single, focused sentence that front-loads the core purpose. It is efficient with no wasted 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?

For a simple read-only data tool with few parameters and no output schema, the description covers the basic functionality but lacks differentiation from sibling tools and does not describe the return format beyond 'price/volume data'. It is minimally 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 description coverage is 67%, so the description partially compensates for the undocumented _jq parameter. It clarifies trade_sessions, but this information is duplicated from the schema. No additional meaning is added for symbol or _jq, leaving the undocumented parameter unaddressed.

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 action ('Get intraday minute-by-minute price/volume data') with a specific resource and granularity. It distinguishes from broader historical tools like history_candlesticks_by_date by emphasizing 'intraday' and 'minute-by-minute', though it does not explicitly name sibling 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 alternatives such as candlesticks, quote, or history_candlesticks_by_date. The description only states what it does, not the context or conditions for selecting it.

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

invest_relationInvestor RelationsC
Read-onlyIdempotent
Inspect

Get investor relations events and announcements.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

C2.8/5.0
Behavior2/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, but the description adds no further behavioral context—no mention of result ordering, data freshness, pagination, or whether the events are historical or upcoming. No contradiction exists, but the description adds nothing 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?

A single, front-loaded sentence 'Get investor relations events and announcements.' communicates the core purpose with zero filler. It is appropriately 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.

Completeness2/5

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

The description is too thin for a tool with an undocumented '_jq' parameter and no output schema. It does not specify what counts as an 'event' or 'announcement', whether the response is a list, or how it relates to similar resources like news or finance_calendar. An agent would be uncertain about the return format and filtering options.

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 50%: 'symbol' has a description, but '_jq' does not. The tool description does not mention either parameter or explain what '_jq' might control, so it fails to compensate for the undocumented parameter.

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 investor relations events and announcements.' It identifies the specific subject matter but does not explicitly differentiate from sibling tools like news, finance_calendar, or filings, 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 such as news, news_detail, finance_calendar, or corp_action. There are no usage contexts, exclusions, or pointers to sibling tools, leaving the agent to guess.

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
_jqNo

TDQS

C2.4/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, so the safety profile is clear. The description adds no behavioral context beyond the word 'Show'—no mention of what the calendar contains, how much data is returned, or any filtering behavior.

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 short and front-loaded, but it is nearly identical to the title and carries little informative value. It is technically concise, yet under-specified rather than efficiently complete.

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, no parameter explanation, and a large set of IPO-related siblings, the description is not sufficient for correct invocation. An agent cannot tell whether the tool returns upcoming IPO dates, historical listings, or something else, nor how to use _jq.

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

Parameters1/5

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

Schema description coverage is 0% and the only parameter, _jq, is completely unexplained. The description does not compensate by describing what parameters mean or how they affect the output, leaving an agent unable to determine valid values for the single parameter.

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 ('Show') and names a concrete resource ('the IPO calendar'), so an agent can tell it is a retrieval operation for a calendar. However, it does not differentiate itself from nearby siblings such as ipo_detail, ipo_listed, or finance_calendar, so it stops short of full clarity.

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 use this tool versus alternatives like ipo_listed or finance_calendar. The sentence only states the action; it does not mention context, exclusions, or preferred situations.

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

ipo_detailIPO DetailC
Read-onlyIdempotent
Inspect

Show IPO detail for a symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
marketNoMarket: "HK" or "US" (default: inferred from symbol suffix)
symbolYesSecurity symbol, e.g. "6871.HK" or "ARM.US"

TDQS

C2.8/5.0
Behavior2/5

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

The annotations already provide a safety profile (read-only, idempotent, non-destructive), and the description adds no extra behavioral disclosures beyond that. It doesn't mention any peculiar behaviors such as market inference from symbol suffix, returned data characteristics, or limitations, so the description adds little 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, direct sentence with no unnecessary words. It is appropriately minimal and front-loaded, containing exactly the essential information in a clear order.

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, a large set of sibling IPO tools, and only vague parameter hints, the agent is left without enough context to know what data the tool returns or how to choose it over alternatives. The description fails to specify whether this is a general IPO reference or a transaction-specific detail, which is important given the sibling list.

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 67%, with descriptions for 'symbol' and 'market' but not '_jq'. The description merely repeats 'for a symbol' without adding meaning about format, market inference, or the purpose of '_jq'. Thus it offers minimal semantic benefit beyond the structured 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 ('Show') and the resource ('IPO detail') for a symbol, so the core purpose is clear. However, it does not distinguish itself from sibling tools such as ipo_order_detail and ipo_listed, which are also IPO-related and described similarly.

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 its IPO-related siblings. It does not mention alternatives, exclusions, or prerequisites, leaving the agent unable to choose between ipo_detail and ipo_order_detail, ipo_subscriptions, or other tools without opening each schema.

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

ipo_listedIPO ListedA
Read-onlyIdempotent
Inspect

List recently listed IPO stocks (HK+US).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
pageNoPage number (default: 1)
sizeNoPage size (default: 20)

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 specific scope (HK+US, recently listed) which gives agents useful context about the data returned, going 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, concise sentence that immediately conveys the tool's purpose. It is front-loaded with the key action and scope, with zero wasted 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?

For a simple list tool, the description conveys the basic purpose but lacks details about the response structure (no output schema) and leaves the _jq parameter unexplained. Given the absence of an output schema, more explicit return info would be helpful. The description 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.

Parameters2/5

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

Schema coverage is 67% because _jq has no description, while page and size do. The description adds no parameter information and does not compensate for the undocumented _jq parameter. Given the moderate coverage, the description fails to clarify the purpose of _jq, which is a gap.

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: listing recently listed IPO stocks, with explicit market scope (HK+US). It uses a specific verb 'List' and a clear resource, distinguishing it from siblings like ipo_calendar or ipo_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 for retrieving recent IPOs but does not explicitly mention alternatives or conditions for when to use this tool over other IPO-related tools like ipo_calendar or ipo_detail. No exclusions or contextual guidance are provided.

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 DetailA
Read-onlyIdempotent
Inspect

Show detailed information for a specific IPO order by order_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
order_idYesIPO order ID

TDQS

A3.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds no additional behavioral traits such as response shape, error behavior, or data scope beyond what the annotations and name already 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?

One tightly worded sentence that front-loads the action and resource. No filler 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 simple read-only lookup with one required parameter and rich annotations, the description is largely sufficient. It could be more explicit about what 'detailed information' includes, but the tool name and simple contract make the invocation path clear.

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?

The description mentions order_id but adds little beyond the schema's own 'IPO order ID' description. The optional _jq parameter has no schema description and is not addressed in the description, leaving 50% of parameters effectively undocumented.

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 'Show' and a clear resource: detailed information for a specific IPO order, keyed by order_id. This clearly distinguishes it from siblings like ipo_orders (list) and order_detail (generic 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 phrase 'specific IPO order by order_id' implies the tool is for retrieving one order when you already have its ID, but there is no explicit guidance about when to prefer this over ipo_orders or order_detail. Usage context 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.

ipo_ordersIPO OrdersA
Read-onlyIdempotent
Inspect

List IPO orders (active+history). Filter by symbol, market, or status.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
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.7/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 behaviorPi. The description adds one behavioral fact not in the annotations: the result spans both active and historical IPO orders. It does not disclose pagination behavior, result ordering, or whether the 'history' segment has time limits, but the core non-mutating nature is 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?

Two short sentences lead with the verb and object ('List IPO orders'), then immediately provide the filtering options. No filler or duplication. The core purpose is front-loaded and the entire description is scannable.

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 list-style read-only tool, the description plus annotations cover safety and basic purpose. However, it lacks detail on pagination semantics, response shape, or how 'active+history' is delimited — an agent calling this tool cannot predict ordering or whether date ranges are needed. No output schema exists to fill that 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 83%, meaning most parameters (page, symbol, market, status) already carry descriptive text. The description does not add new parameter semantics; it merely restates the filterable fields. The one parameter lacking a schema description (_jq) is not explained either.

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 the specific verb 'List' with a clear resource, 'IPO orders', and defines scope as 'active+history'. This unambiguously distinguishes it from single-order lookup tools like ipo_order_detail and from order-execution tools like today_executions, even without naming 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 implies when to use it — whenever you need a listing of IPO orders, active or historical — and mentions the available filters (symbol, market, status). However, it gives no explicit guidance on when to prefer a sibling tool (e.g., ipo_order_detail for a single order, or ipo_profit_loss for P&L), so an agent must infer the boundaries from context.

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
_jqNo
pageNoPage number (default: 1)
sizeNoPage size (default: 20)
periodNoPeriod filter: "all", "ytd", "1y", "3y" (default: "all")

TDQS

A3.6/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 read-only safety profile is covered. The description adds the 'summary and per-stock breakdown' output shape but reveals no deeper behavioral traits such as pagination behavior, aggregation basis, or data freshness.

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 followed by a compact enumeration of period values. There is no filler or redundant elaboration; every word contributes to identifying the tool's 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 a read-only, no-required-parameter report tool, the core invocation details are present: what is returned and the valid period values. Minor gaps remain, such as what the profit/loss calculation is based on and the role of the _jq parameter, but the annotations and schema cover most 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?

With 75% schema description coverage, the schema already documents page, size, and period. The description's 'period: all/ytd/1y/3y' largely duplicates the schema's period description and adds no new semantic depth. The _jq parameter remains undocumented in both the schema and 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 uses a specific verb ('Show') and resource ('IPO profit/loss summary and per-stock breakdown'), making the tool's function unmistakable. Among IPO-related siblings like ipo_calendar, ipo_detail, and ipo_orders, this clearly identifies the profit/loss reporting focus.

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, and no exclusions or sibling routing are provided. The description only states what it does, leaving all selection judgment to the agent.

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

ipo_subscriptionsIPO SubscriptionsB
Read-onlyIdempotent
Inspect

List IPO stocks in subscription/pre-filing stage (HK+US).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which cover safety. The description adds that the tool covers specific stages and markets, which is useful context. However, it doesn't mention other behavioral traits such as sorting, pagination, or the fact that it may include both upcoming and pre-filing stages, but given 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?

The description is a single sentence, highly concise, and front-loaded with the verb and resource. It includes essential scoping information (HK+US) without 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 with only one optional parameter and no output schema, so the description is fairly complete for a basic list tool. However, the undocumented `_jq` parameter and lack of differentiation among IPO siblings mean an agent might still need more context to use it correctly.

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?

The schema has one parameter `_jq` with 0% schema description coverage. The description does not explain `_jq` at all, leaving the agent without guidance on how to format it. With low coverage and no compensation in the description, the parameter semantics are inadequate.

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 lists IPO stocks in specific stages (subscription/pre-filing) and markets (HK+US). This is a distinct resource and verb, though it could more explicitly differentiate from siblings like ipo_calendar and ipo_listed, which are also IPO-related.

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 lacks any guidance on when to use this tool versus alternatives like ipo_calendar or ipo_listed. It only mentions HK+US but no conditions or exclusions, leaving the agent to infer which IPO tool is appropriate.

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
_jqNo
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

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, so the description does not need to restate safety. It adds useful context about historical observations, date ranges, and pagination, but it does not disclose ordering, chronological defaults, or how missing dates are handled.

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 sentences with no filler. It front-loads the core purpose, then adds the key relationship to macrodata_indicators, date format, and pagination. 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?

Given the simple required parameter and robust annotations, the description is close to sufficient. It covers the essential relationship with macrodata_indicators, date formatting, and pagination. It loses one point because there is no return-value detail or output schema, so an agent cannot fully anticipate the response structure.

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 83%, so most parameters are already documented. The description adds practical guidance by tying indicator_code to macrodata_indicators and characterizing offset/limit as pagination, but it does not deeply clarify the _jq parameter or reveal any additional semantic constraints 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 performs a read operation for a single macro-economic indicator and references the sibling macrodata_indicators tool for code lookup. It distinguishes itself from indicator listing and other financial-data tools, though it could be more explicit about not being the indicator metadata tool.

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 concrete guidance: use indicator_code from macrodata_indicators, format dates as YYYY-MM-DD, and paginate with offset/limit. It stops short of explicitly naming alternatives or stating when not to use this tool, but the context is clear enough for an agent to route correctly.

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

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
_jqNo
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.3/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. The description adds value by mentioning pagination (offset/limit) and the output's role (indicator_code) for macrodata, which enriches the behavioral picture 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?

Three sentences with zero redundancy. The core purpose is first, then filtering options, then the critical relationship to macrodata, then pagination. 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 list tool with no output schema, the description covers all essential details: what it lists, how to filter, pagination, and how to use the result (with macrodata). Nothing 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 coverage is 80% (all params except _jq have descriptions). The description mentions filtering by keyword/country and pagination, which mirrors schema info without adding new semantics. Since the schema already documents these parameters well, 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?

States a specific verb+resource ('List macro-economic indicators') and immediately distinguishes itself from its sibling macrodata by noting the returned indicator_code is meant to be used with macrodata. This makes the tool's role unmistakable.

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 indicates when to use this tool: to discover indicator codes before calling macrodata. It also mentions filtering and pagination, providing context. It doesn't explicitly say when not to use it, but the tie to macrodata serves as a strong usage signal.

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

margin_ratioMargin RatioC
Read-onlyIdempotent
Inspect

Get margin ratio for a symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

C2.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, covering the safety profile. The description adds no additional behavioral context such as rate limits, authentication needs, or return format. With annotations present, this is acceptable but not additive; the description doesn't 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.

Conciseness4/5

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

The description is a single, front-loaded sentence with no filler words. It is appropriately brief for a simple tool, though it could be enriched with context without losing conciseness. Efficiency is good, but it lacks depth.

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 tool's simplicity and the lack of an output schema, the description should clarify what the margin ratio represents, how the result is returned, or any special considerations. The current description is minimal and leaves the agent to guess the semantics of the returned value, which is insufficient for a 2-parameter tool with incomplete schema coverage.

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 description coverage is only 50% (symbol is documented, _jq is not). The description does not mention any parameters or clarify what 'margin ratio' means in terms of the expected inputs. Since coverage is low, the description should compensate but fails to add any parameter-level detail 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') and the resource ('margin ratio') and scopes it to 'a symbol', which is specific enough for basic understanding. However, it does not differentiate from sibling tools like short_margin or margin-related queries, so an agent might not know exactly what 'margin ratio' entails without further 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?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any prerequisites, related tools, or scenarios where this tool is preferred. An agent would have no sense of when to call this instead of, say, short_margin or quote.

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
_jqNo

TDQS

C2.7/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 notions of 'current' and 'all markets' but does not explain what trading status includes (e.g., open/closed, holiday effects, timezone). This is minimal added value beyond annotations, 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.

Conciseness3/5

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

The description is a single concise sentence with no fluff, but it is under-specified. It conveys the basic purpose but omits necessary details. It is concise in length but not in 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?

For a tool with no output schema, a single undocumented parameter, and minimal behavioral disclosure, the description is insufficient. It does not explain what 'market trading status' returns, how to interpret it, or how the _jq parameter affects results. An agent would have to guess or probe the API.

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

Parameters1/5

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

There is one parameter, _jq, with no description in the schema (coverage 0%). The description does not mention the parameter at all, leaving its purpose and format entirely undocumented. This is a critical gap 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 verb and resource: 'Get current market trading status for all markets.' It specifies scope (all markets) and implies current state. However, it does not differentiate from siblings like market_temperature or trading_session, so it is clear but not distinct.

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. It does not mention related tools such as trading_session or market_temperature, nor conditions for selection. The agent must infer use case 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.

market_temperatureMarket TemperatureB
Read-onlyIdempotent
Inspect

Get current market sentiment temperature. market: HK/US/CN/SG.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
marketYesMarket code: HK, US, CN, SG

TDQS

B3/5.0
Behavior3/5

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

Annotations already convey read-only, idempotent, open-world behavior. The description adds only 'current' semantics and the market universe; it does not describe output shape, freshness, or edge cases, but for this simple read tool annotations carry 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.

Conciseness4/5

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

Two short sentences with no filler and the core verb/object appear first. However, the second sentence duplicates schema content rather than adding value.

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?

Minimally sufficient to invoke with a market code, and the read-only annotations prevent risky assumptions. But an agent gets no help choosing between this and history_market_temperature, and the undocumented _jq parameter creates ambiguity for sophisticated calls.

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 50% and the description merely repeats the market values already in the schema. The _jq parameter is not explained anywhere, so the description does not compensate for the schema gap.

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 the current market sentiment temperature for specific markets. The word 'current' implicitly distinguishes it from the sibling history_market_temperature, but it does not explicitly name that sibling or clarify the boundary.

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 for when to use this tool versus alternatives like history_market_temperature or market_status. The market list is the start of an enum, not usage direction.

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
_jqNo
symbolYesSecurity symbol, e.g. "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 readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds the return structure and the 'latest' temporal scope, which is useful. It doesn't disclose pagination, sorting, or time range behavior, but the annotations carry the main safety 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?

The description is a single sentence that states the action, the input, and the return shape. Every element earns its place, and the most important information (what it gets and for what) is front-loaded.

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 annotations covering safety, the description is mostly complete. However, it doesn't mention pagination, sorting, or how 'latest' is defined, and it doesn't differentiate from news_detail/news_search. Given the large sibling set, a bit more context would help, but the core call is clear.

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 50%: the 'symbol' parameter is documented in the schema, but '_jq' is not. The description adds the return field list but doesn't explain '_jq' or provide additional parameter semantics beyond the schema. Baseline 3 is appropriate since the main parameter is documented.

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 latest news articles for a symbol.' It specifies the resource (news articles) and the key input (symbol). It also lists the return fields, which helps distinguish it from news_detail and news_search siblings, 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?

The description implies usage: call when you need latest news for a symbol. It doesn't explicitly state when to use this over news_detail or news_search, but the return shape and 'latest' wording provide some context. No exclusions or alternatives are mentioned.

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`.
_jqNo

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 agent knows this is a safe read operation. The description adds the behavioral context that it returns 'full detail' for a single article, which is useful. However, it doesn't disclose anything about response format, pagination, or potential errors. With annotations covering the safety profile, a 3 is appropriate — the description adds some value 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?

One sentence, zero waste. The core action, resource, and ID source are all 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 simple read-by-id tool with strong annotations (readOnly, idempotent, non-destructive) and a well-documented 'id' parameter, the description is nearly complete. The only gap is the undocumented '_jq' parameter, which the description doesn't address. But given the tool's simplicity and the annotations covering the safety profile, 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 50%: the 'id' parameter is well-documented in the schema (type, format, example, and source), but '_jq' has no description. The tool description adds the crucial context that the id comes from 'news/news_search', which reinforces the schema. However, it doesn't explain what '_jq' does or when to use it. With half the parameters undocumented, the description could have compensated but doesn't 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 states a specific verb ('Get'), a specific resource ('one news article's full detail'), and the key identifier ('by id'). It also explicitly names the source of IDs ('from news/news_search'), which distinguishes it from the sibling tools 'news' and 'news_search' — the agent can tell this is the detail-fetch tool, not the list/search tool.

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 indicates when to use this tool: when you have an article ID and need full detail. It references the sibling tools 'news' and 'news_search' as the source of IDs, which implies the workflow (search first, then get detail). It doesn't explicitly state when NOT to use it or name alternatives for the same purpose, but the context is clear enough for an agent to select it correctly.

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
_jqNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark this as read-only, idempotent, and non-destructive; the description adds a concrete behavioral contract by specifying UTC timezone and RFC3339 serialization. No hidden side effects or additional caveats are needed for such a simple clock operation.

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 zero filler: the first states the exact return value, the second states the use context. Information 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 zero-required-parameter utility with no output schema, the description provides everything needed: what is returned, in what format and timezone, and when to call it. The undocumented optional parameter is a minor gap but does not affect correct invocation.

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?

There is a single optional `_jq` parameter with no schema description and 0% coverage, and the description does not explain its purpose or whether it can be ignored. The tool remains callable without it, but the description adds no meaning for this 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?

Description uses a specific verb ('Get') with a clear resource ('current UTC time') and pins down the return format (RFC3339 string) with an example. This makes it unambiguous and distinct from date-related siblings like trading_days or market_status.

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 states when to use the tool: before making date-based queries. No alternative tool performs the same clock function, so the lack of when-not guidance is acceptable.

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

operatingOperating PerformanceB
Read-onlyIdempotent
Inspect

Get company operating metrics (HK stocks only).

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

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, openWorldHint, and destructiveHint=false, covering the safety profile. The description adds the HK-only scope, but no further behavioral detail such as error behavior, output shape, or limits; 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?

One front-loaded sentence with no wasted words. The action, resource, and scope are all in the opening phrase.

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 two-parameter lookup with rich annotations, this description is minimally sufficient. It is less complete in the context of many sibling financial tools because it leaves the meaning of 'operating metrics' and the optional '_jq' parameter unspecified.

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?

The schema documents 'symbol' with an example, and the description adds the HK-only constraint to it. However, '_jq' has no schema description and the description does not explain it, so the 50% coverage gap is not compensated.

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 ('company operating metrics') and adds an important scope constraint ('HK stocks only'). It is clear about what the tool does, though it does not explicitly contrast it with sibling financial-report 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?

The only usage signal is the HK-stocks-only restriction. There is no guidance on when to prefer this tool over similar siblings such as financial_report_latest, financial_statement, or profit_analysis, nor any exclusion criteria.

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 strikes and Greeks.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

A3.9/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the return format (`expiry_dates[]` as yyyy-mm-dd strings), but provides no additional behavioral context such as ordering, 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.

Conciseness5/5

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

The description is two concise sentences, with purpose, return format, and usage context all front-loaded. There is no filler or redundant phrasing.

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 covers the purpose, the return format, and the natural companion tool. The main gap is the undocumented optional `_jq` parameter, but the core call path with `symbol` is fully specified.

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 description coverage is only 50% because `_jq` is undocumented, and the description does not explain `_jq` at all. The description merely restates the symbol concept with an example, so it fails to compensate for the gap left by 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 option chain expiry dates for a symbol' with a concrete example (AAPL.US). It also names the exact output shape (`expiry_dates[]` as yyyy-mm-dd strings), which clearly differentiates it from siblings like option_chain_info_by_date.

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 tells the agent to use this tool with option_chain_info_by_date to get strikes and Greeks, establishing a clear workflow. It does not spell out negative cases or alternatives, but the complementary relationship is clear enough from the sibling names and the sentence itself.

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 option chain for an expiry date. Returns strikePrices[]{strike_price, call{symbol, last_done, iv, delta, gamma}, put{symbol, last_done, iv, delta, gamma}}.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
dateYesDate (yyyy-mm-dd)
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate a safe read-only, idempotent operation. The description adds meaningful behavioral transparency by disclosing the exact response shape, including strikePrices with call/put fields. This compensates for the absence of an output schema, though it does not mention edge cases like empty chains or invalid dates.

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 followed immediately by the return structure. Every part contributes useful information, with no redundant 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 tool with strong annotations, the description covers the core purpose, required parameters, and return format. The only notable gap is the lack of a pointer to sibling tools like option_chain_expiry_date_list for discovering valid expiry dates.

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 documents date and symbol with basic descriptions. The description adds value by clarifying that the date parameter refers to an 'expiry date', which is not stated in the schema property itself. However, the optional _jq parameter (67% schema coverage) receives no explanation in either the schema or the 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 uses a specific verb ('Get'), names the resource ('option chain'), and scopes it to 'an expiry date'. It also enumerates the returned strike/call/put structure, which makes it distinguishable from sibling option tools like option_quote or option_chain_expiry_date_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 usage context is implied: use this when you need an option chain for a specific expiry date. However, it does not explicitly mention when to prefer alternatives such as option_quote for a single quote or option_chain_expiry_date_list for discovering available expiry dates.

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 option_chain_info_by_date's call.symbol/put.symbol fields. 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
_jqNo
symbolsYesOption contract symbols, e.g. ["AAPL230317P160000.US"]. These are NOT plain stock symbols — get valid ones from `option_chain_info_by_date`'s per-strike `call.symbol`/`put.symbol` fields (after listing expiry dates with `option_chain_expiry_date_list`).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already convey read-only, idempotent, and non-destructive behavior. The description adds meaningful behavioral context: the 500-symbol cap, the full list of returned fields, and the precise normalization of Greeks (theta per day, vega per 1% IV change, rho per 1% rate change). 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?

The description is front-loaded with the action and key constraint, and each sentence adds value: symbol-format warning, source tool, return fields, and Greek normalization. The field enumeration is long but justified because there is no output 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 tool with no output schema, the description compensates by listing return fields and explaining Greek units. It also covers input sourcing and the symbol cap. It could be marginally stronger by explicitly naming the alternative for plain stock quotes, but nothing essential is missing for correct invocation.

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

Parameters3/5

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

The required symbols parameter is richly described in both the schema and the description, including format and source. However, schema description coverage is 50% and the optional _jq parameter is left undocumented in both the schema and the description. The description adds the max-count constraint but does not fully compensate for the missing parameter 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 uses a specific verb and resource ('Get option quotes'), states the max symbol count, and clearly distinguishes this from plain stock quotes by requiring option contract symbols. It also names the sibling tool that provides the valid symbol values, 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 Guidelines4/5

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

Explicitly instructs that symbols must be option contract symbols, not plain stock symbols, and directs the agent to option_chain_info_by_date's call.symbol/put.symbol fields. The 'NOT plain stock symbols' phrase implies when not to use this tool, though it does not explicitly name the stock-quote alternative.

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
_jqNo
symbolYesUnderlying symbol (US market only), e.g. "AAPL.US"

TDQS

A3.9/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds meaningful context: it specifies 'real-time' data and enumerates the return fields, including 'top active contracts', which is not evident from annotations. This enhances transparency beyond the 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, focused sentence that immediately states the purpose, specifies the scope (US stock), and lists the return payload. There is zero fluff, and the key information is front-loaded. It is appropriately concise for a simple read-only 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 tool with one required parameter and no output schema, the description covers the essential details: what it returns and the market scope. It omits explanation of the optional '_jq' parameter and does not mention potential rate limits or data delays, but given the simplicity and the annotations, these are minor gaps. The tool is largely complete 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.

Parameters2/5

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

Schema description coverage is 50% – only the 'symbol' parameter is documented in the schema, and the description adds no new information about it (it merely repeats 'US stock'). The '_jq' parameter is completely undocumented in both the schema and the description, and the description does not compensate for this gap. Since coverage is moderate, the description should have explained _jq or clarified its role, but it does not.

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 it retrieves real-time option call/put volume stats for a US stock, names the specific return fields ({call_volume, put_volume, put_call_ratio, call_oi, put_oi}) and mentions 'top active contracts'. This distinguishes it from sibling tools like option_volume_daily (daily data) and option_quote (price quotes), and the explicit list of outputs leaves no ambiguity about the tool's function.

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 indicates it is for US stocks and real-time data, providing some context. However, it does not explicitly mention when to use this tool versus alternatives like option_volume_daily (for historical/daily volume) or option_quote (for quotes). There are no exclusions or alternative routing hints, so the agent must infer usage based on the word 'real-time'.

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
_jqNo
countNoNumber of trading days to return (default 20)
symbolYesUnderlying symbol (US market only), 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 mark the tool as read-only, non-destructive, and idempotent, and the description adds no contradicting behavior. The description names the output fields, but does not disclose details such as market-data availability, symbol normalization, or any limits beyond the count parameter. 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 concise, begins with an active verb, and lists the exact returned fields for the agent. It front-loads the core purpose and provides the return shape in a compact single sentence, making it quick 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 tool with rich annotationsessed, the description covers what the tool returns and the market scope. It lacks explicit mention of date range behavior or default count, but the schema covers the count parameter, and the annotations cover safety, so overall context 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 coverage is 67%: the 'symbol' and 'count' parameters have descriptions in the schema, while '_jq' is left unexplained. The tool description reinforces that the symbol is a US stock but adds no further parameter semantics beyond the schema, so the agent must rely on names and the existing count 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 uses a specific verb (

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 identifies the tool's context: it retrieves daily historical option stats for a US stock, which implies the appropriate time frame and market scope. It does not explicitly name alternatives or exclusion criteria, but the daily-historical scope is sufficiently clear for an agent to choose it over real-time or non-option tools.

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
_jqNo
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

A4/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 a meaningful behavioral trait beyond that: when an attached leg is requested via is_attached=true, the response is that leg itself with charge_detail null. This is useful runtime behavior not captured by annotations or the tool name.

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 core action is front-loaded, and the attached-leg conditional is stated compactly in the second sentence. 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 read-only single-required-parameter lookup, the description plus schema and annotations are nearly complete. It handles the main parent/leg nuance and the no-output-schema gap is acceptable given 'detailed information' is the stated purpose. Minor improvements would be introducing the 'attached take-profit/stop-loss leg' concept before using 'such a leg' and moving the US-account exception from the schema into the main 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 67%, so most parameters are already documented in the schema. The description adds the cross-parameter relationship between order_id and is_attached, which helps, but it does not clarify the undocumented _jq parameter or provide further format constraints. This is adequate but not exceptional.

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 states a clear verb and resource: 'Get detailed information about a specific order.' The description also clarifies a conditional variant for attached legs, which enriches the purpose. It does not explicitly differentiate from sibling tools like ipo_order_detail or today_orders, but the by-ID lookup intent 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?

The description gives concrete direction on when to use the default parent-order path versus the attached-leg path with is_attached=true, and states the resulting difference in the response. It stops short of naming alternative tools or explicit when-not-to-use cases, but the provided routing guidance is clear and actionable.

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

participantsMarket ParticipantsB
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
_jqNo

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. The description adds the return structure (participants with broker_ids and name fields), which is useful, and mentions its relevance to broker queue data. It doesn't contradict annotations, though it doesn't cover rate limits, caching, or data freshness.

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-loads the action and resource, and packs the return shape into the first sentence. Every sentence 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?

The description is sufficient for a simple read-only lookup tool: it names the resource, describes the return structure, and hints at downstream use with broker IDs. However, it doesn't explain the _jq parameter, which is the only parameter in the schema, so completeness is slightly reduced.

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?

There is one parameter, _jq, with 0% schema coverage and no mention in the description. The description doesn't explain what _jq does or whether it's required. However, the description implies calling with no parameters returns all participants, so an agent could reasonably invoke it without arguments.

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 target: 'Get HK market participant broker information.' The return shape is named explicitly. However, it does not distinguish itself from the sibling 'brokers' tool, which could be confused with this one.

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 for when to use this tool versus the sibling tools 'brokers', 'broker_holding', or 'broker_holding_detail'. The only hint is that broker_ids can be used for broker queue data, but there is no explicit when-to-use or when-not-to-use 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
_jqNo
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.9/5.0
Behavior4/5

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

Annotations already mark this as a safe read and idempotent operation. The description adds useful behavioral detail: the date range is optional, but if provided both boundaries are required arare enforced, and providing only one returns empty results. This goes beyond the structured 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, tight sentence that front-loads the tool's purpose and then immediately conveys the key invocation constraint with no filler 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 simple read-only summary tool with no output schema, the description conveys purpose, optional parameters, and an important pairing rule. It does not describe the response format or default date range when omitted, but those are not critical for selecting and invoking the 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 covers 2 of 3 properties with descriptions; the description adds the critical constraint that start and end must be used together belavorably, and clarifies the YYYY-MM-DD format. It does not explain the purpose of the undocumented _jq parameter, which limits full semantic 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 the specific verb-object phrase

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 clear parameter usage guidance (optional date range, both must be provided together, empty results otherwise), but it does not explicitly contrast with sibling tools like profit_analysis_detail or profit_analysis_realized, so tool-selection context is missing.

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 DetailA
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
_jqNo
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"

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and idempotentHint=true, and the description's 'Get' wording aligns with that. It adds useful behavioral detail beyond the annotations: passing only one of start/end returns empty results. This clarifies a non-obvious edge case without contradicting the 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 exceptionally concise: two sentences, front-loaded purpose, and necessary constraints. Every clause carries relevant information without filler 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 tool with one required parameter, the description covers the essential invocation details: symbol, optional date format, and the pairing requirement that governs valid calls. The undocumented _jq parameter is a minor omission, but the tool remains correctly invocable with the given information.

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 75%, so most parameters are already documented. The description essentially reiterates the start/end format and pairing rule already present in the schema, without adding new meaning for parameters like _jq. This provides some value but mainly re-encodes existing schema information.

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 detailed profit and loss analysis for a specific symbol.' This is clear and unambiguous, but it does not explicitly distinguish the tool from sibling tools such as profit_analysis or profit_analysis_realized, leaving the potential for confusion.

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 clear parameter usage constraints ('start/end: optional date range in yyyy-mm-dd format' and 'Both must be provided together'), which is helpful. However, it does not explain when to choose this tool over related alternatives, such as profit_analysis or profit_analysis_realized, so usage guidance is 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.

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
_jqNo
categoryNoFilter by category: "STOCK", "OPTION", "CRYPTO", or omit for all.
currencyNoCurrency to report in, e.g. "USD" (default: "USD"). US accounts only.

TDQS

A4.1/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. The description adds region-specific behavior (US-only, error for AP accounts) and the category breakdown, which are not captured by the annotations. This provides useful context beyond the structured hints and contains 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?

The description is two concise sentences, front-loaded with the core purpose and followed by a critical usage constraint. Every sentence 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.

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 three optional parameters, the description covers the core action, region restriction, and error behavior. However, it introduces 'period' without a corresponding parameter, and does not describe the output format or how to specify the period (possibly via _jq). While annotations cover safety, this gap in period handling could confuse an agent trying to invoke 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 coverage is 67% (category and currency have descriptions, _jq does not). The description adds meaning to the category parameter by listing the possible values (stock/option/crypto), which is helpful. However, it mentions 'period' as a breakdown dimension but no period parameter exists in the schema, creating confusion. It does not clarify _jq or the currency default (though schema covers currency). The description adds some value but leaves a notable mismatch.

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', the resource 'realized P&L for a US account', and the breakdown dimensions (category and period). It distinguishes itself from sibling tools like profit_analysis by specifying 'realized' and 'US accounts only', which narrows its scope and purpose 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 Guidelines4/5

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

The description explicitly notes 'US accounts only' and the error behavior for AP accounts ('errors with DcRegionRestricted'), giving a clear condition for when to use this tool. However, it does not explicitly name alternative tools (e.g., profit_analysis for unrealized or non-US), leaving the differentiation implicit rather than naming a sibling, which would have been stronger guidance.

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
_jqNo
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

A4/5.0
Behavior4/5

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

Annotations already cover read-only and idempotent behavior. The description adds that the script executes server-side and returns computed values as JSON, which clarifies side effects and output format. It does not overpromise or omit obvious behavioral caveats.

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 core action and return type are front-loaded, with parameter details following. No repeated schema information except the useful period list and input formatting example.

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 executes user code (a potentially complex operation), the description covers the essential call contract: input data, script execution, return format, supported periods, and input parameter passing. It omits details like error behavior or sandboxing, but annotations already cover safety and the description is sufficient for basic 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 high (86%), so the baseline is 3. The description adds value by explaining the input array order mirrors input.*() calls and enumerating the valid period values, which is not fully evident from the schema alone. The default period is also restated in prose.

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 action ('Run a quant indicator script') against a specific resource ('historical K-line data') and the output format (JSON). It is immediately distinguishable from sibling tools like candlesticks or calc_indexes because it is the only tool that executes user-provided 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?

No guidance on when to prefer this tool over alternatives such as candlesticks (raw K-line data) or calc_indexes (precomputed indicators). It does not state exclusions, prerequisites, or typical use cases, leaving the agent to infer when script execution is needed.

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

quoteQuoteB
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
_jqNo
symbolsYesSecurity symbols, e.g. ["700.HK", "AAPL.US"]

TDQS

B3.1/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, destructiveHint=false), so the description's added value is the return-field contract, which is helpful. However, it does not disclose behavioral traits such as real-time vs delayed data, behavior for invalid symbols, or market-closed behavior. 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?

A single, front-loaded sentence states the purpose and then lists the return fields in a compact, scannable way. Every element earns its place, with no filler or repetition of annotation data.

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 field list compensates for the missing output schema, but the description lacks context for choosing this tool among several similar price-related siblings, does not mention symbol count limits or format beyond the schema example, and omits edge-case behavior. It is adequate for a simple quote tool but leaves clear gaps.

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 description coverage is only 50%; the 'symbols' parameter has a clear example, but ' _jq ' is completely undocumented. The description reinforces that results are per symbol but adds no meaning for the undocumented parameter and no additional param 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.

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'), names the resource ('latest price quotes'), and enumerates the exact fields returned per symbol (last_done, prev_close, open, high, low, etc.). This makes the tool's function clear, though it does not explicitly differentiate it from sibling price-related tools like 'now', 'intraday', or 'market_status'.

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 does not mention prerequisites, exclusions, or alternative tools such as 'intraday', 'candlesticks', or 'option_quote', leaving the agent to infer the best choice 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.

rank_categoriesRank CategoriesA
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
_jqNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, covering safety. The description adds a behavioral detail: accepting a 'second_tags' key to filter results, which is useful. No contradictions with annotations, and the description does not repeat them, adding 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 compact sentence, front-loading the main purpose before the parameter hint. No filler words, and the key usage hint is included. It is appropriately sized for the tool's complexity.

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 main purpose and one usage hint, but given the lack of a schema with clear parameter definitions and no output schema, it leaves ambiguity about what the response contains and how exactly to pass the second_tags key. The tool is simple, but more could be said about the expected input format.

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?

The schema has one parameter (_jq) with 0% coverageciation, so the description must clarify its meaning. The mention of 'second_tags' likely corresponds to _jq, providing context that the schema lacks. This compensates for the coverage gap, though it could be more explicit about the parameter name.

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 rank tab category configurations for the popularity leaderboard, using a specific verb 'Get'. It references a sibling (rank_list) indirectly, which distinguishes it from ranking tools. However, the purpose could be more explicit about what 'rank tab categories' are.

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 mentioning a second_tags key, but it does not explicitly state when to use this tool versus alternatives. It references rank_list but does not explain the relationship or when to choose one over the other. The guidance is minimal and relies on the agent to infer context.

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
_jqNo
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

A4.1/5.0
Behavior3/5

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

Annotations already provide readOnly, openWorld, idempotent, and non-destructive hints. The description adds the 'ib_' prefix auto-stripping/adding behavior and market inference logic, which is useful, but no further side effects or rate limits are mentioned.

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 concise two-sentence overview with key examples, but it does repeat the default size (schema also says default 20). It could be slightly tighter but remains efficient and front-loaded with the key 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 a read-only list tool with a missing output schema, the description covers most operational details: how to find keys, how market is derived, how to set size. It doesn't specify response format or pagination, but given the tool is straightforward and read-only, this is 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 80%, so baseline 3. The description highlights the key parameter's semantics (using examples and the ib_ prefix handling) and briefly mentions market with examples, but doesn't add significant meaning beyond schema for size, market, need_article.

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 a ranked stock list based on a leaderboard tab key, with examples. It distinguishes from rank_categories and other list tools by explaining the relationship to rank_categories and the key format.

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 explains how to obtain the key (from rank_categories second_tags[].key), how market is inferred from key suffix, and how to override. It sets context for when to use this tool versus rank_categories.

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
_jqNo
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".
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.6/5.0
Behavior5/5

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

Even with annotations declaring readOnlyHint=false and destructiveHint=true, the description adds crucial behavioral nuance: it is a DRY RUN unless a confirmation_code is passed, the code is single-use and expires in 10 minutes, and attached take-profit/stop-loss legs are modified here too. It also warns never to quote the code on the agent's own initiative. This goes well beyond what annotations 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 long, but every sentence carries critical safety protocol or scope information. It front-loads the core purpose in the first sentence and then proceeds to the safety-critical two-step confirmation and attached-leg behavior. While it's dense, no word is wasted; it maintains structure with sections in a fluid prose format.

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 24-parameter tool with no output schema, the description is comprehensive: it covers the action, restrictions, the mandatory confirmation flow, handling of attached orders, and even the success return message. It perfectly complements the highly descriptive input schema, leaving little ambiguity about behavior, sequence, or edge cases.

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 96%, so the schema already documents each parameter precisely. The description adds meaning by clarifying the execution model (dry-run vs. execute via the `execute` parameter) and the semantics of attached legs (e.g., attached_order_type plus attached_profit_taker_price adds a leg, attached_cancel_all removes legs). This goes beyond the raw schema descriptions and substantially helps an agent set the right 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 and resource ('Modify an open order's quantity, price, trigger_price, or trailing params') and immediately distinguishes it from siblings like submit_order and cancel_order by limiting to open/pending orders. It names the exact fields and attached-leg behaviors, so an agent can tell this is the order-editing tool without opening sibling definitions.

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 clearly prescribes the mandatory two-step dry-run/execute protocol and states the prerequisite that only open/pending orders can be modified. It doesn't explicitly name alternatives (e.g., 'use cancel_order for cancellations'), but the context and sibling list make the appropriate use obvious, and the when-not (closed/overflow orders) condition is implicit in 'only open/pending orders.'

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

screener_indicatorsScreener IndicatorsB
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
_jqNo
symbolNoOptional security symbol to filter indicators for a specific stock, e.g. "AAPL.US"

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare this as read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds useful behavioral detail by revealing that indicator keys come with units, default value ranges, and a tech_values field with option mappings, which helps the agent anticipate 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 two sentences: the first states the primary action and result clearly, and the second adds a concrete example of the tech_values format. No words are wasted, and 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 simple, parameterless-by-default metadata tool with rich annotations, the description covers the core return semantics well. Gaps include no mention of the optional symbol filter's effect and an unexplained _jq parameter, but these are minor for a tool that can be invoked with no arguments.

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?

The description does not mention the optional symbol parameter at all; the schema documents symbol, so that part is covered. However, the _jq parameter has no description in the schema and the description does not compensate, leaving its purpose unexplained. With 50% schema coverage, the description should have provided additional parameter context.

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 verb ('Get') and resource ('all available screener indicator keys') plus the output scope ('units and default value ranges'). It does not explicitly distinguish itself from sibling screener tools like screener_search or screener_strategy, but the resource is specific enough that 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 explicit guidance on when to use this tool versus alternatives, nor any mention of when not to use it. The description implies the usage context through its wording, but an agent must infer that this is for listing indicator metadata rather than running a screener.

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
_jqNo
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=true, openWorldHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds the market default and downstream behavior but does not mention pagination or output shape; for a read-only list that's acceptable, 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?

Two short sentences with the core action and market constraint first, and the downstream usage second. No filler or redundant elaborations.

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 listing tool with rich annotations and no output schema, the description is complete: it names the market filter, defaults, and how to consume the returned strategy id. The cross-references to screener_search and screener_strategy give the agent enough to continue the workflow.

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?

The market parameter's allowed values and default are stated, but that duplicates the schema description rather than adding new meaning. The _jq parameter is completely undocumented in both the schema and the description, so the lowest-coverage parameter is not compensated for.

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 action ('List') and resource ('platform-preset screener strategies'), which immediately distinguishes it from the sibling screener_user_strategies. It also names the downstream tools that consume the returned id (screener_search, screener_strategy), removing ambiguity about what the output 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 explains how the output is used: pass the id to screener_search with strategy_id, or to screener_strategy to inspect filter conditions. It does not explicitly contrast with screener_user_strategies or state when not to use the tool, but 'platform-preset' plus the downstream pointers give clear contextual guidance.

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
_jqNo

TDQS

A3.9/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 (read-only, idempotent) is well-covered. The description adds minimal behavioral context: it says 'inspect' which aligns with readOnlyHint. There are no contradictions, but the description doesn't add much beyond annotations; it doesn't disclose response format or any side effects, which is acceptable given the read-only nature, but a 3 is appropriate because it does align with the annotations without adding substantial nuance.

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 two-sentence, front-loaded statement that includes both purpose and a routing hint to the sibling tool. It is efficient with no wasted words. It could have added a bit more on when-not to use, but given its brevity, the structure is strong, though not perfect.

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 straightforward read-only inspection tool with no output schema and only one required parameter that is documented in the schema, the description provides enough context: the purpose, the precondition (before running), and the alternative for execution. The lack of output schema means the description doesn't need to detail return values Mendelian, but it could have hinted at what 'filter conditions' might includeasiak as a courtesy. Overall, the tool is simple enough that the description 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 50% (id is documented with a source, while _jq is not), so the schema partially covers parameter meanings. The description does not explicitly explain the id parameter, but the schema's 'Strategy ID' description is adequate. Since coverage is exactly 50%, the description could compensate for the undocumented _jq, but it doesn't, so it relies on the schema for id and leaves _jq undefined; this is a slight gap but not a major failure, so a 3 is fair.

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 clear verb ('Inspecting') and resource ('a screener strategy's filter conditions'), which is specific and distinct from the sibling screener_search (which executes). It clearly identifies what this tool does, and the agent can differentiate it from its siblings by the action indicated.

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 'before running it' and says to use screener_search to execute the strategy, which provides clear context for when to use this tool versus the alternative. However, it does not state explicit when-not conditions or mention any other alternatives, but the context is sufficient to guide selection.

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
_jqNo
marketNoMarket filter: "US" | "HK" | "CN" | "SG" (default: "US")

TDQS

A4.1/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 context that this operates on the current user's saved strategies and clarifies the market filtering and default. No contradiction with annotations, and it enriches understanding beyond the structured 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?

Two sentences, no unnecessary detail. All information is actionable and front-loaded: the purpose, market default, and downstream usage. No fluff or repetition of obvious schema 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 list tool with rich annotations, the description is fairly complete. It tells the agent what the tool returns (saved strategies) and how to proceed with the results (pass id to other tools). It doesn't describe the output structure or pagination, but given the simplicity and that these are likely standard, it's adequate. A slightly more explicit note about the return shape could push it to 5.

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 description coverage is only 50% since _jq lacks a description while market has one. The description does mention market with its allowed values and default, but it completely omits any explanation of _jq. Since coverage is low, the description should compensate by explaining _jq's purpose, but it doesn't, leaving agents uncertain about that 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 clearly states 'List the current user's saved screener strategies' – a specific verb and resource. It also differentiates from siblings by noting the current-user scope and providing guidance on how to use the returned id with screener_search or screener_strategy, making the tool's role distinct.

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 tells the agent what to do with the results: 'Pass id to screener_search strategy_id to run, or screener_strategy to inspect conditions.' This provides a clear workflow and implies this tool is for listing, while those tools execute/inspect. However, it doesn't explicitly say when not to use this tool (e.g., if you already know the strategy id and want to run it directly, you might skip listing), so it's slightly incomplete.

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
_jqNo
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

A3.6/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 semantic context about the relationship between facts and key_fact_id, but does not disclose return format, pagination, or any edge behaviors. This is acceptable given annotations carry the burden, though it adds limited 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.

Conciseness5/5

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

Two concise sentences with no filler. The main purpose is front-loaded, and the second sentence adds valuable context without 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 5 parameters and no output schema, the description explains the core concept, filtering, and relationship to signals. It does not describe the output shape or error behavior, but these are not critical given the annotations and schema. It is nearly complete for the tool's 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 80%, so most parameters are already documented. The description's mention of 'filtered by time range and count' summarizes the begin_time, end_time, and limit parameters but adds no new syntax or format details beyond what the schema provides. Baseline 3 is appropriate when 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 action ('List') and the resource ('a security's fact (catalyst) events'), and enriches it with concrete examples (anomaly detections, factor readings, data sources, natural-language summaries). The extra sentence about facts being what strategies react to adds context that helps distinguish this from generic data-fetching tools, though it doesn't name specific siblings.

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 like 'anomaly' or 'signals'. It describes the filtering capability but does not state conditions that would make it the preferred choice or mention any exclusions.

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
_jqNo
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.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. The description adds defaults for page/count/category but those are also in the schema. It doesn't disclose potential errors, rate limits, or return structure beyond what annotations imply. With annotations present, the bar is lower, but it still adds little beyond 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 sentence followed by a parameter list, with the core purpose front-loaded. It's concise and efficient, though slightly dense with parameter details. No wasted words, but it could be more readable with line breaks.

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 annotations covering safety and no output schema, the description explains the inputs and defaults adequately. It doesn't specify the return format (e.g., fields of each security), but the name implies a list. Given the simplicity and coverage from schema and annotations, it's 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?

Schema description coverage is 80%, so most parameters are already described. The description reiterates market values and defaults, but adds no new semantics beyond the schema. It clarifies the default for category but that's already in 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?

States a clear verb ('Get') and resource ('security list') with a specific market scope. It lists supported markets, distinguishing it from generic data tools, though it doesn't explicitly name an alternative sibling. It's clear enough for an agent to understand the primary function.

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 explains parameters but gives no explicit guidance on when to use this tool versus alternatives like static_info or security_facts. The context is implied by the name and parameters, but there is no explicit 'use this when' or exclusions. For a list tool with many siblings, this is a gap.

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

shareholderShareholdersC
Read-onlyIdempotent
Inspect

Get institutional shareholders for a symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

C2.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 agent knows this is a safe, read-only, idempotent operation. The description adds no additional behavioral context, such as what data is returned (e.g., list of shareholders, dates, percentages) or whether it requires any special permissions. Since annotations cover 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.

Conciseness4/5

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

The description is a single, short sentence that conveys the core action and target. It is correctly front-loaded with the verb and resource. 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?

For a simple get-by-symbol tool with read-only annotations and no output schema, the description is minimal but adequate for the core purpose. Gaps are: no clarification on what 'institutional shareholders' entails (e.g., top holders, all holders, with percentages), and no differentiation from sibling tools. The _jq parameter is not explained. Given the existing schema covers symbol and the annotations cover safety, a 3 is fair.

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 50%. The description adds no parameter details beyond the schema's symbol description. The _jq parameter is undocumented in both the description and the schema (the schema only gives type, no description), so its meaning is unclear. The description doesn't compensate for the gap in _jq's semantics.

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 a clear verb ('Get') and resource ('institutional shareholders for a symbol'), which is specific enough. It doesn't distinguish from sibling tools like shareholder_detail, shareholder_top, or institutional_views, but the purpose is still clear.

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 related shareholder tools (shareholder_detail, shareholder_top) or institutional_views. An agent would have to infer the scope from the name 'shareholder' vs 'shareholder_detail'. No alternative tools are mentioned.

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
_jqNo
symbolYesSecurity symbol, e.g. "AAPL.US"
object_idYesShareholder object_id from shareholder_top tool

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already establish this is read-only and non-destructive. The description adds meaningful behavioral detail beyond that: trading_details[] is empty for institutional 13F holders and only populated for insider/individual Form 4 filers, and object_id must come from shareholder_top. This is precisely the kind of nuance an agent cannot infer from annotations or schema alone.

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, each earning its place: the action, the prerequisite, and the key behavioral caveat. 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.

Completeness5/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 two required parameters, the description is complete: it states the returned scope, names the required source object, and flags the holder-type edge case. With no output schema present, the trading_details caveat is especially valuable and leaves no major expectation gap for the 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?

The schema itself already documents symbol and object_id well, including the object_id provenance from shareholder_top. The description echoes this without adding new parameter-level detail. The optional _jq parameter remains undocumented, and schema coverage is not complete, so the description does not materially enrich parameter understanding.

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: retrieving a single shareholder's holding and trade history. The dependency on shareholder_top distinguishes it from the list-level sibling tools, making its role in the broader lookup flow clear.

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 requires object_id from shareholder_top, which tells the agent when to invoke it and what to have available. It does not name direct alternatives or an explicit 'do not use when' case, but the dependency plus the holder-type caveat gives strong practical guidance.

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
_jqNo
symbolYesSecurity symbol, e.g. "AAPL.US"

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, so the safety profile is covered. The description adds the behavioral context of returning data 'across reporting periods' and the relationship to shareholder_detail. However, it doesn't disclose details like pagination, output format, or whether the top 20 list is per period or aggregated, which would be useful behavioral context beyond the annotations.

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

Conciseness5/5

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

The description is two sentences with no wasted words. It front-loads the core function (Get Top 20 major shareholders) and then adds a cross-reference to the related tool. 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 list tool with annotations covering safety and idempotency, the description is largely complete. It explains the resource (shareholders), the scope (top 20, across reporting periods), and the relationship to a sibling tool. The only minor gap is not describing the output structure, but since there is no output schema and the tool is a simple list, this is a small omission.

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 50%: the 'symbol' parameter is documented in the schema, but '_jq' is not. The description doesn't add any parameter-level detail beyond what the schema provides. It mentions 'object_id' in the context of shareholder_detail, but object_id is not a parameter of this tool. Baseline 3 is appropriate since the schema covers the main parameter and the description doesn't need to compensate heavily.

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: retrieving the top 20 major shareholders (institutions, individuals, insiders) across reporting periods. It distinguishes itself from the sibling 'shareholder_detail' by explicitly mentioning the use of object_id to drill into a holder's full trade history, which helps differentiate it from related shareholder 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 provides a clear usage context: use this tool to get top shareholders, and use shareholder_detail with object_id for deeper history. It doesn't explicitly state when NOT to use it or list alternatives beyond shareholder_detail, but the guidance is sufficient 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.

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
_jqNo
symbolsYesSecurity symbols, e.g. ["AAPL.US", "700.HK"]

TDQS

A4/5.0
Behavior3/5

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

The annotations declare readOnlyHint=false and destructiveHint=false, indicating a non-read, non-destructive operation. The description adds that it returns the upstream API response, which is useful. However, it doesn't detail side effects beyond the addition, idempotency is not disclosed despite idempotentHint=false, and there is no mention of potential errors or partial successes.

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, each with a clear purpose: first states the operation and its target; second provides the key parameter guidance and the return value. It is efficient but could be slightly more structured by separating usage guidance from output expectations.

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 (add symbols to a list) and the schema covers the main params. The description explains the symbols format and that it returns the upstream response, which is helpful. However, it doesn't reveal whether the operation is idempotent or how duplicates are handled, which could matter for an agent. Given the low complexity donation, a 3 is reasonable.

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 67%: both 'id' and 'symbols' have descriptions. The description adds value by clarifying that 'symbols' should be formatted as an array of strings with examples and that the action is to add. The '_jq' parameter has no description in schema, but the description doesn't explain it either; however, since it's likely a filter, the description's absence is a minor gap.

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 'Add', the resource 'community sharelist', and the target 'by id'. It provides specific examples of the symbols parameter. This distinguishes it from sibling tools like sharelist_remove and sharelist_sort, which are clearly different operations.

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 implies usage: it tells the agent to provide symbols to add and identifies the sharelist by id. It doesn't explicitly mention when not to use it or mention alternatives, but the context of adding to a sharelist is clear given the sibling set that includes remove and sort operations.

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

sharelist_createCreate SharelistAInspect

Create a new community sharelist with a name and optional description.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
nameYesList name (also used as description if `description` is omitted).
descriptionNoList description. Defaults to `name` when omitted.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true. The description adds that it creates a new resource, which aligns with annotations. It does not disclose side effects, permissions, or what happens on duplicate names. With annotations covering the basic safety profile, the description adds minimal behavioral context beyond the create action, 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?

One sentence, front-loaded with the verb and resource, and includes the key parameters. No wasted words. It 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 simple create tool with no output schema, the description is adequate but not complete. It doesn't mention what the response contains, whether the sharelist is immediately visible, or any constraints on the name (e.g., uniqueness, length). Given the tool's simplicity and annotations, a 3 is fair.

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 67%: 'name' and 'description' are documented in the schema, and the description mentions both. The '_jq' parameter is undocumented in both schema and description, but it appears to be a technical field. The description adds the note that description defaults to name, which is already in the schema. Baseline 3 is correct since the schema does most of the work.

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 ('Create') and resource ('community sharelist') with a name and optional description. It is clear what the tool does, though it doesn't explicitly distinguish it from sibling tools like sharelist_add or sharelist_delete. The title reinforces the action, so purpose is clear but sibling differentiation is absent.

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: creating a new sharelist. It does not state when to use this tool versus alternatives like sharelist_add or sharelist_sort. There is no explicit when/when-not guidance, but the context of 'community sharelist' gives some implied context. This is adequate but lacks explicit routing.

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
_jqNo

TDQS

A3.6/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. The description adds the ownership constraint and confirms the return behavior ('Returns upstream API response on success'). It provides useful context 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?

The description is a single, concise sentence that front-loads the core action, then adds the ownership restriction and return note. No filler or redundant 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 delete operation with strong annotations and a clear ownership rule, the description is adequate. It covers the key usage constraint and return behavior. No output schema exists, but the response note suffices. Missing details like error cases are minor.

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?

The input schema has 50% coverage (only 'id' documented). The description does not add any meaning for the '_jq' parameter, nor does it elaborate on 'id' beyond the schema. Since coverage is below 80%, the description had a burden to compensate, but it does not.

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 action ('Delete a community sharelist by id') and adds a specific constraint (own lists only). It is distinct from other sharelist tools, though it does not explicitly name an alternative like sharelist_remove. 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?

It provides a clear exclusion condition ('subscribed lists cannot be deleted'), which tells the agent when NOT to use this tool. However, it does not mention any alternative tools or when to prefer them, leaving some ambiguity for deletion of subscribed lists. The guidance is present but incomplete.

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

sharelist_detailSharelist DetailA
Read-onlyIdempotent
Inspect

Get community sharelist detail by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSharelist ID
_jqNo

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, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description aligns with those hints but adds no extra behavioral context such as authentication needs, rate limits, or response scope. 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 front-loaded sentence with no filler. It communicates the resource, action, and required input in the most economical way possible.

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, idempotent lookup backed by strong annotations, the description is nearly sufficient. The only meaningful gap is the unexplained optional '_jq' parameter, which prevents a perfect score but does not block a correct basic invocation using 'id'.

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?

The schema documents 'id' as 'Sharelist ID', and the description only restates that lookup is by id. The optional '_jq' parameter has no schema description and is not mentioned in the description, so the 50% schema coverage gap is not compensated.

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 clear resource ('community sharelist detail'), and the scoping condition ('by id'). Among siblings like sharelist_list, sharelist_popular, and sharelist_remove, this clearly identifies a single-item detail lookup rather than a collection or mutation operation.

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 'by id' implies the tool is used when a specific sharelist ID is known and a detail view is needed. However, it does not explicitly mention alternatives such as sharelist_list or sharelist_popular, nor does it provide when-not-to-use guidance, leaving routing to inference.

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

sharelist_listList SharelistsB
Read-onlyIdempotent
Inspect

List user's own and subscribed community sharelists.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
countNoNumber of lists to return (default 20)

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 safety and idempotency. The description adds scope (user's own and subscribed community sharelists) but does not disclose additional behaviors such as pagination, sorting, or error handling. Given the annotations, 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 zero fluff. It communicates the core purpose efficiently. It is concise, though it could be slightly more informative without sacrificing 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?

For a list tool with two parameters (one undocumented), no output schema, and many sibling tools, the description is incomplete. It does not specify return format, pagination details, or how to filter/sort. It also lacks usage context relative to siblings, leaving the agent to guess when to use it.

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 description coverage is only 50%, with the '_jq' parameter lacking any description. The tool description does not mention parameters at all, so it does not compensate for the undocumented parameter. The 'count' parameter has a schema description (default 20), but the description does not elaborate on its behavior or constraints.

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 clearly defines the scope and distinguishes it from siblings like sharelist_popular (popular lists) and sharelist_detail (specific list details). It is unambiguous about what is being listed.

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. It does not mention when to use sharelist_popular for trending lists or sharelist_detail for a specific list. The context is implied but not explicit, leaving the agent to infer usage.

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

sharelist_removeRemove from SharelistB
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
_jqNo
symbolsYesSecurity symbols, e.g. ["AAPL.US", "700.HK"]

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the agent knows this is a mutating, potentially destructive, idempotent operation. The description adds that it 'Returns upstream API response on success', which is useful but doesn't disclose details like whether removal is permanent, whether it requires specific permissions, or what happens if a symbol doesn't exist. The description doesn't contradict annotations, but it doesn't add much 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.

Conciseness4/5

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

The description is two sentences, front-loaded with the core action and resource, followed by the required input and return behavior. Every sentence earns its place, though it could be slightly more explicit about the sharelist ID parameter. No fluff 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 mutating tool with no output schema, the description provides the essential action, required inputs, and return behavior. However, it lacks context on edge cases (e.g., removing non-existent symbols, partial success), permission requirements, and the meaning of '_jq'. Given the destructiveHint=true annotation, more behavioral context would be valuable, but the description is adequate for basic 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 67%: 'id' and 'symbols' are described in the schema, while '_jq' is not. The description adds minimal parameter meaning beyond the schema—it says 'Provide symbols to remove', which reinforces the 'symbols' parameter's purpose but doesn't explain 'id' beyond 'Sharelist ID' or '_jq' at all. With 67% coverage, the description partially compensates but leaves the '_jq' parameter undocumented.

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 ('Remove securities from a community sharelist by id') and the resource ('community sharelist'), with a specific verb ('Remove') and the required input ('symbols'). It distinguishes itself from sibling tools like sharelist_add and sharelist_delete by focusing on removal of securities from an existing sharelist, though it doesn't explicitly name those 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 implies when to use this tool: when you need to remove specific securities from a sharelist. It doesn't explicitly state when not to use it or mention alternatives like sharelist_delete (for removing the entire sharelist) or sharelist_add (for adding securities). The context is clear enough for an agent to infer the primary use case, but lacks explicit exclusions.

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
_jqNo
symbolsYesSecurity symbols, e.g. ["AAPL.US", "700.HK"]

TDQS

A3.6/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=false (it's a mutation), destructiveHint=true (it may have destructive effects), idempotentHint=true (repeated calls may produce same result), and openWorldHint=true. The description does not contradict these, but adds little beyond: it does mention 'Returns upstream API response on success', which is useful, and implies a reordering operation. However, it does not disclose potential side effects beyond 'reorder', nor does it highlight the destructive nature or idempotency, which annotations already provide. No contradiction, but limited added 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 two sentences, front-loading the core action ('Reorder securities in a community sharelist by id') and providing a precise instruction ('Provide symbols in the desired new order'). The return value is mentioned concisely. Every word earns its place; 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?

Given the tool's simplicity (2 params, no nested objects, no output schema), the description covers the essential: what it does, how to specify the order, and the return type. It lacks mention of error conditions or side effects (destructiveHint is true but not described), but for reordering, the description is adequate. The presence of annotations for idempotency and destructiveness compensates for missing behavioral detail, so a 4 is appropriate given 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?

The schema descriptions cover 'id' and 'symbols' (67% coverage), with 'symbols' having an example. The description reinforces that symbols are provided in the desired order, which adds semantic meaning beyond the schema's 'Security symbols' description. However, '_jq' is undocumented in schema and description, and there's no parameter-level detail on ordering semantics beyond the adjective 'desired'. With moderate coverage, the description adds some value but doesn't fully compensate for the missing '_jq' explanation.

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 'reorder' and the resource 'community sharelist', and specifies that symbols are provided in the desired order. It distinguishes from siblings like 'sharelist_add' and 'sharelist_remove' by focusing on reordering existing securities. However, it doesn't explicitly name any sibling tool for contrast, but the purpose is clear enough.

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 usage context: reordering securities in a specific sharelist by ID and providing symbols in the new order. It doesn't explicitly state when to use it vs alternatives (e.g., 'sharelist_add' for adding, 'sharelist_remove' for removing). The context is inferable from the verb 'reorder', but no explicit alternatives 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.

short_marginShort MarginC
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
_jqNo

TDQS

C2.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, covering the safety profile. The description adds the return fields and the scope ('current account'), which is useful but not extensive. It does not contradict annotations, so a mid-score 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, clear sentence with no fluff. It front-loads the action and includes the key return fields. However, it lacks any structural elements like examples or parameter explanations, so it is concise but under-specified.

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 one undocumented parameter and no output schema, the description is insufficient. It fails to explain the '_jq' parameter, which is essential for invocation. While the return fields are listed, the lack of parameter documentation and any usage context makes it incomplete for correct use.

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

Parameters1/5

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

The sole parameter '_jq' has zero schema description coverage, and the description does not explain its purpose or format. Since the schema provides no hints and the description is silent, the agent has no way to correctly supply this parameter. This is a critical gap.

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 short margin deposit details for the current account, listing specific return fields (margin_amount, margin_rate, etc.). It is distinguishable from siblings like short_positions and short_trades, though it does not explicitly differentiate itself, so it loses a point for not naming 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 closely related short_positions or short_trades. It does not mention any exclusions or conditions. Without this, an agent may struggle to choose the correct tool among siblings.

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
_jqNo
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

A4/5.0
Behavior4/5

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

Annotations cover read-only, idempotent, and non-destructive behavior. The description adds value by disclosing data-source cadence (FINRA bi-weekly, HKEX daily), market-specific output fields, and the response shape. It does not restate or contradict the annotation safe 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?

Every sentence in the description carries functional weight: purpose, market scope, count, unified output, US-only and HK-only fields, and source frequency. The core verb and resource are front-loaded, with dense but parseable detail afterward. There is no filler 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?

Without an output schema, the description does a strong job of conveying the complete response shape: unified fields and market-specific ones, timestamp format, rate example, and source behavior. Minor omissions like default sort order or pagination do not cripple an agent's ability to interpret results.

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 documents symbol and count with the same constraints. The description repeats count range and the market-inference rule but does not explain the '_jq' parameter or add new parameter-specific meaning. With schema coverage at 67%, the description neither significantly condenses nor compensates for the gap.

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 short interest history (open short positions)') and scopes the markets to HK or US. The tool name and content distinguish it from sibling short_margin and short_trades, but the description does not explicitly differentiate itself from those alternatives, so it misses the top bar for explicit 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 Guidelines4/5

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

The description gives clear context: market inference from the suffix, count limits, and both data-source frequencies. It does not give explicit when-not-to-use guidance or name sibling tools as alternatives, so it is 'clear context without exclusions' rather than complete routing.

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
_jqNo
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

A4.1/5.0
Behavior3/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. The description adds useful behavioral context by naming the underlying data sources (FINRA/NASDAQ, HKEX) and pagination defaults, but does not disclose response format, rate limits, or error conditions. This adds some value beyond annotations without being 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 compact sentence that front-loads the core purpose and packs parameter details, market inference, and sources without waste. Every clause contributes essential 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?

Despite covering purpose, markets, sources, and pagination, the description contradicts the schema by stating last_timestamp can be omitted for latest while the schema marks it required. This inconsistency can confuse an agent. Additionally, with no output schema, it omits any description of the return format, leaving some uncertainty.

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

Parameters4/5

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

Schema coverage is 75%, and the description elaborates on last_timestamp (unix seconds, omit for latest), page_size (range and default), and symbol suffix meaning. It does not explain _jq, but that parameter appears internal. The description adds meaningful semantics beyond the schema, such as data source attribution.

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 retrieves daily short-sale volume history for HK or US stocks, with a specific verb, resource, and market scope. It differentiates from siblings like short_margin, short_positions, and trade_stats by focusing on short-sale volume 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?

It explains market inference from symbol suffix and lists data sources for each market, giving clear context for when to use it. However, it does not explicitly contrast with alternative short-selling tools or state when not to use it, leaving some inference to the agent.

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
_jqNo
signal_idYesSignal ID, e.g. "sign_992_1a00c9425c3_48ab". Get IDs from `signals`.

TDQS

A4.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, so the safety profile is fully covered. The description adds the behavioral fact that the response includes the same fields as the list plus `analysis`, which is useful. It does not describe pagination, error behavior, or response size, but for a simple read-by-ID tool the annotations carry most of 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 sentences, no filler. The core action and ID source are front-loaded, and the extra-field detail is stated compactly. 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 detail tool with one required parameter and no output schema, the description is nearly complete. It tells the agent what the response contains (same fields as list plus `analysis`) and where to get the ID. It could mention that the response is a single object or that `analysis` may be large, but those are minor omissions given the annotations and simple parameter surface.

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 50%: `signal_id` is documented with an example and a pointer to `signals`, while `_jq` is undocumented. The description reinforces the meaning of `signal_id` by saying 'Get one signal by ID' and 'from `signals`', which adds context beyond the schema. It does not explain `_jq`, but that parameter appears to be a generic query utility across tools, so the gap is minor.

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 ('one signal by ID'), and explicitly distinguishes it from the list tool ('from `signals`'). It also names the extra field (`analysis`) that makes it a detail endpoint, so an agent can tell it apart from `signals` and other detail tools 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 description implies when to use it: when you need a single signal's full analysis rather than the list. It references `signals` as the source of IDs, which is a clear prerequisite. It does not explicitly say 'use `signals` for lists' or name alternatives, but the context is clear enough for a detail-vs-list pattern.

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
_jqNo
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.4/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the safety profile is known. The description adds useful behavioral context: results are signal summaries rather than full analyses, and signals are catalyst-triggered. 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?

Three concise sentences with no filler. The core purpose, filtering/pagination behavior, and the crucial routing note about signal_detail are all front-loaded and informative.

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 rich parameter descriptions and clear annotations, this is nearly complete. The main gaps are the undocumented `_jq` parameter and no guidance on the response shape, which prevents 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 coverage is 90%, with most parameters already described in detail, so the baseline is 3. The description groups filters into symbol, strategy, catalyst, and time range, but adds little syntax-level 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 uses a specific verb ('Query') and a clear resource ('strategy signals'), and defines a signal as 'a strategy's take on a security, triggered by a catalyst.' It also distinguishes itself from signal_detail by noting that full strategy analysis is omitted.

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 names signal_detail as the alternative when full strategy analysis is needed, giving the agent a clear when-to-use vs. when-not-to-use signal. It also states the main filtering and pagination capabilities.

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
_jqNo
file_keyYesFile key from statement_list, e.g. "/statement_data/data/.../20975338.json"

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the read-only/idempotent annotations, the description clarifies that the result is a pre-signed download URL rather than the file content, which is a useful behavioral distinction. It does not mention expiration or auth details, but the core behavior is transparent.

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 concise, front-loaded sentence; the essential output type and source are given immediately.

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 read-only nature and annotations, the description sufficiently explains what the tool does and where its input comes from. It omits details like URL expiration or response shape, but these are not critical for a simple URL-retrieval 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 description adds meaning to file_key by tying it to statement_list output, but the optional _jq parameter is neither described in the schema nor in the description. With only 50% schema parameter coverage, this is a meaningful but incomplete addition.

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?

Clearly states a specific action ('get a pre-signed download URL') and a specific resource ('statement data file'), and identifies the source tool (statement_list), making it easily distinguishable from 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?

Provides clear context by noting the file must come from statement_list, implying a prerequisite workflow. It does not explicitly exclude alternatives, but the source reference is enough for an agent to sequence correctly.

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
_jqNo
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 readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds value by specifying that the tool returns an id meant for export, which is behavioral context beyond annotations. It does not mention pagination or response format, but given the simple read-only nature, this is sufficient.

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

Conciseness5/5

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

Two sentences, zero fluff. The core purpose is front-loaded, and the export linkage is a single clear follow-up. 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 list tool with read-only annotations and no output schema, the description covers the essential purpose and the critical linkage to statement_export. It omits an explicit statement of the response structure, but the agent can infer it returns statement objects with ids, dates, and types. Slight gap, but not material.

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 75% (3 of 4 parameters have descriptions, _jq lacks one). The description adds minimal parameter insight beyond what the schema provides; it mentions daily/monthly which aligns with statement_type, but the schema already details that. Baseline 3 is appropriate given high schema coverage.

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

Purpose5/5

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

States a specific verb ('List') and resource ('available account statements'), with explicit distinction between daily and monthly types. Clearly separates from sibling statement_export by indicating that this tool lists while the other downloads.

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 linkage to statement_export ('Use the id with statement_export to download'), which guides the agent on how to use the output. However, it does not explicitly contrast with alternatives for listing, but there is no competing list tool among siblings, so this is adequate.

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
_jqNo
symbolsYesSecurity symbols, e.g. ["700.HK", "AAPL.US"]

TDQS

A3.6/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 safety is covered. The description adds value by listing the returned fields and by documenting the non-obvious routing behavior for .BKKT crypto symbols on US accounts. It does not disclose error behavior or output container shape, but for a read-only lookup the added context 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?

The description is three sentences with no filler: purpose, returned fields, then the niche routing caveat. It is front-loaded with the core behavior and keeps the edge case separate. 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 lookup with no output schema, the description covers the key return fields and the main symbol-format caveat (BKKT/HAS/OSL). It is incomplete only on the optional _jq parameter and the exact JSON shape, which are minor for typical calls. Overall it gives an agent enough to invoke the tool correctly for standard symbols.

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?

The schema documents the symbols array with an example, and the description's per-symbol field list is mostly about output rather than input constraints. The optional _jq parameter is left completely undocumented in both the schema and the description, so an agent cannot infer its meaning. The crypto symbol example adds a little input context but does not compensate for the _jq gap.

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 pair ('Get static info for securities') and enumerates the exact per-symbol fields returned, making the tool's function unmistakable. While it does not explicitly name a sibling like security_facts or security_list, the field list is specific enough to differentiate it from quote/candlesticks tools. This is clear but stops short of full sibling differentiation.

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 whenever an agent needs static security metadata, which is a reasonable minimal signal. However, it never states when to prefer this tool over alternatives like security_facts or security_list. The US-account crypto routing note is a constraint, not a comparison to another tool, so 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.

stock_positionsStock PositionsB
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
_jqNo

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already cover read-only, non-destructive, idempotent, and open-world attributes, so the bar is lowered. The description adds account-dependent behavior (the US-only us_asset_overview field with its sub-structure), which is useful behavioral detail beyond annotations. 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 compact and efficient: one sentence establishes the main purpose and scope, and the second adds the account-specific important field. Every word adds value, and it is front-loaded with the action and resource.

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 fill in the return shape for the general case, but it only describes a US-account special field and not the base response fields or the meaning of the `_jq` parameter. An agent cannot reliably interpret the result of the default or transform the API without additional guesswork, leaving the description incomplete for invoking correctly.

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

Parameters1/5

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

Schema description coverage is 0%, and the only parameter `_jq` has no type help, no description, and no mention in the tool description. The agent is given zero guidance about what the string parameter means, how to use it, or whether it is a filter/query, making this a significant manual gap that the description does not 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 opens with 'Get current stock positions across all channels,' which is a specific verb and resource with a scope qualifier. It distinguishes itself from siblings like fund_positions and short_positions through the asset class, though it does not explicitly name the 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 provides a clear context—daily current stock positions across channels—but it does not say when to prefer this tool over fund_positions, short_positions, or broker_holding, nor does it provide exclusions. Usage guidance is mostly inferred from the verb 'Get.'

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
_jqNo
sideYesBuy or Sell
remarkNoOrder remark (max 255 characters)
symbolYesSecurity symbol, e.g. "700.HK"
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)
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
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".
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.9/5.0
Behavior5/5

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

The description goes beyond annotations by explaining the dry-run behavior in detail. It discloses that without the execute parameter, nothing reaches the exchange, and that the confirmation code is single-use, expires in 10 minutes, and is tied to the exact order. This is critical for safety. No contradiction with annotations found.

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 concise and front-loaded with the most critical safety information. It clearly states the dry-run requirement, the two-step process, and the conditions for using the execute parameter. No unnecessary words are used; every sentence 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?

Given the tool's complexity (24 parameters, 5 required, many conditional behaviors based on order type), the description provides essential guidance on the execution workflow都有了。 The schema covers the parameter semantics thoroughly, and the description adds the mandatory protocol for using execute. The lack of an output schema is acceptable because the tool's return values are likely simple previews or confirmations not requiring extra explanation.

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?

The input schema already provides very high coverage (96%) with detailed descriptions of each parameter, so the baseline is 3. The tool description adds crucial information about the execute parameter, explaining its role in the dry-run workflow. While the schema explains each field, the description reinforces the criticality of the execute parameter's 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 clearly states the tool's purpose: submitting buy/sell orders. It also introduces the dry-run mechanism, which is a specific and important behavior. It distinguishes itself from siblings like cancel_order and replace_order by focusing on order submission.

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 defines the two-step protocol for using this tool safely, including when to call without execute, when to show the preview to the user, and when to re-call with the confirmation code. It also warns against quoting the code without explicit confirmation and provides clear alternatives.

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
_jqNo
symbolNoFilter by symbol, e.g. "700.HK".
order_idNoFilter by a specific order_id.

TDQS

A4.1/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, so the bar is lower. The description adds concrete behavioral detail by specifying that it returns an executions array with exact fields and supports filtering by symbol or order_id. 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 tight sentences with the core scope front-loaded, followed by the return shape and filter options. Every sentence adds value with no redundancy or filler.

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 tool with strong annotations, the description provides enough: return fields, filter options, and the today-only scope. Minor omissions like timezone handling or empty-result behavior are not material 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?

The schema already documents symbol and order_id as filters, and the description echoes that usage. The _jq parameter has no schema description and is not mentioned in the description, so with 67% schema coverage the description only partially compensates for the gap.

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 exact resource ('today's trade executions (fills)'), and scopes it to today. It also enumerates the returned fields, making it easy to distinguish from siblings like history_executions or today_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 clearly implies this is for today's execution records and mentions optional symbol/order_id filters. However, it does not explicitly tell the agent when to use this instead of history_executions or today_orders, leaving that routing to inference from sibling names.

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
_jqNo
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.5/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 annotations: the attached_orders[] nesting, the leg-fetching behavior via is_attached, and the US-account divergence. It doesn't describe pagination or rate limits, but the annotations plus the detailed behavior make this a strong 4.

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 front-loaded: the core purpose and return shape come first, followed by filtering and edge cases. Every sentence carries information, though the US-account caveat is repeated in the description and in the schema, making it slightly redundant. Still, it is well-organized and efficient for the complexity it covers.

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 no output schema, the description covers the return shape, filtering options, attached-leg behavior, and US-account divergence. It doesn't mention pagination for AP accounts or the _jq parameter, but the core calling contract is complete. The complexity of the attached-leg logic and US/AP split is well addressed.

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 86%, so the schema already documents most parameters. The description adds meaning beyond the schema by explaining the relationship between order_id and is_attached, the attached_orders[] return structure, and the US-account exception. It doesn't fully compensate for the undocumented _jq parameter, but the added relational semantics justify a 4.

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 orders placed today') and immediately distinguishes itself from related order tools by specifying the return shape and the attached-leg behavior. It clearly differentiates from siblings like today_executions, history_orders, and order_detail by scoping to today's orders and explaining the attached_orders[] structure.

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 gives explicit when-to-use guidance: pass symbol to filter, order_id for one order, and is_attached=true with order_id to fetch a leg. It also states exclusions: is_attached does nothing without order_id, and US accounts are served by a separate US order endpoint. This is unusually complete routing guidance.

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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent behavior. The description adds value by naming the exact response fields, which is useful since no output schema exists. It does not disclose pagination, ordering, or limits, but for a simple symbol-scoped listing the basics are 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?

The description is short, front-loaded with the action, and directly communicates the tool's purpose. The return fields are compactly listed without unnecessary filler.

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 exists alongside many topic-related siblings (topic_search, topic_replies, topic_create), but the description offers no differentiation or guidance. It does expose the return shape in the absence of an output schema, yet omits pagination/ordering/limit details that a consumer would likely need for a list endpoint.

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?

The description only restates 'for a symbol', which mirrors the already-described symbol parameter. It adds no meaning for the `_jq` parameter flagged in the schema. With only half the parameters documented in the schema and no additional clarification here, the description contributes 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 states a clear verb+resource: 'Get discussion topics for a symbol.' It also lists the returned item fieldsarke. However, it does not explicitly differentiate from sibling tools like topic_search or topic_create beyond the basic verb, 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 alternatives such as topic_search or topic_create. The description only says it gets topics for a symbol, with no mention of filters, prerequisites, or cases where a sibling tool 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.

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
_jqNo
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 declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the agent knows this is a non-idempotent write. The description adds the behavioral nuance that 'post' is plain text only while 'article' accepts Markdown, and that title is required for 'article'. It doesn't disclose side effects like whether creation is immediate, whether it requires authentication, or what happens on duplicate titles, but the annotations cover the core 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 states the action and resource; the second sentence front-loads the critical type distinction and its constraints. 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 tool with 5 parameters and no output schema, the description covers the essential behavioral distinction (post vs article) and the title requirement. It doesn't mention return values, but the absence of an output schema lowers the burden. It also doesn't mention symbols max count, but the schema already documents that. The description is complete enough for an agent 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 80%, so the schema already documents most parameters. The description adds the default value for topic_type ('post') and the title requirement for 'article', which reinforces the schema. It doesn't add meaning for _jq or symbols beyond what the schema provides, but the schema descriptions are already adequate, 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 ('Create') and resource ('a new discussion topic'), and immediately distinguishes the two topic_type variants ('post' vs 'article') with their key constraints. This clearly separates it from sibling tools like topic_create_reply, topic_detail, and topic_search without needing to inspect 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 on when to use each variant: 'post' is plain text, 'article' requires a non-empty title and accepts Markdown. It doesn't explicitly name alternatives or exclusions, but the topic_type distinction effectively tells the agent which mode to pick. It doesn't mention when to use topic_create_reply instead, but the verb 'Create a new discussion topic' makes the primary use case clear.

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
_jqNo
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 signal this is a non-read-only, non-idempotent mutation; the description confirms the create effect and adds the nesting behavior. It does not add depth about permissions, what the created reply contains, failure modes, or return behavior, but for a simple create operation the lack is not glaring.

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 action comes first and the conditional parameter guidance follows immediately. 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 two-required-parameter create tool with no nested objects and no output schema, the description plus schema covers how and when to invoke it. The only minor gap is the unexplained _jq parameter, which appears incidental.

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 75%, so the schema carries most of the parameter meaning. The description restates the reply_to_id conditional that the schema already documents, adding no new semantic value, and it does not explain the undocumented _jq 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 states a specific action ('Create a reply') and resource ('discussion topic'), and clarifies the optional nesting behavior. This distinguishes it from sibling topic_create (which creates a topic) without requiring schema inspection.

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 condition: pass reply_to_id for nested replies and omit it for a top-level reply, which is the main branching decision when using this tool. It does not explicitly name alternatives or exclusion cases, but the context is obvious from the tool name and sibling set.

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
_jqNo
topic_idYesTopic ID

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, so the safety profile is covered. The description adds no behavioral context beyond the basic read operation, such as whether the response includes replies or metadata, 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 a single, front-loaded sentence that states the action, resource, and key parameter with no wasted words. It is appropriately sized for a simple lookup 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 simple read tool with strong annotations and a clear required parameter, the description is mostly sufficient. However, it does not clarify what 'detail' includes (e.g., replies, author, timestamps) or how it differs from topic_replies, which could matter for tool selection. The lack of an output schema increases the burden slightly, but the core call is unambiguous.

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 50%: topic_id is described as 'Topic ID' in the schema, while _jq has no description. The tool description adds no parameter-level meaning beyond restating the key parameter. With one of two parameters undocumented, the description does not compensate for the gap, but the main parameter is clear.

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 ('discussion topic detail') keyed by topic_id, which clearly identifies the tool's function. It does not explicitly differentiate from siblings like topic, topic_replies, or topic_search, but the resource and parameter make the purpose reasonably distinct.

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: call when you need discussion topic detail by topic_id. It does not state when not to use it or mention alternatives such as topic_replies or topic_search, so the agent must infer the appropriate context from the name and sibling list.

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
_jqNo
pageNoPage number, 1-based (default: 1).
sizeNoRecords per page, 1-50 (default: 20).
topic_idYesTopic ID.

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, so the safety profile is known. The description adds value by specifying pagination defaults (page=1, size=20, range 1-50) and the fact it is paginated, which is behavioral context not present in the annotations. It doesn't cover rate limits or response shape, but those are minor given the clear 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 description is a single, front-loaded sentence that communicates the core purpose and key constraints with no extra words. It avoids redundant fillers and packs the key behavior into a compact phrase.

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?

Although the tool is straightforward, the description does not explain the _jq parameter, which is a gap in the input schema. There is no output schema, so the description could be more explicit about what a reply entry looks like, but the general intent is clear. The annotations cover safety, and pagination is described, but the undocumented parameter leaves context incomplete.

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 descriptions for page, size, and topic_id, and the description reiterates those defaults without adding new meaning. The _jq parameter is undocumented in both the schema and the description, leaving a gap for agents. At 75% schema coverage, the description does not fully compensate for this unexplained parameter, but it does reinforce the pagination contract minimally.

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 the specific verb "Get" paired with a clear resource ("replies to a discussion topic") and marks it as paginated. It distinguishes from sibling tools like topic_create_reply (a write operation) and topic_detail (which retrieves topic metadata, not replies), so an agent can tell them apart immediately.

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 states the tool's operation clearly, but it does not explicitly say when to use this over alternatives or include an exclusion. The intended use case (“get replies to a topic”) is implied by the name and description, but there's no routing or comparative guidance against siblings like topic_detail or topic_search.

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
_jqNo
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

A4/5.0
Behavior4/5

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

Annotations already establish this as a safe, read-only, idempotent call. The description adds meaningful behavior beyond that: the 20-trading-day standard deviation threshold, the correlated news reasons, and market/sort defaults. Output and pagination details are not described, but the schema covers 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?

Two compact sentences front-load the core behavior and then provide terse, useful parameter shorthand. There is no fluff and no needless repetition of schema contents.

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 six parameters and no output schema, the description captures the essential invocation semantics: mover definition, market scope, sort default, and return intent. Remaining parameters such as date, limit, and next_params are fully explained in the schema. Exact output field names are absent, but the return intent is clear.

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 high, so most parameters are already documented. The description's markets and sort shorthand largely restates schema content and adds little new semantic value, while _jq remains undocumented in both places.

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 clear verb and resource: 'Get stocks whose price fluctuation exceeds the 20-trading-day standard deviation, with correlated news reasons.' This precise selection rule distinguishes top_movers from the many market-data siblings without requiring schema inspection.

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 and gives inline usage hints for markets and sort defaults. However, it does not explicitly state when not to use it, nor does it name alternatives or prerequisites, so usage guidance is inferred rather than stated.

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

tradesRecent TradesB
Read-onlyIdempotent
Inspect

Get recent trades (max 1000). Returns trades[]{price, volume, timestamp, trade_type, direction} for the symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
countYesMaximum number of results (max 1000)
symbolYesSecurity symbol, e.g. "700.HK"

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 covered. The description adds the return structure and the 'max 1000' limit, which is useful, but it omits details like the precise time range ('recent' is ambiguous), ordering of results, or behavior when fewer trades exist. It adds some value beyond annotations but not rich 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 that leads with the action and output format, then specifies the symbol context. It contains no redundant phrasing or filler, making it ideal for quick parsing by an agent.

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, but the description lists the return fields, which partially compensates. However, it leaves key details undefined: the meaning of 'recent' (time window), result ordering, pagination behavior, and the purpose of the undocumented _jq parameter. For a tool with only 3 parameters and a clear read-only nature, 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?

Schema description coverage is 67% (count and symbol have descriptions; _jq has none). The description reinforces that results are for a specific symbol, but it does not add new meaning beyond the schema for the parameters. The limit is already in the schema ('max 1000'), and the description does not explain _jq or how count interacts with 'recent'. Baseline 3 is appropriate given partial 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 clearly states the verb ('Get'), the resource ('recent trades'), and the key output fields ('trades[]{price, volume, timestamp, trade_type, direction}'). It is specific enough to distinguish from many sibling tools (e.g., trade_stats, short_trades), though it does not explicitly name alternatives or contrast with 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 about when to use this tool versus alternatives like history_executions, today_executions, or candlesticks. The phrase 'recent trades' implies a time scope, but it does not state a defined window (e.g., last 24 hours) or any exclusion criteria. An agent is left to infer the intended use from the name and description.

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

trade_statsTrade StatisticsB
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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

B3.1/5.0
Behavior3/5

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

The description makes the read-only nature clear by saying it 'gets' statistics and by describing returned fields, consistent with annotations. It does not disclose any additional behavioral details such as result size limits, data freshness, or whether the output is aggregated differently from 'trades'.

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 resource, and the second sentence gives the exact return schema. No filler or ambiguity.

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 statistics call, the description covers the purpose and output shape, but it omits usage context, how the price-volume buckets are defined, and any guidance on selecting this tool over the many sibling market-data tools. It is adequate but not complete.

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 covers only one of two properties with a meaningful description ('symbol'), and the description adds no explanation for the undocumented '_jq' parameter. The returned fields are named, but parameter semantics beyond what the schema already states are not enriched.

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 names a clear resource ('trade statistics') with a concrete output shape (items[]{price_range, buy_volume, sell_volume, neutral_volume}). It is clear what the tool does, though it does not explicitly distinguish itself from sibling tools such as 'trades' or 'capital_distribution'.

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 choose this tool over sibling alternatives. The description states what it returns but does not mention use cases, conditions, or contrast with related tools like 'trades' or 'capital_flow'.

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

trading_daysTrading DaysA
Read-onlyIdempotent
Inspect

Get trading days for a market between dates. market: HK/US/CN/SG.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
endYesEnd date (yyyy-mm-dd)
startYesStart date (yyyy-mm-dd)
marketYesMarket code: HK, US, CN, SG

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already mark this as safe and read-only. The description adds only the scoping behavior (between dates, per market), but does not disclose return shape, inclusivity of dates, or how holidays are handled.

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 short, front-loaded sentence states the core action and scope. The market list is compact and immediately relevant. 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 simple read-only lookup, the description plus schema is enough for an agent to select and invoke the tool. It does not describe the response structure, but the tool's purpose is narrow and safe, so 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?

The schema already describes the three parameters with 75% coveragecars. The description's market list duplicates schema info and adds little new meaning; it does not clarify date formats, inclusivity, or parameter interactions beyond what the schema states.

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 ('trading days') with clear scope (market, date range). It distinguishes the tool from most siblings by intent, though it does not explicitly name any sibling 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 when to use the tool: to retrieve trading days for a market in a date range. However, it gives no explicit guidance on when not to use it, nor does it contrast with nearby tools like trading_session or market_status.

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
_jqNo

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 purporting safe read benefits, but the description adds no behavioral context beyond the schema–such as market scope or timezone handling. It doesn't contradict annotations, but doesn't enrich them either.

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 concise and well-structured, providing the core purpose up front and the return shape in a compact way. No wasted 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?

While the return structure is givenstatic, the meaning of '_jq' is not explained anywhere, which matters because the schema doesn't cover it. The tool is relatively simple,but an agent cannot confidently craft the query without knowing what _jq does.

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?

The single parameter '_jq' is completely undocumented in the schema (0% coverage), and the description doesn't explain it. For a filtering parameter, this is a major gap.

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 retrieves trading session schedules for all markets)Skip with a specific noun and action. It also gives the return structure, distinguishing it from similar data tools like market_status or trading_days.

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 needing trading session times, but doesn't explicitly differentiate from related tools such as market_status or trading_days, nor give guidance on 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.

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
_jqNo
modeNoUpdate mode for securities: "add", "remove", or "replace" (default: "replace")
nameNoNew group name (optional)
securitiesNoSecurities list (optional)

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a mutating operation. The description adds the specific change capabilities (rename, modify securities) but does not disclose any additional side effects, permissions, or reversibility concerns. Given annotations cover 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?

The description is two sentences, front-loaded with the core action, and every word serves a purpose. It is concise and structured so the most important information (what it does and the two update modes) appears first.

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 5-parameter tool with only one required parameter and no output schema, the description covers the essential usage: what can be updated and the mode parameter for securities. It does not explain edge cases like what happens if both name and securities are omitted, but the schema and annotations cover defaults and safety. Overall, it is sufficiently complete 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 80%, and the schema already documents name, securities, and mode with meaningful descriptions. The description restates the relationship between securities and mode but does not add new semantic information beyond the schema. With high coverage, 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 clearly states the tool updates a watchlist group by id, and specifies the two main operations: rename and modify securities. This distinguishes it from siblings like create_watchlist_group and delete_watchlist_group. The verb 'Update' plus the resource and the explicit param usage make 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 Guidelines4/5

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

The description explains the two supported update modes (rename via name, modify via securities+mode), giving concrete guidance on how to use the tool. It does not explicitly name alternatives or state when not to use it, but the sibling set and the name itself make it clear this is for modifying existing groups rather than creating or deleting them.

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
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, and the description adds valuable behavioral context: US accounts with .US symbols receive a US-specific variant with ai_summary and a metrics.pe object with different sub-fields, with automatic region detection. This goes beyond what 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?

Two sentences with no filler. The core purpose is front-loaded, followed by the important conditional variant. Every clause 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 description covers the core purpose and the key regional variant, but with no output schema it does not describe the general return shape or how this tool relates to the sibling valuation tools. An agent could call it correctly, but selection guidance and output expectations are incomplete.

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 50%, with symbol documented and _jq undocumented. The description adds some symbol-related meaning by noting that .US symbols trigger a regional variant, but it does not explain _jq or fully compensate for the coverage gap.

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 valuation overview with peer comparison.' It clearly distinguishes this from sibling tools like valuation_comparison, valuation_history, and valuation_rank by framing it as an overview that includes peer comparison.

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 valuation_comparison, valuation_history, or valuation_rank. The regional variant note is behavioral context, not usage guidance, and no exclusions or alternatives are mentioned.

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
_jqNo
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.3/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 context that the server auto-selects industry peers and that comparison_symbols is currently ignored, which goes beyond annotations. However, it omits details about response structure or pagination, and references 'Mode A' without describing other modes, leaving ambiguity.

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 ('Stock valuation comparison') and immediately explains the primary mode. Every word earns its place; no filler.

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 covers the main usage and the current limitation on comparison_symbols, but leaves gaps: it doesn't explain what 'valuation comparison' entails (metrics), what the response contains beyond 'stock + peers', or whether other modes exist. The ambiguity around 'Mode A' and the undocumented _jq parameter reduce 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 coverage is 75% (only _jq lacks description), so baseline is 3. The description adds meaning for comparison_symbols by stating it is pending backend support and currently ignored, and clarifies that symbol alone triggers peer auto-selection. It does not compensate for _jq, which remains undocumented in both schema and description.

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 ('comparison') and resource ('stock valuation'), and clarifies the primary mode (single symbol) and what it returns (stock + auto-selected industry peers). It distinguishes from siblings like 'valuation' and 'industry_peers' by implying the combination, 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 gives a usage instruction for Mode A ('pass only symbol'), but does not explain when to prefer this over other valuation tools, nor does it mention any exclusions or alternative tools. It notes that comparison_symbols is pending backend support, which is a constraint, but that is more behavioral than usage guidance.

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

valuation_historyValuation HistoryB
Read-onlyIdempotent
Inspect

Get detailed valuation history time series.

ParametersJSON Schema
NameRequiredDescriptionDefault
_jqNo
symbolYesSecurity symbol, e.g. "700.HK"

TDQS

B3/5.0
Behavior3/5

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

Annotations already establish read-only, idempotent, and non-destructive behavior. The description adds that the result is a 'time series,' which gives some output-shape context, but it does not disclose details like pagination, date range defaults, or supported metrics.

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, front-loaded sentence with no filler or repetition. It communicates the essential action and resource immediately.

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 metrics the history contains (e.g., P/E, P/B, EV/EBITDA), the supported time range, or how this differs from sibling valuation tools. It only says 'detailed valuation history time series,' leaving the agent without enough context to fully anticipate the response or choose among similar tools.

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?

The schema already documents 'symbol' with an example, and the description adds no parameter-level meaning. The '_jq' parameter is left undescribed in both schema and description, and with 50% schema coverage the description does not 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 identifies the action ('Get') and the resource ('valuation history time series'). It does not explicitly differentiate from sibling tools like 'industry_valuation' or 'institution_rating_history', but the specific term 'valuation history' makes the core intent reasonably 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 is given on when to choose this tool over related siblings such as 'valuation', 'industry_valuation', or 'institution_rating_history'. There is no mention of date ranges, scope, or alternative tools for different use cases.

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
_jqNo
endNoEnd date in yyyymmdd format (default: today)
startNoStart date in yyyymmdd format (default: 30 days ago)
symbolYesSecurity symbol, e.g. "AAPL.US"

TDQS

A3.7/5.0
Behavior3/5

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

Annotations declare readOnlyHint, idempotentHint, and destructiveHint=false, indicating a safe read operation. The description adds the detail that it returns an industry percentile, which is useful. It does not disclose return format, pagination, or specific data limits, but annotations carry the main safety profile. The description 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 a single sentence that conveys the core purpose and includes a critical format detail about dates. It's concise and front-loaded with the tool's main function. No fluff or redundancy. The format note is essential for correct invocation and 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 a simple read operation with clear annotations. The description covers purpose, date format, and metric. However, it does not describe the output structure (no output schema), nor does it mention what percentile includes (e.g., time series vs single value). For a data retrieval tool, this is a moderate gap but not severe given the 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 75%, with symbol, start, and end already described in the schema. The description adds the date format constraint (yyyymmdd) which is not in the schema, providing marginal value. However, it does not explain default date behavior beyond what the schema already states. The _jq parameter is undocumented, but the description does not compensate for that gap.

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 a specific verb (get), resource (valuation rank), and scope (PE/PB/PS/dividend yield industry percentile over a date range). It distinguishes from siblings like valuation, valuation_comparison, and valuation_history by specifying the metric and date range. The format is clear 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 Guidelines3/5

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

The description specifies the date range inputs and format, which is implicit usage guidance. However, it does not explicitly state when to use this tool over alternatives like valuation, valuation_comparison, or valuation_history. It names the parameters but not the conditions or scenarios that would make this tool the right choice.

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
_jqNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, and non-destructive behavior. The description adds value by specifying the exact return payload (issuers array with id, name_en, name_cn) and how the returned id is meant to be used, which goes 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?

Three short sentences carry purpose, return structure, and downstream usage with no wasted words. The most important information is front-loaded in the first sentence.

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 reference-data tool, the description covers purpose, output fields, and how to use the result. The main gap is the undocumented _jq parameter, but since it is optional and this is a read-only lookup, the description is still adequate for most calling scenarios.

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?

The schema has a single optional _jq parameter with no description, and schema description coverage is 0%, so the description must compensate. It does not mention _jq at all, leaving the parameter's purpose unexplained. The description only covers output fields, not input 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 uses a specific verb and resource ('Get HK warrant issuer information') and further clarifies the return shape with issuers[]{id, name_en, name_cn}. It also references warrant_list for downstream use, which distinguishes it from related warrant tools without needing to inspect 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 'Use id in warrant_list issuer filter' gives clear downstream context for when this tool's output is needed. It does not explicitly state when not to use it or name alternative tools, but the usage context is clear enough for an agent to route correctly.

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

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
_jqNo
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.8/5.0
Behavior4/5

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

Annotations already state readOnlyHint, idempotentHint, and non-destructive, so the tool is clearly a safe read. The description adds detail on the output fields (e.g., warrants[] with specific fields) and the filtering capability, which is useful. It doesn't contradict annotations, and the additional context about the return format goes beyond annotations. No issues of destructive behavior 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?

The description is a single sentence that is concise and front-loaded with the main action and result format. Every word earns its place, listing the output fields without redundancy. It's optimally sized for an API tool description.

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 (9 parameters, 3 required), the description covers the key purpose and output. It doesn't explain return codes, pagination, or error conditions, but the output schema is absent and annotations cover safety. The description is enough for an agent to call it correctly with schema help. Could benefit from mentioning that some filters are optional and the source of issuer IDs, but not a critical omission.

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 89%, so the schema already documents most parameters well. The description adds the output structure but doesn't add meaning to parameters beyond what the schema provides. For example, it doesn't clarify the exact syntax or relationships between filters. Since the schema covers most, the baseline is 3 and the description adds minimal value.

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 filtered warrant list) and identifies the resource (underlying symbol) and the output structure. It distinguishes from siblings like warrant_quote by focusing on a list of warrants with filters. However, it doesn't explicitly name alternative tools for warrant data, so it's clear but not fully 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 implies the tool is used to fetch warrant lists for a symbol, but gives no explicit guidance on when to use it versus alternatives like warrant_quote (which likely returns a single quote). It also doesn't mention any prerequisites (e.g., issuer IDs from warrant_issuers) beyond the schema. This is adequate but not proactive.

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

warrant_quoteWarrant QuoteB
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
_jqNo
symbolsYesSecurity symbols, e.g. ["700.HK", "AAPL.US"]

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false, and the description contradicts none of these. The field list ('last_done, prev_close, ...') informs the agent about response content, but the description does not disclose anything else about behavior such as data recency, auth requirements, or rate limits, so it adds only modest value 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 clean sentences with a front-loaded verb-resource construction followed by a tight comma-separated field list. No fluff, no redundant detail—every part 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 quote tool with clear annotations and no output schema, listing the returned fields goes a long way. Still, the unexplained '_jq' parameter and the absence of any statement about data scope (e.g., real-time vs delayed) leave small but relevant gaps, making it just above the minimum viable but not fully complete.

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 description coverage is 50%: only the 'symbols' property has a schema description, and the description merely restates that the response is 'per symbol', adding no new meaning over the schema. The second parameter '_jq' is entirely undocumented in both the schema and the description, so the description fails to compensate for the missing 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 states a specific verb ('Get') and resource ('warrant quotes') and lists the exact quote fields returned, which makes it distinguishable from siblings like 'quote' and 'option_quote' by domain (warrants). However, it does not explicitly name or contrast any sibling tool, 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 usage guidance whatsoever: no mention of when to prefer this over a regular quote, no conditions/alternatives, no exclusions. Even sibling names like 'quote' or 'option_quote' suggest a context but the description leaves the selection decision entirely to the agent.

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
_jqNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare the tool as read-only, idempotent, and non-destructive, so the description's lack of behavioral detail is acceptable. It adds detail about the return structure (groups with nested securities and fields), which is useful context. But it doesn't mention any potential rate limits or whether the list is ordered in a specific way, which is minor for a read-only tool.

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the resource and action. It includes a compact return structure definition (`groups[]{id, name, securities[]{...}}`), which is detailed but efficiently encoded. No fluff or redundant 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 simple read-only fetch tool with an optional parameter and no output schema, the description covers the essential return structure. However, it does not clarify what `_jq` does or whether any pagination or limit applies, which could be relevant for a large watchlist. But given the low complexity and annotations, completeness is adequate but not exemplary.

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 0%, but the description does not explain the only parameter `_jq` (likely a JSON query parameter). The description focuses on the return structure and not on how to use the parameter. This is a gap since the parameter is not self-explanatory, but since it is optional and likely a filter, the impact might be low. Baseline for 0% coverage is low, but the description provides enough for basic use.

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 watchlist groups and their securities, listing the returned fields. It is distinct from sibling tools like create_watchlist_group, update_watchlist_group, and delete_watchlist_group, which are clearly mutations. However, there is no explicit comparison to other list-like read tools such as sharelist_list, but the purpose is still 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 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 operation to fetch watchlists, but it does not explicitly state when to use it over alternatives or when not to use it. The context is fairly clear given the tool name and read-only annotations, but no guidance is given about distinguishing from similar list tools like sharelist_list.

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
_jqNo
pageNoPage number (default: 1)
sizeNoPage size (default: 20)

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare this as a read-only, non-destructive operation marked by readOnlyHint and idempotent. The description adds the response field list and 'current account' scoping, but does not mention pagination behavior 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?

Two short sentences: the purpose is front-loadedSeptember, then the return shape follows. 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 simple read-only list endpoint with readOnly and idempotent hints, the description covers purpose and response fields. It does not mention pagination behavior, which is mildly relevant given page/size params, but the lack of an output schema makes the field list valuable.

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?

Page and size parameters already carry basic descriptions in the schema (67% coverage). The description adds no additional parameter guidance beyond implying a list of records.

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 (

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?

Clearly scopes the operation to 'current account', distinguishing it from deposit or balance listings, but it does not name an alternative tool or an explicit condition for choosing a sibling.

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.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"
        +}
  2. 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"
        +]
  3. 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
  4. 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"
        +}
  5. 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"
        +  ]
        +}
  6. 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"
        +}
  7. 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"
  8. 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"
  9. 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."
  10. 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"
        +}
  11. 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"
        +]
  12. 145 tool updatesv0.4.5
    • Addedaccount_balance
    • Addedah_premium
    • Addedah_premium_intraday
    • Addedalert_add
    • Addedalert_delete
    • Addedalert_disable
    • Addedalert_enable
    • Addedalert_list
    • Addedanomaly
    • Addedbank_cards
    • Addedbroker_holding
    • Addedbroker_holding_daily
    • Addedbroker_holding_detail
    • Addedbrokers
    • Addedbusiness_segments
    • Addedbusiness_segments_history
    • Addedcalc_indexes
    • Addedcancel_order
    • Addedcandlesticks
    • Addedcapital_distribution
    • Addedcapital_flow
    • Addedcash_flow
    • Addedcompany
    • Addedconsensus
    • Addedconstituent
    • Addedcorp_action
    • Addedcreate_watchlist_group
    • Addeddca_check
    • Addeddca_create
    • Addeddca_history
    • Addeddca_list
    • Addeddca_pause
    • Addeddca_resume
    • Addeddca_stats
    • Addeddca_stop
    • Addeddca_update
    • Addeddelete_watchlist_group
    • Addeddeposits
    • Addeddepth
    • Addeddividend
    • Addeddividend_detail
    • Addedestimate_max_purchase_quantity
    • Addedexchange_rate
    • Addedexecutive
    • Addedfilings
    • Addedfinance_calendar
    • Addedfinancial_report
    • Addedfinancial_report_latest
    • Addedfinancial_report_snapshot
    • Addedfinancial_statement
    • Addedforecast_eps
    • Addedfund_holder
    • Addedfund_positions
    • Addedhistory_candlesticks_by_date
    • Addedhistory_candlesticks_by_offset
    • Addedhistory_executions
    • Addedhistory_market_temperature
    • Addedhistory_orders
    • Addedindustry_peers
    • Addedindustry_rank
    • Addedindustry_valuation
    • Addedindustry_valuation_dist
    • Addedinstitution_rating
    • Addedinstitution_rating_detail
    • Addedinstitution_rating_history
    • Addedinstitution_rating_industry_rank
    • Addedinstitutional_views
    • Addedintraday
    • Addedinvest_relation
    • Addedipo_calendar
    • Addedipo_detail
    • Addedipo_listed
    • Addedipo_order_detail
    • Addedipo_orders
    • Addedipo_profit_loss
    • Addedipo_subscriptions
    • Addedmargin_ratio
    • Addedmarket_status
    • Addedmarket_temperature
    • Addednews
    • Addednews_search
    • Addednow
    • Addedoperating
    • Addedoption_chain_expiry_date_list
    • Addedoption_chain_info_by_date
    • Addedoption_quote
    • Addedoption_volume
    • Addedoption_volume_daily
    • Addedorder_detail
    • Addedparticipants
    • Addedprofit_analysis
    • Addedprofit_analysis_detail
    • Addedquant_run
    • Addedquote
    • Addedrank_categories
    • Addedrank_list
    • Addedreplace_order
    • Addedscreener_indicators
    • Addedscreener_recommend_strategies
    • Addedscreener_search
    • Addedscreener_strategy
    • Addedscreener_user_strategies
    • Addedsecurity_list
    • Addedshareholder
    • Addedshareholder_detail
    • Addedshareholder_top
    • Addedsharelist_add
    • Addedsharelist_create
    • Addedsharelist_delete
    • Addedsharelist_detail
    • Addedsharelist_list
    • Addedsharelist_popular
    • Addedsharelist_remove
    • Addedsharelist_sort
    • Addedshort_margin
    • Addedshort_positions
    • Addedshort_trades
    • Addedstatement_export
    • Addedstatement_list
    • Addedstatic_info
    • Addedstock_positions
    • Addedsubmit_order
    • Addedtoday_executions
    • Addedtoday_orders
    • Addedtop_movers
    • Addedtopic
    • Addedtopic_create
    • Addedtopic_create_reply
    • Addedtopic_detail
    • Addedtopic_replies
    • Addedtopic_search
    • Addedtrade_stats
    • Addedtrades
    • Addedtrading_days
    • Addedtrading_session
    • Addedupdate_watchlist_group
    • Addedvaluation
    • Addedvaluation_comparison
    • Addedvaluation_history
    • Addedvaluation_rank
    • Addedwarrant_issuers
    • Addedwarrant_list
    • Addedwarrant_quote
    • Addedwatchlist
    • Addedwithdrawals

TDQS

B3/5.0

Scored across 164 tools

Disambiguation2/5

Several tool families have nearly identical boundaries: financial_report and financial_statement accept essentially the same kind/report parameters, and the shareholder/institution_rating/valuation/profit_analysis groups each contain multiple overlapping variants. With 164 tools, an agent will frequently struggle to pick the intended one despite generally useful descriptions.

Naming Consistency3/5

Large subdomains such as grid_*, dca_*, sharelist_*, and alert_* use consistent snake_case verb_noun patterns, but the overall set mixes bare-noun retrieval tools (quote, depth, news, now) with verb_noun actions and inconsistent variants like financial_report vs financial_statement and option_chain_info_by_date vs option_chain_expiry_date_list. It remains readable but does not follow a single convention.

Tool Count1/5

164 tools is far beyond the 50+ threshold and makes the surface extremely hard to navigate, even for a full-featured brokerage platform. This feels like an unfiltered API dump rather than a curated MCP tool set.

Completeness4/5

The set covers nearly every lifecycle: orders, grid trading, DCA plans, alerts, watchlists, sharelists, account management, market data, financials, screeners, news, and community features. Minor dead ends exist (e.g., IPO subscriptions are listed but cannot be placed, and alerts cannot be edited in place), but no major workflow is entirely missing.

Maintenance

ActivityActive
ResponsivenessUnresponsive

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
    176
    -
  • 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
    25
    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.
    -