Skip to main content
Glama

Server Details

Free TradingAgents equity research reports and Altair pages; paid signals feed via x402 inside MCP.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 22 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A4.1/5.0

Scored across 9 tools

Disambiguation4/5

Most tools target distinct resource/action pairs: market breadth, market indicators, ticker indicators, research decisions, research signals, pages, and reports. The main possible confusion is between get_market_indicators and get_ticker_indicators, and to a lesser extent get_research_decisions and get_research_signals, though the descriptions clarify index-vs-ticker scope and decision-vs-signal granularity.

Naming Consistency5/5

All names use consistent snake_case and follow a predictable verb_noun pattern: get_*, list_*, read_*. The verbs are appropriate to the operation and no naming convention mixing is present.

Tool Count5/5

Nine tools is well within the expected range and each tool appears to earn its place in the read-only market/research workflow. The set covers market data, ticker data, research reports, and site pages without excessive granularity.

Completeness4/5

The tool surface covers the core read-only lifecycle: discovering and reading pages, listing and reading research reports, and retrieving market, ticker, and research signal/decision data. Minor gaps exist, such as no direct tool for broader historical indicator series despite mention of API history endpoints, but agents can work around these for the apparent purpose.

Available Tools

9 tools
get_market_breadthGet market breadthA
Read-onlyIdempotent
Inspect

Return the latest S&P 500 sector breadth and S&P 500, Nasdaq-100 and PHLX Semiconductor (SOX) constituent percentages above their 20-session simple moving averages, with SPX, NDX and SOX price-index benchmark levels (no dividends). History uses the loader's constituent lists, not point-in-time membership. Optionally choose 1–252 recent trading sessions; default 20.

NameRequiredDescriptionDefault
daysNoRecent trading sessions to return in history; integer from 1 to 252, default 20.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds genuinely useful behavioral context that annotations cannot: no dividends in the benchmark levels, and the important caveat that history is built from the loader's current constituent lists rather than point-in-time membership — a material data-quality limitation for any agent interpreting the series.

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?

Front-loads the returned data, then appends the two critical caveats and the parameter default. It is dense and slightly run-on, but nearly every clause adds information; only the repeated 'default 20' overlaps with the schema.

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 an output schema covering return shape and annotations covering safety, the description's remaining job is data provenance and caveats — which it handles via the no-dividends note and the point-in-time membership warning. Nothing needed to call or interpret the tool correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and already documents the 1–252 range and default of 20; the description only restates '1–252 recent trading sessions; default 20' without adding format or edge-case meaning. Baseline 3 is appropriate when the schema carries the 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?

States a specific verb ('Return') and precisely names the resources: S&P 500 sector breadth, constituent percentages above 20-session SMAs for SPX/NDX/SOX, plus the index benchmark levels. The scope is unambiguous and cannot be confused with any sibling (research reports, pages, signals).

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

Usage Guidelines3/5

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

Usage is only implied — the description explains what data is produced and how the optional `days` history window works, but never says when to call this versus another tool or when it is inappropriate. Siblings are in unrelated domains, so the risk of mis-selection is low, keeping this at minimum-viable rather than poor.

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

get_market_indicatorsGet market indicatorsA
Read-onlyIdempotent
Inspect

Return the latest readings of ten factor indicators and TD Sequential 9 (daily and weekly) for the S&P 500 (SPX), Nasdaq-100 (NDX) and PHLX Semiconductor (SOX) price indices: value, reading, bullish/neutral/bearish signal, the rule's bands and the previous session's value and signal, with each rule's source and its 2005–2026 S&P 500 and Nasdaq-100 evidence. Signals are rule readings, not forecasts; several are contrarian, and SOX implied volatility is Cboe's semiconductor ETF index VXSMH. Five-year histories are at /api/market/indicators.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds meaningful behavioral context beyond annotations: signals are 'rule readings, not forecasts,' several are 'contrarian,' and SOX implied volatility refers to Cboe's VXSMH index. This helps prevent misinterpretation of the returned signals.

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-loads what the tool returns before adding caveats about interpretation and sourcing. It contains no obvious filler, though the long first sentence packs many concepts and could be slightly easier to parse if broken up.

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?

An output schema exists, so the description does not need to enumerate every return field. It still complements the schema by naming the covered indices, signal categories, historical evidence, and interpretation caveats. Given the tool's complexity, this is largely complete.

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

Parameters4/5

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

The tool has zero parameters, so there are no parameter semantics to explain. The schema naturally covers this fully, and the description appropriately focuses on output content rather than nonexistent inputs.

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: 'Return the latest readings of ten factor indicators and TD Sequential 9' for three named indices. The scope is clear enough to distinguish index-level indicators from ticker-level or breadth tools, but it does not explicitly name or contrast with siblings such as get_market_breadth or get_ticker_indicators.

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 monitoring S&P 500, Nasdaq-100, and SOX indicators, and it points to '/api/market/indicators' for five-year histories. However, it does not explicitly state when to choose this tool over sibling market tools or 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.

get_research_decisionsGet research decisionsA
Read-onlyIdempotent
Inspect

Return every model's final portfolio decision for one ticker on its newest analysis date, or a chosen one: rating, report-time price, price target, confidence, time horizon and executive summary, with report URLs. Set includePrevious to compare each represented model's rating with its nearest earlier analysis date, with both source URLs and explicit missing/unavailable states. Same-date reruns use the latest run-start time; model names are not merged. No explanation of why a rating changed is inferred. Use read_research_report for reasoning.

NameRequiredDescriptionDefault
dateNoAnalysis date YYYY-MM-DD from list_research_reports. Omit for the newest.
tickerYesStock or ETF ticker, e.g. NVDA or SPY; case-insensitive, 1–32 characters after trimming.
includePreviousNoInclude each selected model's rating comparison with its nearest strictly earlier analysis date. Default false; not a comparison across models or reruns of the same date.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, it discloses meaningful behavior: same-date reruns resolve by latest run-start time, model names are not merged, missing/unavailable states are explicit rather than omitted, and rating-change rationale is deliberately not inferred. These are non-obvious traits an agent could not get from 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?

Front-loaded with the core purpose in the first clause and every sentence carries information about scope, the flag, edge cases, or sibling routing. The sentences are dense and slightly run-on, which costs a point on readability but not on substance.

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 lookup with a full output schema and complete parameter documentation, everything an agent needs is present: scope, the optional date override, the previous-comparison flag semantics, rerun resolution, and where to go for reasoning. Return-value detail is correctly left to the output schema.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description's note about includePrevious ('nearest earlier analysis date', 'not a comparison across models or reruns') largely restates the schema's own parameter description, and it adds no format or syntax detail for ticker or date that the schema does not already carry.

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 ('Return every model's final portfolio decision') plus the exact scope: one ticker, newest or chosen analysis date, with the fields enumerated. It also explicitly distinguishes itself from read_research_report, so an agent can tell the two apart without opening 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 Guidelines4/5

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

The final sentence routes reasoning requests to read_research_report, and 'Set includePrevious to compare...' gives a clear condition for that flag. It lacks an explicit statement of when this tool should be preferred over siblings like get_research_signals, so it falls short of the full when/when-not/alternatives bar.

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

get_research_signalsBuy research signalsAInspect

Return the latest final portfolio decision per ticker as structured JSON, including report dates, models, source URLs and summaries. Optional tickers and since filters; ten-minute cache. Costs $0.01 USD per call by default via x402 payments inside MCP; the payment challenge gives the current price. Free sample: /api/research/signals/sample.

NameRequiredDescriptionDefault
sinceNoInclusive minimum analysis date, a valid YYYY-MM-DD date. Omit for all dates.
tickersNo1–100 comma-separated uppercase ticker symbols, e.g. NVDA,AAPL. Omit for all tickers.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the paid nature of the call ($0.01 USD default via x402), that the payment challenge carries the live price, a ten-minute cache, and a free sample path — critical context that explains why readOnlyHint is false. It stops short of saying whether failed or empty responses are still billed, or any rate limit.

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 dense sentences, front-loaded with what is returned before filters, cost, and the sample pointer. Almost nothing is wasted, though the trailing sample URL is slightly tacked on rather than integrated into the payment 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?

An output schema exists, so return values need not be explained, and the description still covers filters, caching, and the payment flow. It is nearly complete for a paid read endpoint; only failure/empty-result charging behavior and sibling routing are 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 100%, so both parameters are already fully documented with patterns and omit-behavior in the schema. The description only restates 'Optional tickers and since filters' without adding syntax or edge-case meaning, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Return the latest final portfolio decision per ticker as structured JSON') and enumerates the payload fields (report dates, models, source URLs, summaries). It is clear what the tool does, but it never names or contrasts the closest sibling, get_research_decisions, so the agent must infer the distinction between 'signals' and 'decisions' itself.

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

Usage Guidelines3/5

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

Usage is only implied: the optional tickers/since filters and the free sample endpoint hint at how to explore or scope calls, but there is no explicit 'use this when…' or 'prefer X instead'. With siblings like get_research_decisions and read_research_report present, the absence of routing guidance leaves a real gap.

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

get_ticker_indicatorsGet ticker indicatorsA
Read-onlyIdempotent
Inspect

Return latest factor and daily/weekly TD Sequential readings for one Yahoo Finance symbol, with session, price, rules, sources and historical index evidence. Reuses /api/market/indicators?ticker=; no chart histories. Stock implied volatility and variance risk premium are null; VIX term structure, credit and yield curve are shared market context. Evidence is not validated single-stock returns. Signals are rule readings, not forecasts or investment advice; the session may still be open. Each reading includes the previous session's value and signal.

NameRequiredDescriptionDefault
tickerYesYahoo Finance symbol, case-insensitive, 1–20 characters after trimming: letters, digits, . - = ^; e.g. NVDA, BRK-B or 0700.HK.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior5/5

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

Annotations already establish readOnly, idempotent, openWorld, and non-destructive, but the description goes well beyond them: it discloses null stock IV/VRP values, shared market context fields, the lack of chart histories, unvalidated evidence, non-forecast signal semantics, and the possibility of an open session. This is exactly the behavioral context an agent needs before relying on the output.

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 return content is front-loaded, followed by caveats and limitations; every sentence carries non-trivial information. It is semicolon-dense and a little hard to scan, but not padded with 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?

Given a single required parameter, full schema coverage, output schema, and rich annotations, the description is complete enough to call and interpret the tool. It covers nulls, shared context, evidence limits, and signal interpretation, with no material omissions for a read-only indicator fetch.

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 single ticker parameter has 100% schema description coverage, including pattern, case-insensitivity, length, allowed characters, and examples. The description adds only 'one Yahoo Finance symbol,' which is already implied, so baseline 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb and resource: return latest factor and daily/weekly TD Sequential readings for one Yahoo Finance symbol. The scope 'for one Yahoo Finance symbol' distinguishes it from a market-wide tool, but it never names the sibling get_market_indicators, so an agent must infer 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 Guidelines3/5

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

Usage is implied by 'for one Yahoo Finance symbol' and by the note that it reuses /api/market/indicators?ticker=. There is no explicit when-to-use or when-not-to-use guidance and no named alternative, leaving sibling selection to inference.

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

list_pagesList public pagesA
Read-onlyIdempotent
Inspect

Return public Altair page paths, URLs, titles and descriptions. Use this to discover pages before read_page.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds only that the pages are 'public' and enumerates the returned fields, which the output schema also covers, so it contributes little behavioral 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?

Two short sentences, zero waste, and the payload description is front-loaded ahead of the usage hint. 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 zero-parameter, read-only listing tool with an output schema already documenting the return shape, the description supplies everything needed: what is listed, the public scope, and the natural follow-up call.

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 tool takes zero parameters, which is the baseline-4 case; there is nothing for the description to disambiguate. The description correctly implies no filtering or input is required.

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

Purpose4/5

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

States a specific verb and resource ('Return public Altair page paths, URLs, titles and descriptions'), so the agent knows exactly what comes back. It differentiates the primary sibling by naming read_page, but does not distinguish itself from get_research_signals or list_research_reports.

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?

'Use this to discover pages before read_page' gives a clear sequencing context and names the follow-up tool. It does not state any exclusion conditions or say when a different listing tool should be chosen instead.

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

list_research_reportsList research reportsA
Read-onlyIdempotent
Inspect

Return published TradingAgents report metadata and URLs newest first, the matching total and counts for all tickers. Use this to find reports before read_research_report, optionally filter by ticker and page with limit and offset.

NameRequiredDescriptionDefault
limitNoMaximum reports to return per call; integer from 1 to 100, default 20.
offsetNoNumber of matching reports to skip, e.g. 20 for the next page with limit 20; integer from 0 to 9007199254740991, default 0.
tickerNoStock ticker, e.g. NVDA; case-insensitive, 1–32 characters after trimming. Omit to list all tickers.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world. The description adds value beyond that: results are restricted to published reports, sorted newest first, and the response includes a matching total plus per-ticker counts. It does not discuss rate limits or result size ceilings, but ordering and scope are useful disclosures.

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 front-loaded sentences with no filler; the purpose and ordering come first, then the workflow and optional filters. The clause 'the matching total and counts for all tickers' is slightly dense but still earns its place by describing the return shape.

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 an output schema present, return-value detail is not required, and the description still covers purpose, ordering, filtering, paging and the relationship to read_research_report. Nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so limit, offset and ticker are already fully documented with ranges and defaults. The description only restates that ticker filtering and limit/offset paging are optional, adding no syntax or edge-case guidance beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Return published TradingAgents report metadata and URLs'), specifies ordering (newest first), and names the sibling tool read_research_report as the follow-up step, so an agent can separate listing metadata from reading full reports without opening 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 Guidelines4/5

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

Explicitly says to use this to find reports before read_research_report, giving a clear discovery-then-read workflow and naming the alternative. It does not state when NOT to use it (e.g. when the report ID is already known), but the routing context is clear.

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

read_pageRead a public pageA
Read-onlyIdempotent
Inspect

Return a public Altair page's full markdown with its path, URL, title and description. Use a path from list_pages when you need the page content.

NameRequiredDescriptionDefault
pathYesSite path from list_pages, e.g. /indicators; 1–2048 characters.

Output Schema

NameRequiredDescription

No output parameters

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, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description's one added behavioral fact is the 'public' qualifier, implying only public pages are reachable — useful but thin; with an output schema present it need not describe return format.

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, no filler, with the purpose (what is returned) front-loaded before the usage pointer. Every clause carries 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?

A single required parameter at 100% coverage, rich annotations and an output schema mean almost nothing else needs saying. The only small gap is unstated behavior for invalid paths or pages that are not public.

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

Parameters3/5

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

Schema coverage is 100% for the single 'path' parameter, and the schema already says 'Site path from list_pages, e.g. /indicators; 1–2048 characters.' The description only restates the list_pages origin, adding no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Return a public Altair page's full markdown') and enumerates what comes back (path, URL, title, description). It implicitly separates itself from list_pages by being the content-retrieval step, but never explicitly distinguishes itself from read_research_report, the other 'read' sibling.

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?

'Use a path from list_pages when you need the page content' gives an explicit prerequisite and the condition that selects this tool over list_pages. There is no statement of when-not to use it (e.g. for non-public or report content), so it stops short of full routing guidance.

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

read_research_reportRead a research reportA
Read-onlyIdempotent
Inspect

Return a full TradingAgents report as markdown, its ticker, date, model and URL, and an informational-only disclaimer; sections cover analyst reports, research decisions, trading plans, risk management and portfolio decisions. Use a url from list_research_reports for free access without sign-in.

NameRequiredDescriptionDefault
urlYesA report url returned by list_research_reports; 1–2048 characters.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds useful context the annotations cannot convey: the response is markdown plus metadata, it carries an informational-only disclaimer, and it can be accessed unsigned when the URL comes from list_research_reports.

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, front-loaded with the return payload and then the usage instruction; little waste. The first sentence is dense and list-heavy but every clause maps to something the agent would otherwise have to discover.

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

Completeness4/5

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

With an output schema present the description need not enumerate return fields, yet it does so briefly, and it covers the one input's provenance and the auth condition. Coverage is complete for a single-parameter read tool; only the sibling routing dimension is lightly covered.

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

Parameters3/5

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

Schema coverage is 100% and the single url parameter is fully documented in the schema as 'a report url returned by list_research_reports'. The description repeats that provenance but adds no format, constraint, or edge-case detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Return a full TradingAgents report as markdown') and enumerates the payload (ticker, date, model, URL, disclaimer) and content sections. This makes it clearly distinguishable from the sibling list_research_reports, which only lists URLs.

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 tells the agent to source the url from list_research_reports and notes that doing so grants free access without sign-in, which is a real precondition. It stops short of saying when to prefer this over siblings like get_research_signals, so no explicit exclusions.

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. 2 tool updates
    • Changedget_market_indicators1 field changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "asOf": {
        -        "description": "Latest upstream quote timestamp among the three indices; not necessarily a session close.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "generatedAt": {
        -        "description": "Time this snapshot was calculated; cached responses retain this timestamp.",
        -        "type": "string"
        -      },
        -      "indicators": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "evidence": {
        -              "description": "What followed each state from 2005 to 2026 on the S&P 500 and Nasdaq-100; SOX is untested.",
        -              "type": "string"
        -            },
        -            "family": {
        -              "type": "string"
        -            },
        -            "id": {
        -              "type": "string"
        -            },
        -            "name": {
        -              "type": "string"
        -            },
        -            "readings": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "NDX": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "bands": {
        -                          "additionalProperties": false,
        -                          "description": "Bullish is checked first; any other value is neutral.",
        -                          "properties": {
        -                            "bearish": {
        -                              "anyOf": [
        -                                {
        -                                  "additionalProperties": false,
        -                                  "properties": {
        -                                    "above": {
        -                                      "type": "number"
        -                                    }
        -                                  },
        -                                  "required": [
        -                                    "above"
        -                                  ],
        -                                  "type": "object"
        -                                },
        -                                {
        -                                  "additionalProperties": false,
        -                                  "properties": {
        -                                    "below": {
        -                                      "type": "number"
        -                                    }
        -                                  },
        -                                  "required": [
        -                                    "below"
        -                                  ],
        -                                  "type": "object"
        -                                }
        -                              ],
        -                              "description": "Holds at `above` or higher, or at `below` or lower."
        -                            },
        -                            "bullish": {
        -                              "anyOf": [
        -                                {
        -                                  "additionalProperties": false,
        -                                  "properties": {
        -                                    "above": {
        -                                      "type": "number"
        -                                    }
        -                                  },
        -                                  "required": [
        -                                    "above"
        -                                  ],
        -                                  "type": "object"
        -                                },
        -                                {
        -                                  "additionalProperties": false,
        -                                  "properties": {
        -                                    "below": {
        -                                      "type": "number"
        -                                    }
        -                                  },
        -                                  "required": [
        -                                    "below"
        -                                  ],
        -                                  "type": "object"
        -                                }
        -                              ],
        -                              "description": "Holds at `above` or higher, or at `below` or lower."
        -                            }
        -                          },
        -                          "type": "object"
        -                        },
        -                        "reading": {
        -                          "description": "The value in words, as shown on /indicators.",
        -                          "type": "string"
        -                        },
        -                        "signal": {
        -                          "enum": [
        -                            "bullish",
        -                            "neutral",
        -                            "bearish"
        -                          ],
        -                          "type": "string"
        -                        },
        -                        "value": {
        -                          "description": "The quantity the bands test; a fraction when unit is percent (0.05 is 5%).",
        -                          "type": "number"
        -                        }
        -                      },
        -                      "required": [
        -                        "value",
        -                        "reading",
        -                        "signal",
        -                        "bands"
        -                      ],
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Null when a series the rule needs is missing, e.g. implied volatility for SOX."
        -                },
        -                "SOX": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "bands": {
        -                          "additionalProperties": false,
        -                          "description": "Bullish is checked first; any other value is neutral.",
        -                          "properties": {
        -                            "bearish": {
        -                              "anyOf": [
        -                                {
        -                                  "additionalProperties": false,
        -                                  "properties": {
        -                                    "above": {
        -                                      "type": "number"
        -                                    }
        -                                  },
        -                                  "required": [
        -                                    "above"
        -                                  ],
        -                                  "type": "object"
        -                                },
        -                                {
        -                                  "additionalProperties": false,
        -                                  "properties": {
        -                                    "below": {
        -                                      "type": "number"
        -                                    }
        -                                  },
        -                                  "required": [
        -                                    "below"
        -                                  ],
        -                                  "type": "object"
        -                                }
        -                              ],
        -                              "description": "Holds at `above` or higher, or at `below` or lower."
        -                            },
        -                            "bullish": {
        -                              "anyOf": [
        -                                {
        -                                  "additionalProperties": false,
        -                                  "properties": {
        -                                    "above": {
        -                                      "type": "number"
        -                                    }
        -                                  },
        -                                  "required": [
        -                                    "above"
        -                                  ],
        -                                  "type": "object"
        -                                },
        -                                {
        -                                  "additionalProperties": false,
        -                                  "properties": {
        -                                    "below": {
        -                                      "type": "number"
        -                                    }
        -                                  },
        -                                  "required": [
        -                                    "below"
        -                                  ],
        -                                  "type": "object"
        -                                }
        -                              ],
        -                              "description": "Holds at `above` or higher, or at `below` or lower."
        -                            }
        -                          },
        -                          "type": "object"
        -                        },
        -                        "reading": {
        -                          "description": "The value in words, as shown on /indicators.",
        -                          "type": "string"
        -                        },
        -                        "signal": {
        -                          "enum": [
        -                            "bullish",
        -                            "neutral",
        -                            "bearish"
        -                          ],
        -                          "type": "string"
        -                        },
        -                        "value": {
        -                          "description": "The quantity the bands test; a fraction when unit is percent (0.05 is 5%).",
        -                          "type": "number"
        -                        }
        -                      },
        -                      "required": [
        -                        "value",
        -                        "reading",
        -                        "signal",
        -                        "bands"
        -                      ],
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Null when a series the rule needs is missing, e.g. implied volatility for SOX."
        -                },
        -                "SPX": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "bands": {
        -                          "additionalProperties": false,
        -                          "description": "Bullish is checked first; any other value is neutral.",
        -                          "properties": {
        -                            "bearish": {
        -                              "anyOf": [
        -                                {
        -                                  "additionalProperties": false,
        -                                  "properties": {
        -                                    "above": {
        -                                      "type": "number"
        -                                    }
        -                                  },
        -                                  "required": [
        -                                    "above"
        -                                  ],
        -                                  "type": "object"
        -                                },
        -                                {
        -                                  "additionalProperties": false,
        -                                  "properties": {
        -                                    "below": {
        -                                      "type": "number"
        -                                    }
        -                                  },
        -                                  "required": [
        -                                    "below"
        -                                  ],
        -                                  "type": "object"
        -                                }
        -                              ],
        -                              "description": "Holds at `above` or higher, or at `below` or lower."
        -                            },
        -                            "bullish": {
        -                              "anyOf": [
        -                                {
        -                                  "additionalProperties": false,
        -                                  "properties": {
        -                                    "above": {
        -                                      "type": "number"
        -                                    }
        -                                  },
        -                                  "required": [
        -                                    "above"
        -                                  ],
        -                                  "type": "object"
        -                                },
        -                                {
        -                                  "additionalProperties": false,
        -                                  "properties": {
        -                                    "below": {
        -                                      "type": "number"
        -                                    }
        -                                  },
        -                                  "required": [
        -                                    "below"
        -                                  ],
        -                                  "type": "object"
        -                                }
        -                              ],
        -                              "description": "Holds at `above` or higher, or at `below` or lower."
        -                            }
        -                          },
        -                          "type": "object"
        -                        },
        -                        "reading": {
        -                          "description": "The value in words, as shown on /indicators.",
        -                          "type": "string"
        -                        },
        -                        "signal": {
        -                          "enum": [
        -                            "bullish",
        -                            "neutral",
        -                            "bearish"
        -                          ],
        -                          "type": "string"
        -                        },
        -                        "value": {
        -                          "description": "The quantity the bands test; a fraction when unit is percent (0.05 is 5%).",
        -                          "type": "number"
        -                        }
        -                      },
        -                      "required": [
        -                        "value",
        -                        "reading",
        -                        "signal",
        -                        "bands"
        -                      ],
        -                      "type": "object"
        -                    },
        -                    {
        -                      "type": "null"
        -                    }
        -                  ],
        -                  "description": "Null when a series the rule needs is missing, e.g. implied volatility for SOX."
        -                }
        -              },
        -              "required": [
        -                "SPX",
        -                "NDX",
        -                "SOX"
        -              ],
        -              "type": "object"
        -            },
        -            "rule": {
        -              "type": "string"
        -            },
        -            "source": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "label": {
        -                  "type": "string"
        -                },
        -                "url": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "label",
        -                "url"
        -              ],
        -              "type": "object"
        -            },
        -            "unit": {
        -              "enum": [
        -                "percent",
        -                "number"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "id",
        -            "name",
        -            "family",
        -            "unit",
        -            "rule",
        -            "source",
        -            "evidence",
        -            "readings"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "indices": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "close": {
        -              "description": "Price-only index level on that session; no dividends.",
        -              "type": "number"
        -            },
        -            "date": {
        -              "description": "Latest trading session read, which can still be open.",
        -              "type": "string"
        -            },
        -            "name": {
        -              "type": "string"
        -            },
        -            "symbol": {
        -              "enum": [
        -                "SPX",
        -                "NDX",
        -                "SOX"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "symbol",
        -            "name",
        -            "date",
        -            "close"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "generatedAt",
        -      "asOf",
        -      "indices",
        -      "indicators"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "error": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "error"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "asOf": {
        +        "description": "Latest upstream quote timestamp among the three indices; not necessarily a session close.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "generatedAt": {
        +        "description": "Time this snapshot was calculated; cached responses retain this timestamp.",
        +        "type": "string"
        +      },
        +      "indicators": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "evidence": {
        +              "description": "What followed each state from 2005 to 2026 on the S&P 500 and Nasdaq-100; SOX is untested.",
        +              "type": "string"
        +            },
        +            "family": {
        +              "type": "string"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "name": {
        +              "type": "string"
        +            },
        +            "readings": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "NDX": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "bands": {
        +                          "additionalProperties": false,
        +                          "description": "Bullish is checked first; any other value is neutral.",
        +                          "properties": {
        +                            "bearish": {
        +                              "anyOf": [
        +                                {
        +                                  "additionalProperties": false,
        +                                  "properties": {
        +                                    "above": {
        +                                      "type": "number"
        +                                    }
        +                                  },
        +                                  "required": [
        +                                    "above"
        +                                  ],
        +                                  "type": "object"
        +                                },
        +                                {
        +                                  "additionalProperties": false,
        +                                  "properties": {
        +                                    "below": {
        +                                      "type": "number"
        +                                    }
        +                                  },
        +                                  "required": [
        +                                    "below"
        +                                  ],
        +                                  "type": "object"
        +                                }
        +                              ],
        +                              "description": "Holds at `above` or higher, or at `below` or lower."
        +                            },
        +                            "bullish": {
        +                              "anyOf": [
        +                                {
        +                                  "additionalProperties": false,
        +                                  "properties": {
        +                                    "above": {
        +                                      "type": "number"
        +                                    }
        +                                  },
        +                                  "required": [
        +                                    "above"
        +                                  ],
        +                                  "type": "object"
        +                                },
        +                                {
        +                                  "additionalProperties": false,
        +                                  "properties": {
        +                                    "below": {
        +                                      "type": "number"
        +                                    }
        +                                  },
        +                                  "required": [
        +                                    "below"
        +                                  ],
        +                                  "type": "object"
        +                                }
        +                              ],
        +                              "description": "Holds at `above` or higher, or at `below` or lower."
        +                            }
        +                          },
        +                          "type": "object"
        +                        },
        +                        "previous": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "date": {
        +                                  "description": "The session before the latest.",
        +                                  "type": "string"
        +                                },
        +                                "signal": {
        +                                  "enum": [
        +                                    "bullish",
        +                                    "neutral",
        +                                    "bearish"
        +                                  ],
        +                                  "type": "string"
        +                                },
        +                                "value": {
        +                                  "type": "number"
        +                                }
        +                              },
        +                              "required": [
        +                                "date",
        +                                "value",
        +                                "signal"
        +                              ],
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "The previous session's value and signal under the same bands; null when that session has no reading."
        +                        },
        +                        "reading": {
        +                          "description": "The value in words, as shown on /indicators.",
        +                          "type": "string"
        +                        },
        +                        "signal": {
        +                          "enum": [
        +                            "bullish",
        +                            "neutral",
        +                            "bearish"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "value": {
        +                          "description": "The quantity the bands test; a fraction when unit is percent (0.05 is 5%).",
        +                          "type": "number"
        +                        }
        +                      },
        +                      "required": [
        +                        "value",
        +                        "reading",
        +                        "signal",
        +                        "bands",
        +                        "previous"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Null when a series the rule needs is missing, e.g. implied volatility for SOX."
        +                },
        +                "SOX": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "bands": {
        +                          "additionalProperties": false,
        +                          "description": "Bullish is checked first; any other value is neutral.",
        +                          "properties": {
        +                            "bearish": {
        +                              "anyOf": [
        +                                {
        +                                  "additionalProperties": false,
        +                                  "properties": {
        +                                    "above": {
        +                                      "type": "number"
        +                                    }
        +                                  },
        +                                  "required": [
        +                                    "above"
        +                                  ],
        +                                  "type": "object"
        +                                },
        +                                {
        +                                  "additionalProperties": false,
        +                                  "properties": {
        +                                    "below": {
        +                                      "type": "number"
        +                                    }
        +                                  },
        +                                  "required": [
        +                                    "below"
        +                                  ],
        +                                  "type": "object"
        +                                }
        +                              ],
        +                              "description": "Holds at `above` or higher, or at `below` or lower."
        +                            },
        +                            "bullish": {
        +                              "anyOf": [
        +                                {
        +                                  "additionalProperties": false,
        +                                  "properties": {
        +                                    "above": {
        +                                      "type": "number"
        +                                    }
        +                                  },
        +                                  "required": [
        +                                    "above"
        +                                  ],
        +                                  "type": "object"
        +                                },
        +                                {
        +                                  "additionalProperties": false,
        +                                  "properties": {
        +                                    "below": {
        +                                      "type": "number"
        +                                    }
        +                                  },
        +                                  "required": [
        +                                    "below"
        +                                  ],
        +                                  "type": "object"
        +                                }
        +                              ],
        +                              "description": "Holds at `above` or higher, or at `below` or lower."
        +                            }
        +                          },
        +                          "type": "object"
        +                        },
        +                        "previous": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "date": {
        +                                  "description": "The session before the latest.",
        +                                  "type": "string"
        +                                },
        +                                "signal": {
        +                                  "enum": [
        +                                    "bullish",
        +                                    "neutral",
        +                                    "bearish"
        +                                  ],
        +                                  "type": "string"
        +                                },
        +                                "value": {
        +                                  "type": "number"
        +                                }
        +                              },
        +                              "required": [
        +                                "date",
        +                                "value",
        +                                "signal"
        +                              ],
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "The previous session's value and signal under the same bands; null when that session has no reading."
        +                        },
        +                        "reading": {
        +                          "description": "The value in words, as shown on /indicators.",
        +                          "type": "string"
        +                        },
        +                        "signal": {
        +                          "enum": [
        +                            "bullish",
        +                            "neutral",
        +                            "bearish"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "value": {
        +                          "description": "The quantity the bands test; a fraction when unit is percent (0.05 is 5%).",
        +                          "type": "number"
        +                        }
        +                      },
        +                      "required": [
        +                        "value",
        +                        "reading",
        +                        "signal",
        +                        "bands",
        +                        "previous"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Null when a series the rule needs is missing, e.g. implied volatility for SOX."
        +                },
        +                "SPX": {
        +                  "anyOf": [
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "bands": {
        +                          "additionalProperties": false,
        +                          "description": "Bullish is checked first; any other value is neutral.",
        +                          "properties": {
        +                            "bearish": {
        +                              "anyOf": [
        +                                {
        +                                  "additionalProperties": false,
        +                                  "properties": {
        +                                    "above": {
        +                                      "type": "number"
        +                                    }
        +                                  },
        +                                  "required": [
        +                                    "above"
        +                                  ],
        +                                  "type": "object"
        +                                },
        +                                {
        +                                  "additionalProperties": false,
        +                                  "properties": {
        +                                    "below": {
        +                                      "type": "number"
        +                                    }
        +                                  },
        +                                  "required": [
        +                                    "below"
        +                                  ],
        +                                  "type": "object"
        +                                }
        +                              ],
        +                              "description": "Holds at `above` or higher, or at `below` or lower."
        +                            },
        +                            "bullish": {
        +                              "anyOf": [
        +                                {
        +                                  "additionalProperties": false,
        +                                  "properties": {
        +                                    "above": {
        +                                      "type": "number"
        +                                    }
        +                                  },
        +                                  "required": [
        +                                    "above"
        +                                  ],
        +                                  "type": "object"
        +                                },
        +                                {
        +                                  "additionalProperties": false,
        +                                  "properties": {
        +                                    "below": {
        +                                      "type": "number"
        +                                    }
        +                                  },
        +                                  "required": [
        +                                    "below"
        +                                  ],
        +                                  "type": "object"
        +                                }
        +                              ],
        +                              "description": "Holds at `above` or higher, or at `below` or lower."
        +                            }
        +                          },
        +                          "type": "object"
        +                        },
        +                        "previous": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "date": {
        +                                  "description": "The session before the latest.",
        +                                  "type": "string"
        +                                },
        +                                "signal": {
        +                                  "enum": [
        +                                    "bullish",
        +                                    "neutral",
        +                                    "bearish"
        +                                  ],
        +                                  "type": "string"
        +                                },
        +                                "value": {
        +                                  "type": "number"
        +                                }
        +                              },
        +                              "required": [
        +                                "date",
        +                                "value",
        +                                "signal"
        +                              ],
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ],
        +                          "description": "The previous session's value and signal under the same bands; null when that session has no reading."
        +                        },
        +                        "reading": {
        +                          "description": "The value in words, as shown on /indicators.",
        +                          "type": "string"
        +                        },
        +                        "signal": {
        +                          "enum": [
        +                            "bullish",
        +                            "neutral",
        +                            "bearish"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "value": {
        +                          "description": "The quantity the bands test; a fraction when unit is percent (0.05 is 5%).",
        +                          "type": "number"
        +                        }
        +                      },
        +                      "required": [
        +                        "value",
        +                        "reading",
        +                        "signal",
        +                        "bands",
        +                        "previous"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "description": "Null when a series the rule needs is missing, e.g. implied volatility for SOX."
        +                }
        +              },
        +              "required": [
        +                "SPX",
        +                "NDX",
        +                "SOX"
        +              ],
        +              "type": "object"
        +            },
        +            "rule": {
        +              "type": "string"
        +            },
        +            "source": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "label": {
        +                  "type": "string"
        +                },
        +                "url": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "label",
        +                "url"
        +              ],
        +              "type": "object"
        +            },
        +            "unit": {
        +              "enum": [
        +                "percent",
        +                "number"
        +              ],
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "name",
        +            "family",
        +            "unit",
        +            "rule",
        +            "source",
        +            "evidence",
        +            "readings"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "indices": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "close": {
        +              "description": "Price-only index level on that session; no dividends.",
        +              "type": "number"
        +            },
        +            "date": {
        +              "description": "Latest trading session read, which can still be open.",
        +              "type": "string"
        +            },
        +            "name": {
        +              "type": "string"
        +            },
        +            "symbol": {
        +              "enum": [
        +                "SPX",
        +                "NDX",
        +                "SOX"
        +              ],
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "symbol",
        +            "name",
        +            "date",
        +            "close"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "generatedAt",
        +      "asOf",
        +      "indices",
        +      "indicators"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "error": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "error"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedget_ticker_indicators1 field changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "asOf": {
        -        "description": "Latest upstream quote timestamp; not necessarily a session close.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "disclaimer": {
        -        "type": "string"
        -      },
        -      "generatedAt": {
        -        "description": "Time this snapshot was calculated.",
        -        "type": "string"
        -      },
        -      "indicators": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "evidence": {
        -              "description": "Historical S&P 500 and Nasdaq-100 evidence, not validated returns for this instrument.",
        -              "type": "string"
        -            },
        -            "family": {
        -              "type": "string"
        -            },
        -            "id": {
        -              "type": "string"
        -            },
        -            "name": {
        -              "type": "string"
        -            },
        -            "reading": {
        -              "anyOf": [
        -                {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "bands": {
        -                      "additionalProperties": false,
        -                      "description": "Bullish is checked first; any other value is neutral.",
        -                      "properties": {
        -                        "bearish": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "above": {
        -                                  "type": "number"
        -                                }
        -                              },
        -                              "required": [
        -                                "above"
        -                              ],
        -                              "type": "object"
        -                            },
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "below": {
        -                                  "type": "number"
        -                                }
        -                              },
        -                              "required": [
        -                                "below"
        -                              ],
        -                              "type": "object"
        -                            }
        -                          ],
        -                          "description": "Holds at `above` or higher, or at `below` or lower."
        -                        },
        -                        "bullish": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "above": {
        -                                  "type": "number"
        -                                }
        -                              },
        -                              "required": [
        -                                "above"
        -                              ],
        -                              "type": "object"
        -                            },
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "below": {
        -                                  "type": "number"
        -                                }
        -                              },
        -                              "required": [
        -                                "below"
        -                              ],
        -                              "type": "object"
        -                            }
        -                          ],
        -                          "description": "Holds at `above` or higher, or at `below` or lower."
        -                        }
        -                      },
        -                      "type": "object"
        -                    },
        -                    "reading": {
        -                      "description": "The value in words, as shown on /indicators.",
        -                      "type": "string"
        -                    },
        -                    "signal": {
        -                      "enum": [
        -                        "bullish",
        -                        "neutral",
        -                        "bearish"
        -                      ],
        -                      "type": "string"
        -                    },
        -                    "value": {
        -                      "description": "The quantity the bands test; a fraction when unit is percent (0.05 is 5%).",
        -                      "type": "number"
        -                    }
        -                  },
        -                  "required": [
        -                    "value",
        -                    "reading",
        -                    "signal",
        -                    "bands"
        -                  ],
        -                  "type": "object"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "Null when a series the rule needs is missing, e.g. implied volatility for SOX."
        -            },
        -            "rule": {
        -              "type": "string"
        -            },
        -            "source": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "label": {
        -                  "type": "string"
        -                },
        -                "url": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "label",
        -                "url"
        -              ],
        -              "type": "object"
        -            },
        -            "unit": {
        -              "enum": [
        -                "percent",
        -                "number"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "id",
        -            "name",
        -            "family",
        -            "unit",
        -            "rule",
        -            "source",
        -            "evidence",
        -            "reading"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "instrument": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "close": {
        -            "description": "Latest split-adjusted daily price; not a guaranteed final closing quote.",
        -            "type": "number"
        -          },
        -          "date": {
        -            "description": "Latest trading session, which can still be open.",
        -            "type": "string"
        -          },
        -          "name": {
        -            "type": "string"
        -          },
        -          "symbol": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "symbol",
        -          "name",
        -          "date",
        -          "close"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "generatedAt",
        -      "asOf",
        -      "instrument",
        -      "indicators",
        -      "disclaimer"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "error": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "error"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "asOf": {
        +        "description": "Latest upstream quote timestamp; not necessarily a session close.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "disclaimer": {
        +        "type": "string"
        +      },
        +      "generatedAt": {
        +        "description": "Time this snapshot was calculated.",
        +        "type": "string"
        +      },
        +      "indicators": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "evidence": {
        +              "description": "Historical S&P 500 and Nasdaq-100 evidence, not validated returns for this instrument.",
        +              "type": "string"
        +            },
        +            "family": {
        +              "type": "string"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "name": {
        +              "type": "string"
        +            },
        +            "reading": {
        +              "anyOf": [
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "bands": {
        +                      "additionalProperties": false,
        +                      "description": "Bullish is checked first; any other value is neutral.",
        +                      "properties": {
        +                        "bearish": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "above": {
        +                                  "type": "number"
        +                                }
        +                              },
        +                              "required": [
        +                                "above"
        +                              ],
        +                              "type": "object"
        +                            },
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "below": {
        +                                  "type": "number"
        +                                }
        +                              },
        +                              "required": [
        +                                "below"
        +                              ],
        +                              "type": "object"
        +                            }
        +                          ],
        +                          "description": "Holds at `above` or higher, or at `below` or lower."
        +                        },
        +                        "bullish": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "above": {
        +                                  "type": "number"
        +                                }
        +                              },
        +                              "required": [
        +                                "above"
        +                              ],
        +                              "type": "object"
        +                            },
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "below": {
        +                                  "type": "number"
        +                                }
        +                              },
        +                              "required": [
        +                                "below"
        +                              ],
        +                              "type": "object"
        +                            }
        +                          ],
        +                          "description": "Holds at `above` or higher, or at `below` or lower."
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    "previous": {
        +                      "anyOf": [
        +                        {
        +                          "additionalProperties": false,
        +                          "properties": {
        +                            "date": {
        +                              "description": "The session before the latest.",
        +                              "type": "string"
        +                            },
        +                            "signal": {
        +                              "enum": [
        +                                "bullish",
        +                                "neutral",
        +                                "bearish"
        +                              ],
        +                              "type": "string"
        +                            },
        +                            "value": {
        +                              "type": "number"
        +                            }
        +                          },
        +                          "required": [
        +                            "date",
        +                            "value",
        +                            "signal"
        +                          ],
        +                          "type": "object"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "description": "The previous session's value and signal under the same bands; null when that session has no reading."
        +                    },
        +                    "reading": {
        +                      "description": "The value in words, as shown on /indicators.",
        +                      "type": "string"
        +                    },
        +                    "signal": {
        +                      "enum": [
        +                        "bullish",
        +                        "neutral",
        +                        "bearish"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "value": {
        +                      "description": "The quantity the bands test; a fraction when unit is percent (0.05 is 5%).",
        +                      "type": "number"
        +                    }
        +                  },
        +                  "required": [
        +                    "value",
        +                    "reading",
        +                    "signal",
        +                    "bands",
        +                    "previous"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Null when a series the rule needs is missing, e.g. implied volatility for SOX."
        +            },
        +            "rule": {
        +              "type": "string"
        +            },
        +            "source": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "label": {
        +                  "type": "string"
        +                },
        +                "url": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "label",
        +                "url"
        +              ],
        +              "type": "object"
        +            },
        +            "unit": {
        +              "enum": [
        +                "percent",
        +                "number"
        +              ],
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "name",
        +            "family",
        +            "unit",
        +            "rule",
        +            "source",
        +            "evidence",
        +            "reading"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "instrument": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "close": {
        +            "description": "Latest split-adjusted daily price; not a guaranteed final closing quote.",
        +            "type": "number"
        +          },
        +          "date": {
        +            "description": "Latest trading session, which can still be open.",
        +            "type": "string"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "symbol": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "symbol",
        +          "name",
        +          "date",
        +          "close"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "generatedAt",
        +      "asOf",
        +      "instrument",
        +      "indicators",
        +      "disclaimer"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "error": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "error"
        +    ],
        +    "type": "object"
        +  }
        +]
  2. 1 tool update
    • Addedget_ticker_indicators
  3. 1 tool update
    • Changedget_research_decisions2 fields changed
      • addedInput schema / properties / includePrevious
        Added value: +{
        +  "description": "Include each selected model's rating comparison with its nearest strictly earlier analysis date. Default false; not a comparison across models or reruns of the same date.",
        +  "type": "boolean"
        +}
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "date": {
        -        "description": "Analysis date shared by every decision.",
        -        "type": "string"
        -      },
        -      "decisions": {
        -        "description": "Newest run of each model on that date.",
        -        "items": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "confidence": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "currentPrice": {
        -                  "description": "Report-time price as written, not a live quote.",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "model": {
        -                  "type": "string"
        -                },
        -                "priceTarget": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "rating": {
        -                  "description": "Final portfolio rating as written, e.g. Overweight; null if the report states none.",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "summary": {
        -                  "description": "The portfolio manager's executive summary.",
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "timeHorizon": {
        -                  "type": [
        -                    "string",
        -                    "null"
        -                  ]
        -                },
        -                "url": {
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "model",
        -                "url",
        -                "rating",
        -                "currentPrice",
        -                "priceTarget",
        -                "confidence",
        -                "timeHorizon",
        -                "summary"
        -              ],
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "error": {
        -                  "type": "string"
        -                },
        -                "model": {
        -                  "type": "string"
        -                },
        -                "url": {
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "model",
        -                "url",
        -                "error"
        -              ],
        -              "type": "object"
        -            }
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "disclaimer": {
        -        "type": "string"
        -      },
        -      "ticker": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "ticker",
        -      "date",
        -      "decisions",
        -      "disclaimer"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "error": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "error"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "comparisons": {
        +        "description": "Only returned when includePrevious is true. Each model on the selected date versus its nearest strictly earlier analysis date; no model-name aliases.",
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "current": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "date": {
        +                  "type": "string"
        +                },
        +                "error": {
        +                  "type": "string"
        +                },
        +                "rating": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "url": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "date",
        +                "url",
        +                "rating"
        +              ],
        +              "type": "object"
        +            },
        +            "model": {
        +              "type": "string"
        +            },
        +            "previous": {
        +              "anyOf": [
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "date": {
        +                      "type": "string"
        +                    },
        +                    "error": {
        +                      "type": "string"
        +                    },
        +                    "rating": {
        +                      "type": [
        +                        "string",
        +                        "null"
        +                      ]
        +                    },
        +                    "url": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "date",
        +                    "url",
        +                    "rating"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "status": {
        +              "description": "Rating-only comparison after case/whitespace normalization; missing ratings or unreadable reports are unavailable, not unchanged.",
        +              "enum": [
        +                "changed",
        +                "unchanged",
        +                "no_previous",
        +                "unavailable"
        +              ],
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "model",
        +            "current",
        +            "previous",
        +            "status"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "date": {
        +        "description": "Analysis date shared by every decision.",
        +        "type": "string"
        +      },
        +      "decisions": {
        +        "description": "Newest run of each model on that date.",
        +        "items": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "confidence": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "currentPrice": {
        +                  "description": "Report-time price as written, not a live quote.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "model": {
        +                  "type": "string"
        +                },
        +                "priceTarget": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "rating": {
        +                  "description": "Final portfolio rating as written, e.g. Overweight; null if the report states none.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "summary": {
        +                  "description": "The portfolio manager's executive summary.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "timeHorizon": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "url": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "model",
        +                "url",
        +                "rating",
        +                "currentPrice",
        +                "priceTarget",
        +                "confidence",
        +                "timeHorizon",
        +                "summary"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "error": {
        +                  "type": "string"
        +                },
        +                "model": {
        +                  "type": "string"
        +                },
        +                "url": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "model",
        +                "url",
        +                "error"
        +              ],
        +              "type": "object"
        +            }
        +          ]
        +        },
        +        "type": "array"
        +      },
        +      "disclaimer": {
        +        "type": "string"
        +      },
        +      "ticker": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "ticker",
        +      "date",
        +      "decisions",
        +      "disclaimer"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "error": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "error"
        +    ],
        +    "type": "object"
        +  }
        +]
  4. 1 tool update
    • Addedget_market_indicators
  5. 2 tool updates
    • Changedget_market_breadth1 field changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "asOf": {
        -        "description": "Latest upstream quote timestamp among priced S&P 500 stocks; not necessarily the latest breadth session date.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "constituents": {
        -        "maximum": 9007199254740991,
        -        "minimum": 0,
        -        "type": "integer"
        -      },
        -      "generatedAt": {
        -        "description": "Time this snapshot was calculated; cached responses retain this timestamp.",
        -        "type": "string"
        -      },
        -      "history": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "all": {
        -              "description": "Percentage of eligible S&P 500 stocks above their 20-session simple moving average.",
        -              "maximum": 100,
        -              "minimum": 0,
        -              "type": "integer"
        -            },
        -            "date": {
        -              "description": "Trading-session date; use this, not asOf, to identify the reading's session.",
        -              "type": "string"
        -            },
        -            "nasdaq100": {
        -              "anyOf": [
        -                {
        -                  "maximum": 100,
        -                  "minimum": 0,
        -                  "type": "integer"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "Nasdaq-100 percentage above SMA20; null when coverage is insufficient."
        -            },
        -            "soxx": {
        -              "anyOf": [
        -                {
        -                  "maximum": 100,
        -                  "minimum": 0,
        -                  "type": "integer"
        -                },
        -                {
        -                  "type": "null"
        -                }
        -              ],
        -              "description": "SOXX holdings percentage above SMA20; null when coverage is insufficient."
        -            },
        -            "total": {
        -              "description": "Sum of the eleven rounded sector percentages; not a stock count or a percentage.",
        -              "maximum": 1100,
        -              "minimum": 0,
        -              "type": "integer"
        -            }
        -          },
        -          "required": [
        -            "date",
        -            "total",
        -            "all",
        -            "nasdaq100",
        -            "soxx"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "index": {
        -        "type": "string"
        -      },
        -      "latest": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "all": {
        -            "description": "Percentage of eligible S&P 500 stocks above their 20-session simple moving average.",
        -            "maximum": 100,
        -            "minimum": 0,
        -            "type": "integer"
        -          },
        -          "benchmarks": {
        -            "additionalProperties": {
        -              "type": [
        -                "number",
        -                "null"
        -              ]
        -            },
        -            "propertyNames": {
        -              "type": "string"
        -            },
        -            "type": "object"
        -          },
        -          "date": {
        -            "description": "Trading-session date; use this, not asOf, to identify the reading's session.",
        -            "type": "string"
        -          },
        -          "nasdaq100": {
        -            "anyOf": [
        -              {
        -                "maximum": 100,
        -                "minimum": 0,
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Nasdaq-100 percentage above SMA20; null when coverage is insufficient."
        -          },
        -          "sectors": {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "above": {
        -                  "description": "Percentage of eligible sector stocks above their 20-session simple moving average.",
        -                  "maximum": 100,
        -                  "minimum": 0,
        -                  "type": "integer"
        -                },
        -                "code": {
        -                  "type": "string"
        -                },
        -                "name": {
        -                  "type": "string"
        -                },
        -                "stocks": {
        -                  "maximum": 9007199254740991,
        -                  "minimum": 0,
        -                  "type": "integer"
        -                }
        -              },
        -              "required": [
        -                "code",
        -                "name",
        -                "stocks",
        -                "above"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "soxx": {
        -            "anyOf": [
        -              {
        -                "maximum": 100,
        -                "minimum": 0,
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "SOXX holdings percentage above SMA20; null when coverage is insufficient."
        -          },
        -          "total": {
        -            "description": "Sum of the eleven rounded sector percentages; not a stock count or a percentage.",
        -            "maximum": 1100,
        -            "minimum": 0,
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "date",
        -          "total",
        -          "all",
        -          "nasdaq100",
        -          "soxx",
        -          "sectors",
        -          "benchmarks"
        -        ],
        -        "type": "object"
        -      },
        -      "movingAverage": {
        -        "maximum": 9007199254740991,
        -        "minimum": 1,
        -        "type": "integer"
        -      },
        -      "priced": {
        -        "maximum": 9007199254740991,
        -        "minimum": 0,
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "generatedAt",
        -      "asOf",
        -      "index",
        -      "movingAverage",
        -      "constituents",
        -      "priced",
        -      "latest",
        -      "history"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "error": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "error"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "asOf": {
        +        "description": "Latest upstream quote timestamp among priced S&P 500 stocks; not necessarily the latest breadth session date.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "constituents": {
        +        "maximum": 9007199254740991,
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "generatedAt": {
        +        "description": "Time this snapshot was calculated; cached responses retain this timestamp.",
        +        "type": "string"
        +      },
        +      "history": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "all": {
        +              "description": "Percentage of eligible S&P 500 stocks above their 20-session simple moving average.",
        +              "maximum": 100,
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "date": {
        +              "description": "Trading-session date; use this, not asOf, to identify the reading's session.",
        +              "type": "string"
        +            },
        +            "nasdaq100": {
        +              "anyOf": [
        +                {
        +                  "maximum": 100,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Nasdaq-100 percentage above SMA20; null when coverage is insufficient."
        +            },
        +            "sox": {
        +              "anyOf": [
        +                {
        +                  "maximum": 100,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "PHLX Semiconductor constituent percentage above SMA20; null when coverage is insufficient."
        +            },
        +            "total": {
        +              "description": "Sum of the eleven rounded sector percentages; not a stock count or a percentage.",
        +              "maximum": 1100,
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "date",
        +            "total",
        +            "all",
        +            "nasdaq100",
        +            "sox"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "index": {
        +        "type": "string"
        +      },
        +      "latest": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "all": {
        +            "description": "Percentage of eligible S&P 500 stocks above their 20-session simple moving average.",
        +            "maximum": 100,
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          "benchmarks": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "NDX": {
        +                "description": "Nasdaq-100 price index level (^NDX); no dividends.",
        +                "type": [
        +                  "number",
        +                  "null"
        +                ]
        +              },
        +              "SOX": {
        +                "description": "PHLX Semiconductor price index level (^SOX); no dividends.",
        +                "type": [
        +                  "number",
        +                  "null"
        +                ]
        +              },
        +              "SPX": {
        +                "description": "S&P 500 price index level (^GSPC); no dividends.",
        +                "type": [
        +                  "number",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "required": [
        +              "SPX",
        +              "NDX",
        +              "SOX"
        +            ],
        +            "type": "object"
        +          },
        +          "date": {
        +            "description": "Trading-session date; use this, not asOf, to identify the reading's session.",
        +            "type": "string"
        +          },
        +          "nasdaq100": {
        +            "anyOf": [
        +              {
        +                "maximum": 100,
        +                "minimum": 0,
        +                "type": "integer"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Nasdaq-100 percentage above SMA20; null when coverage is insufficient."
        +          },
        +          "sectors": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "above": {
        +                  "description": "Percentage of eligible sector stocks above their 20-session simple moving average.",
        +                  "maximum": 100,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "code": {
        +                  "type": "string"
        +                },
        +                "name": {
        +                  "type": "string"
        +                },
        +                "stocks": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "code",
        +                "name",
        +                "stocks",
        +                "above"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "sox": {
        +            "anyOf": [
        +              {
        +                "maximum": 100,
        +                "minimum": 0,
        +                "type": "integer"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "PHLX Semiconductor constituent percentage above SMA20; null when coverage is insufficient."
        +          },
        +          "total": {
        +            "description": "Sum of the eleven rounded sector percentages; not a stock count or a percentage.",
        +            "maximum": 1100,
        +            "minimum": 0,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "date",
        +          "total",
        +          "all",
        +          "nasdaq100",
        +          "sox",
        +          "sectors",
        +          "benchmarks"
        +        ],
        +        "type": "object"
        +      },
        +      "movingAverage": {
        +        "maximum": 9007199254740991,
        +        "minimum": 1,
        +        "type": "integer"
        +      },
        +      "priced": {
        +        "maximum": 9007199254740991,
        +        "minimum": 0,
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "generatedAt",
        +      "asOf",
        +      "index",
        +      "movingAverage",
        +      "constituents",
        +      "priced",
        +      "latest",
        +      "history"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "error": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "error"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Addedget_research_decisions
  6. 1 tool update
    • Addedget_market_breadth
  7. 2 tool updates
    • Removedget_service
    • Changedread_page1 field changed
      • changedInput schema / properties / path / description
        Previous value: -"Site path from list_pages, e.g. /services/pet-sitting; 1–2048 characters."New value: +"Site path from list_pages, e.g. /indicators; 1–2048 characters."
  8. 1 tool update
    • Changedget_research_signals2 fields changed
      • addedInput schema / properties / tickers / maxLength
        Added value: +3299
      • changedInput schema / properties / tickers / pattern
        Previous value: -"^[A-Z0-9][A-Z0-9.^-]{0,31}(,[A-Z0-9][A-Z0-9.^-]{0,31}){0,99}$"New value: +"^[A-Z0-9][A-Z0-9.^\\-]{0,31}(,[A-Z0-9][A-Z0-9.^\\-]{0,31})*$"
  9. 6 tool updates
    • First observedget_research_signals
    • First observedget_service
    • First observedlist_pages
    • First observedlist_research_reports
    • First observedread_page
    • First observedread_research_report

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that exposes 16 free investment-research signals (insider trades, SEC filings, short data, and live quotes) to any MCP-compatible LLM.
    63 npm
    103
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Market intelligence MCP server enabling AI agents to buy crypto sentiment reads, divergence verdicts, and analyst answers via pay-per-call x402 micropayments on Base.
    23
    638 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    AI-powered financial intelligence for autonomous trading agents. 9 MCP tools for real-time trading signals, risk index, market regime detection, stock analysis, commodity scoring, sector radar, and geopolitical intelligence briefings.
    13
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources