Skip to main content
Glama

Server Details

Live TipRanks market data: analyst ratings, Smart Score, technicals, options, portfolios.

Ownership verified
Status
Healthy
Uptime
100.0% over 73 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.6/5.0

Scored across 71 tools

Disambiguation3/5

Most tools are separable by asset class and function, but several near-neighbors overlap: ETF analysis vs ETF forecast, best-performing experts vs top hedge fund managers, and all-quotes vs single-quote tools for crypto/forex. The descriptions usually clarify the intended use, but with 71 tools an agent must read carefully to avoid misselection.

Naming Consistency4/5

The set overwhelmingly follows a snake_case `get_*` convention, with readable noun phrases for most tools. Minor deviations exist, such as `list_my_portfolios`, plus singular/plural inconsistency across quote tools (`get_crypto_quote` vs `get_all_crypto_quotes`), but the pattern remains largely predictable.

Tool Count1/5

At 71 tools this is an extremely large surface for an agent to navigate, even for a broad financial-data platform. The many quote/historical/calendar/news variants are individually justified, but the overall count creates substantial cognitive load and raises misselection risk.

Completeness4/5

The surface is very comprehensive across stocks, ETFs, crypto, forex, commodities, indices, options, news, calendars, analysts, holdings, sentiment, and portfolio analytics. Minor gaps remain, including no general stock screener/fundamental filter, no full stock OHLC history, and acknowledged absence of options greeks/IV and raw earnings transcripts.

Available Tools

71 tools
get_ai_stock_analysisA
Read-onlyIdempotent
Inspect

TipRanks AI Stock Analysis — the 0-100 AI score for one or more stocks.

Six frontier models (OpenAI, Anthropic, Gemini, xAI, DeepSeek, Perplexity)
research each covered stock independently. Every model returns its own
0-100 score, rating (outperform / neutral / underperform), price target,
and a weighted factor breakdown across financial performance, technical
analysis, valuation, earnings call and corporate events.

Use for: "what's the AI score for NVDA", "AI rating on my watchlist",
"compare the AI scores of AAPL, MSFT and NVDA", "why do the models
disagree on Tesla".

Pass every symbol in one call — a multi-ticker call returns one compact row
per ticker, which is what a watchlist or ranking question needs. A single
ticker also returns every model's score with its factor breakdown plus the
bull and bear key points.

This is NOT the Smart Score (1-10, eight quantitative factors). It is a
separate system, and the two routinely disagree by design.

`ai_score` is the headline score and matches the AI Stock Analysis page;
`consensus` holds the cross-model average, the high and low scoring models,
and the split of rating labels. `upside_pct` is the model's price target
against the current price. `as_of` is when the report was generated —
reports regenerate on new earnings or a significant price move, so an older
date means nothing material has changed since.

Coverage is a subset of the stock universe and excludes ETFs. Symbols with
no report at all come back under `not_covered`; symbols that are covered but
lack a report from the requested `provider` come back separately under
`no_report_from_provider`, each listing the models that did score them — so
a missing provider is never reported as "this stock has no AI analysis".

Args:
    tickers: Comma-separated tickers (e.g. 'AAPL' or 'AAPL,MSFT'), max 25.
    provider: Optional single provider to report on. Omit for the
               headline score that matches the website.
    detail: 'consensus' (default) or 'full' to add each model's written
             reasoning. Ignored on multi-ticker calls.

Returns JSON: {stocks: [{ticker, company, ai_score, rating,
  headline_model, price, price_target, upside_pct, as_of, reflects,
  consensus: {models, avg_score, score_high, score_low, ratings_split,
  avg_price_target, avg_upside_pct, reports_dated}, providers: [...],
  key_points: [...]}], not_covered: [...],
  no_report_from_provider: [{ticker, covered_by}]}.
  `consensus.reports_dated` appears only when the models did not all run on
  the same date; `as_of` is always the headline report's own date.
NameRequiredDescriptionDefault
detailNo'consensus' (default) returns each model's score and factor breakdown; 'full' adds each model's written reasoning. Ignored on multi-ticker calls.consensus
tickersYesComma-separated tickers (e.g. 'AAPL' or 'AAPL,MSFT,NVDA'), up to 25
providerNoOptional single AI provider to report on. Map what the user said to the provider: Claude is Anthropic, ChatGPT/GPT is OpenAI, Grok is xAI, Sonar is PerPlexity. Omit for the headline score that matches the website.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover safety (readOnly, idempotent, openWorld, non-destructive), yet the description adds substantial behavior: coverage excludes ETFs, uncovered vs covered-but-missing-provider symbols are reported in separate buckets so a missing provider is never misreported as absent analysis, and as_of regeneration semantics (new earnings or significant price move). This goes well beyond the annotation surface.

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?

Long but deliberately structured with 'Use for:' examples, an explicit NOT clause, and per-field notes. Front-loaded with the headline definition. The Returns paragraph is dense but earns its place since no output schema exists; a tight edit could still trim some redundancy around as_of/reports_dated.

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

Completeness5/5

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

There is no output schema, so the description carries the full return contract and does so: it enumerates the stocks fields, explains ai_score vs consensus, upside_pct, reports_dated conditional presence, and the two error buckets. Nothing an agent needs to invoke or interpret the call is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning the schema lacks: the interaction rule that detail is ignored on multi-ticker calls, and the rationale for provider selection ('Omit for the headline score that matches the website'). The batching instruction reinforces the max-25 ticker constraint.

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?

Names a specific resource (TipRanks AI Stock Analysis 0-100 score) and verb (get), and explicitly distinguishes itself from the closest sibling system: 'This is NOT the Smart Score (1-10, eight quantitative factors).' An agent can separate this from get_top_smart_score_stocks or get_technical_analysis without opening a schema.

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

Usage Guidelines5/5

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

Gives concrete trigger phrases ('what's the AI score for NVDA', 'why do the models disagree on Tesla') and an explicit exclusion (not the Smart Score, and the two routinely disagree by design). It also states the batching rule — pass every symbol in one call for watchlist/ranking questions — which is exactly when-to-use guidance.

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

get_all_commodities_quotesA
Read-onlyIdempotent
Inspect

Returns real-time quotes for all commodities in a single request.

Each row carries the commodity's display name and a changePercentage derived from price and change, alongside the raw price, change and volume. Use the name given in the response — several symbols are non-mnemonic (HEUSX is Lean Hogs, SBUSX is Sugar, ZSUSX is Soybeans).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds significant behavioral context: it discloses that several symbols are non-mnemonic and instructs using the display name in the response. It also details the response fields (display name, changePercentage derived from price and change, raw price, change, volume). This is valuable operational guidance not present in annotations.

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

Conciseness5/5

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

The description is concise and well-structured: the first sentence states the core purpose, and the second paragraph provides a crucial caveat about symbols. Every sentence earns its place without redundancy or filler.

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

Completeness5/5

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

Given zero parameters and no output schema, the description compensates by explaining exactly what the response contains (display name, changePercentage, raw price, change, volume) and the non-mnemonic symbol issue. This is complete for a simple list-all tool and leaves no critical ambiguity about the return data.

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 the baseline is 4 as per guidelines. The description does not need to add parameter semantics since the schema is empty; the focus shifts to output semantics, which it covers.

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

Purpose5/5

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

The description clearly states the tool returns real-time quotes for all commodities in a single request, using a specific verb ('Returns') and resource. It distinguishes itself from siblings like get_commodity_quote (which likely returns a single quote) and get_commodity_historical by emphasizing the 'all commodities' scope.

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

Usage Guidelines3/5

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

The description implies usage through 'in a single request', suggesting this is for bulk retrieval rather than individual calls, but it does not explicitly state when to use this tool versus alternatives like get_commodity_quote or get_commodity_historical. It lacks explicit exclusions or recommended alternative scenarios.

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

get_all_crypto_quotesA
Read-onlyIdempotent
Inspect

Real-time crypto quotes: the largest coins, each with a display name.

The feed carries 4,771 coins in alphabetical order, which is far more than one
response can hold — so this returns `limit` of them ordered by market
capitalisation, largest first, and the response states how many were left out.
Pass `symbols` for specific coins, or call get_crypto_quote for a single one.

Read `note` before summarising: it says how many coins the slice covers out of
how many exist, so a "top coins" answer is not mistaken for the whole market.

`volume` on a crypto row is the source venue's own figure and is not a common
unit across coins — some rows count coins, others quote-currency turnover. It
does not rank the market and coins cannot be compared on it.

Args:
    symbols: Comma-separated coins (optional; overrides the ranked slice)
    limit: How many ranked coins to return (optional)
NameRequiredDescriptionDefault
limitNoHow many ranked coins to return (default 40, max 75). Ignored when `symbols` is given.
symbolsNoOptional comma-separated coins to return instead of the ranked slice, e.g. 'BTCUSD,ETHUSD'. Bare tickers like 'BTC' resolve to the USD pair.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, and non-destructive. The description adds valuable behavioral context: the 4,771-coin feed is alphabetically stored but returned by market cap, the response reports how many coins were left out, and `volume` is venue-specific and not comparable across coins. This is exactly the kind of insight annotations do not provide.

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

Conciseness5/5

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

Though longer than average, every sentence earns its place: the lead sentence states purpose, the next explains scaling and alternatives, then caveats about `note` and `volume` are given, and an Args section wraps up. It is well-structured and front-loaded without 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?

With no output schema, the description compensates by describing key response elements: display names, slice size ('note'), left-out count, and the non-comparable `volume` field. For a two-parameter, read-only list tool, this is complete enough for an agent to use correctly and avoid summarisation errors.

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

Parameters3/5

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

The input schema already covers both parameters with descriptions, defaults, maximums, and interactions, so schema coverage is 100%. The description paraphrases 'symbols overrides the ranked slice' and 'limit is how many ranked coins to return,' but adds no new semantic value beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states it provides real-time crypto quotes and explicitly distinguishes from the singular get_crypto_quote tool by saying 'or call get_crypto_quote for a single one.' It also differentiates by asset class and market-cap ordering, making its scope unambiguous.

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

Usage Guidelines5/5

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

It gives explicit usage guidance: use `symbols` for specific coins or call get_crypto_quote for a single one, and warns to read the `note` before summarising to avoid misrepresenting the slice as the whole market. This goes beyond mere context and directly tells when to use this tool versus alternatives.

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

get_all_forex_quotesA
Read-onlyIdempotent
Inspect

Real-time forex quotes: the most-traded pairs, each with a display name.

The feed carries 1,550 pairs in alphabetical order, which is far more than one
response can hold — so this returns the most prominent `limit` of them (majors
first, then by volume), and the response states how many were left out. Pass
`symbols` for specific pairs, or call get_forex_quote for a single one.

Read `note` before summarising: it says how many pairs the slice covers out of
how many exist, so a "top pairs" answer is not mistaken for the whole market.

`volume` on a forex row is a per-venue tick count, not market turnover — FX is
over-the-counter and most pairs report 0. It does not rank the market.

Args:
    symbols: Comma-separated pairs (optional; overrides the ranked slice)
    limit: How many ranked pairs to return (optional)
NameRequiredDescriptionDefault
limitNoHow many ranked pairs to return (default 40, max 75). Ignored when `symbols` is given.
symbolsNoOptional comma-separated pairs to return instead of the ranked slice, e.g. 'EURUSD,USDJPY'. Slash and dash forms are accepted.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint, etc.), the description discloses crucial behavioral quirks: the feed has 1,550 pairs but returns a limited slice, the response states how many were left out, and 'volume on a forex row is a per-venue tick count, not market turnover... It does not rank the market.' This is significant context that annotations alone do not convey.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then each paragraph addresses a distinct, necessary concern: the oversized feed and limit, the note field, the volume caveat, and parameter summaries. Every sentence earns its place—there is no filler or repetition of the schema.

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

Completeness5/5

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

Given that there is no output schema, the description does a thorough job of explaining what to expect: a ranked slice, a note indicating coverage, and the caveat about volume. It also covers the main alternatives and data limitations, making it complete for an agent to decide when and how to call the tool.

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

Parameters4/5

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

The schema already provides full description coverage for both parameters, so the baseline is 3. The description adds value by explaining why `limit` exists (the feed exceeds response capacity) and how it interacts with `symbols` (symbols overrides the ranked slice), plus the significance of the `note` field in interpreting the result. This goes beyond the schema descriptions.

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

Purpose5/5

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

The description opens with 'Real-time forex quotes: the most-traded pairs, each with a display name,' which clearly identifies the resource (forex quotes) and the specific scope (most-traded pairs, with display names). It distinguishes itself from sibling tools by explicitly mentioning 'call get_forex_quote for a single one' and by its focus on a ranked overview versus other asset-class quote tools.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: 'Pass `symbols` for specific pairs, or call get_forex_quote for a single one.' It also explains when the ranked slice is appropriate versus using symbols, and warns to 'Read `note` before summarising' to avoid misrepresenting the data coverage. This effectively tells an agent when to use this tool and what to watch out for.

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

get_analysts_by_firmA
Read-onlyIdempotent
Inspect

List analysts at a given firm (case-insensitive substring match).

Each row: {name, firm, rank, avg_return_1y_pct, covered_tickers_sample,
total_covered}. Results are deduped by analyst name (keeping the best
rank) and sorted by rank ascending.

When `sector` is provided, the per-analyst coverage list is filtered
to tickers in that sector and the row shape becomes {name, firm,
rank, avg_return_1y_pct, sector, covered_tickers}.

Args:
    firm: Firm name or fragment (e.g. 'Goldman' matches 'Goldman Sachs').
    sector: Optional lowercase sector (e.g. 'technology', 'healthcare').
NameRequiredDescriptionDefault
firmYes
sectorNo

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive), the description adds valuable behavioral details: case-insensitive substring matching, deduplication by analyst name keeping best rank, sort order, and the output shape change when sector is provided. This significantly enriches the agent's understanding.

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

Conciseness5/5

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

The description is well-structured, beginning with the core action, then output format, behavioral rules, and parameter details. It is information-dense without redundancy—every sentence provides necessary context.

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 only two simple parameters and no output schema, the description is complete: it explains return row structures for both with/without sector, matching behavior, deduplication, and sorting. An agent can confidently invoke this tool without further clarification.

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

Parameters5/5

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

The input schema only provides names and defaults, but the description adds substantive meaning: firm is a case-insensitive substring (with example matching 'Goldman' to 'Goldman Sachs'), sector is optional lowercase and affects the result row shape. This fully compensates for the 0% schema description coverage.

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

Purpose5/5

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

The description clearly states the tool's function: 'List analysts at a given firm' with specific output rows. It distinguishes from sibling tools by focusing on firm-based analyst listing, which is unique among the many get_* tools.

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

Usage Guidelines4/5

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

The description clearly implies when to use it—when you need analysts for a firm. It does not explicitly compare to alternatives like get_recent_analyst_ratings, but provides clear context and parameter guidance, satisfying the 'clear context, no exclusions' level.

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

get_articleA
Read-onlyIdempotent
Inspect

Fetch the full text of a single TipRanks article.

Resolve a TipRanks article URL (e.g. from get_latest_news / get_assets_news),
a slug, or a numeric post id to its title, excerpt, full body text
(HTML-stripped, capped at 8000 chars), author, category, date, canonical
URL, and any tagged tickers.

Args:
    identifier: Numeric post id, slug, or a tipranks.com article URL.

Returns a JSON object, or {"error": ...} when no matching TipRanks article
exists (e.g. the URL points to an aggregated third-party site, which is not
stored in TipRanks).
NameRequiredDescriptionDefault
identifierYesA TipRanks article identifier: the numeric post id, the slug, or a full tipranks.com article URL.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, which covers safety. The description adds non-obvious behavior: HTML-stripped text, an 8000-character cap, and a JSON error response when no matching article exists. This goes beyond annotations and helps set expectations.

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

Conciseness5/5

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

The description is compact (~80 words), front-loaded with the core purpose, and structured with Args/Returns sections. Every sentence adds useful information; no filler or repetition.

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

Completeness5/5

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

For a single-parameter read tool with no output schema and strong annotations, the description is fully complete. It covers input types, the exact return fields, the 8000-character limit, and the error behavior — everything an agent needs to invoke and interpret the result.

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

Parameters3/5

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

Schema coverage is 100% and the schema already describes the identifier as numeric post id, slug, or full tipranks.com URL. The description echoes this and adds the source hint (from get_latest_news / get_assets_news), which is slight added value but not substantial beyond the schema.

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

Purpose5/5

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

The description opens with a specific verb+resource: "Fetch the full text of a single TipRanks article." It clearly distinguishes this from sibling news tools like get_latest_news and get_assets_news by focusing on resolving a single article identifier to its full content.

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

Usage Guidelines4/5

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

The description provides clear context by stating the identifier can come from get_latest_news / get_assets_news, implying when to use this tool. It also notes an exclusion (URLs to aggregated third-party sites are not stored), which counts as a when-not. However, it does not explicitly name alternative tools for those excluded cases, so it falls short of a 5.

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

get_assets_dataA
Read-onlyIdempotent
Inspect

Returns key TipRanks stock data for one or more tickers.

Args:
    tickers: Ticker symbols — a comma-separated string ("AAPL,MSFT,C") or a
        JSON array (["AAPL","MSFT","C"]). Both are accepted.

Returns JSON {"assetsData": [...one compact entry per ticker...]}. This is a
headline summary tuned to stay small enough for a whole portfolio to fit in a
single response. Fields per entry:
  - ticker, companyName, sector, stockType, marketCap
  - url: canonical TipRanks page for the stock — use as the citation source.
  - price: latest close.
  - smartScore: TipRanks composite 1-10 (combines the 8 datasets — analyst,
      blogger, news, hedge-fund, insider, etc.).
  - analystConsensus / bestAnalystConsensus: rating label from ALL covering
      analysts vs. the top-performing ones ("Strong Buy".."Strong Sell"); a
      divergence between the two is itself a signal.
  - priceTarget: average 12-month target. priceTargetUpside: decimal vs.
      current price (0.05 = +5%).
  - peRatio, dividendYield (decimal).
  - newsSentiment, hedgeFundsScore, insiderScore: 0-1 sentiment signals.
  - ytdGainPct, yearlyGainPct: price performance as a percent (12.5 = +12.5%,
      3944 = +3944%).
  - nextEarningsDate, and daysUntilEarnings (whole days from today — quote this
      rather than computing the gap from the date yourself).
Floats are rounded and dates are day-resolution. For deeper per-ticker detail
(full price history, 13F / insider breakdowns, blogger counts, financials)
use the dedicated tools (get_stock_prices, get_hedge_fund_holdings,
get_insider_transactions, get_financials, ...).
NameRequiredDescriptionDefault
tickersYes

TDQS

A5/5.0
Behavior5/5

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

Annotations already mark readOnlyHint=true, destructiveHint=false. The description adds orthogonal behavioral details: response size is 'tuned to stay small enough for a whole portfolio,' floats are rounded, dates are day-resolution, and it instructs agents to 'quote daysUntilEarnings rather than computing the gap.' No contradiction.

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

Conciseness5/5

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

Although long, the description is well-structured: a one-sentence summary, input format, return wrapper, and a bulleted field list. Every line adds value—required to document the many output fields. Front-loaded with the core purpose and followed by logically grouped details.

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

Completeness5/5

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

Given one parameter and no output schema, the description covers everything: input format, full field semantics, return structure, and guidance on when to use sibling tools. It is complete enough for an agent to invoke and interpret results without additional lookups.

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

Parameters5/5

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

Schema only says 'tickers' is string or array with no description (0% coverage). The description compensates fully: 'a comma-separated string ("AAPL,MSFT,C") or a JSON array (["AAPL","MSFT","C"]). Both are accepted.' This adds crucial format details beyond the schema.

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

Purpose5/5

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

The description opens with a clear, specific statement: 'Returns key TipRanks stock data for one or more tickers.' It enumerates the fields returned, distinguishing it from sibling tools by describing it as a compact portfolio-level summary.

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

Usage Guidelines5/5

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

Explicitly states when not to use: 'For deeper per-ticker detail ... use the dedicated tools (get_stock_prices, get_hedge_fund_holdings, get_insider_transactions, get_financials, ...).' This gives clear alternatives and context for when the tool is appropriate.

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

get_assets_eventsA
Read-onlyIdempotent
Inspect

Returns upcoming dividend and earnings events for tickers.

Args:
    tickers: Comma-separated ticker symbols (e.g. "AAPL,MSFT")
    from_date: Optional start date (ISO format, e.g. "2026-03-01")
    to_date: Optional end date (ISO format, e.g. "2026-06-01")

Returns: dividend dates, earnings dates, and coupon dates per ticker.
NameRequiredDescriptionDefault
tickersYes
to_dateNo
from_dateNo

TDQS

A4.5/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 the description adds meaningful context about the returned event types (dividend, earnings, coupon) and date parameter semantics. No contradiction with annotations.

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

Conciseness5/5

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

The description is a compact, front-loaded docstring with a one-line summary followed by clear Args and Returns sections. Every sentence provides necessary information with no redundancy.

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

Completeness5/5

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

For a simple read-only tool with no output schema, the description is complete: it explains what the tool returns (dividend, earnings, coupon dates), what inputs are required, and the optional date range format. No critical gaps remain for an agent to invoke it.

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?

With 0% schema description coverage, the description compensates by documenting tickers as comma-separated symbols and from_date/to_date as optional ISO-format dates. It adds format and optionality semantics beyond the raw schema, though it does not mention the array alternative for tickers.

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

Purpose5/5

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

The description clearly states 'Returns upcoming dividend and earnings events for tickers,' using a specific verb, resource, and scope. It distinguishes itself from sibling historical/earnings tools by emphasizing per-ticker upcoming events and coupon dates.

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

Usage Guidelines4/5

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

The description provides clear context: use for upcoming dividend/earnings/coupon events for specified tickers, with optional date range filtering. It does not explicitly name alternatives or exclusions, but the use case is well implied.

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

get_assets_newsA
Read-onlyIdempotent
Inspect

Returns recent news articles for tickers, aggregated from many news sites, each with a sentiment tag and source URL (headlines only — no article body). For general/market TipRanks news without a specific ticker, or for an article excerpt, use get_latest_news.

This tool serves the CURRENT news window only: it returns each ticker's most
recent articles, and from_date just trims that recent set. For news from a
specific past date range, use get_latest_news with from_date + to_date,
which searches the full archive.

Args:
    tickers: Comma-separated ticker symbols
    count: Number of articles to return (default 10)
    from_date: Optional 'YYYY-MM-DD' recency floor (filtered on `date`).

Returns JSON: {"assetNewsArticles": [...]}. Each entry:
  - ticker, companyName
  - sentiment: bucketed signal — one of "VeryPositive", "Positive",
      "Neutral", "Negative", "VeryNegative". Derived from TipRanks
      news-sentiment classifier on the article text.
  - siteName, url, title
  - date, addedOn, publishTime, articleTimestamp: redundant date
      fields. addedOn is when TipRanks ingested it; publishTime is
      the source's stated publication time. Prefer publishTime.
NameRequiredDescriptionDefault
countNo
tickersYes
from_dateNoOptional recency floor 'YYYY-MM-DD', applied to the recent articles this tool returns. It cannot pull older news into range — for a past date window use get_latest_news with from_date + to_date.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive nature. The description adds significant context beyond annotations: it explains the tool returns only headlines (no article body), that from_date only trims the recent set rather than pulling older articles, and details the redundant date fields, specifically advising to prefer publishTime over addedOn. This is rich behavioral context with no contradictions.

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

Conciseness4/5

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

The description is longer than average but well-structured with 'Args' and 'Returns' sections. The opening sentence immediately conveys the core purpose, and subsequent lines provide necessary detail about behavior, usage limits, and return fields. Some redundancy in listing return fields could be trimmed, but every sentence contributes meaningful information, so it earns a 4 rather than a 5.

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

Completeness5/5

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

The tool has no output schema, so the description fully documents the return structure including the assetNewsArticles container and all fields: ticker, companyName, sentiment bucket, siteName, url, title, and date variants. It also explains the sentiment classifier, the meaning of addedOn vs publishTime, and the tool's limitation to current news. This is complete for a news-retrieval tool with no output schema.

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

Parameters4/5

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

Schema description coverage is only 33% (only from_date has schema-level description), so the description must compensate. It does so by explaining 'tickers' as comma-separated symbols, 'count' as number of articles with default 10, and 'from_date' as a recency floor with format and behavioral nuance. Minor mismatch: schema allows tickers as array, but description says comma-separated only, slightly limiting the semantics. Overall adds strong value beyond schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Returns recent news articles for tickers, aggregated from many news sites, each with a sentiment tag and source URL.' It also explicitly distinguishes itself from get_latest_news, stating this tool is for ticker-specific news and headlines only, which clearly separates it from siblings.

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

Usage Guidelines5/5

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

Provides explicit when-to-use and when-not-to-use guidance: 'For general/market TipRanks news without a specific ticker, or for an article excerpt, use get_latest_news.' It also clarifies the tool's limitation to the current news window and instructs to use get_latest_news with from_date + to_date for past date ranges, giving clear alternatives.

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

get_assets_warningsA
Read-onlyIdempotent
Inspect

Returns risk warnings for tickers.

Args:
    tickers: Comma-separated ticker symbols

Returns: warning type, date, and detail fields per ticker.
NameRequiredDescriptionDefault
tickersYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds that the return includes warning type, date, and detail fields, which is useful but does not go beyond what annotations already establish.

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

Conciseness5/5

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

The description is concise and well-structured: a one-sentence purpose, then Args and Returns sections. No unnecessary words or repetition, and it is front-loaded with the primary purpose.

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

Completeness4/5

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

For a simple read-only tool with one parameter and no output schema, the description provides the essential return fields (warning type, date, detail). It could be more explicit about the array type acceptance, but overall it is sufficiently complete for the tool's complexity.

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

Parameters3/5

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

The description says tickers are comma-separated ticker symbols, but the schema allows both a string and an array of strings. This is incomplete and potentially misleading, as an agent may not realize an array is also accepted, though it does add some meaning beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool returns risk warnings for tickers. It uses a specific verb ('Returns') and distinct resource ('risk warnings for tickers'), distinguishing it from sibling tools like get_assets_data and get_assets_events.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. There is no mention of suitable contexts, exclusions, or comparisons to sibling tools, leaving the agent to infer usage from the name alone.

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

get_best_performing_expertsA
Read-onlyIdempotent
Inspect

Returns the best-performing experts ranked by TipRanks success rate and average return.

Args:
    expert_type: One of: analyst, insider, hedgeFund, blogger, firm (default: analyst)
    num: Number of results (default: 10, max: 25)
NameRequiredDescriptionDefault
numNo
expert_typeNoOne of: analyst, insider, hedgeFund, blogger, firm (default: analyst)analyst

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds ranking criteria and a max of 25 results, but does not disclose error behavior or whether results are sorted ascending/descending beyond the stated ranking.

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

Conciseness5/5

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

The description is two short sections: a purpose line and a parameter list with defaults and constraints. No fluff, front-loaded purpose, easily skimmable.

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

Completeness4/5

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

For a simple read-only query with two optional parameters and no output schema, the description covers what it returns and how to call it. It doesn't specify the return structure, but that's not critical for this simple tool.

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

Parameters4/5

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

For expert_type, the description repeats the schema's allowed values, but for num it adds the max 25 constraint that the schema lacks. This compensates for the schema's 50% coverage and clarifies usage.

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

Purpose5/5

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

Clearly states it returns the best-performing experts ranked by TipRanks success rate and average return, which is specific and distinguishes it from sibling tools like get_analysts_by_firm or get_top_rated_stocks.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. It does not mention exclusions or provide context such as 'use this for leaderboard rankings' or 'not for detailed analyst profiles'.

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

get_blogger_sentimentA
Read-onlyIdempotent
Inspect

Returns the financial-blogger consensus for a stock plus the underlying blogger articles.

Distinct from get_recent_analyst_ratings (Wall Street analysts) and
get_investor_sentiment (TipRanks crowd positioning).

Args:
    ticker: Stock ticker (e.g. 'AAPL')
    limit: Max blogger articles to return (default 20, max 50)

Returns JSON: {ticker, company, consensus, articles}.
  - consensus: {bullish_pct, bearish_pct, neutral_pct, bullish_count,
      bearish_count, neutral_count, score, avg}.
  - articles: [{blogger, title, url, site, date}] (newest first).
NameRequiredDescriptionDefault
limitNo
tickerYes

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds context about the return structure (consensus and articles) and parameter constraints (limit default 20, max 50), exceeding what annotations provide.

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

Conciseness5/5

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

The description is well-structured with a clear purpose statement, sibling differentiation, and organized Args/Returns sections. Every line provides useful information without fluff or repetition.

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

Completeness5/5

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

The tool is simple (2 params, no nested objects), and the description covers purpose, parameters, and return structure in detail. No output schema exists, but the description outlines the exact JSON shape, making the tool's behavior fully transparent.

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

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates by explaining both parameters: ticker with an example ('AAPL') and limit with default and max values. This gives the agent complete understanding of how to invoke the tool.

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

Purpose5/5

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

The description clearly states the tool returns financial-blogger consensus for a stock plus underlying articles, which is specific and distinct from siblings. It explicitly names get_recent_analyst_ratings and get_investor_sentiment as different, ensuring no ambiguity about scope.

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

Usage Guidelines5/5

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

The description explicitly distinguishes this tool from two related sibling tools, explaining what each alternative covers (Wall Street analysts vs. TipRanks crowd positioning). This gives the agent clear guidance on when to choose this tool over similar ones.

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

get_bulls_bears_summaryA
Read-onlyIdempotent
Inspect

Returns the discrete bull and bear key points for stocks — the individual sentence bullets TipRanks shows on its stock pages, each tagged with a topic.

Args:
    tickers: Comma-separated tickers (e.g. 'AAPL,TSLA')

Returns JSON: {"data": [...one entry per ticker...]}. Each entry has:
  - ticker, updatedOn
  - bullish: list of bullish point sentences
  - bearish: list of bearish point sentences
  - key_points: list of {sentiment, topic, point} for the full set.
NameRequiredDescriptionDefault
tickersYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds behavioral context by explaining the discrete sentence-bullet format and the exact JSON return structure (ticker, updatedOn, bullish, bearish, key_points). It does not discuss auth/rate limits, but for a read-only list tool with these annotations, this is adequate and adds value beyond annotations.

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

Conciseness4/5

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

The description is structured with sections for Args and Returns, using bullet-like formatting for clarity. It is longer than the TDQS high bar but still efficient; the returns section is lengthy but necessary since there is no output schema. No redundant fluff, though the opening sentence is slightly verbose.

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?

Since there is no output schema, the description carries full burden for return values and does so thoroughly: it gives the JSON structure, per-ticker fields, and the nested key_points with sentiment/topic/point. It also covers the parameter format. For a read-only data retrieval tool, this is complete enough for an agent to invoke and parse the result.

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

Parameters4/5

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

The input schema has 0% parameter description coverage, so the description must compensate. It explains the tickers arg as 'Comma-separated tickers (e.g. 'AAPL,TSLA')', giving a concrete format and example. However, it does not mention that an array is also accepted per the schema, which is a minor gap but still adds substantial meaning.

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

Purpose5/5

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

The description clearly states it returns 'the discrete bull and bear key points for stocks' with a specific resource (TipRanks stock pages) and detailed output structure. This distinguishes it from sibling tools like get_ai_stock_analysis or get_stock_quotes, which serve different purposes.

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

Usage Guidelines3/5

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

The description implies usage (when you need bull/bear key points for stocks) but gives no explicit when-to-use vs alternatives, no exclusions, and no mention of preferred contexts. It is not misleading, but guidance is only implicit.

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

get_buybacksA
Read-onlyIdempotent
Inspect

Returns share-buyback / stock-repurchase activity in one of two modes:

- CROSS-MARKET (no ticker): latest reported buybacks across all companies,
  sorted by dollar amount spent (largest first). Use for 'biggest buybacks',
  'top repurchase companies'. A single company may appear multiple times for
  different fiscal quarters.
- PER-TICKER (ticker provided): historical quarterly buyback series for one
  ticker. Use for 'AAPL buyback history', 'MSFT repurchase trend'.

Args:
    ticker: Optional. If provided, returns the per-ticker historical series.
            If empty, returns the cross-market list.
    limit: Cross-market mode only — max rows (default: 25, max: 100).
    page: Cross-market mode only — page number, 1-based (default: 1).

Returns:
    Cross-market mode: { totalCount, data: [{ ticker, companyName,
                         fiscalPeriodEndDate, stockEarningsDate, eps,
                         marketCapUSD, totalValueSpentToRepurchaseShares,
                         epsCurrencyTypeCode }] }.
    Per-ticker mode: quarterly time series, chart-ready as a bar or
        line plot of buyback spend over time —
        [{ date, marketCapEndFiscalPeriod,
           totalValueSpentToRepurchaseShares,
           ratio (decimal — buyback / market cap) }, ...].
NameRequiredDescriptionDefault
pageNo
limitNo
tickerNoOptional. If provided, returns the per-ticker historical buyback series; if omitted, returns the cross-market list.

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, which the description does not contradict. Adds useful behavioral context: cross-market results are sorted by dollar amount, a company may appear multiple times for different fiscal quarters, and per-ticker returns are chart-ready time series.

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

Conciseness5/5

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

The description is well-structured with clear sections for modes, arguments, and returns. Every sentence adds value, and the formatting makes it easy to parse.

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

Completeness5/5

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

Since there is no output schema, the description provides comprehensive return field details for both modes, including example field names and the chart-ready nature of per-ticker data. It covers all parameters and operational modes thoroughly.

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

Parameters5/5

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

Description fully explains each parameter beyond the schema. It clarifies that limit and page are cross-market-only with defaults and max, and that ticker determines mode. This compensates for the sparse 33% schema description coverage.

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

Purpose5/5

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

States 'Returns share-buyback / stock-repurchase activity' with two distinct modes, making the tool's purpose clear. It clearly distinguishes from sibling get_* tools by focusing specifically on buyback/repurchase data.

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

Usage Guidelines5/5

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

Explicitly provides example queries for each mode: 'biggest buybacks', 'top repurchase companies' for cross-market, and 'AAPL buyback history', 'MSFT repurchase trend' for per-ticker. Also specifies when to omit versus provide ticker, giving clear directional guidance.

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

get_clinical_trialsA
Read-onlyIdempotent
Inspect

Returns the FDA / clinical-trial calendar — upcoming drug approval target dates and the tickers behind each drug.

Window is fixed at today − 14 days to today + 60 days, sorted by date ascending.
Use for upcoming FDA decisions, PDUFA dates, biotech catalysts.

Returns: { data: [{ targetDate, clinicalTrials: [{ drugName, ticker }] }],
           count, window }.
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds valuable behavioral context beyond annotations: a fixed window ('today − 14 days to today + 60 days'), sorting ('by date ascending'), and the exact return structure. While it does not discuss error handling or rate limits, the added details meet the lowered bar set by the annotations.

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

Conciseness5/5

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

The description is compact and well-structured: a one-sentence summary, a sentence on the fixed window and sorting, a sentence on intended use, and a formatted return layout. Every sentence earns its place with no fluff or repetition.

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

Completeness5/5

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

Given its simplicity (no parameters, no output schema), the description is fully self-contained. It communicates the purpose, the exact data window, the ordering, the intended application, and the shape of the returned array. Nothing essential is left unexplained for the agent to invoke the tool successfully.

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 the schema is trivially 100% covered. Per the rubric, 0 params earns a baseline of 4. The description does not need to explain parameters and instead clarifies the fixed data scope, which is the only relevant input detail.

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

Purpose5/5

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

The description begins with a specific verb 'Returns' and names the exact resource: 'FDA / clinical-trial calendar — upcoming drug approval target dates and the tickers behind each drug.' This clearly differentiates from sibling calendar tools like get_earnings_calendar or get_economic_calendar by specifying the domain and content.

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

Usage Guidelines4/5

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

The description provides explicit use cases: 'Use for upcoming FDA decisions, PDUFA dates, biotech catalysts.' This gives clear context for when to select this tool, but does not explicitly state when not to use it or name alternative tools, so it falls one point short of full guidance.

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

get_commodity_historicalA
Read-onlyIdempotent
Inspect

Daily OHLC price history for a commodity, covering the whole date range you ask for.

Chart-ready: while the range fits in one response, each row is the price feed's
own daily row — {symbol, date, open, high, low, close, volume, change,
changePercent, vwap} — newest first, ordered for direct plotting as a price history.

A range too long to return day by day is aggregated into coarser OHLC bars
rather than cut short. `interval` names which (weekly/monthly/quarterly/yearly),
each bar spans `date` to `endDate`, and a bar's high/low are that period's real
extremes. Aggregated bars carry the same fields except `vwap`, which the feed
defines per session only. Re-request a narrower from_date/to_date for daily rows.

`summary` always describes the FULL requested window, computed from the daily
data: its first and last close with dates, its high and low with dates, and the
trailing changes the window reaches back far enough to support. Base any
"starting price", "a year ago" or "period high/low" claim on `summary`, or on a
bar that is actually present.

`summary.windowHigh`/`windowLow` describe THIS window. A quote tool's
yearHigh/yearLow are the feed's trailing range, roughly the past 12-13
months — a different period — so label those as trailing-year figures. For the current level alone, call get_commodity_quote.

Args:
    symbol: Commodity symbol (e.g. 'GCUSD' for gold)
    from_date: Start date YYYY-MM-DD (optional)
    to_date: End date YYYY-MM-DD (optional)
NameRequiredDescriptionDefault
symbolYesCommodity symbol, e.g. 'GCUSD' (gold).
to_dateNo
from_dateNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, yet the description adds substantial behavior beyond them: long ranges are aggregated into coarser bars instead of cut short, aggregated bars drop `vwap`, ordering is newest-first, and `summary` always reflects the full requested window with explicit warning against conflating its windowHigh/windowLow with a quote tool's trailing range.

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

Conciseness4/5

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

Core purpose and field list are front-loaded, and each paragraph covers a distinct concern (fields, aggregation, summary semantics, sibling routing). It is on the long side and re-enumerates fields, but nearly every sentence carries non-obvious information.

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

Completeness5/5

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

With no output schema, the description fully carries the return-value burden: it lists the exact row fields, the ordering, the aggregation variant and its field omissions, and the meaning of `summary`. Nothing an agent needs to interpret or call the tool correctly is missing.

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

Parameters4/5

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

Schema coverage is only 33% (symbol is the sole documented param), so the description carries the load: it gives the date format (YYYY-MM-DD), explains that from_date/to_date scope the range, and describes how an overly long range is aggregated rather than truncated. It adds real meaning, though it also mentions an `interval` value that is not an actual parameter, which is mildly confusing.

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 — daily OHLC price history for a commodity — and immediately scopes it to the requested date range. It is clearly distinguishable from get_commodity_quote and the other *_historical siblings without opening any schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: 'For the current level alone, call get_commodity_quote,' and tells it to 'Re-request a narrower from_date/to_date for daily rows' when aggregation kicks in. When-to-use, when-to-use-something-else, and the fallback action are all stated.

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

get_commodity_quoteA
Read-onlyIdempotent
Inspect

Returns the real-time price quote for a specific commodity.

Common symbols: GCUSD (gold), SIUSD (silver), CLUSD (crude oil),
NGUSD (natural gas), HGUSD (copper), PLUSD (platinum).

yearHigh / yearLow are the feed's trailing-year range, roughly the past
12-13 months: call them trailing-year figures. For a year-to-date or
calendar-year change, a dated extreme or an exact 52-week figure use
get_commodity_historical, since the quote does not date its extremes.

Args:
    symbol: Commodity symbol (e.g. 'GCUSD' for gold)
NameRequiredDescriptionDefault
symbolYesCommodity symbol, e.g. 'GCUSD' (gold), 'CLUSD' (crude oil).

TDQS

A4.1/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 safety is covered. The description earns credit for disclosing data semantics beyond the annotations: yearHigh/yearLow are trailing-year (12-13 months) and the quote does not date its extremes. That is genuine behavioral nuance about what the feed returns.

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?

Purpose is front-loaded in the first sentence, followed by useful symbol references and a caveat about the trailing-year fields. The six-symbol list is slightly long but directly aids invocation, so nothing feels wasteful.

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

Completeness4/5

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

With no output schema, the description usefully explains the key ambiguous return fields (yearHigh/yearLow semantics) and names the historical alternative. Covered well for a one-parameter quote tool; only the all-commodities alternative is unaddressed.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter's meaning is fully documented in the schema. The description repeats a symbol example plus a list of common symbols, which is mildly additive but not required. Baseline 3 for a fully-documented single param.

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 ('Returns the real-time price quote for a specific commodity'), and explicitly differentiates itself from the sibling get_commodity_historical. An agent can identify scope and sibling boundary without opening the schema.

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

Usage Guidelines4/5

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

Gives explicit routing guidance: when the user needs YTD, calendar-year change, dated extremes, or an exact 52-week figure, call get_commodity_historical instead. It does not, however, address the sibling get_all_commodities_quotes, so the multi-commodity case is left implicit.

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

get_company_kpisA
Read-onlyIdempotent
Inspect

Returns company-specific operational KPIs: segment revenue, geographic breakdown, active users/devices, gross margins by type, opex breakdown.

Full history runs back to 2014 and is large, so this returns the most
recent `count` periods per metric by default — pass count=0 for the full
history, or `group` to fetch a single group.

Args:
    ticker: Stock ticker (e.g. 'AAPL', 'MSFT')
    count: Most-recent periods per metric (default 8, max 40; 0 = full history)
    group: Optional single group by slug or title

Returns JSON: {"ticker", "lastUpdated", "groups": [...]}. Each group has
slug, title, and metrics: [{title, slug, unit, series: [{periodEnd, value}]}].
NameRequiredDescriptionDefault
countNo
groupNoOptional single KPI group by slug or title (e.g. 'revenue_geography', 'Revenue by Segment'). Omit for all groups.
tickerYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive. The description adds valuable behavioral context: the data is large (history back to 2014), the default limited to recent periods, and the exact return structure. This goes beyond what annotations provide and outlines expected behavior.

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

Conciseness5/5

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

The description is concise and well-structured: a clear purpose sentence, a brief note on data size and defaults, the Args list, and the return format. Every sentence adds meaningful information without redundancy.

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

Completeness5/5

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

Given the lack of an output schema, the description provides a complete return format with nested structure. It covers all three parameters, default behavior, and return fields, making it self-sufficient for an AI agent to understand what the tool does and what it will return.

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

Parameters5/5

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

Schema description coverage is only 33% (only 'group' has a description), but the description's Args section explains all three parameters including default count (8), max count (40), the special value 0 for full history, and that group accepts slug or title. This fully compensates for the schema gaps and adds crucial semantics.

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

Purpose5/5

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

The description clearly states the tool 'Returns company-specific operational KPIs' and lists concrete examples (segment revenue, geographic breakdown, active users/devices, gross margins by type, opex breakdown). This specific verb+resource combination distinguishes it from sibling tools like get_financials or get_earnings_*.

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

Usage Guidelines4/5

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

The description provides clear context on how to use the tool: it explains the default behavior (most recent count periods), when to use count=0 for full history, and how to fetch a single group with the group parameter. However, it does not explicitly mention alternatives or when-not-to-use this tool versus siblings, hence not a 5.

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

get_crypto_historicalA
Read-onlyIdempotent
Inspect

Daily OHLC price history for a cryptocurrency, covering the whole date range you ask for.

Chart-ready: while the range fits in one response, each row is the price feed's
own daily row — {symbol, date, open, high, low, close, volume, change,
changePercent, vwap} — newest first, ordered for direct plotting as a price history.

A range too long to return day by day is aggregated into coarser OHLC bars
rather than cut short. `interval` names which (weekly/monthly/quarterly/yearly),
each bar spans `date` to `endDate`, and a bar's high/low are that period's real
extremes. Aggregated bars carry the same fields except `vwap`, which the feed
defines per session only. Re-request a narrower from_date/to_date for daily rows.

`summary` always describes the FULL requested window, computed from the daily
data: its first and last close with dates, its high and low with dates, and the
trailing changes the window reaches back far enough to support. Base any
"starting price", "a year ago" or "period high/low" claim on `summary`, or on a
bar that is actually present.

`summary.windowHigh`/`windowLow` describe THIS window. A quote tool's
yearHigh/yearLow are the feed's trailing range, roughly the past 12-13
months — a different period — so label those as trailing-year figures. For the current level alone, call get_crypto_quote.

Args:
    symbol: Cryptocurrency symbol (e.g. 'BTCUSD' for Bitcoin)
    from_date: Start date YYYY-MM-DD (optional)
    to_date: End date YYYY-MM-DD (optional)
NameRequiredDescriptionDefault
symbolYesCrypto symbol, e.g. 'BTCUSD' (Bitcoin).
to_dateNo
from_dateNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare read-only/idempotent safety, yet the description adds substantial non-obvious behavior: long ranges are aggregated into coarser bars rather than truncated, aggregated bars omit `vwap` because the feed defines it per session, rows are newest-first, and `summary` is computed over the FULL requested window. These are real behavioral traits an agent cannot infer from the schema or annotations.

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

Conciseness4/5

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

Front-loaded with the core purpose, and the long-form paragraphs are all output-semantics detail with no filler. Dense but every sentence maps to how the result should be interpreted; slightly long, with the summary/quote caveats restated more than once.

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

Completeness5/5

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

There is no output schema, so the description carries the full burden and does so thoroughly: it enumerates the returned fields, explains ordering, bar aggregation, the absent vwap case, and how to interpret summary stats and the yearHigh/yearLow distinction. An agent has everything needed to call and interpret it.

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

Parameters4/5

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

Schema coverage is only 33% (symbol documented only), so the description must compensate: it specifies YYYY-MM-DD format, optionality, and start/end semantics for from_date/to_date, plus how the range drives daily-vs-aggregated output. It does not state what happens when dates are omitted (default range), leaving one gap.

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

Purpose5/5

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

States a specific verb and resource ('Daily OHLC price history for a cryptocurrency') with explicit scope ('covering the whole date range you ask for'). It also distinguishes itself from get_crypto_quote by reserving that sibling for 'the current level alone', so an agent can choose correctly without opening schemas.

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

Usage Guidelines4/5

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

Gives a clear routing rule to an alternative ('For the current level alone, call get_crypto_quote') and tells the agent to 'Re-request a narrower from_date/to_date for daily rows' when aggregation occurs. It does not address when-not to use this tool versus other historical siblings (commodity/forex/index), so it stops short of full when/when-not coverage.

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

get_crypto_newsA
Read-onlyIdempotent
Inspect

Latest cryptocurrency news — a market-wide feed across all coins (not filtered to a single asset), ordered newest-first: article headlines, snippets, and source URLs. Read-only, no side effects.

Use for broad crypto/market headlines. For news about a specific holding
use get_assets_news; for the general (non-crypto) editorial feed use
get_latest_news.
NameRequiredDescriptionDefault
pageNo0-indexed page of recent articles (0 = most recent); increase to page further back in time.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds behavioral context beyond annotations: order ('ordered newest-first'), scope ('market-wide across all coins'), and returned content ('article headlines, snippets, and source URLs'). It repeats safety traits ('Read-only, no side effects') but adds useful ordering and scope details. No contradiction.

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

Conciseness5/5

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

Description is two short paragraphs: the first delivers the core meaning in one sentence, the second gives precise usage guidance with named alternatives. No redundant or filler content.

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

Completeness5/5

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

For a simple read-only news feed with one optional parameter and no output schema, the description covers scope, ordering, return fields, and use cases. Parameter semantics are fully handled by the schema. No significant gaps.

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

Parameters3/5

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

The single parameter 'page' is fully described in the schema with '0-indexed page of recent articles (0 = most recent); increase to page further back in time.' Since schema coverage is 100%, the description does not need to restate it; 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?

Description clearly states 'Latest cryptocurrency news — a market-wide feed across all coins (not filtered to a single asset), ordered newest-first: article headlines, snippets, and source URLs.' It specifies the resource (crypto news), scope (all coins), and output elements, and explicitly distinguishes from sibling tools get_assets_news and get_latest_news.

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

Usage Guidelines5/5

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

Provides direct usage guidance: 'Use for broad crypto/market headlines. For news about a specific holding use get_assets_news; for the general (non-crypto) editorial feed use get_latest_news.' This names exact alternatives and conditions for use.

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

get_crypto_quoteA
Read-onlyIdempotent
Inspect

Returns the real-time price quote for a specific cryptocurrency.

Common symbols: BTCUSD (Bitcoin), ETHUSD (Ethereum), SOLUSD (Solana),
BNBUSD (BNB), XRPUSD (XRP), ADAUSD (Cardano), DOGEUSD (Dogecoin).

yearHigh / yearLow are the feed's trailing-year range, roughly the past
12-13 months: call them trailing-year figures. For a year-to-date or
calendar-year change, a dated extreme or an exact 52-week figure use
get_crypto_historical, since the quote does not date its extremes.

Args:
    symbol: Cryptocurrency symbol (e.g. 'BTCUSD' for Bitcoin)
NameRequiredDescriptionDefault
symbolYesCrypto symbol, e.g. 'BTCUSD' (Bitcoin), 'ETHUSD' (Ethereum).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, open-world and non-destructive behavior, so safety is covered. The description adds genuinely useful context the annotations cannot: that yearHigh/yearLow are a trailing 12-13 month feed range and that the quote does not date its extremes, which prevents a common misinterpretation.

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?

Purpose is front-loaded, followed by supported symbols and the trailing-year caveat, all earning their place. The trailing 'Args: symbol' block mildly duplicates the schema description, a small redundancy.

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

Completeness4/5

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

With no output schema, the description usefully explains the trickiest returned fields (yearHigh/yearLow) and their caveats. It stops short of enumerating other expected quote fields such as price or change, leaving a modest gap for a data-returning tool.

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

Parameters3/5

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

Schema coverage is 100% and the schema already documents the symbol parameter with examples, so the baseline is 3. The description's symbol list and example complement but do not extend the schema's meaning.

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

Purpose5/5

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

States a specific verb (returns) and resource (real-time price quote) scoped to a single cryptocurrency symbol, and names the concrete unit of exchange (BTCUSD, ETHUSD, etc.). An agent can distinguish it from get_all_crypto_quotes (all symbols) and get_crypto_historical 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 routes to get_crypto_historical for year-to-date, calendar-year, dated-extreme or exact 52-week needs, which is a real alternative-selection rule. It does not address when to prefer this over get_all_crypto_quotes, but the single-symbol scope makes that inference trivial.

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

get_dividend_historyA
Read-onlyIdempotent
Inspect

Dividend payment history for a ticker. Chart-ready: includes the current snapshot (yield %, payout ratio, frequency, annualised payout) plus two time series — a per-payment list [{ex_date, pay_date, amount, yield_pct, is_special, ...}] (newest first, capped at count) and an annual_totals list [{year, amount, yield_pct}] suitable for a yearly bar chart.

All yields are emitted as percentages (4.5 = 4.5%), so plots don't
need to know which underlying field used decimal vs. percentage
encoding.

Use for: "AAPL dividend history", "yield trend over 5 years",
"dividend growth chart", "is the payout sustainable".

Args:
    ticker: Stock ticker (e.g. 'AAPL', 'JNJ').
    count: Number of most-recent individual payments to return
            (default 16, max 100). The annual_totals series is
            always returned in full.
NameRequiredDescriptionDefault
countNo
tickerYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already indicate read-only/idempotent, and the description adds significant behavioral context: output structure, yield percentage format (4.5 = 4.5%), per-payment list capped at 'count', and annual_totals always returned in full. No contradictions with annotations.

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

Conciseness5/5

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

The description is well-organized: purpose first, then output structure, then yield encoding, use cases, and argument details. Every sentence adds value, and the formatting with headings/paragraphs makes it easy to scan.

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 no output schema, the description thoroughly explains the return shape (snapshot, per-payment list, annual totals) and edge behavior (count cap, yield percentages). It sufficiently covers the tool's functionality for an agent to select and invoke it correctly.

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

Parameters5/5

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

Schema coverage is 0% with no descriptions for ticker or count. The description compensates by explaining ticker with examples and count with default (16) and max (100), plus the effect on annual_totals. This adds meaningful semantics beyond the schema.

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

Purpose5/5

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

The description explicitly states 'Dividend payment history for a ticker' and details the output components (current snapshot, per-payment list, annual totals). This clearly distinguishes it from siblings like get_stock_splits or get_earnings_history.

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

Usage Guidelines4/5

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

Provides clear usage examples ('Use for: AAPL dividend history', 'yield trend over 5 years') and describes the nature of the data. However, it does not explicitly mention when not to use this tool or direct users to alternative tools, so it stops short of full exclusion guidance.

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

get_earnings_calendarA
Read-onlyIdempotent
Inspect

Returns upcoming earnings dates across all stocks for a date range.

Serves at most 15 days per call (fromDate through fromDate+14); a longer
range is shortened, and the result's fromDate/toDate give the window
actually served. For a longer period, call again starting the day after
toDate.

Args:
    fromDate: Start date YYYY-MM-DD (default: today)
    toDate: End date YYYY-MM-DD (default and maximum: fromDate+14)
    exchange: Optional exchange filter, e.g. 'US' for US-only results
NameRequiredDescriptionDefault
toDateNo
exchangeNo
fromDateNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already establish the safe read-only, idempotent profile. The description adds meaningful behavioral detail beyond that: the hard 15-day truncation, that the served window is reported back in fromDate/toDate, and the continuation pattern for longer ranges.

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 tool's purpose, then the range constraint and pagination rule, then the argument reference. The Args section slightly repeats the 14-day maximum already stated in the prose, a minor redundancy.

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

Completeness4/5

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

Given three optional parameters, no output schema, and 0% schema description coverage, the description covers the essential inputs, the truncation behavior, and the response window metadata. It could say more about the returned earnings fields, but the core calling information is present.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does so well. It documents all three parameters with formats, defaults, the 14-day maximum, and an exchange-filter example, adding substantial meaning beyond the bare schema.

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

Purpose4/5

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

States a specific verb and resource: returns upcoming earnings dates across all stocks for a date range. The phrases 'upcoming' and 'across all stocks' implicitly distinguish it from past-earnings and single-ticker siblings, but no sibling is named explicitly.

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

Usage Guidelines4/5

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

Gives clear operational context: at most 15 days per call, and how to continue with multiple calls for longer periods. It does not name an alternative tool or state when another earnings-calendar sibling would be preferable, so it stops short of full when-to-use guidance.

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

get_earnings_call_summaryA
Read-onlyIdempotent
Inspect

Returns the most recent earnings call summary for a ticker — management guidance text, overall call sentiment (positive / neutral / negative with a one-line rationale), and AI-extracted highlights and lowlights from the call as {title, content} bullets.

This is a structured summary derived from the call, not the raw
transcript text. Useful for "what did management say about X on the
last call", "was the most recent call bullish or bearish", or
"summarise the highlights from MSFT's latest earnings".

Only the most recent quarter is stored per ticker; for historical
EPS actual-vs-estimate series use get_earnings_history.

Args:
    ticker: Stock ticker (e.g. 'AAPL', 'NVDA').

Returns:
    { ticker, fiscal_year, fiscal_quarter, guidance,
      sentiment: { label, summary },
      highlights: [ { title, content }, ... ],
      lowlights:  [ { title, content }, ... ] }
NameRequiredDescriptionDefault
tickerYes

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds beyond these by noting it's a structured summary (not raw transcript), that only the most recent quarter is stored, and that highlights are 'AI-extracted', implying potential unreliability. This is useful context but doesn't cover failure modes or rate limits.

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

Conciseness5/5

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

The description is front-loaded with the core purpose and each sentence adds value: content, usage guidance, sibling differentiation, and parameter/return details. No filler or tautology; structured with Args and Returns for clarity.

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 single-parameter, read-only tool, the description is complete: it explains input, output format, data scope, and limitations (only most recent quarter). It even provides the return JSON structure, so no separate output schema is needed.

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

Parameters5/5

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

Schema coverage is 0%, so the description fully compensates. The Args section explains 'ticker' with concrete examples ('AAPL', 'NVDA') and clearly states it's a stock ticker. The return structure is also described, making the parameter's purpose unambiguous.

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

Purpose5/5

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

The description clearly states the tool returns the most recent earnings call summary for a ticker, enumerating specific components (guidance, sentiment, highlights, lowlights). It distinguishes itself from raw transcript and sibling tools like get_earnings_history.

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

Usage Guidelines5/5

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

Explicit use cases are provided (e.g., 'what did management say about X', 'was the call bullish or bearish'). It directly names an alternative (get_earnings_history) for historical EPS series, giving clear when-to-use vs. when-not-to guidance.

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

get_earnings_historyA
Read-onlyIdempotent
Inspect

Quarterly earnings time series for a ticker. Chart-ready: each quarter row is {period, report_date, actual_eps, estimate_eps, eps_surprise_pct, prior_year_eps, eps_yoy_change_pct, actual_revenue, estimate_revenue, revenue_surprise_pct, net_income, ...}, ordered oldest-first so a bar chart of actual vs. estimate EPS, or a YoY trend line, plots directly.

Also returns next_quarter — the upcoming scheduled report with the
consensus estimate, low/high estimate band, and expected report date
— for forward-looking charts.

Use for: "AAPL earnings history", "earnings surprise trend", "did
NVDA beat last quarter", "EPS beat/miss the past 4 quarters".

Args:
    ticker: Stock ticker (e.g. 'AAPL', 'NVDA').
    quarters: Number of most-recent reported quarters to return
               (default 8, max 40).
NameRequiredDescriptionDefault
tickerYes
quartersNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark this as read-only/idempotent; the description adds chart-readiness, oldest-first ordering, field lists, and next_quarter metadata, enriching the behavioral contract with no contradictions. This is a strong addition beyond structured annotations.

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

Conciseness5/5

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

The description is longer than average but well-organized: overview, data shape, next_quarter, use cases, and args. No fluff; each section adds distinct value, and the structure makes it easy to scan.

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

Completeness5/5

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

With no output schema, the description fully describes the return rows and ordering, making it self-contained for an agent to predict output. It also covers the optional quarters parameter behavior, leaving little ambiguity.

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

Parameters5/5

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

The input schema only lists types and a default; the description compensates by documenting both parameters, specifying ticker format and the quarters default (8) and maximum (40), filling the 0% schema coverage gap completely.

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

Purpose5/5

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

The description opens with 'Quarterly earnings time series for a ticker,' a specific verb+resource statement, and later lists concrete use cases like 'AAPL earnings history' and 'EPS beat/miss the past 4 quarters,' clearly distinguishing it from sibling earnings tools like get_earnings_calendar.

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 'Use for' section provides explicit query examples that signal when to invoke this tool, but it does not name alternatives or exclusion criteria, so it falls short of the full 'when-not' guidance. The examples are enough to place it in context, but explicit exclusions would push to 5.

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

get_economic_calendarA
Read-onlyIdempotent
Inspect

Returns upcoming and recent economic events (Fed meetings, jobs reports, CPI, GDP).

Defaults to US events at High/Medium impact only because the raw feed includes
hundreds of low-impact items from every country.

For what data was released (how the jobs report or CPI came in), set daysBack to 35;
the result keeps the latest actual of each High-impact release (payrolls, CPI, ISM),
then the events nearest today.

A row with a numeric actual and estimate carries vsEstimate {diff, label: above|below|in line},
actual minus estimate; the label gives direction only, so judge good or bad yourself.

Args:
    daysBack: Days to look back (default 0)
    daysForward: Days to look forward (default 7)
    fromDate: Start date ISO format (alternative to daysBack)
    toDate: End date ISO format (alternative to daysForward)
    countries: Comma-separated country names to keep (default 'US').
               Pass an empty string to disable the country filter.
               Common values: 'US','UK','Germany','Japan','China','Canada','France'.
    impact: Comma-separated impact levels to keep (default 'High,Medium').
            Valid values: 'High','Medium','Low'. Pass empty to keep all levels.
    limit: Max events returned after filtering (default 50, max 200); a large limit is also cut to
           the events nearest now so the result fits, and the result says how many were left out.

Returns: { totalMatched, returned, filters, economicCalendar: [...] }.
NameRequiredDescriptionDefault
limitNo
impactNoComma-separated impact levels to keep: High, Medium, Low (default 'High,Medium'); pass '' to keep all.High,Medium
toDateNo
daysBackNo
fromDateNo
countriesNoComma-separated country names to keep (default 'US'); pass '' to keep all. Examples: 'US','UK','Germany','Japan','China'.US
daysForwardNo

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (readOnly/idempotent/openWorld), it discloses the noisy-ness of the raw feed and why defaults filter, the truncation behavior when limit is large ('cut to the events nearest now... the result says how many were left out'), and the exact composition of the vsEstimate delta field including that the label is direction-only. These are non-obvious behaviors an agent needs.

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

Conciseness4/5

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

Front-loaded purpose sentence followed by a rationale, a special-case instruction, and an organized Args block; the Returns line prevents the reader from guessing. It is somewhat long and the countries/impact text partially duplicates the schema descriptions, which is minor waste but not 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?

With no output schema and 7 undocumented-in-schema parameters, the description still supplies both the parameters and the return shape ({ totalMatched, returned, filters, economicCalendar }) plus the nested vsEstimate semantics. Nothing needed to call or interpret the tool is missing.

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

Parameters5/5

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

Schema description coverage is only 29%, so the description carries the burden and does so fully: it documents all seven parameters with defaults, the fromDate/toDate-vs-daysBack/daysForward alternatives, valid enum-ish values for impact ('High','Medium','Low'), common country values, and the empty-string convention for disabling filters.

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 ('Returns upcoming and recent economic events') and grounds it with concrete examples (Fed meetings, jobs reports, CPI, GDP). This clearly separates it from company-specific siblings like get_earnings_calendar and get_ipo_calendar, though it never names those siblings explicitly.

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

Usage Guidelines4/5

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

Gives real when-to-use guidance: the default filtering exists 'because the raw feed includes hundreds of low-impact items from every country,' and it explains setting daysBack to 35 to retrieve released actuals. It also explains how to opt out of each default filter. It lacks any explicit when-not-to-use or alternative-tool routing.

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

get_etf_analysisA
Read-onlyIdempotent
Inspect

Returns analyst consensus for ETFs based on weighted average of holdings' ratings.

Args:
    tickers: Comma-separated ETF tickers (e.g. 'QQQ,SPY,VTI')
NameRequiredDescriptionDefault
tickersYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint true, and destructiveHint false, establishing safety. The description adds meaningful context by explaining that the consensus is computed as a weighted average of holdings' ratings, which is a useful behavioral detail beyond the annotations.

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

Conciseness5/5

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

The description is concise, with two sentences plus an Args block. It front-loads the core purpose and gives an example without unnecessary detail. Every sentence earns its place.

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

Completeness4/5

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

This is a low-complexity tool with one parameter and no output schema. The description covers the purpose, parameter format, and methodology, which is sufficient for basic usage. It does not describe the response format, but that gap is somewhat acceptable given the absence of an output schema.

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

Parameters4/5

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

The schema provides no description for the 'tickers' parameter, so the description compensates by specifying 'comma-separated ETF tickers' with an example (QQQ,SPY,VTI). However, it only mentions the string form and omits the array alternative allowed by the schema, and does not specify any constraints like limits.

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

Purpose5/5

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

The description clearly states it returns analyst consensus for ETFs based on a weighted average of holdings' ratings, providing a specific verb, resource, and methodology. This distinguishes it from sibling ETF tools like get_etf_holdings or get_etf_exposures.

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 ETF analyst consensus queries but does not explicitly mention alternatives or when not to use this tool. Differentiation from sibling tools is left to the user rather than being explicitly stated.

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

get_etf_exposuresA
Read-onlyIdempotent
Inspect

Returns the list of ETFs that hold a specific stock, sorted by holding market value (largest first).

Args:
    ticker: Stock ticker (e.g. 'MSFT', 'AAPL')
    page: Page number (default 1)
    page_size: Results per page (default 20, max 100)

Returns per ETF: etfTicker, etfCompanyName, etfCategory, aum, expenseRatio,
holdingWeight (% of ETF in this stock), holdingMarketValue ($),
holdingNumOfShares, weightInAsset (% of stock's outstanding shares held by this ETF),
etfAnalystConsensusScore, etfSmartScore. Also returns totalCount (total ETFs holding the stock).
NameRequiredDescriptionDefault
pageNo
tickerYes
page_sizeNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering safety. The description adds behavioral details beyond these: sorting by holding market value (largest first), pagination behavior (page, page_size defaults and max 100), and the exact list of per-ETF fields returned. This enriches the annotation baseline without contradiction.

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

Conciseness5/5

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

The description is well-structured with a clear one-sentence purpose, followed by an Args block and a Returns block. Every line adds useful information—parameter defaults, max page_size, and per-ETF fields—with no fluff or repetition.

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

Completeness5/5

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

The description covers inputs, outputs, sorting, and pagination completely. There is no output schema, so the detailed return fields are essential and provided. Given the tool's moderate complexity and strong annotations, no critical information is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries full responsibility. It explains each parameter: ticker with examples, page with default, page_size with default and max. This fully compensates for the lack of schema descriptions and adds practical usage guidance.

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

Purpose5/5

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

The description clearly states 'Returns the list of ETFs that hold a specific stock, sorted by holding market value (largest first).' This uses a specific verb ('Returns'), identifies the resource (ETFs holding a specific stock), and distinguishes it from sibling tools like get_etf_holdings (which likely lists holdings of a given ETF) and get_etf_top_stocks.

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

Usage Guidelines4/5

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

The description implies a clear use case: finding which ETFs hold a given stock, with sorting and pagination details. However, it does not explicitly state when to use this tool over alternatives such as get_etf_holdings or get_etf_screener, nor does it mention exclusions. The context is clear but not explicitly differentiated.

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

get_etf_forecastA
Read-onlyIdempotent
Inspect

Returns the analyst forecast for a specific ETF: consensus, price target, upside.

Args:
    ticker: ETF ticker (e.g. 'QQQ')
NameRequiredDescriptionDefault
tickerYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare this as read-only, idempotent, and non-destructive. The description adds the output fields (consensus, price target, upside), which gives some behavioral context beyond the annotations. However, it does not discuss error handling, rate limits, or other behavioral nuances, so it remains at a moderate level.

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

Conciseness5/5

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

The description is very concise: one sentence stating purpose, followed by a clear Args section. It is front-loaded with the key information and contains no filler. Every sentence earns its place.

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

Completeness4/5

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

For a simple one-parameter read-only tool with no output schema, the description adequately covers the main purpose and expected return fields. It does not explicitly mention that only one ETF is processed at a time or define terms like 'upside', but the core information is sufficient for an agent to invoke the tool correctly.

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

Parameters5/5

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

The input schema only defines 'ticker' as a string with no description. The tool description compensates fully by explaining what ticker means and providing an example ('QQQ'). This is clear and directly aids the agent in selecting and formatting the parameter.

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

Purpose5/5

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

The description clearly states the tool returns the analyst forecast for a specific ETF, listing consensus, price target, and upside. It uses a specific verb ('Returns') and resource ('analyst forecast for a specific ETF'), distinguishing it from sibling tools like get_etf_exposures or get_etf_screener.

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

Usage Guidelines3/5

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

The description implies the tool is for retrieving forecast data for a single ETF, which narrows its scope. However, it does not explicitly mention when to prefer this over related tools like get_etf_analysis or get_etf_holdings, nor does it provide exclusions. Usage context is present but not fully articulated.

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

get_etf_holdingsA
Read-onlyIdempotent
Inspect

List the constituents of an ETF.

Base mode (default): returns every holding with its weight % in the
index — {ticker, name, weight_pct}.

Top-performers mode: pass `sort_by` (one of '5d', 'month', 'ytd',
'year') and a `limit` > 0 to get the top N constituents by that
period's return. Each row carries weight_pct, current_price,
return_pct for the chosen period, and analyst_consensus.

Use the top-performers mode for questions like 'which stocks in XLK
rose most this week' without separately calling a screener.

Args:
    ticker: ETF ticker (e.g. 'SPY', 'QQQ').
    sort_by: '' for full list, or one of '5d', 'month', 'ytd', 'year'.
    limit: 0 to return all constituents; >0 (max 50) to return top N. A
        negative or non-numeric limit is REJECTED rather than treated as 0 —
        `limit` picks the mode here, so defaulting an unusable one would
        answer a ranked top-N request with the full unranked list.
NameRequiredDescriptionDefault
limitNo
tickerYes
sort_byNoOptional period to sort by, descending: '5d', 'month', 'ytd' or 'year'; when set, returns top performers instead of the full list.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish the safe read-only profile, and the description adds genuine extra context: the returned field sets per mode ({ticker, name, weight_pct} vs weight_pct, current_price, return_pct, analyst_consensus) and the limit validation rule that negative/non-numeric values are rejected rather than coerced. Missing pieces like rate limits are minor for an idempotent read.

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 mode distinction before the Args block, and each sentence carries information. The rationale paragraph justifying the negative-limit rejection is unusually verbose for an edge case, but it is the kind of detail that prevents a silent mis-call.

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 3-parameter read tool with no output schema, the description supplies the mode semantics, the per-mode return fields, and the boundary behavior of the only tricky parameter. Nothing an agent needs in order to invoke it correctly is left unstated.

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

Parameters5/5

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

With schema description coverage at only 33% and no enums declared in the schema, the description carries the load and does so thoroughly: it enumerates sort_by's valid values ('5d', 'month', 'ytd', 'year'), defines limit's 0-vs-positive semantics with a max of 50, and explains why negative limits are rejected. This is meaning well beyond what the schema provides.

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

Purpose4/5

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

States a concrete verb+resource ("List the constituents of an ETF") and spells out the two operating modes and their exact return shapes, so an agent knows precisely what it gets. It partially differentiates from siblings by noting it replaces a separate screener call, but never distinguishes itself from get_etf_top_stocks, which appears to overlap with the top-performers mode.

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?

Gives explicit mode-selection rules: default for the full holding list, and `sort_by` plus `limit`>0 for top-N by period, with a concrete motivating question ("which stocks in XLK rose most this week"). It even steers the agent away from a redundant screener call. It stops short of naming when to prefer the sibling get_etf_top_stocks or get_etf_exposures instead.

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

get_etf_screenerA
Read-onlyIdempotent
Inspect

Filters ETFs by asset class, category, and focus.

Args:
    assetClass: Alternatives, AssetAllocation, Commodities, Currency, Equity, FixedIncome.
                Its parameter description lists the category and focus values each
                class answers.
    category: e.g. SizeAndStyle (Equity's broad-market funds), Sector,
              CorporateBroadBased.
    focus: e.g. TotalMarket, LargeCap, InformationTechnology, HighYield.
           Use this for a sector question ('tech ETFs' -> InformationTechnology);
           the screener has no `sector` filter.
           For a factor or region fund (momentum, growth, emerging markets), look
           up the ETFs you know for it by ticker with get_assets_data.
    limit: Rows to return (default 20, max 100).

Returns: `count` (all ETFs matching the filters) and `data` rows: ticker, name,
         price, smartScore, analystConsensus, priceTarget, upsidePct,
         dividendYieldPct, expenseRatioPct, aum, currency, assetClass, segment,
         category, focus, index, brand, holdingsCount, isCurrencyHedged and
         isUcitsCompliant (true/false), and isLeveraged/isInverse/isActivelyManaged
         when true.
NameRequiredDescriptionDefault
focusNoFocus filter, e.g. 'LargeCap', 'InformationTechnology', 'HighYield'. This is the screener's SECTOR filter — there is no separate sector parameter.
limitNoRows to return (default: 20, max: 100).
categoryNoCategory filter, e.g. 'SizeAndStyle', 'Sector', 'CorporateBroadBased' (the values per assetClass are listed under assetClass)
assetClassNoAsset class filter. Each class with the category and focus values it answers, spelled exactly as listed (a category or focus taken from another assetClass matches no ETF): Equity: category SizeAndStyle, Sector, HighDividendYield; focus TotalMarket, LargeCap, MidCap, SmallCap, MicroCap, ExtendedMarket, InformationTechnology, Financials, Industrials, HealthCare, ConsumerDiscretionary, Energy, RealEstate, CommunicationServices, Materials, ConsumerStaples, Utilities, Theme, HighDividendYield; broad-market funds (S&P 500, total market) are category SizeAndStyle, focus LargeCap or TotalMarket FixedIncome: category BroadMarketBroadBased, CorporateBroadBased, GovernmentLocalAuthorityMunicipal, GovernmentTreasury, GovernmentInflationLinked, CorporateBankLoans, CorporatePreferred, BroadMarketAssetBacked, GovernmentBroadBased, GovernmentMortgageBacked, GovernmentNonNativeCurrency, CorporateConvertible, CorporateAssetBacked, GovernmentAgency; focus InvestmentGrade, BroadCredit, HighYield Commodities: category PreciousMetals, BroadMarket, Energy, Agriculture, IndustrialMetals; focus BroadMarket, Gold, Silver, CrudeOil, NaturalGas, Copper, Platinum, CarbonCredits, Palladium, Wheat, Corn, Gasoline, Sugar, Soybeans Currency: category Pair, Basket; no focus filter; spot crypto funds (bitcoin, ether) are assetClass Currency Alternatives: category HedgeFundStrategies, TacticalTools; focus GlobalMacro, LongShort, Volatility, Spreads; buffer, defined-outcome and option-income funds have no filter value: screen assetClass=Alternatives alone AssetAllocation: category AssetAllocation; focus TargetOutcome, TargetRisk, TargetDate Factor and region funds (momentum, growth, value, quality, low volatility, emerging markets, Asia, Europe) have no screener value: look up the ETFs you know for them by ticker with get_assets_data (MTUM, SPMO for momentum; VWO, IEMG for emerging markets).

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld, so the safety profile is covered; the description adds the meaningful extras — the absence of a sector filter, the empty-result failure mode for mismatched filter values, and the limit default/max. It stops short of describing pagination or ordering behavior, so it is strong rather than exhaustive.

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 single-sentence purpose followed by cleanly separated Args and Returns blocks. Some of the Args text restates the schema's assetClass enumeration in condensed form, which is mild redundancy, but the Returns field list earns its space because no output schema exists.

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

Completeness5/5

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

With no output schema, the description carries the full return contract — `count` plus the exact row fields including conditional flags like isLeveraged/isActivelyManaged 'when true'. Combined with defaults, limits, and the fallback path for uncovered factors/regions, an agent has everything needed to call it correctly and interpret the result.

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

Parameters4/5

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

Schema coverage is 100% and the assetClass field description is already extremely detailed, so much of the Args section duplicates structured data. It still adds interpretive value by recasting `focus` as the de-facto sector filter and giving worked examples ('tech ETFs' -> InformationTechnology) that clarify intent rather than just enumerating values.

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 ('Filters ETFs') and enumerates the three facets it screens on, which distinguishes it from the single-ticker siblings like get_etf_analysis and get_etf_holdings. It also explicitly routes factor/region queries away to get_assets_data, so an agent can pick the right tool without opening a schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('tech ETFs' -> focus=InformationTechnology), an explicit when-not (the screener has no `sector` filter), and a named alternative with concrete ticker examples ('momentum -> MTUM/SPMO via get_assets_data'). The assetClass section further warns that values taken from the wrong class match no ETF, which prevents a costly misuse.

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

get_etf_top_stocksA
Read-onlyIdempotent
Inspect

Returns the top stock holdings within an ETF along with their analyst ratings.

Args:
    ticker: ETF ticker (e.g. 'QQQ')
NameRequiredDescriptionDefault
tickerYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that it returns top stock holdings and analyst ratings but does not disclose additional behavioral details such as the number of holdings returned, sorting order, or pagination. This adds some value beyond annotations but lacks depth.

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

Conciseness5/5

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

The description is a single concise sentence followed by a brief Args line, with no redundant or filler content. Information is front-loaded and every sentence earns its place.

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

Completeness3/5

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

Despite strong annotations and a simple one-parameter schema, the description lacks crucial details about what 'top' means—such as the number of holdings or their ordering. With no output schema, the agent is left without complete information about the return structure, though the tool is inherently simple.

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 Args section in the description explains the single 'ticker' parameter as 'ETF ticker (e.g. 'QQQ')', providing meaning beyond the schema's bare property name. This compensates for the 0% schema description coverage, though it is still minimal and doesn't mention case sensitivity or format constraints.

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

Purpose5/5

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

The description clearly states the tool 'Returns the top stock holdings within an ETF along with their analyst ratings,' using a specific verb and resource. The qualifier 'top' and the addition of 'analyst ratings' distinguish it from sibling tools like get_etf_holdings, making its purpose unambiguous.

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

Usage Guidelines3/5

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

The description implies usage when top holdings with analyst ratings are needed, but it does not explicitly state when to use this tool over alternatives such as get_etf_holdings. No when-to-use or when-not-to-use guidance is provided, so the usage context is only implied.

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

get_financialsA
Read-onlyIdempotent
Inspect

Financial statements time series for a ticker, chart-ready. Each period is a flat ~25-field object spanning the income statement (revenue, gross / operating / EBITDA / net margins, EPS, R&D), the balance sheet (total assets, total debt, total equity, net debt, cash + short-term investments), the cash flow statement (operating cash flow, free cash flow, capex, dividends paid, buybacks), and two computed ratios (current ratio, debt-to-equity).

Margins are emitted as percentages — gross_margin_pct of 49.27
means 49.27%. Cash outflows (dividends_paid, buybacks) are
returned as negative numbers, matching the source convention.

Use for: "AAPL revenue and FCF over the last 10 years", "show
margins trend", "is net debt rising", "EPS growth", "R&D as %
of revenue".

Args:
    ticker: Stock ticker (e.g. 'AAPL', 'NVDA').
    period: 'annual' (default), 'quarterly', or 'ttm' (trailing
             twelve months). Annual periods extend ~9 years back;
             quarterly extends ~37 quarters back.
    count: Number of most-recent periods to return (default 5,
            max 40), ordered oldest-first inside the returned
            `periods` array.
NameRequiredDescriptionDefault
countNo
periodNo'annual' (default), 'quarterly', or 'ttm'annual
tickerYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already state readOnlyHint=true and idempotentHint=true, but the description adds valuable behavioral conventions beyond that: margins are percentages ('49.27 means 49.27%'), cash outflows are negative numbers ('matching the source convention'), period ranges (~9 years annual, ~37 quarters), and ordering (oldest-first). These details are not in annotations or schema.

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

Conciseness5/5

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

The description is detailed but every sentence serves a purpose: overview, field enumeration, formatting conventions, use cases, and parameter docs. It is front-loaded with the core purpose, then structured logically. No wasted words.

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?

Without an output schema, the description must explain the return value and does so thoroughly: it lists the ~25 fields, describes the flat structure, explains the computed ratios, and documents all three parameters with defaults and constraints. The tool's complexity is fully addressed.

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

Parameters5/5

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

Schema description coverage is only 33% (only period has any description). The description compensates fully: explains ticker with examples, period with allowed values and data history lengths, and count with default, max, and ordering semantics. This adds meaning far beyond the raw schema.

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

Purpose5/5

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

Description opens with a specific statement: 'Financial statements time series for a ticker, chart-ready.' It names the resource (financial statements) and the action (get time series), and elaborates with a detailed field breakdown covering income statement, balance sheet, cash flow, and ratios, clearly distinguishing it from sibling quote/price tools.

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

Usage Guidelines4/5

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

Provides explicit 'Use for' examples that map to common user intents ('AAPL revenue and FCF over the last 10 years', 'show margins trend', etc.). It does not explicitly name alternatives or state when not to use it, but the specificity of the examples makes the intended scenario obvious.

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

get_forex_historicalA
Read-onlyIdempotent
Inspect

Daily OHLC price history for a forex pair, covering the whole date range you ask for.

Chart-ready: while the range fits in one response, each row is the price feed's
own daily row — {symbol, date, open, high, low, close, volume, change,
changePercent, vwap} — newest first, ordered for direct plotting as an exchange-rate history.

A range too long to return day by day is aggregated into coarser OHLC bars
rather than cut short. `interval` names which (weekly/monthly/quarterly/yearly),
each bar spans `date` to `endDate`, and a bar's high/low are that period's real
extremes. Aggregated bars carry the same fields except `vwap`, which the feed
defines per session only. Re-request a narrower from_date/to_date for daily rows.

`summary` always describes the FULL requested window, computed from the daily
data: its first and last close with dates, its high and low with dates, and the
trailing changes the window reaches back far enough to support. Base any
"starting rate", "a year ago" or "period high/low" claim on `summary`, or on a
bar that is actually present.

`summary.windowHigh`/`windowLow` describe THIS window. A quote tool's
yearHigh/yearLow are the feed's trailing range, roughly the past 12-13
months — a different period — so label those as trailing-year figures. For the current level alone, call get_forex_quote.

`volume` on a forex row is a per-venue tick count, not market turnover — FX is
over-the-counter. Read it as a liquidity hint at best.

Args:
    symbol: Forex pair symbol (e.g. 'EURUSD')
    from_date: Start date YYYY-MM-DD (optional)
    to_date: End date YYYY-MM-DD (optional)
NameRequiredDescriptionDefault
symbolYesForex pair, uppercase with no slash, e.g. 'EURUSD'.
to_dateNo
from_dateNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial context beyond them: automatic aggregation into coarser bars for long ranges, that aggregated bars drop `vwap`, that rows are newest-first, and that `volume` is a per-venue tick count rather than market turnover. It also clarifies the semantics of summary.windowHigh/windowLow versus a quote tool's trailing-year figure.

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 core purpose and is organized into digestible paragraphs, most of which (volume caveat, summary semantics, aggregation behavior) earn their place. It is somewhat verbose for a 3-parameter tool, and references to the non-existent `interval` arg add noise.

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

Completeness5/5

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

With no output schema, the description carries the full burden of describing returns, and it does so thoroughly: enumerates the row fields, explains the summary block, describes aggregated-bar fields, and gives plotting intent. An agent has everything needed to call and interpret it.

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

Parameters3/5

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

Schema coverage is only 33% (only `symbol` is described in the schema), so the description must compensate, and it partially does by giving the date format (YYYY-MM-DD) and marking from/to as optional. However it never explains the empty-string default or what omitting a date returns, and it confusingly discusses an `interval` field that is not an input parameter.

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

Purpose5/5

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

Opens with a specific verb+resource+scope: 'Daily OHLC price history for a forex pair, covering the whole date range you ask for.' It explicitly separates itself from the sibling get_forex_quote ('For the current level alone, call get_forex_quote'), so an agent can route without opening a schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use guidance (historical range vs 'current level alone') and names the alternative tool get_forex_quote. It also tells the agent what to do when a range is too long ('Re-request a narrower from_date/to_date for daily rows') and which source to base derived claims on.

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

get_forex_quoteA
Read-onlyIdempotent
Inspect

Returns the real-time exchange rate quote for a forex pair.

Common pairs: EURUSD, GBPUSD, USDJPY, USDCHF, AUDUSD, USDCAD.

yearHigh / yearLow are the feed's trailing-year range, roughly the past
12-13 months: call them trailing-year figures. For a year-to-date or
calendar-year change, a dated extreme or an exact 52-week figure use
get_forex_historical, since the quote does not date its extremes.

A pair quotes the BASE currency (first three letters) in units of the
QUOTE currency (last three): USDHUF 320 means 1 USD = 320 HUF. A rising
rate, or a rate above its priceAvg50 / priceAvg200, is the base
strengthening against the quote. changePercentage is measured against
previousClose as of the quote's timestamp. Spot FX is closed from Friday
17:00 to Sunday 17:00 New York time; a quote stamped in that window
shows the change as of the last close, not a move made that day.

Args:
    symbol: Forex pair symbol (e.g. 'EURUSD')
NameRequiredDescriptionDefault
symbolYesForex pair, uppercase with no slash, e.g. 'EURUSD', 'GBPUSD', 'USDJPY'.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so this is safely a read. The description goes well beyond them: it discloses that yearHigh/yearLow are feed trailing-year (~12-13 month) figures rather than calendar values, that spot FX is closed Friday 17:00 to Sunday 17:00 NY time, and that a quote in that window shows the last close rather than a same-day move. These are real behavioral caveats an agent could not infer from 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?

Front-loads the one-line purpose, then groups the interpretation, trailing-year, and market-hours gotchas, each earning its place with no redundant restatement. Long but dense; every sentence addresses a distinct pitfall.

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

Completeness5/5

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

With no output schema, the description carries return-value burden and does so: it defines yearHigh/yearLow, changePercentage's previousClose basis, and the meaning of priceAvg50/priceAvg200 relationships. Nothing material for correct invocation or interpretation appears missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds genuine semantic value by explaining the base/quote convention ('USDHUF 320 means 1 USD = 320 HUF') and how a rising rate relates to the averages, which the schema's terse 'uppercase with no slash' note does not. It stops short of adding format/syntax beyond the schema, so a 4 rather than 5.

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 ('Returns the real-time exchange rate quote for a forex pair') and immediately names the sibling to use instead for historical figures (get_forex_historical) and the broader list variant is implied by common pairs. An agent can distinguish it from get_all_forex_quotes and get_forex_historical without opening any schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: 'For a year-to-date or calendar-year change, a dated extreme or an exact 52-week figure use get_forex_historical.' It also explains the market-hours caveat that determines whether a quote is actionable. Clear when-to-use and when-to-look-elsewhere guidance.

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

get_hedge_fund_activityA
Read-onlyIdempotent
Inspect

Returns per-fund hedge-fund holdings and recent transactions for a ticker — which institutions hold it, how much each changed (bought/sold), the holding value, % of portfolio, and the fund's TipRanks rank/stars.

Complements get_hedge_fund_holdings (the aggregate share-count timeseries).

Args:
    ticker: Stock ticker (e.g. 'AAPL')
    limit: Max funds to return (default 25, max 100)

Returns JSON: {ticker, company, sentiment, trend_action, trend_value, funds}.
  - funds: [{manager, institution, shares_change, direction, holding_value,
      pct_of_portfolio, as_of, rank, stars, is_active}].
NameRequiredDescriptionDefault
limitNo
tickerYes

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the limit constraint (max 100, default 25) and the return format, but does not disclose additional behavioral traits such as rate limits, pagination, or permission requirements. Since the description carries less burden due to annotations, a score of 3 is appropriate.

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

Conciseness5/5

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

The description is well-organized: a concise purpose statement, a useful complement note, an Args section, and a Returns section. It is front-loaded with the core purpose, and every sentence adds value—the detailed return structure is necessary given the absence of an output schema. No redundant text.

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

Completeness5/5

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

The tool has no output schema, so the description takes on the responsibility of explaining the return shape. It provides a comprehensive breakdown of the JSON response, including the funds array fields (manager, shares_change, direction, holding_value, etc.). Combined with parameter documentation and the relationship to the sibling tool, the description is complete for the tool's complexity.

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

Parameters5/5

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

The schema provides only types and a default for limit, while the description's Args section adds significant meaning: ticker is explained as 'Stock ticker (e.g. 'AAPL')' and limit is described as 'Max funds to return (default 25, max 100)', including a range not present in the schema. This fully compensates for the 0% schema description coverage.

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

Purpose5/5

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

The description clearly states that the tool returns per-fund hedge-fund holdings and recent transactions for a ticker, with a specific list of fields (holding value, % of portfolio, rank/stars). It also distinguishes itself from the sibling tool get_hedge_fund_holdings by noting it complements the aggregate share-count timeseries, making the purpose and scope unambiguous.

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

Usage Guidelines4/5

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

The description explicitly mentions 'Complements get_hedge_fund_holdings (the aggregate share-count timeseries)', which indicates a usage distinction: this tool provides per-fund detail, while the sibling provides aggregate data. However, it does not explicitly state 'use this when you need X' or 'use that instead of Y', so the guidance is somewhat implicit rather than a full when/when-not directive.

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

get_hedge_fund_holdingsA
Read-onlyIdempotent
Inspect

Hedge-fund share-count history for a ticker.

Returns the most recent `limit` snapshots (max 60) plus a summary
block (snapshot_count, first/last date and shares). Each row:
{date, shares}. Sourced from quarterly 13F filings; lags by up to
45 days.

For a snapshot of current sentiment without the timeseries, use
get_assets_data and read hedgeFundSentimentData.

Args:
    ticker: Stock ticker (e.g. 'AAPL').
    limit: Max snapshots to return (default 60, max 60).
NameRequiredDescriptionDefault
limitNo
tickerYes

TDQS

A5/5.0
Behavior5/5

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

Beyond the readOnlyHint and idempotentHint annotations, the description discloses meaningful behavioral details: the return structure ('Each row: {date, shares}' plus a summary block), the limit cap of 60, and the data freshness lag. This gives the agent accurate expectations without contradicting annotations.

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

Conciseness5/5

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

The description is concise and well-structured: the core purpose is front-loaded in the first sentence, followed by return format, source, and alternative in a compact format. Every sentence contributes value, with no redundancy or filler.

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

Completeness5/5

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

For a tool without an output schema, the description fully covers the return format, parameter limits, data freshness, and alternative tooling. It provides sufficient context for an agent to select and invoke the tool correctly in any relevant scenario.

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

Parameters5/5

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

The input schema has no descriptions (0% coverage), but the description compensates fully: ticker is defined as 'Stock ticker (e.g. 'AAPL')' and limit as 'Max snapshots to return (default 60, max 60)'. Both parameters receive meaning beyond the bare schema.

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

Purpose5/5

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

The description clearly states it returns 'Hedge-fund share-count history for a ticker' with a specific verb ('Returns') and resource. It also distinguishes from sibling tools by explicitly referencing get_assets_data for current sentiment, making its purpose unique and unambiguous.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance by stating 'For a snapshot of current sentiment without the timeseries, use get_assets_data and read hedgeFundSentimentData.' It also notes the data source (quarterly 13F filings) and 45-day lag, making clear when this tool is appropriate (historical trends) versus alternatives.

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

get_index_historicalA
Read-onlyIdempotent
Inspect

Daily OHLC price history for a major market index, covering the whole date range you ask for.

Chart-ready: while the range fits in one response, each row is the price feed's
own daily row — {symbol, date, open, high, low, close, volume, change,
changePercent, vwap} — newest first, ordered for direct plotting as an index history.

A range too long to return day by day is aggregated into coarser OHLC bars
rather than cut short. `interval` names which (weekly/monthly/quarterly/yearly),
each bar spans `date` to `endDate`, and a bar's high/low are that period's real
extremes. Aggregated bars carry the same fields except `vwap`, which the feed
defines per session only. Re-request a narrower from_date/to_date for daily rows.

`summary` always describes the FULL requested window, computed from the daily
data: its first and last close with dates, its high and low with dates, and the
trailing changes the window reaches back far enough to support. Base any
"starting level", "a year ago" or "period high/low" claim on `summary`, or on a
bar that is actually present.

`summary.windowHigh`/`windowLow` describe THIS window. A quote tool's
yearHigh/yearLow are the feed's trailing range, roughly the past 12-13
months — a different period — so label those as trailing-year figures. For the current level alone, call get_index_quote.

Takes the same index symbols and broker/CFD-name mapping as
get_index_quote — e.g. ^NDX for 'US Tech 100' / 'Nasdaq 100', ^IXIC for
'Nasdaq Composite', ^GDAXI for 'Germany 40'.

Args:
    symbol: Index symbol (e.g. '^GSPC' for S&P 500)
    from_date: Start date YYYY-MM-DD
    to_date: End date YYYY-MM-DD (defaults to today)
NameRequiredDescriptionDefault
symbolYesIndex symbol, e.g. '^GSPC' for the S&P 500.
to_dateNo
from_dateYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive, openWorld), but the description adds substantial behavior beyond them: long ranges are aggregated into coarser bars rather than truncated, aggregated bars omit vwap, rows come newest-first, and summary always spans the full requested window. These are non-obvious response-shaping behaviors that materially affect interpretation.

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 purpose and organized into purposeful paragraphs, with the routing hint placed at the end. It is on the long side and repeats the symbol-mapping point already implied, but virtually every sentence carries operational information rather than 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?

With no output schema, the description fully carries the return-shape burden: field list, ordering, aggregation fallback, which fields survive aggregation, and summary semantics. An agent has everything needed to call it and correctly interpret the result.

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

Parameters4/5

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

Schema coverage is only 33% (from_date and to_date have no schema descriptions), so the description must compensate — and it does, supplying YYYY-MM-DD formats, the 'to_date defaults to today' default, and concrete symbol examples (^GSPC, ^NDX, ^GDAXI). It does not clarify the boundary inclusivity of the range or the interval control it references.

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

Purpose5/5

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

Opens with a specific verb+resource+scope: 'Daily OHLC price history for a major market index, covering the whole date range you ask for.' It also explicitly names the sibling it is not (get_index_quote) for the current-level case, so an agent can distinguish it 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 Guidelines5/5

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

Gives explicit routing: 'For the current level alone, call get_index_quote', and states the remedy for oversized ranges ('Re-request a narrower from_date/to_date for daily rows'). It also tells the agent which construct to base claims on (summary or a present bar) versus the trailing-year figures a quote tool returns.

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

get_index_quoteA
Read-onlyIdempotent
Inspect

Returns the real-time quote for a major market index.

Index symbols: ^GSPC (S&P 500), ^NDX (Nasdaq 100), ^IXIC (Nasdaq
Composite), ^DJI (Dow Jones), ^RUT (Russell 2000), ^GSPTSE (TSX),
^FTSE (FTSE 100), ^GDAXI (DAX 40), ^FCHI (CAC 40), ^STOXX50E
(Euro STOXX 50), ^IBEX (IBEX 35), ^N225 (Nikkei), ^AXJO (ASX 200),
^AORD (All Ords), ^HSI (Hang Seng), ^STI (STI), ^BSESN (Sensex),
^VIX (VIX).

Broker / CFD names map to the index they track (the same map the AI
chat uses): 'US Tech 100' / 'NAS100' / 'USTEC' -> ^NDX; 'US 500' /
'SPX500' -> ^GSPC; 'Wall Street 30' / 'US 30' -> ^DJI; 'US 2000' /
'US Small Cap 2000' -> ^RUT; 'Germany 40' / 'GER40' -> ^GDAXI;
'UK 100' -> ^FTSE; 'France 40' -> ^FCHI; 'Euro 50' / 'EU50' ->
^STOXX50E; 'Spain 35' -> ^IBEX; 'Japan 225' -> ^N225; 'Australia 200'
-> ^AXJO; 'Hong Kong 50' -> ^HSI. 'Nasdaq Composite' is
^IXIC; 'Nasdaq 100' and the Nasdaq 100 CFD names above are ^NDX —
different indices at different levels, so quote the one the user named
and name it. A bare 'Nasdaq' is ambiguous: say which one you quote. For
an index not listed here (e.g. 'S&P 100'), call it by its own symbol —
a listed index with a similar name is a different index.

yearHigh / yearLow are the feed's trailing-year range, roughly the past
12-13 months: call them trailing-year figures. For a year-to-date or
calendar-year change, a dated extreme or an exact 52-week figure use
get_index_historical, since the quote does not date its extremes.

Args:
    symbol: Index symbol (e.g. '^GSPC' for S&P 500)
NameRequiredDescriptionDefault
symbolYesIndex symbol, e.g. '^GSPC' for the S&P 500.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, open-world behavior, so the safety profile is covered. The description adds real behavioral context no structured field carries: yearHigh/yearLow are a trailing ~12-13 month feed range with undated extremes, which changes how the agent should present the data. It stops short of describing the full return shape or freshness/latency of 'real-time'.

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

Conciseness4/5

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

Long, but the bulk is content-bearing symbol mapping rather than filler, and the core statement plus the historical-tool handoff are front-loaded. The alias list is dense and could be trimmed of redundancy, but nothing reads as padding.

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

Completeness5/5

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

With no output schema, the description correctly compensates by explaining the semantics of the returned range fields and directing ambiguous-name cases. Together with the annotation coverage, an agent has everything needed to select and invoke it correctly.

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

Parameters4/5

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

Schema coverage is 100% and there is only one parameter, so the baseline would be 3. However the description goes well beyond the schema's 'e.g. ^GSPC' stub by supplying a broker/CFD alias map ('US Tech 100'/'NAS100' -> ^NDX, etc.) that lets the agent resolve natural-language index names, plus a warning about near-name collisions.

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

Purpose5/5

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

Opens with a specific verb+resource: 'Returns the real-time quote for a major market index.' The scope is unambiguous and an agent can separate it from get_index_historical, get_market_performance, and other quote tools from the first sentence alone.

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

Usage Guidelines5/5

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

Explicitly routes the agent away from this tool when the need is YTD/calendar-year changes, dated extremes, or exact 52-week figures ('use get_index_historical'). It also gives concrete disambiguation rules for ambiguous inputs (bare 'Nasdaq', 'S&P 100') and the policy of quoting the index the user named.

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

get_insider_transactionsA
Read-onlyIdempotent
Inspect

Individual corporate-insider (officers/directors, Form 4) transactions for a ticker, newest first.

Each row: insider_name, role, is_officer, is_director, action (e.g.
"Auto Sell", "Grant/Award/Other Acquisition"), side (buy/sell), shares,
price (approximate — value / shares; the source has no exact price), value,
date, filing_link (the SEC Form-4 URL), and insider_stars.

This is corporate-insider activity (Form 4). For retail/individual
investor sentiment, use get_assets_data and read investorActivity.

Args:
    ticker: Stock ticker (e.g. 'AAPL').
    limit: Max rows to return (default 30, max 100).
NameRequiredDescriptionDefault
limitNo
tickerYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context: newest-first ordering, approximate price (value/shares, no exact price from source), SEC filing links, and a detailed row layout. It does not contradict annotations.

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

Conciseness4/5

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

The description is detailed but well-structured: purpose sentence, row-field list, usage guidance, and Args. Every part contributes useful information, though the row enumeration is somewhat lengthy. It is not overly verbose given the lack of an output schema.

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

Completeness4/5

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

For a read-only list tool with no output schema, the description covers the key aspects: what is returned (all fields), ordering, data source, and an alternative for retail sentiment. Minor gaps like unclear 'insider_stars' semantics and no pagination mention prevent a perfect score.

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

Parameters5/5

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

Although the schema has no per-property descriptions (0% coverage), the description's Args section thoroughly explains both parameters: ticker with an example, and limit with default (30) and maximum (100). This fully compensates for the missing schema descriptions.

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

Purpose5/5

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

The description immediately specifies it returns individual corporate-insider (Form 4) transactions for a ticker, newest first. The phrase 'corporate-insider activity (Form 4)' and the comparison to retail sentiment clearly distinguish it from sibling tools like get_hedge_fund_activity and get_assets_data.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool ('corporate-insider activity') and when to use an alternative: 'For retail/individual investor sentiment, use get_assets_data and read investorActivity.' This is a clear usage directive with a named alternative.

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

get_investor_sentimentA
Read-onlyIdempotent
Inspect

Returns crowd / retail investor sentiment for a stock.

Args:
    ticker: Stock ticker (e.g. 'NVDA')

Returns JSON with these top-level keys:
  - investorStatsOverview: stats aggregated across ALL TipRanks
      portfolios that hold the ticker. Fields:
        * numberOfPortfolios: total active portfolios on the platform.
        * portfoliosHoldingStock: how many of them hold THIS ticker.
        * averageAllocation: average % allocation among holders (decimal).
        * percentOverLast30Days / percentOverLast7Days: change in the
          count of holders over the window (decimal; 0.013 = +1.3%).
        * investorScore: TipRanks' 0-1 score of how confident "the
          crowd" is on this stock; higher = more bullish positioning.
        * sectorAverageScore: investorScore averaged across the sector,
          for comparison.
        * sentiment: bucketed label — one of "VeryNegative",
          "Negative", "Neutral", "Positive", "VeryPositive".
        * sectorAverageSentiment: same bucket, sector-wide.
  - bestInvestorStatsOverview: same fields, but restricted to "Best
      Investors" — TipRanks users with top-decile portfolio returns
      over the trailing window. If investorStatsOverview and
      bestInvestorStatsOverview diverge (e.g. crowd is Positive but
      best investors are Negative), that's the headline signal.
  - ageDistribution: holders split by TipRanks account-tenure tier
      (NOT the investor's biological age):
        * eldest: oldest accounts on the platform
        * midRange: middle tier
        * youngest: newest accounts
      Each has percentHolders, last30DaysChange, last7DaysChange,
      and per-bucket averages (averageBeta, averageMonthlyReturn,
      dividendYield, averagePeRatio).
  - investorsAlsoBought: top other stocks held by people who hold
      this one (each: ticker, companyName, averageHoldingSize,
      lastSevenDayChange, lastThirtyDayChange, sector, sectorName,
      score, sentiment, marketCap, marketCapCurrencyCode).
  - investorsAlsoBoughtYoungest / MidRange / Eldest: same shape,
      filtered to that account-tenure bucket. Often shorter or
      empty for stocks held mostly by one cohort.
NameRequiredDescriptionDefault
tickerYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds substantial behavioral context beyond that: it explains the meaning of decimal fields (0.013 = +1.3%), clarifies that ageDistribution refers to account-tenure tiers not biological age, and highlights the divergence between crowd and best-investor sentiment as a headline signal. This exceeds the annotation baseline.

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

Conciseness4/5

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

The description is long but well-organized with clear section headers (investorStatsOverview, bestInvestorStatsOverview, ageDistribution, investorsAlsoBought). Given that no output schema is present, the detailed breakdown of return fields is justified and each section earns its place. It is front-loaded with the core purpose and then follows a logical structure.

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 tool with no output schema and a complex nested JSON response, the description is remarkably complete. It documents every top-level key, explains field semantics (including percentage decimal interpretation), notes edge cases (empty lists for cohort-specific holdings), and provides interpretation guidance (the divergence signal). This gives an agent everything it needs to understand the tool's output.

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

Parameters4/5

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

The input schema has only a 'ticker' string with no description. The description compensates by explicitly stating 'ticker: Stock ticker (e.g. NVDA)', providing an example and clarifying the expected format. Since schema coverage is 0%, the description adds critical meaning that would otherwise be missing.

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

Purpose5/5

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

The description opens with a clear, specific statement: 'Returns crowd / retail investor sentiment for a stock.' It identifies the resource (investor sentiment) and the action (returns), and distinguishes it from sibling sentiment tools like get_blogger_sentiment by focusing on TipRanks crowd/retail positioning.

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

Usage Guidelines3/5

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

The description implies when to use the tool—when you need crowd/retail sentiment for a stock—but does not explicitly compare it to alternatives like get_blogger_sentiment or get_bulls_bears_summary. No exclusion or when-not-to-use guidance is provided, so it earns a middle score.

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

get_ipo_calendarA
Read-onlyIdempotent
Inspect

Returns upcoming and recent IPOs.

Args:
    fromDate: Start date ISO format (default: today)
    toDate: End date ISO format (default: 30 days from now)
NameRequiredDescriptionDefault
toDateNo
fromDateNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the default date range (today to 30 days from now) and that it includes both upcoming and recent IPOs, but does not disclose pagination, output format, or any rate limits. This is adequate but not rich.

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

Conciseness5/5

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

The description is concise and front-loaded with the primary action. The 'Args:' section neatly lists the parameters with concise explanations, using no unnecessary words. It is both compact and well-structured.

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

Completeness3/5

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

For a simple tool with no output schema, the description gives a high-level return statement but does not describe the structure of the returned IPO data (e.g., company names, dates, exchange). Annotations and parameter explanations cover most of the needed context, but a bit more detail on return values would make it complete.

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

Parameters5/5

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

The schema has no descriptions for parameters, so the description fully compensates by explaining fromDate as 'Start date ISO format' and toDate as 'End date ISO format' with defaults. This adds clear semantic meaning beyond the bare schema fields, turning empty-string defaults into meaningful behavioral specifications.

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

Purpose5/5

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

The description clearly states "Returns upcoming and recent IPOs," which specifies the resource and action. This distinguishes it from sibling tools like get_earnings_calendar or get_economic_calendar by the specific domain (IPO vs. other event types).

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

Usage Guidelines3/5

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

Usage is implied by the name and description but not explicitly stated. There is no mention of when to use this tool versus alternatives like get_earnings_calendar or get_economic_calendar, nor any exclusions. The date-range defaults provide some context for typical use.

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

get_latest_newsA
Read-onlyIdempotent
Inspect

Latest TipRanks news articles (newest first) from TipRanks's own editorial/wire feed — each with a text excerpt, unlike get_assets_news.

Use for general market news (no ticker), news on a specific stock with a
short summary of each story, or to browse a news category. This is also the
tool for news from a specific PAST date range — pass from_date AND to_date
together; the archive holds years of stories, so a past window is answerable
here even though get_assets_news only reaches recent articles.

Args:
    tickers: Optional comma-separated tickers to filter by (e.g. 'NVDA,AAPL').
             Omit for general market news.
    category: Optional single category (see the field description).
    from_date: Optional 'YYYY-MM-DD' recency floor.
    limit: Max articles to return (default 20).
    to_date: Optional 'YYYY-MM-DD' inclusive upper bound. Results are
             newest-first, so from_date alone returns today's news rather
             than news from around that date — add to_date to scope a window.

Returns a JSON list of {id, title, excerpt, author, category, date, url,
tickers}. To read a full article, pass its url or id to get_article.
NameRequiredDescriptionDefault
limitNo
tickersNo
to_dateNoOptional 'YYYY-MM-DD' upper bound on the publish date, inclusive of that whole day. Pair with from_date to read a specific past window; from_date on its own returns the newest stories since that date.
categoryNoOptional single category: 'news', 'the-fly', 'blurbs', 'catalyst', 'ratings', 'cryptocurrencies', 'insider-trading', 'newswire', 'private-companies', 'company-announcements'. Omitted = editorial/wire feed (excludes auto-ingested company-announcements).
from_dateNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/openWorld/destructive, so the safety profile is free. The description adds genuinely useful behavior beyond that: newest-first ordering, an archive holding years of stories, the excerpt field, and the handoff to get_article. It does not mention pagination limits, rate limits, or what happens when tickers/category are combined, which keeps it short of a 5.

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 and the sibling contrast in the first sentence, then structured Args and a Returns line. Slightly verbose — the same-point repetition about from_date/to_date appears in both the prose and Args — but every section earns its place for a 5-parameter tool.

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

Completeness5/5

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

With no output schema present, the description carries the return contract itself ({id, title, excerpt, author, category, date, url, tickers}) and the follow-up path via get_article. Combined with full parameter semantics and annotation-covered safety, nothing an agent needs to invoke this correctly is missing.

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

Parameters5/5

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

Schema description coverage is only 40%, and the description fully compensates with an Args block covering all five parameters, including the non-obvious semantics that from_date is a recency floor and that from_date alone returns today's news rather than stories from around that date. This is meaning the schema alone does not supply.

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

Purpose5/5

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

States a specific verb+resource and scope: 'Latest TipRanks news articles (newest first) from TipRanks's own editorial/wire feed'. It explicitly distinguishes itself from get_assets_news (text excerpt, archive depth) and routes to get_article for full reads, so an agent can tell it apart from siblings without opening any schema.

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

Usage Guidelines5/5

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

Explicitly enumerates the use cases — general market news with no ticker, ticker-filtered news with summaries, category browsing, and past date-range retrieval — and names the alternative (get_assets_news) plus the condition that selects this tool over it ('get_assets_news only reaches recent articles').

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

get_market_commentaryA
Read-onlyIdempotent
Inspect

Cached equities market sentiment snapshot.

Returns {overallSentiment, atmosphere, keyThemes, tailwinds, headwinds}.
Generated by TipRanks' AI pipeline with web search, refreshed every
~4 hours; this endpoint reads the cache only and does not trigger
regeneration. If no recent cache exists, returns
{"status": "unavailable"}.

The content is AI-generated commentary, not authoritative TipRanks
market data — present it as such to end users.
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/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 substantial context beyond that: it reads a ~4-hour-old cache, does not trigger regeneration, returns a specific 'unavailable' status when no cache exists, and warns that content is AI-generated and not authoritative. These are non-obvious behavioral traits that materially affect how an agent should invoke and present the results.

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

Conciseness5/5

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

The description is four sentences, front-loaded with the core purpose. Every sentence serves a distinct role: what it is, what it returns, how/when it's generated, cache-only behavior, error case, and usage caveat. No filler or redundant restatement of the tool's name.

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, no-output-schema tool, this description is complete. It documents the return structure, the refresh interval, the cache-miss behavior, and the AI-generation caveat. The agent has everything needed to decide invoke, interpret results, and communicate them to end users.

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 and the schema properties are empty (coverage is trivially 100%). The description correctly adds no parameter noise. Given the 0-parameter baseline of 4, this score is appropriate; the description instead clarifies the output shape and cache behavior, which is more valuable here.

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

Purpose5/5

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

The description opens with 'Cached equities market sentiment snapshot,' a specific verb+resource+qualifier that immediately distinguishes this from siblings like get_market_movers or get_market_performance. It also enumerates the exact return fields (overallSentiment, atmosphere, keyThemes, tailwinds, headwinds), leaving no ambiguity about its purpose.

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

Usage Guidelines4/5

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

The description clearly establishes the context: this is a cache-only endpoint that never triggers regeneration and may return 'unavailable' if no cache exists. This implies it is suitable for quick, non-authoritative sentiment reads. However, it does not explicitly name alternative tools (e.g., get_investor_sentiment or get_market_performance) for cases where real-time or authoritative data is needed, so it stops short of full exclusion guidance.

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

get_market_moversB
Read-onlyIdempotent
Inspect

Returns today's market movers: biggest gainers, losers, most active.

Args:
    category: 1=DollarVolume, 2=PercentGainers, 3=PercentLosers,
              4=GainersRegular, 5=LosersRegular, 6=UnusualVolume
    country: 1=US, 2=Canada, 3=UK
    num: Number of results
NameRequiredDescriptionDefault
numNo
countryNo1=US, 2=Canada, 3=UK (default: 1)
categoryYes1=DollarVolume, 2=PercentGainers (ext hours), 3=PercentLosers (ext hours), 4=GainersRegular, 5=LosersRegular, 6=UnusualVolume

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint and idempotentHint, and the description adds no contradictory behavioral traits. It includes category meanings, but these are also present in the schema. No extra context like pagination, data freshness, or limitations is provided.

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 purpose sentence is front-loaded and the Args list is compact and readable. However, it duplicates some information already in the schema, making it slightly redundant though still efficient.

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

Completeness4/5

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

For a read-only tool with three parameters and no output schema, the description covers all parameter meanings and the types of movers returned. It could mention the return format (e.g., a list of tickers) but remains adequate for understanding the tool's capabilities.

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

Parameters3/5

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

Schema coverage is 67%, and the description largely repeats the same numeric codes for category and country. It adds minimal semantics for 'num' as 'Number of results,' which is somewhat self-evident, so it does not significantly enhance the schema.

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

Purpose4/5

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

The description clearly states it returns today's market movers with specific categories (gainers, losers, most active), using the verb 'Returns' and a specific resource. It is distinguishable from siblings like get_market_performance, though it does not explicitly mention alternatives.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus similar market data tools, nor any exclusions or alternative tool names. The description only explains what it returns, not when it should be selected.

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

get_market_performanceA
Read-onlyIdempotent
Inspect

Returns market-wide performance for a specific country: average returns, sector breakdown, top/bottom performers.

Args:
    country: Market code: 'us', 'ca', 'uk', 'de', 'il', 'au', 'hk', 'sg', etc.
NameRequiredDescriptionDefault
countryNous

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered. With no output schema present, the description steps in and specifies what the response contains (average returns, sector breakdown, top/bottom performers), which is real added value beyond the structured fields; it still omits the time window and any response-sizing caveats.

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?

One front-loaded sentence naming the resource and its return contents, followed by a compact Args block for the single parameter. No filler, though the Args block is slightly redundant with the parameter name already exposed in the schema.

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

Completeness3/5

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

For a single-parameter, no-output-schema read tool this covers the essentials: what is returned and what values the parameter accepts. The notable gap is the performance horizon (daily, YTD, trailing?) – critical for interpreting 'average returns' – plus no positioning against get_market_movers/get_sector_analysis.

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

Parameters4/5

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

Schema description coverage is 0% – the property is just a bare string with default 'us' – so the description has to carry the load, and it does by enumerating valid market codes ('us', 'ca', 'uk', 'de', 'il', 'au', 'hk', 'sg', etc.). The open-ended 'etc.' and lack of a canonical full list keep it short of a 5.

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 ('Returns market-wide performance for a specific country') and enumerates the payload ('average returns, sector breakdown, top/bottom performers'). It does not explicitly distinguish itself from near-neighbours like get_market_movers, get_sector_analysis, or get_market_commentary, so the 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 only implied by the phrase 'market-wide' and 'for a specific country' – the agent can guess this is the country-level aggregate rather than a single-ticker or sector call. There is no explicit when-to-use, when-not-to-use, or named alternative among the many market/sector siblings.

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

get_my_usageA
Read-onlyIdempotent
Inspect

Your current TipRanks MCP usage against the monthly tool-call quota.

Reports calls used this calendar month, your limit, how many remain, your
plan tier, and when the quota resets (UTC). Handy to check before running a
large batch of calls. This call is free — it never counts against the quota.

What counts: every tool call is metered once whether or not it returns data,
so an unrecognised ticker or an invalid argument costs the same as a
successful call. The connection handshake (initialize, tools/list and the
other discovery calls) is never metered, and neither is this tool.

Calls refused for being over the limit are refunded on both ladders, so
`used` settles at the cap rather than climbing while a client retries. It
can still read higher than `limit` when the ceiling FELL mid-month — a
complimentary grant expiring or being revoked, or a paid MCP subscription
lapsing — and there it is the count of calls genuinely served before the
cap dropped.
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations, the description discloses that this call is free and never counts against the quota, that all other metered calls count even on failure, that handshake/discovery calls are unmetered, and that refused calls are refunded. It also explains the edge case where `used` can exceed `limit` when the cap falls mid-month.

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

Conciseness4/5

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

The description is front-loaded with the core summary and then organized into clear, purposeful paragraphs. It is longer than strictly necessary, but each paragraph adds meaningful behavioral detail that helps an agent avoid misinterpreting quota edge cases.

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

Completeness5/5

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

With no output schema, the description covers the returned fields: calls used, limit, remaining calls, plan tier, and reset time. It also covers free-call status, metering rules, and edge-case behavior, making it fully self-sufficient for correct invocation and interpretation.

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 and the schema coverage is trivially 100%, so the description does not need to explain parameters. It still adds relevant context by clarifying that invoking this tool has no metering side effects.

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

Purpose5/5

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

The description states the tool's specific function: reporting the current TipRanks MCP usage against the monthly tool-call quota. It clearly distinguishes itself from the many data-retrieval siblings by focusing on quota state rather than market data.

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

Usage Guidelines4/5

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

The description explicitly recommends checking usage before running a large batch of calls, giving clear contextual guidance. It does not name alternatives or exclusion cases, but none are needed since no sibling tool serves this purpose.

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

get_options_chainA
Read-onlyIdempotent
Inspect

Contracts at one expiration, enriched with price + OI + volume.

Each row: ticker (OCC), contract_type, strike, name, price, volume,
open_interest, open_interest_change, change_percent, day_open / high /
low, last_trade_date.

Quotes are typically delayed ~15 minutes.

GREEKS AND IV: the results carry price, open interest and volume;
delta/gamma/theta/vega and implied volatility are not part of this
data. When the user asks for greeks, IV or a '30-delta call' style
query, fetch the chain first (get_options_expirations, then this
tool), present the matching strikes with price, open interest and
volume, and state plainly that greeks and IV are unavailable. Report
only values that appear in the results, and leave delta and IV
unestimated, including rules of thumb.

Args:
    ticker: Underlying (e.g. 'AAPL').
    expiration_date: One of the dates from get_options_expirations
        (YYYY-MM-DD).
    contract_type: '' for both, or 'call' or 'put'.
    strike_gte: Filter strikes >= this value (optional).
    strike_lte: Filter strikes <= this value (optional).
    limit: Max contracts to return (default 50).
NameRequiredDescriptionDefault
limitNo
tickerYes
strike_gteNo
strike_lteNo
contract_typeNo'call' or 'put'; omit to return both sides.
expiration_dateYesExact expiration in YYYY-MM-DD. REQUIRED — call get_options_expirations first to discover valid dates.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive and open-world, so the safety profile is covered; the description adds genuinely new behavior: ~15-minute quote delay, the exact fields returned per row, and the deliberate absence of greeks/IV with an instruction not to estimate them. That is well beyond what the structured fields convey.

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

Conciseness4/5

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

The Args block is tight and front-loaded, and the return-field list is useful. The GREEKS AND IV paragraph is somewhat repetitive, restating the unavailability of greeks/IV across several sentences ('state plainly that greeks and IV are unavailable' vs 'leave delta and IV unestimated, including rules of thumb'), which costs a little economy.

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

Completeness5/5

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

With no output schema, the description carries the return shape and does so explicitly by enumerating row fields; it also covers latency, the missing-greeks caveat, and every argument. Nothing an agent needs to call this correctly is absent.

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

Parameters5/5

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

Schema description coverage is only 33% (just contract_type and expiration_date), so the description must compensate, and it does: it documents ticker as the underlying, the YYYY-MM-DD expiration, ''/'call'/'put' semantics, strike_gte/strike_lte as inclusive strike filters, and limit's default of 50. All six parameters gain meaning beyond the bare schema.

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

Purpose5/5

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

The opening line states the resource and its scope precisely: option contracts at a single expiration, enriched with price, open interest and volume. That cleanly separates it from get_options_expirations (which enumerates dates) and get_options_contract (single contract), so an agent can route without opening the schema.

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

Usage Guidelines5/5

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

It names the prerequisite tool explicitly ('One of the dates from get_options_expirations') and spells out the full call sequence for a common query pattern (greeks/IV -> get_options_expirations then this tool). It also states what this tool is NOT for, which is exactly the when-not guidance an agent needs.

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

get_options_contractA
Read-onlyIdempotent
Inspect

Snapshot one OCC contract — price, OI, intraday OHLCV, last trade.

The contract_ticker is an OCC-format symbol like 'O:AAPL260520C00205000'
(O: + underlying + YYMMDD + C/P + strike-in-thousandths-8-digits).
The 'O:' prefix is optional.

Quotes are typically delayed ~15 minutes.

GREEKS AND IV: the results carry price, OI, OI change, volume, day OHLC
and last_trade_date; delta/gamma/theta/vega, implied volatility and
bid/ask are not part of this data. When the user asks for them, call
this tool, present what it returns, and state plainly that those fields
are unavailable. Report only values that appear in the results, and
leave greeks and IV unestimated, including rules of thumb.

Args:
    contract_ticker: OCC contract symbol.
NameRequiredDescriptionDefault
contract_tickerYesOCC-format option ticker, e.g. 'O:AAPL260520C00205000'. The 'O:' prefix is optional.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well past the annotations (which only declare readOnly/idempotent) by disclosing ~15-minute quote delay and an exact field-coverage boundary — no greeks, no IV, no bid/ask. It further instructs the agent to leave those values unestimated, which is real behavioral guidance that prevents hallucination.

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 purpose and the key field, then format, then caveats. The greeks paragraph is long but earns its place by heading off a common failure mode; structure is easy to scan.

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

Completeness5/5

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

With no output schema, the description takes on the burden of describing the return surface and does so concretely (price, OI, OI change, volume, day OHLC, last_trade_date). Combined with the delay and field-absence notes, an agent has everything needed to call and report correctly.

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

Parameters4/5

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

Schema coverage is 100% and the schema already gives the example plus the optional 'O:' prefix. The description adds value by decomposing the OCC format (YYMMDD, C/P, strike-in-thousandths-8-digits), giving the agent a way to validate or construct tickers beyond a single sample.

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 ('Snapshot one OCC contract') and enumerates exactly what is returned (price, OI, intraday OHLCV, last trade). The word 'one' implicitly scopes it against the sibling get_options_chain, which returns many contracts.

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?

Gives an explicit conditional directive: when a user asks for greeks/IV, call this tool, present what it returns, and state the fields are unavailable. It lacks explicit routing versus get_options_chain or get_options_expirations, but the usage context is clear.

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

get_options_expirationsA
Read-onlyIdempotent
Inspect

List future expiration dates for a ticker's listed options.

Excludes past expirations. Use the result as input to get_options_chain.
Also use it FIRST when the user asks for greeks, IV or delta on a
ticker's options: the chain it leads to is the data we can present.

Args:
    ticker: Underlying ticker (e.g. 'AAPL').
NameRequiredDescriptionDefault
tickerYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover readOnly, idempotent, openWorld, and non-destructive behavior. The description adds useful filtering context ('Excludes past expirations') and clarifies its role as a prerequisite for chain data, which goes beyond the structured annotations.

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

Conciseness4/5

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

Front-loads the core purpose, then provides usage guidance and a brief args block. The wording is slightly roundabout in the greeks/IV sentence, but overall it is efficient and well-structured.

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

Completeness4/5

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

For a simple, single-parameter read tool with full safety annotations, the description covers purpose, usage, and parameter meaning. Missing details like date format or sorting order are minor and not critical for correct invocation.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the full burden. It identifies the parameter as 'Underlying ticker' and provides an example ('AAPL'), which is sufficient for a single, straightforward ticker parameter.

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

Purpose5/5

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

States a specific verb and resource: 'List future expiration dates for a ticker's listed options.' This clearly distinguishes it from get_options_chain and other option-related siblings by focusing on expirations rather than the chain itself.

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

Usage Guidelines5/5

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

Explicitly routes the agent: 'Use the result as input to get_options_chain' and 'Use it FIRST when the user asks for greeks, IV or delta.' The condition for use and the downstream relationship are both stated, leaving little inference needed.

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

get_options_unusual_tradesA
Read-onlyIdempotent
Inspect

Recent unusual option trades for an underlying (size/sweep alerts).

Returns the most recent `limit` flagged trades with the side, strike,
expiry, size, and notional value. Useful for spotting large bullish
or bearish positioning.

Args:
    ticker: Underlying ticker (e.g. 'AAPL').
    limit: Max trades to return (default 25).
NameRequiredDescriptionDefault
limitNo
tickerYes

TDQS

A4.6/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 value by explaining the data returned (side, strike, expiry, size, notional) and the 'flagged trades' nature, while also noting the 'most recent' ordering. It does not contradict annotations.

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

Conciseness5/5

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

The description is concise and front-loaded: first sentence states the core function, second adds return fields and a use case, and the Args list is clearly formatted. No filler or redundancy.

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

Completeness5/5

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

Given the tool's moderate complexity (2 params, no output schema, direct read operation), the description covers what it returns, the parameters, and the intended use case. It is complete enough for an agent to select and invoke it correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description fully compensates. It explains both parameters: ticker as 'Underlying ticker (e.g. 'AAPL')' and limit as 'Max trades to return (default 25)', adding meaning beyond the bare schema definitions.

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

Purpose5/5

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

The description clearly states it returns 'recent unusual option trades for an underlying' and specifically mentions 'size/sweep alerts', distinguishing it from sibling tools like get_options_chain or get_options_contract. The verb (get/return) and resource (unusual option trades) are explicit.

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

Usage Guidelines4/5

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

It provides a clear use case ('Useful for spotting large bullish or bearish positioning'), indicating when to use the tool. However, it does not explicitly exclude alternatives or state when not to use it, which keeps it at a 4 rather than 5.

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

get_peersA
Read-onlyIdempotent
Inspect

Peer/competitor companies for a stock, with comparative metrics for side-by-side analysis. Read-only, no side effects.

Use to find and compare a company against similar names (competitors,
same-sector peers). For that company's own data use get_assets_data; for a
sector-wide breakdown use get_sector_analysis.
NameRequiredDescriptionDefault
tickerYesStock ticker symbol, e.g. 'AAPL'.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds that the tool provides 'comparative metrics for side-by-side analysis' and explicitly states 'Read-only, no side effects,' which reinforces but does not significantly expand beyond the annotations. The added context about the output purpose is useful, but there is minor redundancy.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the main purpose and followed by usage guidance. It is concise with no filler or wasted words, efficiently conveying the tool's function and boundaries.

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

Completeness5/5

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

For a simple tool with one parameter, strong annotations, and no output schema, the description provides adequate context: it explains what the tool returns (comparative metrics), when to use it, and how it differs from alternatives. No critical information is missing for an agent to decide invocation.

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

Parameters3/5

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

Schema description coverage is 100%, with the ticker parameter described as 'Stock ticker symbol, e.g. 'AAPL'.' The description does not add any further explanation about the parameter beyond the schema, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool identifies 'peer/competitor companies for a stock, with comparative metrics for side-by-side analysis.' It uses a specific verb (find/compare) and resource (peer companies) and distinguishes from siblings by noting alternatives for own data (get_assets_data) and sector-wide analysis (get_sector_analysis).

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

Usage Guidelines5/5

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

The description explicitly says when to use the tool: 'Use to find and compare a company against similar names (competitors, same-sector peers).' It also provides clear exclusions: 'For that company's own data use get_assets_data; for a sector-wide breakdown use get_sector_analysis.' This names alternatives and scenarios.

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

get_politician_activityA
Read-onlyIdempotent
Inspect

Returns a specific politician's stock trades or holdings.

First call get_politicians to find the politicianId.

Args:
    politicianId: Politician ID from get_politicians
    activity: 'trades' or 'holdings'
NameRequiredDescriptionDefault
activityNo'trades' or 'holdings' (default: trades)trades
politicianIdYesPolitician ID, as returned by get_politicians.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds behavioral context by explaining the dependency on get_politicians and the allowed values for 'activity'. This goes beyond the annotations without contradicting them.

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

Conciseness5/5

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

The description is compact and front-loaded: the first sentence states the purpose, the second gives the prerequisite, and the Args list maps clearly to the parameters. No wasted words.

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

Completeness4/5

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

For a simple, read-only tool with full schema coverage and no output schema, the description is sufficiently complete for an agent to select and invoke it correctly. It covers what it returns, how to obtain the required ID, and the two activity options. It could mention return format, but that is not required and not critical for correctness.

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

Parameters3/5

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

Schema coverage is 100%, so the parameters are fully documented in the schema. The description largely repeats the schema's info (politicianId from get_politicians, activity 'trades' or 'holdings'). The only added value is reiterating the prerequisite, which is already in the schema description, so it adequately meets the baseline.

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

Purpose5/5

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

The description clearly states 'Returns a specific politician's stock trades or holdings,' which is a specific verb and resource. It distinguishes from the sibling get_politicians tool by focusing on the activity (trades/holdings) of a single politician rather than listing politicians.

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

Usage Guidelines4/5

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

It provides explicit prerequisite guidance: 'First call get_politicians to find the politicianId.' This clearly tells the agent the required sequence. It does not explicitly mention alternatives or when-not-to-use, but the context is sufficiently clear for this simple lookup tool.

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

get_politiciansA
Read-onlyIdempotent
Inspect

Returns the list of politicians tracked for trading activity.

Returns: name, party, state, position, net worth, profile.
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, covering the safety profile. The description adds the return field list and the 'tracked for trading activity' scope, which gives some context but does not disclose additional behavioral traits like pagination or completeness.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose, and the field list is compact. Every sentence earns its place without redundancy.

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

Completeness4/5

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

For a parameterless list endpoint, the description covers purpose and return fields. Annotations provide safety and idempotency information. Although there is no output schema, the field list partially compensates, and the description is sufficient for the tool's simplicity.

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 schema coverage is 100% by default. With no parameters to document, the baseline is 4, and the description does not need to add parameter-specific semantics.

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

Purpose5/5

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

The description clearly states the verb ('Returns') and resource ('the list of politicians tracked for trading activity'), which identifies the tool's purpose precisely. It also distinguishes itself from the sibling tool get_politician_activity by focusing on the politicians list rather than individual activity.

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

Usage Guidelines4/5

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

The description makes the context clear: this tool returns a list of politicians, not their activity. It implicitly differentiates from get_politician_activity, but it does not explicitly state when not to use it or name alternatives, so the agent must infer the appropriate usage.

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

get_portfolio_analysisA
Read-onlyIdempotent
Inspect

Returns asset allocation by type/country/top stocks and distribution by sector, market cap, dividend yield, beta, and P/E.

Args:
    portfolio_id: One of the IDs returned by list_my_portfolios.
NameRequiredDescriptionDefault
portfolio_idYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive, so the safety profile is disclosed. The description adds the behavioral fact that portfolio_id must be obtained from list_my_portfolios, which is useful but not a major new behavioral trait. No contradictions exist.

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

Conciseness5/5

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

The description is compact and front-loaded with a comprehensive list of output dimensions in one sentence, followed by an Args block. Every sentence earns its place; there is no redundancy or filler.

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

Completeness5/5

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

For a read-only analysis tool with one parameter and no output schema, this description is complete. It explains what to expect (allocation/distribution data) and how to satisfy the input (portfolio_id from list_my_portfolios). No major gaps remain.

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

Parameters4/5

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

Schema coverage is 0% for portfolio_id, so the description must compensate. It explicitly connects the parameter to list_my_portfolios, giving the agent a clear way to obtain valid IDs. This is valuable semantic context that the schema alone lacks, though it doesn't cover additional formats or constraints.

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

Purpose5/5

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

The description uses the specific verb 'Returns' and clearly enumerates the resource: asset allocation by type/country/top stocks and distribution by sector, market cap, dividend yield, beta, and P/E. This distinguishes it from sibling portfolio tools like get_portfolio_holdings or get_portfolio_overview by specifying the exact analytical content.

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

Usage Guidelines4/5

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

The description provides clear context about when to use this tool: when you need allocation and distribution metrics for a portfolio. It also gives a crucial prerequisite—portfolio_id must come from list_my_portfolios. However, it does not explicitly contrast with alternatives or state when not to use it, so it misses the full 5.

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

get_portfolio_holdingsA
Read-onlyIdempotent
Inspect

Returns all holdings for one of your TipRanks portfolios.

Per holding: ticker, shares, price, cost basis (AvgExecutionPrice),
P/E ratio, dividend yield, market cap, sector, country, 52-week high/low,
percentage of portfolio, beta, EPS. Plus total value, cash, stock count.

Args:
    portfolio_id: One of the IDs returned by list_my_portfolios.
NameRequiredDescriptionDefault
portfolio_idYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds value by detailing the output structure, including per-holding metrics and portfolio summaries (total value, cash, stock count), which is especially important given the absence of an output schema. It does not mention pagination or potential large response sizes, but for a simple read operation this is sufficient.

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

Conciseness5/5

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

The description is efficiently organized: a one-line purpose, a field list, and a parameter explanation. Every sentence contributes meaningful information, and the field list is concise yet comprehensive. It is not bloated and earns its length.

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

Completeness4/5

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

For a single-parameter read tool with high annotation coverage, the description is almost complete. It covers the return values thoroughly and the parameter provenance. The only gaps are potential edge cases (e.g., empty portfolio, invalid ID) or response size limits, but these are not critical for a holdings retrieval tool. Thus it scores just above the minimum viable.

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

Parameters5/5

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

The schema provides only the type and requirement for portfolio_id with zero coverage. The description compensates fully by explaining that portfolio_id is 'One of the IDs returned by list_my_portfolios,' giving the agent a precise source for the parameter. This transforms an opaque integer into a well-defined reference.

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

Purpose5/5

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

The description clearly states the tool 'Returns all holdings for one of your TipRanks portfolios,' which is a specific verb+resource. It distinguishes itself from sibling tools like get_portfolio_overview and get_portfolio_analysis by focusing on holdings, and it enumerates the exact data fields returned (ticker, shares, price, cost basis, etc.), leaving no ambiguity about its purpose.

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

Usage Guidelines4/5

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

The description specifies the prerequisite that portfolio_id comes from list_my_portfolios, which guides the user on how to obtain a valid input. It does not explicitly contrast with sibling portfolio tools, but the context is clear enough that this is the go-to for detailed holdings while other tools handle overviews or analysis. A brief note about when not to use it would elevate this score.

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

get_portfolio_overviewA
Read-onlyIdempotent
Inspect

Returns lifetime / 1mo / 6mo / 12mo / YTD returns, Sharpe ratio, and a monthly-return time series. The monthly history field is chart-ready — a list of {month, return} points suitable for direct plotting.

Args:
    portfolio_id: One of the IDs returned by list_my_portfolios.
NameRequiredDescriptionDefault
portfolio_idYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, covering the safety profile. The description adds meaningful behavioral detail by specifying the exact output fields and noting that the monthly history is chart-ready as a list of {month, return} objects, which goes beyond what annotations provide.

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

Conciseness5/5

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

The description is concise and structured: it first summarizes the returned metrics, then clarifies the shape of the monthly history field, and finally documents the parameter. Every sentence contributes useful information with no filler or repetition.

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

Completeness4/5

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

For a read-only tool with a single parameter and no output schema, the description covers the main return values and the parameter source. Minor gaps remain, such as units for returns and possible error behavior for invalid IDs, but the overall context is sufficient for an agent to select and invoke the tool correctly.

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

Parameters4/5

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

The schema only defines portfolio_id as an integer with no supporting description (0% coverage). The description compensates well by explaining that the ID must be one returned by list_my_portfolios, giving the agent a concrete source for valid values.

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

Purpose4/5

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

The description clearly states that the tool returns a portfolio overview with specific metrics (returns for multiple periods, Sharpe ratio, and a monthly-return time series). However, it does not explicitly differentiate itself from the similar sibling tool get_portfolio_performance, so it misses the highest bar for sibling distinction.

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

Usage Guidelines3/5

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

The description gives a useful prerequisite by saying portfolio_id must be one of the IDs returned by list_my_portfolios, but it does not explain when to choose this tool over alternatives like get_portfolio_performance or get_portfolio_analysis. Usage context is implied rather than explicit.

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

get_portfolio_performanceA
Read-onlyIdempotent
Inspect

Returns full performance: stats, gains, best trade, recent activity, a daily-yield time series benchmarked against S&P 500 (chart-ready — aligned dates with portfolio and benchmark yield columns, plot directly as overlaid lines), monthly returns, risk profile, beta, dividend yield/amount.

Args:
    portfolio_id: One of the IDs returned by list_my_portfolios.
NameRequiredDescriptionDefault
portfolio_idYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds valuable behavioral context: the output is chart-ready with aligned dates and columns, and includes a benchmark comparison. This goes beyond structured hints and gives the agent expectations about data format. No contradictions.

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

Conciseness4/5

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

The description is dense but not bloated; it lists many specific metrics in a single flowing sentence and adds a clear Args block. It front-loads the core purpose and provides an actionable parameter hint without filler. Slightly long, but every part earns its place.

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

Completeness4/5

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

Given the tool has no output schema and a moderately complex return payload, the description enumerates all major content areas, including the chart-ready benchmark series and risk metrics. It does not specify exact field-level structures, but for selecting and invoking the tool correctly it is sufficient, especially with annotations covering safety.

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

Parameters5/5

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

Input schema coverage is 0% (only 'Portfolio Id' with no description). The description strongly compensates by stating that portfolio_id must be one of the IDs returned by list_my_portfolios, giving the agent a clear, actionable source for valid values.

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

Purpose5/5

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

The description opens with a specific verb ('Returns full performance') and enumerates concrete deliverables (stats, gains, best trade, activity, benchmarked time series, monthly returns, risk, beta, dividends). This clearly distinguishes it from sibling portfolio tools like get_portfolio_overview or get_portfolio_analysis.

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

Usage Guidelines3/5

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

Usage is implied by the detailed list of outputs, but the description does not explicitly say when to prefer this tool over alternatives such as get_portfolio_analysis or get_portfolio_overview. The only usage hint is that portfolio_id comes from list_my_portfolios, which is parameter guidance rather than tool-selection guidance.

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

get_recent_analyst_ratingsA
Read-onlyIdempotent
Inspect

Recent Wall Street analyst rating actions on a single stock, covering the trailing 12 months (newest first).

`ratings` holds one row per analyst, their latest rating, newest first.
Each row carries the analyst's name, expertUID and firm, the rating
(Buy/Hold/Sell), the action (initiated/upgraded/downgraded/reiterated/
maintained), recommendationDate and timestamp, the price target in its
own currency (priceTarget, priceTargetCurrencyCode) and converted
(convertedPriceTarget, convertedPriceTargetCurrencyCode), and the analyst's
TipRanks credibility (numOfStars 0-5, rank, successRate as a fraction,
excessReturn as the average return) plus the source article title/quote.

The response is size-bounded, so a long list comes in pages: when rows are
left out the result carries `nextOffset`; call again with that offset for
the next page, until a result has no `nextOffset`. `totalRatings` is the
full count. The source returns at most the 100 newest ratings; when it hit
that limit the result carries `feedLimit`, and older ratings are not
available from this tool.

`counts` gives exact last30Days / last90Days / last12Months totals
(analysts whose latest rating falls in the window, split buy/hold/sell) over
every rating fetched, as of `asOf`; answer 'how many analysts rated X in the
past month' from `counts`, which cover every page.

For the aggregate consensus and average/best price target, use
get_assets_data instead.

Args:
    ticker: Stock ticker (e.g. 'NVDA', 'AAPL').
    offset: Index of the first rating to return in the newest-first list
            (default 0); pass the previous result's `nextOffset`.

Returns: {ticker, asOf, totalRatings, counts, offset, ratings, and nextOffset
         when more remain}. recommendationDate is a 'MM/DD/YYYY' string;
         numOfStars is the analyst's 0-5 TipRanks star rating.
NameRequiredDescriptionDefault
offsetNo
tickerYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/openWorld, so the bar is contextual detail — and the description delivers: size-bounded pages with `nextOffset`, `totalRatings` as the full count, a hard source cap of 100 newest ratings surfaced via `feedLimit`, and the fact older ratings are simply unavailable. That limit disclosure is exactly the kind of behavior an agent cannot infer from structured fields.

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

Conciseness4/5

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

Well organized and front-loaded — the one-line summary precedes the per-field, pagination, counts, and alternative-tool paragraphs. It runs long and the closing 'Returns:' block partly restates the body's field list, which is a minor redundancy given no output schema exists.

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 two-parameter read tool with no output schema, the description covers everything an agent needs: response shape, per-row fields, pagination loop, hard feed limit, and the role of `counts`. Nothing required for a correct call or a correct interpretation of results is missing.

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

Parameters5/5

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

Schema description coverage is 0% — both properties are bare — so the description must carry the load, and it does: ticker is illustrated ('NVDA', 'AAPL') and offset is defined as the index of the first rating in the newest-first list, with the instruction to pass the prior result's `nextOffset`. Both parameters gain meaning beyond the schema.

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

Purpose5/5

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

States a specific verb and resource — 'recent Wall Street analyst rating actions on a single stock' — and bounds scope to the trailing 12 months, newest first. An agent can distinguish this from get_assets_data and get_analysts_by_firm without opening any schema.

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

Usage Guidelines5/5

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

Explicitly routes the aggregate-consensus and average/best-price-target questions to get_assets_data, and tells the agent to answer 'how many analysts rated X in the past month' from `counts` rather than paging through rows. Both when-to-use and when-to-use-something-else are stated.

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

get_sector_analysisA
Read-onlyIdempotent
Inspect

Returns sector-level analysis for all 11 US sectors: average P/E, analyst upside, buy ratio, stock count. Sorted by average analyst upside.

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, establishing the safety profile. The description adds valuable behavioral context by specifying the exact fields returned (average P/E, analyst upside, buy ratio, stock count) and that results are sorted by average analyst upside, which is not captured in annotations or schema.

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

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the main action and resource, then lists the specific data fields and sort order. Every word adds value, with no redundancy or filler.

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

Completeness5/5

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

For a parameterless, read-only tool with no output schema, the description is complete: it names the scope (all 11 US sectors), the exact fields returned, and the sort order. The annotations cover safety, so no further behavioral caveats are needed.

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 the description doesn't need to explain parameter semantics. The baseline for 0 params is 4, and the description appropriately focuses on the output rather than 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 clearly states the tool returns sector-level analysis for all 11 US sectors, listing specific fields (average P/E, analyst upside, buy ratio, stock count) and the sort order. It is specific with a verb and resource, though it does not explicitly distinguish itself from sibling analysis tools like get_etf_analysis or get_market_performance.

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

Usage Guidelines3/5

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

Usage is implied by the description: if you need US sector-level analysis with these metrics, this tool is appropriate. However, there is no explicit guidance on when to use it versus alternative analysis tools, nor any conditions or exclusions.

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

get_stock_catalystA
Read-onlyIdempotent
Inspect

TipRanks-generated catalyst summary explaining why a stock is moving.

Each entry: {ticker, price_move, summary, sentiment, updated} where
sentiment is 'positive' | 'neutral' | 'negative' and price_move, present
once today's session has traded, is the stock's actual change today from
the live quote. Use to explain today's move for a specific stock.

Args:
    tickers: Comma-separated tickers (e.g. 'AMZN' or 'AMZN,NVDA').
NameRequiredDescriptionDefault
tickersYes

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 behavior: the data source (TipRanks), the exact entry shape, and the conditional presence of price_move once today's session has traded — a real precondition an agent needs.

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

Conciseness4/5

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

Front-loaded with the purpose, then the return shape, then usage, then args — a sensible ordering with no filler sentences. The inline field enumeration is dense but every element 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?

With no output schema, the description carries the burden of describing returns and does so field-by-field, including the sentiment enum and the conditional price_move. Only minor gaps remain, such as multi-ticker output ordering or whether entries can be missing for tickers with no catalyst.

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

Parameters4/5

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

Schema coverage is 0% and the schema itself only says 'string or array of strings' with no explanation, so the description must compensate — and it does, documenting comma-separated semantics with concrete examples ('AMZN' or 'AMZN,NVDA'). It does not cover format edge cases (spaces, lowercase) but resolves the core ambiguity.

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+resource: a 'TipRanks-generated catalyst summary explaining why a stock is moving,' which is clearly a per-ticker move-explanation tool. It does not explicitly differentiate itself from near-siblings like get_ai_stock_analysis or get_latest_news, 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 Guidelines4/5

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

'Use to explain today's move for a specific stock' gives a clear, actionable context for invocation, reinforced by the caveat that price_move appears only after the session has traded. It offers no explicit exclusions or named alternatives for cases where a broader news/analysis tool would be better.

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

get_stock_pricesA
Read-onlyIdempotent
Inspect

Historical daily closing prices for up to 5 stocks or ETFs.

Per ticker: {ticker, period, series:[{date, price}], summary} with
summary fields first_price, last_price, change_pct, high, low,
trading_days. Series is downsampled to ~250 evenly-spaced points
(latest point always retained) so the payload stays small for charting.

`period` must be one of: 1m, 3m, 6m, ytd, 1y, 2y, 3y, 5y, all.

Args:
    tickers: Comma-separated tickers, up to 5 (e.g. 'AAPL,MSFT').
    period: Lookback window (default 'ytd').
NameRequiredDescriptionDefault
periodNoytd
tickersYes

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses key behaviors: downsampling to ~250 evenly spaced points, always retaining the latest point, per-ticker return structure, and the allowed period values. This gives the agent meaningful expectations about output shape and size.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then uses compact structured sections for output shape, downsampling behavior, valid period values, and arguments. Every sentence adds useful information without redundancy.

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

Completeness5/5

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

Since there is no output schema, the description responsibly documents the return structure and summary fields. It also covers constraints (5 ticker limit, period enum, downsampling) and the intended charting use case, making it complete for a read-only historical data tool.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates: it documents comma-separated tickers with a max of 5, the period lookback values, and the default period of 'ytd'. This adds real meaning beyond the bare input schema.

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

Purpose5/5

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

The opening sentence states exactly what the tool does: returns historical daily closing prices for stocks or ETFs, with a clear limit of up to 5 tickers. This distinguishes it from siblings like get_stock_quotes (current quotes) and other asset-class historical tools.

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

Usage Guidelines4/5

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

The description clearly implies use for historical daily price series and charting, and it explains the tuning knobs (period, tickers). It does not explicitly name alternatives or state when not to use it, but the context is strong enough for an agent to select it correctly.

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

get_stock_quotesA
Read-onlyIdempotent
Inspect

Real-time price quote for one or more stocks or ETFs.

Returns price, intraday OHLC, day change (amount + percent), volume,
previous close, market cap, currency, exchange, and market-state
flags (is_market_open / is_premarket / is_after_market). When
extended-hours data is present, the entry includes a
`pre_post_market` block — when the regular session is closed,
that's the freshest price.

For forex pairs use get_forex_quote; this endpoint is stocks/ETFs only.

Args:
    tickers: Comma-separated tickers (e.g. 'AAPL' or 'AAPL,MSFT,NVDA').
NameRequiredDescriptionDefault
tickersYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering safety. The description adds valuable behavioral context such as the `pre_post_market` block and market-state flags, explaining that extended-hours data may be freshest when the regular session is closed. This goes beyond annotations but does not mention error behaviors or rate limits.

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

Conciseness5/5

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

The description is well-structured: a one-line purpose, a concise list of return fields, a clear alternative note, and an Args section. Every sentence serves a purpose, and the formatting makes it easy to scan.

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

Completeness4/5

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

While there is no output schema, the description thoroughly enumerates the returned fields and explains the extended-hours context. It covers the key nuances of the tool (market-state flags, pre/post market) and provides sibling differentiation. Minor omissions like error handling are not critical for this read-only tool.

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

Parameters3/5

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

The input schema has 0% description coverage for the sole parameter 'tickers', so the description must compensate. It explains that tickers are comma-separated and gives examples ('AAPL' or 'AAPL,MSFT,NVDA'), but it does not mention that the schema also accepts an array, and it omits details like case sensitivity or invalid ticker handling. Thus it adds some meaning but is not fully comprehensive.

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

Purpose5/5

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

The description states a specific verb and resource: 'Real-time price quote for one or more stocks or ETFs.' It clearly distinguishes from siblings by explicitly noting 'For forex pairs use get_forex_quote; this endpoint is stocks/ETFs only.' This makes the purpose unmistakable.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance by naming an alternative tool for forex pairs ('For forex pairs use get_forex_quote') and states the scope limitation ('stocks/ETFs only'). This helps an agent choose this tool over related quote tools for other asset classes.

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

get_stock_splitsA
Read-onlyIdempotent
Inspect

Returns the stock-split calendar with split ratios and direction (Forward / Reverse). Use for upcoming splits, reverse-split alerts, historical split lookup.

Args:
    fromDate: Start date YYYY-MM-DD (default: 30 days ago)
    toDate: End date YYYY-MM-DD (default: 30 days from now)
    type: Optional filter — 'Forward' or 'Reverse' (case-insensitive).
          Empty string returns both.
    limit: Max rows (default: 25, max: 100)
    ticker: Optional single symbol. Widen fromDate to search a company's history —
            the default window is only today ± 30 days.

Returns: { totalCount, data: [{ ticker, companyName, effectiveDate, type,
                                splitRatio, splitRatioText }] }. A filtered call
         (ticker or type) also returns `matched` and `window`: `totalCount` is
         every split in the window, `matched` how many passed the filter. The
         window is read in full before filtering, so an empty result means there
         genuinely are none rather than that the first page held none.
NameRequiredDescriptionDefault
typeNoOptional filter: 'Forward' or 'Reverse' (case-insensitive); omit to return both.
limitNo
tickerNoOptional. Return only this company's splits within the window, e.g. 'NVDA'. Pair with a wide fromDate for 'has X ever split'.
toDateNo
fromDateNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark this as read-only, idempotent, and non-destructive, and the description adds substantial behavioral context beyond them: default date windows, limit cap, ticker caveat, and the important detail that the window is read in full before filtering so an empty result is meaningful. No contradiction exists.

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

Conciseness5/5

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

The description is front-loaded with purpose and use cases, followed by a clean Args block and a returns explanation. The length is justified by the tool's filtering semantics and low schema coverage; every sentence contributes actionable information rather than padding.

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

Completeness5/5

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

With no output schema and sparse input schema, the description supplies a complete invocation picture: defaults, filters, max rows, return object shape, and interpretation of filtered results. Nothing an agent needs to call this correctly or interpret its response is missing.

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

Parameters5/5

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

Schema coverage is only 40%, so the description must compensate — and it does completely. It documents every parameter with format, defaults, and behavior, including YYYY-MM-DD formats, default date ranges, type case-insensitivity, limit range, and ticker-specific guidance about widening fromDate. This adds real meaning beyond the sparse schema.

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

Purpose5/5

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

Description opens with a specific verb and resource: returns the stock-split calendar with split ratios and direction (Forward / Reverse). It also names concrete use cases — upcoming splits, reverse-split alerts, historical lookup — which clearly distinguishes it from calendar-like sibling tools.

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

Usage Guidelines4/5

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

The description states explicit use cases ('Use for upcoming splits, reverse-split alerts, historical split lookup'), giving an agent clear context for when to invoke it. It does not explicitly state when not to use it or name alternatives, so it misses the higher bar of exclusion guidance.

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

get_technical_analysisA
Read-onlyIdempotent
Inspect

Returns RSI, MACD, Stochastics, ADX, moving averages, and pivot points for stocks and ETFs.

Covers stocks and ETFs alike (e.g. 'NVDA', 'SPY', 'QQQ', 'VTI') with the
same payload shape. For an ETF's analyst consensus, forecast, holdings or
exposures, use get_etf_analysis, get_etf_forecast, get_etf_top_stocks, or
get_etf_exposures.

Args:
    tickers: Comma-separated stock or ETF tickers (e.g. 'NVDA' or 'NVDA,SPY').
    timeFrame: '1m','5m','15m','30m','1h','5h','day','3d','week','2w','month' (default: 'day')
        '5h' is slow upstream: request it for one ticker per call.

Returns: summary scores, oscillators (RSI, MACD, Stochastics, ADX, CCI,
         Williams %R, ATR, ROC), moving averages, and pivot points.
         Labels are strings. indicator: "Buy", "Neutral" or "Sell" (null
         on ATR and pivot points). scoreScale: "StrongBuy", "Buy",
         "Neutral", "Sell" or "StongSell" (the upstream's own spelling).
NameRequiredDescriptionDefault
tickersYes
timeFrameNoOne of '1m','5m','15m','30m','1h','5h','day','3d','week','2w','month' (default: 'day'). Request '5h' for one ticker per call.day

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real operational context beyond them: the '5h' upstream latency warning, consistent payload shape across stocks and ETFs, and null-handling for indicators on ATR/pivot points. It does not discuss pagination or error behavior, so 4.

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

Conciseness4/5

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

Front-loaded with the core purpose and followed by clearly separated Args/Returns sections; every block earns its place. It is somewhat verbose and carries a typo ('StongSell'), which is a minor blemish against an otherwise tight structure.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden and does so thoroughly (indicator lists, label strings, scoreScale values, null cases). Combined with parameter explanations and sibling routing, an agent has nearly everything needed to call it correctly; only raw-price sibling differentiation is absent.

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

Parameters4/5

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

Schema coverage is 50% (timeFrame documented, tickers undocumented), so the description must compensate. It does: it explains tickers as comma-separated stock/ETF symbols with concrete examples and restates the timeFrame enum plus the '5h' caveat, adding meaning not present in the schema for the required parameter.

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

Purpose5/5

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

The description states a specific resource (technical indicators) and enumerates the exact outputs (RSI, MACD, Stochastics, ADX, moving averages, pivot points) for a defined asset universe (stocks and ETFs). It explicitly routes related-but-different ETF requests to named siblings, so an agent can distinguish it without opening any 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?

It names the alternative tools (get_etf_analysis, get_etf_forecast, get_etf_top_stocks, get_etf_exposures) and the condition (ETF analyst consensus, forecast, holdings, exposures) that selects them. It also flags an operational exclusion ('5h' slow upstream, one ticker per call). It stops short of contrasting against raw-price siblings like get_stock_prices, so a 4 rather than 5.

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

get_ticker_earningsA
Read-onlyIdempotent
Inspect

Upcoming and recent earnings dates for a specific stock — scheduled report dates with EPS/revenue estimates where available. Read-only, no side effects.

Use this to find when a company reports. For past actual-vs-estimate
results use get_earnings_history; for a cross-market schedule use
get_earnings_calendar.
NameRequiredDescriptionDefault
tickerYesStock ticker symbol, e.g. 'NVDA'.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false; the description reinforces 'Read-only, no side effects' and adds useful semantic detail: 'scheduled report dates with EPS/revenue estimates where available' clarifies content and conditional availability.

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 brief sentences plus a usage line. Front-loaded with purpose, no fluff, and every sentence contributes.

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 single-parameter tool with strong annotations and no output schema, the description covers purpose, usage, alternatives, and data semantics. It is complete enough for an agent to select and invoke correctly.

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

Parameters3/5

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

Schema coverage is 100% with a clear ticker description. The description adds no additional parameter semantics beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

Description clearly states it returns 'Upcoming and recent earnings dates for a specific stock' with estimates where available. Distinguishes from siblings by naming get_earnings_history and get_earnings_calendar.

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

Usage Guidelines5/5

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

Explicitly says 'Use this to find when a company reports' and provides alternatives for past results (get_earnings_history) and cross-market schedules (get_earnings_calendar), giving clear when-to-use and when-not-to-use guidance.

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

get_top_hedge_fund_managersA
Read-onlyIdempotent
Inspect

Returns top-performing hedge fund managers ranked by success rate and returns.

Args:
    num: Number of managers to return (default 10, max 100 — the upstream
        returns 100 for anything higher)
NameRequiredDescriptionDefault
numNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already convey that the tool is read-only, idempotent, and non-destructive. The description adds genuinely useful behavior beyond annotations: the 'num' parameter is capped at 100, and the upstream returns 100 for anything higher. It also clarifies the ranking criteria, which helps set expectations about output ordering.

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

Conciseness5/5

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

The description is compact and well-organized: one sentence stating the tool's purpose and ranking criteria, followed by a short Args section documenting the only parameter. Every sentence earns its place with no filler or redundancy.

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

Completeness5/5

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

For a single-optional-parameter, read-only list tool with rich annotations, the description is complete enough to call correctly. It covers what the tool returns, how results are ranked, and the parameter's default and limits. Output schema is absent, but the return values are reasonably inferable and not needed to invoke the tool.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must carry the meaning for the 'num' parameter. It does so excellently by explaining that num is 'Number of managers to return' and documenting the default, maximum, and the upstream clamping behavior. This fully compensates for the missing schema descriptions.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Returns top-performing hedge fund managers ranked by success rate and returns.' This clearly distinguishes it from related hedge fund tools like get_hedge_fund_holdings and get_hedge_fund_activity, which focus on holdings and activity rather than manager performance.

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

Usage Guidelines4/5

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

The description clearly implies when to use this tool: when you need a ranked list of top hedge fund managers based on success rate and returns. It does not explicitly name alternatives or state when not to use it, so it stops short of a 5.

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

get_top_rated_stocksA
Read-onlyIdempotent
Inspect

Returns stocks most recommended by the best-performing analysts (by analyst track record) in one market.

Args:
    num: Number of results
    sector: Sector filter (financial, healthcare, technology, etc.) or empty for all
    country: 'US', 'Canada', 'UK', 'Germany', 'France', 'Spain', 'Italy', 'Netherlands',
             'Switzerland', 'Australia', 'Singapore', 'Japan', 'Israel'; any other country
             returns no_match. NOTE: UK tickers use GB: prefix but country param is 'UK'.
NameRequiredDescriptionDefault
numNo
sectorNoSector filter: technology, financial, healthcare, energy, utilities, industrials, materials, consumerdefensive, consumercyclical, services (default: all sectors). This feed files oil & gas under its Utilities sector, so 'energy' and 'utilities' return the same rows: oil & gas companies and power utilities together, all labelled 'Utilities'.
countryNo'US','Canada','UK','Germany','France','Spain','Italy','Netherlands','Switzerland','Australia','Singapore','Japan', or 'Israel' (default: US); these are the only markets with a list, each list covers one market, and any other country returns no_match. There is no global list: when no market is named, use 'US' and say the list covers US stocks. UK tickers are returned with a 'GB:' prefix but the country value is still 'UK'.US

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, open-world and non-destructive, so the safety profile is covered. The description adds real behavioral context beyond them: unsupported countries return no_match rather than an error or empty list, and UK tickers carry a 'GB:' prefix while the country value stays 'UK' – both are non-obvious traps.

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

Conciseness3/5

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

The leading sentence is well front-loaded and earns its place, but the Args block largely duplicates the input schema, repeating the country enumeration and sector examples that the schema already documents. Roughly half the text is redundant with structured data.

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

Completeness3/5

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

With no output schema, the description should say more about what comes back – ticker, analyst names, price target, score, count per row. It only says the stocks are 'most recommended' and gives no hint of ordering, pagination, or empty-result behavior when num exceeds available names.

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

Parameters3/5

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

Schema coverage is 67% and the schema's own sector and country descriptions are richer than the prose (the energy/utilities overlap note is schema-only). The description restates the country list and gives only a bare gloss for `num` ('Number of results') without bounds, ranking basis, or what happens at extremes, so it adds little beyond structured fields.

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?

It names a specific verb and resource ('Returns stocks most recommended') and adds the distinguishing selection criterion: recommendation weight by analyst track record, restricted to one market. That separates it in spirit from siblings like get_top_smart_score_stocks and get_trending_stocks, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

Usage context is implied by the market constraint ('in one market') and reinforced by rules such as 'any other country returns no_match' and 'when no market is named, use US'. However, there is no statement of when to prefer this over get_top_smart_score_stocks, get_trending_stocks, or get_recent_analyst_ratings, which an agent would plausibly confuse it with.

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

get_top_smart_score_stocksA
Read-onlyIdempotent
Inspect

Returns up to 10 stocks with the highest TipRanks Smart Score (perfect 10 / Outperform) in one market.

Args:
    num: Number of results; the feed returns at most 10 whatever this asks
    sector: Keeps the rows of that top-10 list in this sector, or empty for all
    country: 'US', 'Canada', 'UK', 'Germany', 'Spain', 'Australia', 'Singapore',
             'HongKong', 'Global'; any other country returns no_match.
             NOTE: UK tickers use GB: prefix but the country param is 'UK'.
NameRequiredDescriptionDefault
numNo
sectorNoKeeps only the rows of the market's top-10 list in this sector: financial, healthcare, consumerdefensive, consumercyclical, utilities, basicmaterials, technology, industrials, energy, communicationservices, realestate (default: all sectors). The list is ranked across all sectors, so a sector often keeps few rows or none.
countryNo'US','Canada','UK','Germany','Spain','Australia','Singapore','HongKong', or 'Global' (default: US); these are the only markets with a list, and any other country returns no_match. UK tickers are returned with a 'GB:' prefix but the country value is still 'UK'.US

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/open-world/non-destructive, so the bar is lower, and the description still adds real behavior: the feed hard-caps at 10 results regardless of `num`, invalid countries return `no_match` rather than erroring, and UK tickers carry a 'GB:' prefix while the country value stays 'UK'. It does not describe the shape of returned rows, though no output schema exists.

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

Conciseness4/5

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

The opening sentence is front-loaded and single-purpose, and the per-argument notes are short. The full enumeration of country values and the 'GB:' prefix note repeat the schema verbatim, which is wasted space for an agent that already receives the schema.

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

Completeness4/5

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

For a parameterized read-only list tool with no output schema, the description covers the hard result cap, filter semantics (sector applied to the already-ranked top-10, not the full universe), the closed set of supported markets, and the failure mode for unsupported ones. What's missing is any indication of what fields each returned stock carries.

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

Parameters4/5

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

Schema coverage is 67%, and the description fills the most dangerous gap: `num` has no schema description and defaults to 20 while the feed returns at most 10, which the description flags explicitly. The `country` and `sector` explanations largely duplicate the schema text, and the GB: prefix quirk is repeated from the schema, so the marginal gain is concentrated in `num`.

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?

Specific verb and resource: returns the top-10 stocks by TipRanks Smart Score within a single market, and the 'perfect 10 / Outperform' gloss defines the ranking metric. It implicitly separates itself from list siblings like get_top_rated_stocks or get_trending_stocks by naming Smart Score as the ranking basis, but never explicitly contrasts with them.

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

Usage Guidelines3/5

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

Usage context is implied rather than stated — an agent can infer this is the 'best stocks by Smart Score' screener, and the note that a sector filter often keeps few or no rows is useful expectation-setting. There is no explicit when-to-use/when-not or pointer to an alternative sibling tool.

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

list_my_portfoliosA
Read-onlyIdempotent
Inspect

List the portfolios you authorized this connector to access.

Returns the portfolios that were on your TipRanks account at the time you signed in, each with its id and name. If you've added or renamed portfolios since, re-authorize to refresh.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

The annotations already indicate read-only, idempotent, non-destructive behavior. The description adds valuable behavioral context: the list reflects portfolios present at sign-in time ('at the time you signed in'), and that re-authorization is needed to refresh. This goes beyond annotation hints and helps the agent understand potential staleness.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the main purpose. Each sentence adds essential information: the action and the caveat about data freshness. No filler or redundancy.

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

Completeness5/5

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

Given the tool's low complexity (no parameters, no output schema), the description is complete: it states what is returned (id and name), the source (authorized portfolios), and a critical caveat about refresh. This fully covers what an agent needs to know.

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?

With zero parameters, the schema provides complete coverage for parameters. The description isn't required to explain parameter syntax, but it does not add explicit 'no arguments needed' clarity. The baseline for 0 params is 4, which is appropriate here.

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

Purpose5/5

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

The description clearly states the tool's function with a specific verb and resource: 'List the portfolios you authorized this connector to access.' It further specifies the output scope (id and name) and differentiates this listing tool from sibling portfolio tools like get_portfolio_holdings or get_portfolio_analysis, which operate on specific portfolios.

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

Usage Guidelines4/5

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

The description provides clear context on when to use the tool: to see authorized portfolios and retrieve their IDs/names. It also includes a usage caveat about re-authorizing if portfolios have changed. However, it does not explicitly mention alternatives or when not to use this tool, though the listing-purpose is unambiguous.

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. 4 tool updates
    • Changedget_etf_screener2 fields changed
      • changedInput schema / properties / assetClass / description
        Previous value: -"Asset class filter, e.g. 'Equity', 'FixedIncome', 'Commodities'"New value: +"Asset class filter. Each class with the category and focus values it answers, spelled exactly as listed (a category or focus taken from another assetClass matches no ETF):\nEquity: category SizeAndStyle, Sector, HighDividendYield; focus TotalMarket, LargeCap, MidCap, SmallCap, MicroCap, ExtendedMarket, InformationTechnology, Financials, Industrials, HealthCare, ConsumerDiscretionary, Energy, RealEstate, CommunicationServices, Materials, ConsumerStaples, Utilities, Theme, HighDividendYield; broad-market funds (S&P 500, total market) are category SizeAndStyle, focus LargeCap or TotalMarket\nFixedIncome: category BroadMarketBroadBased, CorporateBroadBased, GovernmentLocalAuthorityMunicipal, GovernmentTreasury, GovernmentInflationLinked, CorporateBankLoans, CorporatePreferred, BroadMarketAssetBacked, GovernmentBroadBased, GovernmentMortgageBacked, GovernmentNonNativeCurrency, CorporateConvertible, CorporateAssetBacked, GovernmentAgency; focus InvestmentGrade, BroadCredit, HighYield\nCommodities: category PreciousMetals, BroadMarket, Energy, Agriculture, IndustrialMetals; focus BroadMarket, Gold, Silver, CrudeOil, NaturalGas, Copper, Platinum, CarbonCredits, Palladium, Wheat, Corn, Gasoline, Sugar, Soybeans\nCurrency: category Pair, Basket; no focus filter; spot crypto funds (bitcoin, ether) are assetClass Currency\nAlternatives: category HedgeFundStrategies, TacticalTools; focus GlobalMacro, LongShort, Volatility, Spreads; buffer, defined-outcome and option-income funds have no filter value: screen assetClass=Alternatives alone\nAssetAllocation: category AssetAllocation; focus TargetOutcome, TargetRisk, TargetDate\nFactor and region funds (momentum, growth, value, quality, low volatility, emerging markets, Asia, Europe) have no screener value: look up the ETFs you know for them by ticker with get_assets_data (MTUM, SPMO for momentum; VWO, IEMG for emerging markets)."
      • changedInput schema / properties / category / description
        Previous value: -"Category filter, e.g. 'Sector', 'BroadMarket', 'HighDividendYield'"New value: +"Category filter, e.g. 'SizeAndStyle', 'Sector', 'CorporateBroadBased' (the values per assetClass are listed under assetClass)"
    • Changedget_recent_analyst_ratings1 field changed
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "title": "Offset",
        +  "type": "integer"
        +}
    • Changedget_top_rated_stocks2 fields changed
      • changedInput schema / properties / country / description
        Previous value: -"'US', 'Canada', 'UK', or 'Global' (default: US). UK tickers are returned with a 'GB:' prefix but the country value is still 'UK'."New value: +"'US','Canada','UK','Germany','France','Spain','Italy','Netherlands','Switzerland','Australia','Singapore','Japan', or 'Israel' (default: US); these are the only markets with a list, each list covers one market, and any other country returns no_match. There is no global list: when no market is named, use 'US' and say the list covers US stocks. UK tickers are returned with a 'GB:' prefix but the country value is still 'UK'."
      • changedInput schema / properties / sector / description
        Previous value: -"Lowercase sector filter: financial, healthcare, consumerdefensive, consumercyclical, utilities, materials, technology, industrials, energy, communicationservices, realestate (default: all sectors)"New value: +"Sector filter: technology, financial, healthcare, energy, utilities, industrials, materials, consumerdefensive, consumercyclical, services (default: all sectors). This feed files oil & gas under its Utilities sector, so 'energy' and 'utilities' return the same rows: oil & gas companies and power utilities together, all labelled 'Utilities'."
    • Changedget_top_smart_score_stocks2 fields changed
      • changedInput schema / properties / country / description
        Previous value: -"'US','Canada','UK','Germany','Spain','France','India','Italy','Israel','Australia','Singapore','Japan','HongKong', or 'Global' (default: US). UK tickers are returned with a 'GB:' prefix but the country value is still 'UK'."New value: +"'US','Canada','UK','Germany','Spain','Australia','Singapore','HongKong', or 'Global' (default: US); these are the only markets with a list, and any other country returns no_match. UK tickers are returned with a 'GB:' prefix but the country value is still 'UK'."
      • changedInput schema / properties / sector / description
        Previous value: -"Lowercase sector filter: financial, healthcare, consumerdefensive, consumercyclical, utilities, materials, technology, industrials, energy, communicationservices, realestate (default: all sectors)"New value: +"Keeps only the rows of the market's top-10 list in this sector: financial, healthcare, consumerdefensive, consumercyclical, utilities, basicmaterials, technology, industrials, energy, communicationservices, realestate (default: all sectors). The list is ranked across all sectors, so a sector often keeps few rows or none."
  2. 1 tool update
    • Changedget_etf_holdings1 field changed
      • changedInput schema / properties / sort_by / description
        Previous value: -"Optional prices field to sort by descending (e.g. 'prices.5d.gain', 'prices.twoWeeks.gain', 'prices.month.gain'); when set, returns top performers instead of the full list."New value: +"Optional period to sort by, descending: '5d', 'month', 'ytd' or 'year'; when set, returns top performers instead of the full list."
  3. 3 tool updates
    • Changedget_ai_stock_analysis2 fields changed
      • addedInput schema / properties / tickers / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / tickers / type
        Removed value: -"string"
    • Changedget_latest_news2 fields changed
      • addedInput schema / properties / tickers / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / tickers / type
        Removed value: -"string"
    • Changedget_technical_analysis1 field changed
      • changedInput schema / properties / timeFrame / description
        Previous value: -"One of '1m','5m','15m','30m','1h','5h','day','3d','week','2w','month' (default: 'day')"New value: +"One of '1m','5m','15m','30m','1h','5h','day','3d','week','2w','month' (default: 'day'). Request '5h' for one ticker per call."
  4. 3 tool updates
    • Changedget_etf_screener2 fields changed
      • changedInput schema / properties / focus / description
        Previous value: -"Focus filter, e.g. 'LargeCap', 'InformationTechnology', 'HighYield'"New value: +"Focus filter, e.g. 'LargeCap', 'InformationTechnology', 'HighYield'. This is the screener's SECTOR filter — there is no separate sector parameter."
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 0,
        +  "description": "Rows to return (default: 20, max: 100).",
        +  "title": "Limit",
        +  "type": "integer"
        +}
    • Changedget_stock_splits1 field changed
      • addedInput schema / properties / ticker
        Added value: +{
        +  "default": "",
        +  "description": "Optional. Return only this company's splits within the window, e.g. 'NVDA'. Pair with a wide fromDate for 'has X ever split'.",
        +  "title": "Ticker",
        +  "type": "string"
        +}
    • Changedget_trending_stocks4 fields changed
      • changedInput schema / properties / daysAgo / description
        Previous value: -"Days to look back (default: 7). Use 30 when filtering by sector or country, as narrow windows often return very few stocks."New value: +"Days to look back: 3, 7, or any number from 30 up — anything else (1, 2, 14…) is rejected. Default 7. Use 30 or more when filtering by sector or country, as narrow windows often return very few stocks."
      • changedInput schema / properties / filter / description
        Previous value: -"'analysts', 'bloggers', or 'both' (default: analysts)"New value: +"Exactly one of 'analysts', 'bloggers' or 'both' (default: analysts). Any other value is rejected rather than answered."
      • addedInput schema / properties / sector
        Added value: +{
        +  "default": "",
        +  "description": "Sector filter: energy, financial, general, healthcare, industrials, services, technology or utilities. Omit for all sectors; a sector outside this list is refused rather than answered. Rows for sector='energy' are energy companies even though the feed labels them UTILITIES.",
        +  "title": "Sector",
        +  "type": "string"
        +}
      • changedInput schema / properties / trendingType / description
        Previous value: -"'best-rated' or 'worst-rated'; omit for all (default: all)"New value: +"Exactly 'best-rated' or 'worst-rated'; omit for all (default). Any other value is rejected rather than silently returning the unranked list."
  5. 71 tool updates
    • Changedget_ai_stock_analysis1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_ai_stock_analysisOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_all_commodities_quotes1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_all_commodities_quotesOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_all_crypto_quotes1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_all_crypto_quotesOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_all_forex_quotes1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_all_forex_quotesOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_analysts_by_firm1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_analysts_by_firmOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_article1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_articleOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_assets_data1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_assets_dataOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_assets_events1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_assets_eventsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_assets_news1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_assets_newsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_assets_warnings1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_assets_warningsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_best_performing_experts1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_best_performing_expertsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_blogger_sentiment1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_blogger_sentimentOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_bulls_bears_summary1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_bulls_bears_summaryOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_buybacks1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_buybacksOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_clinical_trials1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_clinical_trialsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_commodity_historical1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_commodity_historicalOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_commodity_quote1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_commodity_quoteOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_company_kpis1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_company_kpisOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_crypto_historical1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_crypto_historicalOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_crypto_news1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_crypto_newsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_crypto_quote1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_crypto_quoteOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_dividend_history1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_dividend_historyOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_earnings_calendar1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_earnings_calendarOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_earnings_call_summary1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_earnings_call_summaryOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_earnings_history1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_earnings_historyOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_economic_calendar1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_economic_calendarOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_etf_analysis1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_etf_analysisOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_etf_exposures1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_etf_exposuresOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_etf_forecast1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_etf_forecastOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_etf_holdings1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_etf_holdingsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_etf_screener1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_etf_screenerOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_etf_top_stocks1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_etf_top_stocksOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_financials1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_financialsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_forex_historical1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_forex_historicalOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_forex_quote1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_forex_quoteOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_hedge_fund_activity1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_hedge_fund_activityOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_hedge_fund_holdings1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_hedge_fund_holdingsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_index_historical1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_index_historicalOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_index_quote1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_index_quoteOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_insider_transactions1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_insider_transactionsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_investor_sentiment1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_investor_sentimentOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_ipo_calendar1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_ipo_calendarOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_latest_news1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_latest_newsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_market_commentary1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_market_commentaryOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_market_movers1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_market_moversOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_market_performance1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_market_performanceOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_my_usage1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_my_usageOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_options_chain1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_options_chainOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_options_contract1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_options_contractOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_options_expirations1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_options_expirationsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_options_unusual_trades1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_options_unusual_tradesOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_peers1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_peersOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_politician_activity1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_politician_activityOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_politicians1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_politiciansOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_portfolio_analysis1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_portfolio_analysisOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_portfolio_holdings1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_portfolio_holdingsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_portfolio_overview1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_portfolio_overviewOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_portfolio_performance1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_portfolio_performanceOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_recent_analyst_ratings1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_recent_analyst_ratingsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_sector_analysis1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_sector_analysisOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_stock_catalyst1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_stock_catalystOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_stock_prices1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_stock_pricesOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_stock_quotes1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_stock_quotesOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_stock_splits1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_stock_splitsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_technical_analysis1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_technical_analysisOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_ticker_earnings1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_ticker_earningsOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_top_hedge_fund_managers1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_top_hedge_fund_managersOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_top_rated_stocks1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_top_rated_stocksOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_top_smart_score_stocks1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_top_smart_score_stocksOutput",
        -  "type": "object"
        -}New value: +null
    • Changedget_trending_stocks1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "get_trending_stocksOutput",
        -  "type": "object"
        -}New value: +null
    • Changedlist_my_portfolios1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "list_my_portfoliosOutput",
        -  "type": "object"
        -}New value: +null
  6. 2 tool updates
    • Changedget_all_crypto_quotes2 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 40,
        +  "description": "How many ranked coins to return (default 40, max 75). Ignored when `symbols` is given.",
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / symbols
        Added value: +{
        +  "default": "",
        +  "description": "Optional comma-separated coins to return instead of the ranked slice, e.g. 'BTCUSD,ETHUSD'. Bare tickers like 'BTC' resolve to the USD pair.",
        +  "title": "Symbols",
        +  "type": "string"
        +}
    • Changedget_all_forex_quotes2 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 40,
        +  "description": "How many ranked pairs to return (default 40, max 75). Ignored when `symbols` is given.",
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / symbols
        Added value: +{
        +  "default": "",
        +  "description": "Optional comma-separated pairs to return instead of the ranked slice, e.g. 'EURUSD,USDJPY'. Slash and dash forms are accepted.",
        +  "title": "Symbols",
        +  "type": "string"
        +}
  7. 2 tool updates
    • Changedget_assets_news1 field changed
      • changedInput schema / properties / from_date / description
        Previous value: -"Optional recency floor 'YYYY-MM-DD'; only returns articles published on or after this date."New value: +"Optional recency floor 'YYYY-MM-DD', applied to the recent articles this tool returns. It cannot pull older news into range — for a past date window use get_latest_news with from_date + to_date."
    • Changedget_latest_news1 field changed
      • addedInput schema / properties / to_date
        Added value: +{
        +  "default": "",
        +  "description": "Optional 'YYYY-MM-DD' upper bound on the publish date, inclusive of that whole day. Pair with from_date to read a specific past window; from_date on its own returns the newest stories since that date.",
        +  "title": "To Date",
        +  "type": "string"
        +}
  8. 1 tool update
    • Addedget_ai_stock_analysis
  9. 3 tool updates
    • Changedget_crypto_news1 field changed
      • addedInput schema / properties / page / description
        Added value: +"0-indexed page of recent articles (0 = most recent); increase to page further back in time."
    • Changedget_peers1 field changed
      • addedInput schema / properties / ticker / description
        Added value: +"Stock ticker symbol, e.g. 'AAPL'."
    • Changedget_ticker_earnings1 field changed
      • addedInput schema / properties / ticker / description
        Added value: +"Stock ticker symbol, e.g. 'NVDA'."
  10. 70 tool updates
    • First observedget_all_commodities_quotes
    • First observedget_all_crypto_quotes
    • First observedget_all_forex_quotes
    • First observedget_analysts_by_firm
    • First observedget_article
    • First observedget_assets_data
    • First observedget_assets_events
    • First observedget_assets_news
    • First observedget_assets_warnings
    • First observedget_best_performing_experts
    • First observedget_blogger_sentiment
    • First observedget_bulls_bears_summary
    • First observedget_buybacks
    • First observedget_clinical_trials
    • First observedget_commodity_historical
    • First observedget_commodity_quote
    • First observedget_company_kpis
    • First observedget_crypto_historical
    • First observedget_crypto_news
    • First observedget_crypto_quote
    • First observedget_dividend_history
    • First observedget_earnings_calendar
    • First observedget_earnings_call_summary
    • First observedget_earnings_history
    • First observedget_economic_calendar
    • First observedget_etf_analysis
    • First observedget_etf_exposures
    • First observedget_etf_forecast
    • First observedget_etf_holdings
    • First observedget_etf_screener
    • First observedget_etf_top_stocks
    • First observedget_financials
    • First observedget_forex_historical
    • First observedget_forex_quote
    • First observedget_hedge_fund_activity
    • First observedget_hedge_fund_holdings
    • First observedget_index_historical
    • First observedget_index_quote
    • First observedget_insider_transactions
    • First observedget_investor_sentiment
    • First observedget_ipo_calendar
    • First observedget_latest_news
    • First observedget_market_commentary
    • First observedget_market_movers
    • First observedget_market_performance
    • First observedget_my_usage
    • First observedget_options_chain
    • First observedget_options_contract
    • First observedget_options_expirations
    • First observedget_options_unusual_trades
    • First observedget_peers
    • First observedget_politician_activity
    • First observedget_politicians
    • First observedget_portfolio_analysis
    • First observedget_portfolio_holdings
    • First observedget_portfolio_overview
    • First observedget_portfolio_performance
    • First observedget_recent_analyst_ratings
    • First observedget_sector_analysis
    • First observedget_stock_catalyst
    • First observedget_stock_prices
    • First observedget_stock_quotes
    • First observedget_stock_splits
    • First observedget_technical_analysis
    • First observedget_ticker_earnings
    • First observedget_top_hedge_fund_managers
    • First observedget_top_rated_stocks
    • First observedget_top_smart_score_stocks
    • First observedget_trending_stocks
    • First observedlist_my_portfolios

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Live TipRanks financial data & analyst research for AI agents - analyst ratings, Smart Score, technicals, options, and your portfolios.
    16
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    US/HK markets — 110 tools: real-time quotes, options, orders, fundamentals, alerts, DCA & portfolio
    193
    14
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Real-time news with bias scoring, live market data, and AI-powered options pricing. 9 tools across news intelligence, media bias analysis, stock/crypto data, and meme search.
    9
    5 npm
    11
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources