Skip to main content
Glama

yahoo-stock-mcp

npm version

English | 中文

An MCP server (TypeScript / Node.js) that pulls comprehensive market data for stocks via Yahoo Finance and Investing.com (GraphQL + TVC), persists it to an external MySQL (configured via a YAHOO_STOCK_MCP_DATABASE_URL connection string, not bundled with the server), and queries it by ticker.

Architecturally the MCP server stays lightweight: it is only a thin query layer plus a sync trigger, while the database is a fully external dependency.

Install

npm install -g yahoo-stock-mcp

Requires Node.js >= 20 and an external MySQL (see the .env config below).

Related MCP server: YFinance MCP Server

Quick start (npm global install)

The package already ships the compiled dist/ and the Go sidecar bin/gqlproxy, so no build step is needed — just use the yahoo-stock-mcp command:


# 0. CLI basics (no database needed)
yahoo-stock-mcp --version        # print version
yahoo-stock-mcp --help           # print usage (also: yahoo-stock-mcp help sync)

# 1. Configure the external MySQL connection (.env)
#    YAHOO_STOCK_MCP_DATABASE_URL=mysql://user:pass@host:3306/yahoo_stock_mcp
#    For a local dev database you can spin one up with deploy/docker-compose.mysql.yml:
#    docker compose -f deploy/docker-compose.mysql.yml up -d

# 2. Initialise the schema in the configured database
yahoo-stock-mcp db:init

# 3. Full sync of one stock (pull history from 2000-01-01 + all fundamentals)
yahoo-stock-mcp sync --symbol NVDA --full

# Incremental sync afterwards (only new data)
yahoo-stock-mcp sync --symbol NVDA

# Incremental sync and also pull 15m bars (1m/5m/15m/30m/60m)
yahoo-stock-mcp sync --symbol NVDA --intraday 15m

# Sync every stored symbol
yahoo-stock-mcp sync --all --full

# Sync all GICS sector ETFs + constituents (sector rotation data)
yahoo-stock-mcp sync --sectors

# 4. Start the MCP server (stdio)
yahoo-stock-mcp server

Command reference

Usage: yahoo-stock-mcp <command> [options]

Commands:
  server                 Start the MCP server over stdio (default with no arguments)
  db:init                Create the MySQL schema in the configured database
  sync                   Pull stock data from Yahoo Finance / Investing.com into MySQL
  version                Print the version number
  help [command]         Show general help, or help for a specific command

Options:
  -h, --help             Show this help
  -v, --version          Print the version number

Run yahoo-stock-mcp help sync (or yahoo-stock-mcp sync --help) for sync options. --version / -v / version all print yahoo-stock-mcp <version>.

Run from source (development / contribution)

npm install
npm run build:all   # TypeScript + Go sidecar
npm run server      # stdio; use npm run sync -- ... or npm run dev for other commands

Tests

# Requires a local MySQL (default 127.0.0.1:3306, see deploy/docker-compose.mysql.yml) with the schema initialised
npm run test:cli   # CLI behaviour: version / help / unknown-command handling (no DB required)
npm run test:db    # query layer: covers all query functions, LIMIT binding regression, edge params
npm run test:mcp   # protocol layer: initialize/tools/list/tools/call end-to-end + stdin close exit
npm test           # all three

Tests use a dedicated ZZTEST symbol and clean up automatically, so they never touch real data.

MCP tools

Tool

Description

sync_stock

Full/incremental sync of one stock to MySQL

search_symbol

Search stored instruments by symbol/name

get_quote

Latest quote + key metrics

get_bars

Historical candles (1d/1wk/1mo)

get_profile

Company profile

get_financials

The three financial statements

get_ratios

Valuation / financial ratios

get_dividends

Dividend history & summary

get_analyst_forecast

Analyst consensus & price target

get_earnings

Earnings history & estimates

get_holders

Institutional holders

get_news

News

get_options

Option chain snapshot (queried after being synced to DB)

get_option_quote

Live option quotes straight from Yahoo (on demand, no local DB needed): underlying quote + optional expiry/strike/direction filters

get_company_events

Forward-looking event calendar: next earnings / call / ex-dividend / dividend dates (Yahoo calendarEvents + Investing next_release_date)

get_insider_transactions

Insider trading: executive/director buys & sells, shares, amounts (Yahoo insiderTransactions)

get_analyst_actions

Analyst upgrades/downgrades & target-price changes (Yahoo upgradeDowngradeHistory)

get_earnings_trend

Quarterly earnings estimate trend: EPS/revenue estimates, growth, 7/30/60/90-day revisions (Yahoo earningsTrend)

get_recommendation_trend

Analyst rating trend (monthly strong buy/buy/hold/sell/strong sell)

get_fund_holders

Mutual fund ownership (Yahoo fundOwnership)

get_short_interest

Short-interest snapshot: shares short, short ratio, % of float (Yahoo defaultKeyStatistics)

get_holder_breakdown

Ownership breakdown: insider/institutional %, institutional float, institutional count (Yahoo majorHoldersBreakdown)

get_intraday_bars

Minute-level bars (1m/5m/15m/30m/60m, queried after being synced to DB)

get_indicators

Compute 42 technical indicators (SMA/EMA/RSI/MACD/KDJ/BBANDS/ATR/ADX/OBV/...) from stored bars: date-aligned series + latest value per channel

list_indicators

Self-describing catalog of every supported indicator: group, parameters, defaults/ranges, output channels, warm-up length

list_sectors

Sector catalog: the 11 GICS sectors + SPY benchmark, mapped to SPDR sector ETFs

get_sector_performance

Sector rotation view: each sector's latest price + 1d/5d/20d change ranking vs SPY benchmark

get_sector_members

Sector constituents (sector ETF topHoldings, incl. weights)

sync_sectors

Sync all sector ETF quotes (~30 days of bars) and constituents

Technical indicators

get_indicators computes everything locally from daily_bars / intraday_bars — no extra data source, no schema change.

42 indicators in seven groups:

  • Trend / moving averages (9): SMA, EMA, WMA, DEMA, TEMA, HMA, KAMA, BBANDS, SAR

  • Momentum (8): RSI, MACD, STOCH, KDJ, STOCHRSI, WILLR, CCI, MFI

  • Oscillators / trend strength (9): ADX, ROC, MOM, CMO, TRIX, ULTOSC, AROON, AO, KST

  • Volume (6): VWAP, OBV, ADL, ADOSC, CMF, FI

  • Volatility (5): TRANGE, ATR, NATR, STDDEV, ANNVOL

  • Price transforms (4): TYPPRICE, MEDPRICE, WCLPRICE, AVGPRICE

  • Regression (1): LINEARREG (value, slope, intercept, forecast, ±k standard-error channel)

Conventions:

  • basis=adjusted by default: OHLC is rescaled by adjClose/close; intraday bars are always raw.

  • Formulas follow TA-Lib conventions; the deliberate deviations (degenerate-window values for RSI/STOCH/KDJ/WILLR, rolling VWAP, the first bar's true range) are noted in the corresponding implementation comments and indicator summaries.

  • Call list_indicators for each indicator's parameters and valid ranges.

Data sources

  • Yahoo Finance: bars (v8 chart), quoteSummary (needs cookie+crumb), options (v7), news (v1 search), fundamentals (fundamentals-timeseries, no auth)

  • Investing.com: GraphQL gql.api.investing.com/graphql (quotes/statements/ratios/dividends/estimates/earnings/profile/executives/holders, no auth), TVC bars (carrier token)

Source priority

Yahoo is authoritative by default: when both providers return a value for the same row (ratios, financial fields, dividends, forward events), Yahoo's value wins and investing only fills what Yahoo did not provide. Set YAHOO_STOCK_MCP_PRIMARY_PROVIDER=investing to flip that. Building an instrument no longer calls investing when Yahoo already returned its identity, so a new ticker (or a whole sector sync) does not wait on investing's 403 retries.

Data checklist

For the "watch the market, position early" use case, the following dimensions are added on top of the per-stock fundamentals, all fetched from existing Yahoo quoteSummary / Investing GraphQL endpoints:

Dimension

Table

Source

Forward-looking event calendar

company_events

Yahoo calendarEvents + Investing next_release_date (next earnings/dividend)

Insider transactions

insider_transactions

Yahoo insiderTransactions

Analyst actions

analyst_actions

Yahoo upgradeDowngradeHistory (upgrades/downgrades/target changes)

Earnings estimate trend

earnings_trend

Yahoo earningsTrend (quarterly EPS/revenue estimate + 7/30/60/90-day revisions)

Recommendation trend

recommendation_trend

Yahoo recommendationTrend (monthly rating distribution)

Fund holders

fund_holders

Yahoo fundOwnership

Short interest

short_interest

Yahoo defaultKeyStatistics (sharesShort/shortRatio/% of float)

Holder breakdown

holder_breakdown

Yahoo majorHoldersBreakdown (insider/institutional %)

Minute bars

intraday_bars

Yahoo chart v8 (1m/5m/15m/30m/60m)

Sector catalog & rotation

sectors / sector_members

GICS 11 sectors + SPY benchmark, sector ETF (XLC..XLU/SPY) quotes + topHoldings constituent weights

Indices / ETFs / cross-assets (e.g. ^GSPC, ^VIX, SPY, TLT) can be synced directly as symbols: Yahoo natively serves index quotes, and any Investing side failures are skipped automatically, so Yahoo data still lands in the DB.

Client integration (Claude Desktop / Cursor / Codex)

{
  "mcpServers": {
    "yahoo-stock-mcp": {
      "command": "yahoo-stock-mcp",
      "args": ["server"],
      "env": {
        "YAHOO_STOCK_MCP_DATABASE_URL": "mysql://user:pass@host:3306/yahoo_stock_mcp",
        "YAHOO_STOCK_MCP_PROXY_URL": "http://127.0.0.1:17890"
      }
    }
  }
}

command relies on yahoo-stock-mcp being on PATH (satisfied after a global npm install); if not globally installed, use the source path instead: node /path/to/yahoo-stock-mcp/dist/cli.js server. All config vars use the YAHOO_STOCK_MCP_ prefix so they never collide with other apps' DATABASE_URL / PROXY_URL / USER_AGENT.

Notes

  • Full sync: pulls all daily bars from YAHOO_STOCK_MCP_BARS_START_DATE (default 2000-01-01) + all fundamentals + an options snapshot + news + the data checklist (events/insiders/analysts/earnings trend/short interest/funds, etc.).

  • Incremental sync: only pulls new bars since sync_state.last_bar_date, and refreshes quotes, ratios, estimates, news, the options snapshot and the data checklist.

  • Minute bars: --intraday <1m|5m|15m|30m|60m> pulls the last 7 days of minute bars into intraday_bars (idempotent upsert).

  • Sectors: sync --sectors syncs the 11 GICS sector ETFs (XLC..XLU) + SPY benchmark quotes and topHoldings constituents in one go; get_sector_performance returns the rotation ranking.

  • Options: get_options reads the snapshot synced to the DB; get_option_quote fetches the latest quotes directly from Yahoo on demand (incl. underlying price, optional expiry, strike, and direction filters) — no prior sync required.

  • All writes are idempotent upserts (INSERT ... ON DUPLICATE KEY UPDATE) and can be re-run safely.

  • Rate limiting is built in (default 300ms/request); Yahoo crumb cache 25 min, TVC token cache 25 min.

About investing.com's TLS interception

investing.com blocks Node.js requests via Cloudflare TLS fingerprinting (HTTP 403), while a Go client can access it normally. That's why the project bundles a tiny Go transport proxy cmd/gqlproxy (~200 lines, stdlib only):

npm run build:sidecar   # produces bin/gqlproxy

The TS data-source layer tries Node fetch first, and automatically switches to that proxy on a 403 (with a persistent cookie session that handles the Cloudflare challenge). From networks that aren't fingerprint-blocked the proxy is unnecessary; set YAHOO_STOCK_MCP_INVESTING_TRANSPORT=node to force pure Node.

# Full build (TypeScript + Go sidecar)
npm run build:all

Environment variables

Var

Default

Description

YAHOO_STOCK_MCP_DATABASE_URL

derived from DB_*

Full MySQL connection string, e.g. mysql://user:pass@host:3306/yahoo_stock_mcp; takes precedence over DB_*

YAHOO_STOCK_MCP_DB_HOST/DB_PORT/DB_USER/DB_PASSWORD/DB_NAME

127.0.0.1/3306/stock/stock123/yahoo_stock_mcp

MySQL connection (used when DATABASE_URL is not set)

YAHOO_STOCK_MCP_USER_AGENT

Chrome 148 UA

Request fingerprint

YAHOO_STOCK_MCP_REQUEST_DELAY_MS

300

Per-request rate limit

YAHOO_STOCK_MCP_PROXY_URL

none

HTTP(S) proxy for all Node fetch requests, e.g. http://127.0.0.1:17890; Yahoo needs it from mainland China

YAHOO_STOCK_MCP_BARS_START_DATE

2000-01-01

Full-sync start date

YAHOO_STOCK_MCP_BARS_PROVIDER

yahoo

Bar source (yahoo/investing)

YAHOO_STOCK_MCP_PRIMARY_PROVIDER

yahoo

Which source is authoritative when both return a value (yahoo/investing); the other fills only what the primary lacks

YAHOO_STOCK_MCP_NEWS_COUNT

20

News count per fetch

YAHOO_STOCK_MCP_INVESTING_TRANSPORT

auto

node / go / auto

YAHOO_STOCK_MCP_GQLPROXY_COOKIE_FILE

.cache/gqlproxy_cookies.txt

sidecar cookie session file

Available Tools

27 tools
get_analyst_actionsB

Get analyst upgrades, downgrades and price-target changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
symbolYesTicker, e.g. NVDA

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. 'Get' clearly indicates a read-only operation, which is honest, but the description does not disclose details such as whether results are recent or historical, how they are ordered, or what the response shape looks like.

Agents need to know what a tool does to the world before 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-formed sentence with no filler. Every phrase adds useful meaning, and the core resource is stated immediately.

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

Completeness3/5

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

This is a simple retrieval tool with one required parameter and a schema that covers symbol, so the description is minimally viable. However, it lacks details about return format, limit semantics, and how this tool differs from closely related analyst-focused siblings, leaving some ambiguity for an agent.

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

Parameters2/5

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

Schema description coverage is only 50%: symbol is documented in the schema, but limit only has type/constraints and no natural-language meaning. The description does not mention or clarify either parameter, so it adds no parameter-level value beyond the schema.

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

Purpose4/5

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

The description names a specific resource and action: analyst upgrades, downgrades, and price-target changes. It is clear enough to identify the tool's purpose, though it does not explicitly contrast it with siblings like get_analyst_forecast or get_recommendation_trend.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool versus alternatives such as get_analyst_forecast or get_recommendation_trend. The intended use is only implied by the description, so an agent gets no explicit routing help.

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

get_analyst_forecastB

Get analyst consensus, buy/hold/sell counts and price targets.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesTicker, e.g. NVDA

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries full behavioral disclosure responsibility. It only says 'Get...' and does not disclose any behavioral traits such as whether the data is a snapshot or historical, whether the symbol must already be synced, possible errors, or source limitations.

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

Conciseness5/5

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

One concise sentence with no filler. It front-loads the action and then lists the key output elements, making it easy to scan and parse.

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 one-parameter tool with no output schema, the description gives a reasonable picture of the return content but does not explain how this fits among the many analyst-related siblings or what behavioral assumptions hold. It is minimally viable but has clear gaps.

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

Parameters3/5

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

Schema description coverage is 100%, with the single 'symbol' parameter already documented as 'Ticker, e.g. NVDA'. The tool description adds no new parameter semantics, so the baseline score of 3 applies.

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

Purpose4/5

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

The description names a specific verb ('Get'), resource ('analyst forecast'), and concrete outputs (consensus, buy/hold/sell counts, price targets). This is clear enough for an agent to know what the tool returns, though it does not explicitly contrast itself with similar siblings like get_recommendation_trend or get_analyst_actions.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus alternatives. Given the large sibling list contains overlapping tools such as get_analyst_actions and get_recommendation_trend, the absence of selection criteria leaves the agent to infer usage.

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

get_barsA

Get historical OHLCV bars from the database (1d/1wk/1mo).

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd date YYYY-MM-DD
fromNoStart date YYYY-MM-DD
limitNo
symbolYesTicker, e.g. NVDA
intervalNo1d

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. 'Get' signals a read operation and 'historical' frames the data scope, but it does not disclose ordering, pagination, date inclusivity, or output format. 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?

One short, front-loaded sentence with no filler. It captures the action, resource, data type, and interval scope efficiently.

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

Completeness4/5

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

Despite having no output schema or annotations, the description gives enough to select and call the tool for historical daily/weekly/monthly bars. Minor gaps remain around response format and default behavior, but the schema covers defaults and limits.

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?

At 60% schema coverage, the schema already documents symbol, dates, and the interval enum. The description adds OHLCV meaning and supported intervals but does not clarify limit semantics or date handling beyond what the schema provides.

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

Purpose5/5

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

States a specific verb ('Get'), a concrete resource ('historical OHLCV bars'), and the supported intervals ('1d/1wk/1mo'). This clearly distinguishes it from sibling tools like get_intraday_bars and get_quote.

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

Usage Guidelines3/5

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

The historical daily/weekly/monthly focus implies when to use it, but the description does not explicitly say when to prefer it over get_intraday_bars or get_quote. No exclusions or alternative-selection guidance are provided.

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

get_company_eventsA

Get forward-looking company events: next earnings date, earnings call, ex-dividend and dividend payment dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
symbolYesTicker, e.g. NVDA

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the burden and does disclose the key behavioral scope: it returns forward-looking events, not historical records. However, it does not describe absence behavior, whether dates are estimates, or how the response is ordered/paginated, leaving several behavioral details unstated.

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

Conciseness5/5

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

Single sentence, front-loaded with the main action and scope, and no filler. The list of event types is compact while still conveying the tool's content.

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

Completeness3/5

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

The output content is partially specified via the event-type list, but with no output schema or annotations, key context is missing: how limit affects results, ordering, what happens when no events exist, and whether the dates are estimates. Adequate for a simple tool, but with clear gaps.

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

Parameters2/5

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

Schema description coverage is only 50%: symbol is described but limit has only constraints, not a description. The tool description does not compensate by explaining limit's effect on the event list, so the limit parameter remains under-specified in both schema and description.

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

Purpose5/5

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

The description uses a specific verb ('Get') and a well-defined resource ('forward-looking company events'), then enumerates the exact event types returned. The term 'forward-looking' also distinguishes it from historical siblings like get_earnings and get_dividends.

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

Usage Guidelines3/5

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

The phrase 'forward-looking' implies this tool is for upcoming events, but it never explicitly tells the agent when to prefer this over get_earnings or get_dividends, nor does it state any when-not conditions. No alternative tool is named.

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

get_dividendsB

Get dividend history and dividend summary for a stock.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesTicker, e.g. NVDA

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It indicates a read-only retrieval action ('Get') and specifies the returned data scope, but it does not mention any limitations, response structure, date range behavior, or other operational details. The agent is left with only a minimal sense of what occurs.

Agents need to know what a tool does to the world before 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, tightly worded sentence that front-loads the action and resource. Every word adds value; there is no redundancy or extraneous context. It is an ideal size for a simple one-parameter tool.

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

Completeness3/5

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

The single parameter is fully documented by the schema, and the description states what the tool returns. However, there is no output schema and no elaboration on the format of the dividend history/summary, time frame, or key fields, so the agent may not know exactly what to expect from the response. The description is minimally adequate but leaves gaps.

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

Parameters3/5

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

Schema description coverage is 100%, with the symbol parameter already described as 'Ticker, e.g. NVDA.' The description's phrase 'for a stock' aligns with this but adds no new meaning, syntax, or constraints. The high schema coverage sets the baseline at 3, and the description does not go beyond it.

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

Purpose4/5

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

The description uses the specific verb 'Get' and clearly identifies the resource: 'dividend history and dividend summary for a stock.' It is unambiguous and naturally distinct from the sibling tools, none of which concern dividends, even though it does not explicitly differentiate itself from alternatives.

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

Usage Guidelines2/5

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

The description provides no guidance about when to use this tool versus alternatives, nor does it mention exclusions or prerequisites. The intended usage is implied only by the tool name and the data it describes, so the agent receives no direct routing information.

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

get_earningsB

Get earnings history and forecasts (EPS and revenue, actual vs estimate).

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesTicker, e.g. NVDA

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It does clarify that the tool returns EPS and revenue data, both actual and estimated, which is useful. However, it does not describe output structure, time ranges, forecast horizon, formatting, or any fetch limitations, leaving notable gaps for a no-annotation tool.

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

Conciseness5/5

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

The description is a single, focused sentence that front-loads the primary action and resource. Every word contributes meaning, and there is no redundant or filler content.

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

Completeness3/5

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

The tool is simple with one required parameter and no output schema, and the description does state the core return content (EPS and revenue, actual vs estimate). Still, it omits details like how far back history goes, what forecast periods are covered, and whether the output is formatted per share or totals. The overlap with sibling forecast/trend tools also weakens completeness.

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

Parameters3/5

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

There is only one parameter, symbol, and the schema already documents it with an example ('Ticker, e.g. NVDA'). The description adds no additional parameter-level meaning beyond the schema, so the baseline score of 3 applies given the high schema description coverage.

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

Purpose4/5

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

The description clearly states the resource ('earnings history and forecasts') and the specific metrics ('EPS and revenue, actual vs estimate'), which goes beyond a vague 'get earnings'. However, it does not explicitly distinguish itself from closely related siblings such as get_analyst_forecast or get_earnings_trend, so it falls short of full sibling differentiation.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus the overlapping sibling tools get_analyst_forecast or get_earnings_trend. The description implies usage when earnings history or forecasts are needed, but it provides no exclusions, conditions, or alternative routing, leaving selection somewhat ambiguous for an AI agent.

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

get_earnings_trendA

Get quarterly earnings estimate trend: EPS/revenue estimates, growth and recent revisions.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesTicker, e.g. NVDA

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose the output composition (estimates, growth, revisions), but it omits details such as the number of quarters covered, how revisions are computed, and the response shape. Acceptable but not rich.

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

Conciseness5/5

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

The description is a single front-loaded sentence with a colon-separated list of included data. Every word contributes and there is no filler.

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

Completeness4/5

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

For a one-parameter read-only tool with no output schema, the description is nearly sufficient: it tells the agent what kind of data will be returned and names the key fields. It only lacks explicit response formatting or periodicity details, which are minor for correct invocation.

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

Parameters3/5

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

The only parameter, symbol, is already fully documented in the schema with a 100% coverage and an example. The description adds no additional parameter-level meaning, so the high-coverage baseline of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Get quarterly earnings estimate trend', and it enumerates the content (EPS/revenue estimates, growth, recent revisions). This clearly distinguishes it from siblings like get_earnings, get_analyst_forecast, and get_recommendation_trend.

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 intended use is implied by the resource name and content, but the description does not state when to use this tool versus get_analyst_forecast, get_earnings, or other siblings. No alternatives or exclusions are mentioned.

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

get_financialsB

Get financial statements (income statement, balance sheet, cash flow) from the database.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNo
symbolYesTicker, e.g. NVDA
statementNo

TDQS

B3.3/5.0
Behavior2/5

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

There are no annotations, so the description carries the full behavioral disclosure burden. It only says data comes 'from the database' and does not clarify that a single statement is selected via the statement parameter, whether data is historical or delayed, or what the response shape is.

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

Conciseness5/5

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

A single sentence states the action, resource, and supported statement types with no filler. The key information is delivered up front and every word earns its place.

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

Completeness3/5

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

For a simple read tool with no output schema, this is adequate but incomplete. It leaves ambiguity about whether all three statements are returned at once or exactly one is selected via the statement parameter, and it does not mention period selection or response format. Given the absence of annotations, more context would be valuable.

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

Parameters3/5

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

Schema description coverage is only 33% (just symbol is documented). The description adds meaning by mapping the statement enum values to 'income statement, balance sheet, cash flow', but it does not explain the period parameter, though ANNUAL/QUARTERLY are fairly self-explanatory.

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

Purpose4/5

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

The description uses a specific verb and resource: 'Get financial statements' and names the three statement types, which makes it clear what this tool retrieves. It is distinguishable from siblings like get_ratios or get_quote, though it does not explicitly name alternatives.

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

Usage Guidelines3/5

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

The description implies the tool should be used when financial statements are needed, but provides no explicit guidance on when to prefer it over sibling tools such as get_ratios or get_earnings. No exclusions, prerequisites, or alternative conditions are stated.

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

get_fund_holdersC

Get mutual fund / fund ownership positions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
symbolYesTicker, e.g. NVDA

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only says 'Get' with no mention of output format, pagination, ordering, data scope, or any side effects. For a retrieval tool, the absence of behavioral details is a notable gap.

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

Conciseness3/5

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

The description is a single sentence with no filler, so it is concise. However, it is under-specified and awkwardly phrased, with no additional context or structure to help disambiguation. It is minimal rather than genuinely well-structured.

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

Completeness2/5

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

With two params, no output schema, and no annotations, the description is the sole source of guidance, yet it fails to explain return values, how the symbol is interpreted, what 'positions' includes, or how limit affects results. This is insufficient for confident invocation.

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

Parameters2/5

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

Only symbol is described in the schema; limit has no description. The description adds no parameter-level meaning and does not compensate for the 50% schema coverage. It also does not clarify the meaning or effect of the limit parameter.

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

Purpose3/5

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

The description uses the verb 'Get' with a resource, but 'mutual fund / fund ownership positions' is ambiguous: it could mean a fund's holdings or its owners' positions. The statement does not clearly distinguish this tool from siblings such as get_holder_breakdown or get_quote.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. No preconditions, exclusions, or selection criteria are mentioned. The intended usage is only implied by the tool name and minimal description.

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

get_holder_breakdownA

Get ownership structure: insider % and institutional % held, float % and count.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesTicker, e.g. NVDA

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the transparency burden. It does disclose the core behavioral output—aggregate percentages and float information—but it does not mention read-only status, output shape, data freshness, or ambiguity around what 'count' refers to. It is minimally transparent but not rich.

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

Conciseness5/5

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

A single, front-loaded sentence with zero filler. It states the main purpose first and then lists the specific data points, making efficient use of the available space.

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 one-parameter tool with no output schema and no annotations, the description gives the essential return fields but leaves ambiguity around 'count' and lacks any usage context. It is adequate for basic invocation but not fully complete.

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

Parameters3/5

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

Schema coverage is 100% with a clear description of the only parameter (symbol), so the baseline is 3. The tool description adds no additional meaning about the parameter 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 uses a specific verb ('Get') and resource ('ownership structure') and elaborates on exactly what is returned: insider %, institutional %, float % and count. This distinguishes it clearly from sibling tools like get_holders or get_fund_holders, which imply more detailed holder lists.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus alternatives such as get_holders, get_fund_holders, or get_insider_transactions. The description states what it does but gives no context-specific selection criteria, exclusions, or alternative routes.

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

get_holdersB

Get institutional holders and ownership data.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
symbolYesTicker, e.g. NVDA

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. 'Get' implies a read-only retrieval with no mutation, but it does not disclose output shape, pagination, or whether the result is restricted by the limit parameter. This is adequate for a simple read tool, but not rich.

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

Conciseness5/5

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

The description is one concise sentence that front-loads the action and target. No filler words or redundant restatements of the name.

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

Completeness2/5

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

Given no output schema, no annotations, and a crowded sibling list, the description is too thin. It does not clarify what differentiates institutional holders from fund holders, does not explain the effect of limit or return behavior, and provides no context for when this endpoint is appropriate.

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

Parameters3/5

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

Schema coverage is 50%: symbol is documented and limit has default/min/max constraints. The description adds no parameter-specific meaning beyond the tool purpose, which makes 'limit' inferable as holder-count limiting. This is at the acceptable baseline but no more.

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

Purpose4/5

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

The description names a specific verb ('Get') and resource ('institutional holders and ownership data'), so an agent understands the primary function. It does not explicitly distinguish this from sibling tools like get_fund_holders or get_holder_breakdown, which weakens clarity.

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

Usage Guidelines2/5

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

No guidance is given for when to use this tool over alternatives. The description is purely declarative and does not mention exclusions, prerequisites, or related tools such as get_fund_holders, leaving call selection to inference.

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

get_insider_transactionsB

Get insider (officer/director) buy/sell transactions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
symbolYesTicker, e.g. NVDA

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are present, so the description must carry the behavioral burden. It states what data is covered (buy/sell transactions) but does not disclose ordering, time range, pagination, return format, or whether the response includes transaction dates, prices, or share counts. Without annotations, this is a material gap.

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

Conciseness5/5

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

The description is one concise, front-loaded sentence with no redundancies. Every word earns its place.

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

Completeness2/5

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

With no output schema and no annotations, the description should provide some detail about the returned data shape or response characteristics. It only says 'insider buy/sell transactions', leaving the agent to guess whether this returns a list, a summary, or detailed trade records. The limited parameter set keeps it from being a 1, but it is not fully callable with confidence from the description alone.

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

Parameters2/5

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

The description adds no parameter-level meaning. The input schema already documents 'symbol' with a ticker example and gives numeric constraints for 'limit', so the description contributes nothing beyond the schema. With schema_description_coverage at 50%, the 'limit' parameter remains unexplained in prose.

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

Purpose5/5

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

The description uses a specific verb ('Get') and a distinct resource ('insider (officer/director) buy/sell transactions'), clearly identifying the data scope. It effectively distinguishes from sibling tools like get_holders, get_fund_holders, and get_company_events, none of which cover insider trades.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool instead of alternatives such as get_holders, get_company_events, or get_fund_holders. The description implies a use case for insider transactions, but it never states exclusions, prerequisites, or conditions that should route an agent to a sibling.

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

get_intraday_barsA

Get intraday OHLCV bars (1m/5m/15m/30m/60m) stored in the database. Run sync_stock with mode=intraday_15m etc. to populate.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd datetime YYYY-MM-DD
fromNoStart datetime YYYY-MM-DD
limitNo
symbolYesTicker, e.g. NVDA
intervalNo15m

TDQS

A4/5.0
Behavior3/5

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

There are no annotations, so the description carries the full behavioral burden. It usefully discloses that the data is stored locally in the database and that a sync step is required to seed it, which is meaningful context. However, it does not describe the return shape, ordering, timezone handling, or behavior when no data exists for the requested range.

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

Conciseness5/5

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

Two short sentences with no filler. The core purpose and supported intervals are front-loaded, and the prerequisite sync instruction is added in a second sentence, making the description easy to scan and directly actionable.

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

Completeness4/5

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

Given the 5-parameter schema, no output schema, and no annotations, the description does enough by identifying the data source and the sync prerequisite. It could be more complete by explicitly pointing to get_bars for non-intraday data or stating the response format, but the description covers the most important operational context for calling this tool correctly.

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

Parameters3/5

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

Schema description coverage is 60%, so the schema covers symbol, from, and to but not limit or interval. The description adds the list of valid intervals and connects them to sync_stock modes, which helps infer parameter usage, but it does not explain limit or the default interval beyond what the schema already provides. This is adequate but not compensating.

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

Purpose5/5

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

The description uses a specific verb ('Get') and resource ('intraday OHLCV bars') and enumerates the supported intervals, which clearly identifies what the tool returns. It also distinguishes itself from get_bars and sync_stock by emphasizing intraday data stored in the database rather than pulling or syncing 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 gives clear contextual guidance by noting that sync_stock must be run with mode=intraday_15m etc. to populate the database first. It does not explicitly state when-not to use this tool or name get_bars as the alternative for daily bars, 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_newsC

Get recent news for a stock.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
symbolYesTicker, e.g. NVDA

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the behavioral disclosure burden. It only says 'recent news' without explaining response shape, pagination/limit behavior, time window, or any rate-limit/auth considerations. Nothing contradicts the tool name, but the behavioral context is minimal.

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

Conciseness4/5

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

The description is a single sentence with no filler and gets the core purpose across quickly. However, its brevity is partly due to omitted behavioral and parameter context, so it earns high but not perfect marks for structure.

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

Completeness2/5

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

For a tool with no output schema and no annotations, this description is not complete enough: it does not describe the returned news items, fields, ordering, or how to control recency. The two params are simple, so this is a modest gap, but the absence of return-value information makes it incomplete.

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

Parameters2/5

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

The schema covers the symbol parameter with an example, and limit has default/range constraints, but the description adds nothing about how 'limit' behaves or what 'recent' means in terms of the response. With only 50% schema coverage and no clarification in the description, the missing parameter semantics are not compensated.

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

Purpose4/5

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

The description uses a specific verb ('Get') and resource ('recent news for a stock'), which conveys the core function unambiguously. It is clear enough to separate it from sibling quote, bars, financials, and events tools, though it does not explicitly name alternatives.

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

Usage Guidelines2/5

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

No guidance is given about when to choose this tool over sibling tools such as get_company_events or get_analyst_actions. The description only states what it does, not the context or exclusions, leaving the agent to infer usage.

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

get_option_quoteA

Fetch live options quotes for a stock directly from Yahoo (on-demand, no DB sync needed): underlying quote, available expirations/strikes, and per-contract bid/ask/last/volume/open interest/IV.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoOnly return CALL or PUT legs
limitNoMax legs to return
strikeNoOnly return legs at this exact strike
symbolYesTicker, e.g. NVDA
expirationNoExpiration date YYYY-MM-DD (default: nearest listed)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals key behavior: the tool contacts Yahoo directly, operates on-demand, and avoids DB sync. It also discloses the scope of returned data. It does not cover potential rate limits or error behavior, but the most important behavioral traits are clearly stated.

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

Conciseness5/5

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

The description is a single front-loaded sentence that immediately states the action, source, and key differentiator ('directly from Yahoo, on-demand, no DB sync needed'). The colon-separated details are compact and information-dense, with no redundant filler or repetition of schema defaults.

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

Completeness4/5

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

Given there is no output schema, the description does a good job of compensating by listing exactly what data will be returned: underlying quote, available expirations/strikes, and per-contract metrics. Combined with the fully self-describing input schema, this gives an agent enough context to invoke the tool correctly and interpret results. Minor gaps like pagination behavior are not critical for a query tool of this scope.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters already have meaningful descriptions in the schema. The tool description adds minimal extra parameter-level meaning beyond noting that expirations/strikes are 'available' and that per-contract fields are returned. This aligns with the baseline of 3 for high schema coverage.

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

Purpose5/5

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

The description uses a specific verb ('Fetch live options quotes') and clearly identifies the resource (options quotes for a stock from Yahoo). It also distinguishes itself from sibling tools by emphasizing 'on-demand, no DB sync needed' and enumerating included data (underlying quote, expirations/strikes, per-contract bid/ask/last/volume/open interest/IV). This is unambiguous and distinguishable from nearby tools like get_options.

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

Usage Guidelines4/5

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

The description clearly conveys the usage context: it is a live, on-demand fetch directly from Yahoo and does not require a database sync first. This helps an agent understand when to prefer this tool over syncing workflows. However, it does not explicitly name alternatives or state when NOT to use it, so it stops short of a full when/when-not comparison.

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

get_optionsB

Get the latest options chain snapshot for a stock (from Yahoo).

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesTicker, e.g. NVDA
expirationNoExpiration date YYYY-MM-DD

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full burden for behavioral disclosure. It only says 'latest' and 'snapshot', implying a read-only, point-in-time view, but it does not explain what a chain includes (e.g., calls/puts, strikes), how the expiration parameter affects results, or whether all expirations are returned by default. It also omits any potential limitations or side effects.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no redundant words. It efficiently states the tool's purpose and source without any filler.

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

Completeness2/5

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

For a complex financial data tool (options chain) with no output schema and no annotations, the description is inadequate. It does not explain the structure of the returned data, the effect of the optional expiration parameter, or any default behavior. An agent would need to infer or experiment to understand the full scope.

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

Parameters3/5

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

Schema description coverage is 100%, and both parameters have clear descriptions (e.g., 'Ticker, e.g. NVDA' and 'Expiration date YYYY-MM-DD'). The tool description adds no additional meaning or context beyond what the schema provides, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool retrieves an options chain snapshot for a stock, with the source (Yahoo). It uses a specific verb ('get') and resource ('options chain snapshot'), which distinguishes it from the sibling get_option_quote that likely retrieves a single option quote rather than the full chain.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like get_option_quote or search_symbol. The description does not mention scenarios (e.g., needing the full chain vs. a specific option quote) or any conditions for selection.

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

get_profileA

Get company profile: business summary, sector, industry, employees, address, contact info.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesTicker, e.g. NVDA

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden, and it does disclose the data points returned. However, it does not mention operational behaviors like read-only safety, data freshness, potential errors, or any rate limits, so the transparency is only partial.

Agents need to know what a tool does to the world before 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, tightly written sentence that front-loads the main purpose and then lists the returned fields. Every word earns its place, with no repetition or filler.

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

Completeness4/5

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

For a simple single-parameter read tool, the description is largely complete: it names the input and the content of the output. It does not describe response structure or error behavior, but the absence of an output schema and the simplicity of the tool keep this from being a significant gap.

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

Parameters3/5

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

The only parameter, symbol, is already described in the schema as 'Ticker, e.g. NVDA' with 100% schema coverage. The tool description does not add further parameter meaning, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description names a specific verb and resource ('Get company profile') and enumerates the exact contents: business summary, sector, industry, employees, address, contact info. This clearly distinguishes it from sibling tools like get_quote or get_financials.

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

Usage Guidelines2/5

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

No guidance is given about when to choose this tool over alternatives such as search_symbol, get_quote, or get_financials. The description implies the use case from the tool's name, but it never explicitly states selection criteria or exclusions.

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

get_quoteA

Get latest quote for a stock: price, 52-week range, key ratios, dividend summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesTicker, e.g. NVDA

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It explicitly states the tool returns a quote with price, 52-week range, key ratios, and dividend summary, which is useful behavioral information. However, it does not disclose whether the quote is delayed/real-time, whether currency is included, or any other access/rate considerations.

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

Conciseness5/5

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

The description is a single sentence that front-loads the action and resource and then lists the returned data categories. Every word earns its place; there is 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 simple one-parameter read-only tool with no output schema, the description provides a good list of return content. It does not explain the exact shape of the output or whether some fields may be null, but given the tool's low complexity, the description is sufficiently complete for an agent to select and 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?

The input schema already fully documents the only parameter (symbol) with an example (NVDA). The description adds meaning by confirming that the quote is for a stock and implies the symbol is a ticker, which supports the schema. Since schema description coverage is 100% and there is only one parameter, the description adds a small but meaningful layer.

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

Purpose4/5

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

The description states a clear verb ('Get') and resource ('latest quote for a stock') and lists the specific data categories returned (price, 52-week range, key ratios, dividend summary). It distinguishes this tool from siblings like get_bars, get_financials, get_ratios, and get_dividends by indicating it returns a consolidated snapshot of quote data, but it does not explicitly name any sibling or contrast itself.

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

Usage Guidelines3/5

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

The description implies this is the tool to use when you need a broad current quote snapshot rather than historical bars (get_bars), detailed financial statements (get_financials), or standalone ratios/dividends (get_ratios, get_dividends). However, it does not explicitly state when to prefer it over get_profile or get_analyst_forecast, and it offers no exclusion or when-not-to-use guidance.

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

get_ratiosB

Get valuation and financial ratios (PE, PS, PB, margins, ROE, beta, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesTicker, e.g. NVDA

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full behavioral disclosure burden. It signals a read-only operation and names the returned categories, but it does not clarify the time horizon, calculation basis, data source, or any limitations of the ratio values.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the purpose and includes representative examples. Every element earns its place and there is no repetition or filler.

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

Completeness3/5

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

For a one-parameter read tool, the description is minimally adequate for invocation: the agent knows the resource and the required symbol. However, with no output schema and no behavioral context, details about format, scope, or data interpretation are missing, making it incomplete for richer decision-making.

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

Parameters3/5

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

The input schema describes the single parameter 'symbol' as 'Ticker, e.g. NVDA,' which fully covers the parameter. The description adds little to parameter understanding, but the schema already provides sufficient semantics, so a baseline score of 3 is appropriate.

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

Purpose4/5

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

The description uses a clear verb ('Get') and a specific resource ('valuation and financial ratios') and includes concrete examples like PE, PS, PB, margins, ROE, beta. It is understandable on its own, though it does not explicitly distinguish itself from sibling tools such as get_financials.

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

Usage Guidelines2/5

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

The description implies usage via the tool name and the word 'Get,' but provides no explicit guidance about when to choose this tool over alternatives like get_financials or get_quote. No exclusions or conditions are stated.

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

get_recommendation_trendB

Get analyst recommendation trend (strong buy/buy/hold/sell/strong sell) by period.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesTicker, e.g. NVDA

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden. It does not clarify what 'by period' means, whether the result is a historical series or current summary, how the trend is calculated, or what response shape to expect. This leaves important behavioral details undisclosed.

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

Conciseness4/5

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

The description is a single, efficient sentence that front-loads the verb and resource. It contains no fluff, though the vague 'by period' phrase reduces clarity slightly.

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

Completeness2/5

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

With no output schema and no annotations, the description should clarify the return format and the meaning of 'period.' It also does not help an agent distinguish this from similar analyst-related tools. Key contextual information is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and the symbol parameter is already documented as 'Ticker, e.g. NVDA.' The description adds no new parameter meaning and even creates ambiguity by mentioning 'by period' when no period parameter exists in the schema.

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

Purpose4/5

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

The description uses a specific verb and resource: 'Get analyst recommendation trend (strong buy/buy/hold/sell/strong sell) by period.' It identifies the data being retrieved, though 'by period' is ambiguous and it does not explicitly differentiate from nearby siblings like get_analyst_forecast or get_analyst_actions.

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

Usage Guidelines3/5

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

Usage is implied: an agent would call this when it needs analyst recommendation trend data. However, there is no explicit guidance about when to prefer this over alternatives such as get_analyst_forecast or get_analyst_actions, and no exclusions are provided.

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

get_sector_membersA

Get a sector's top constituents with weights (from the sector ETF's topHoldings).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sectorYesSector code, e.g. XLK (Technology) or ETF symbol

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It reveals the data source but does not mention ordering, whether weights are normalized, error behavior for invalid sectors, pagination, or the return shape. This is thin for a tool with no annotation support.

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

Conciseness5/5

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

A single sentence that immediately states the action, object, and data source. It is compact and front-loaded with no filler.

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

Completeness3/5

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

For a simple getter with two parameters, the description is minimally adequate: it names the resource and the source of the data. But with no annotations and no output schema, the lack of return-shape details, ordering guarantees, and sibling differentiation leaves meaningful gaps.

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

Parameters3/5

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

Schema coverage is 50%: the 'sector' parameter is well described in the schema, and 'limit' has constraints but no description. The tool description adds context that these are 'top constituents with weights,' which helps, but it does not explicitly explain the limit behavior beyond what the schema's default and maximum already imply.

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

Purpose5/5

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

The description uses a specific verb ('Get') and a specific resource ('a sector's top constituents with weights'), and clarifies the data source ('the sector ETF's topHoldings'). This clearly distinguishes it from siblings like list_sectors and get_sector_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?

The purpose implies when to use it—whenever a caller needs the top holdings or constituents of a sector. However, it provides no explicit guidance on when not to use it or which sibling alternative to prefer, such as get_fund_holders for general fund holdings.

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

get_sector_performanceA

Sector rotation view: latest price and 1d/5d/20d returns for every GICS sector ETF, ranked by 1-day change, plus the SPY benchmark.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full behavioral burden. It transparently discloses the return contents (latest price, 1d/5d/20d returns), the universe (all GICS sector ETFs), the ordering (ranked by 1-day change), and the inclusion of the SPY benchmark. It does not mention data freshness or error conditions, but the core behavior is well disclosed.

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

Conciseness5/5

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

A single sentence efficiently front-loads the purpose and packs in the scope, metrics, sort order, and benchmark without any wasted words. Every element adds value.

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

Completeness4/5

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

For a no-parameter, no-output-schema tool, the description is highly complete: it tells the agent what data is included, how it is sorted, and that a benchmark is present. It does not enumerate exact field names, but that is not essential given the simple and well-described 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 tool has zero parameters, so no parameter documentation is needed; the baseline is 4. The description adds context about the output universe and benchmark, which is helpful but not parameter-related.

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

Purpose5/5

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

The description clearly states a specific verb and resource: it provides a sector rotation view with latest price and 1d/5d/20d returns for every GICS sector ETF, ranked by 1-day change, plus the SPY benchmark. This distinguishes it from siblings like list_sectors, get_sector_members, and get_quote by specifying the exact output and scope.

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

Usage Guidelines3/5

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

The phrase 'Sector rotation view' implies a use case, but the description does not explicitly state when to use this tool versus alternatives such as get_sector_members or list_sectors. There is no clear when-to-use or when-not-to-use guidance, leaving the selection largely to inference.

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

get_short_interestB

Get short interest snapshot: shares short, short ratio, % of float, days to cover.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesTicker, e.g. NVDA

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are present, so the description bears the full burden of behavioral disclosure. It only restates that a snapshot is retrieved; it does not mention data frequency, source, availability limitations, or response format.

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

Conciseness5/5

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

A single compact sentence with a colon-separated metric list. It is front-loaded with the main purpose and contains no filler or redundant wording.

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

Completeness4/5

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

For a simple one-parameter snapshot tool with no output schema, naming the returned metrics provides solid context. Minor gaps remain around metric interpretation and data-availability caveats, but the essential call is clear.

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

Parameters3/5

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

The only parameter, symbol, is already fully documented in the schema with an example ticker. The description adds no further semantic detail, so it stays at the baseline for good schema coverage.

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

Purpose5/5

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

The description names a specific resource ('short interest snapshot') and enumerates the exact metrics returned (shares short, short ratio, % of float, days to cover). This concretely distinguishes it from sibling data tools like get_quote or get_holders.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus alternatives, or how to handle cases where short interest data might be unavailable. The agent must infer usage solely from the tool name.

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

list_sectorsA

List the GICS sector catalog (11 sectors + S&P 500 benchmark), each mapped to its SPDR sector ETF.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

The verb 'List' implies a read-only retrieval with no side effects, but the description does not disclose data source, freshness, or response behavior. With no annotations available, the description carries the full burden and provides only minimal behavioral transparency.

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

Conciseness5/5

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

The description is a single concise sentence with the verb and resource front-loaded. It contains no filler and conveys the essential scope and output mapping efficiently.

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

Completeness4/5

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

For a low-complexity, parameterless tool, the description adequately conveys what the tool returns: sector names, the benchmark, and the SPDR ETF mapping. Since there is no output schema, a bit more detail about response format would improve completeness, but the description is sufficient for selecting and invoking the tool.

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

Parameters4/5

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

The tool has zero parameters, so the input schema fully covers the input side. The description adds nothing about parameters, but none is needed; the baseline for zero-parameter tools is 4.

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

Purpose5/5

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

The description uses a specific verb ('List') and a clear resource ('GICS sector catalog'), then details the exact contents: 11 sectors plus the S&P 500 benchmark, mapped to SPDR sector ETFs. This clearly distinguishes it from siblings like get_sector_members or get_sector_performance.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool versus alternatives such as get_sector_members, get_sector_performance, or sync_sectors. The intended use is implied by the name and description, but there is no explicit when-to-use or when-not-to-use instruction.

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

search_symbolA

Search locally stored instruments by symbol or name.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSymbol or name fragment, e.g. NVDA or NVIDIA

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral burden. It adds useful context that the search operates on 'locally stored' instruments and matches either symbol or name. However, it does not disclose matching behavior (exact vs. fuzzy), case sensitivity, whether partial matches are allowed, or what happens when no match is found.

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

Conciseness5/5

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

The description is a single compact sentence that leads with the operation and resource, then adds the search keys. There is no filler, and every word contributes meaning.

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

Completeness3/5

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

The tool is simple: one required parameter, fully documented in the schema, with no output schema. However, because there is no output schema, the description should explain what the search returns (e.g., matching instruments, symbols, or identifiers), and it does not. It also omits any precondition such as needing to sync data first, making the description adequate but incomplete.

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

Parameters3/5

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

Schema coverage is 100%, and the schema already describes 'query' as 'Symbol or name fragment, e.g. NVDA or NVIDIA.' The description only repeats 'symbol or name' without adding new semantic detail, so the baseline of 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb ('Search') and resource ('locally stored instruments') and identifies the search keys (symbol or name). It is clearly distinct from the get_*/sync_* siblings, though it does not explicitly name any sibling or contrast itself 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?

The phrase 'locally stored' implies this searches cached/local data rather than a remote endpoint, but the description never says when to use this tool versus alternatives or when not to use it. There is no explicit guidance about using it to resolve a symbol before calling get_quote/get_bars, or about the relationship with sync_stock.

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

sync_sectorsA

Sync all GICS sector ETFs (quote, ~30d bars) and their top-holding constituents into the database. members=false skips constituent refresh.

ParametersJSON Schema
NameRequiredDescriptionDefault
membersNoAlso refresh sector_members from ETF topHoldings

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the disclosure burden. It does add meaningful behavioral context: it syncs quotes and approximately 30 days of bars, and includes a toggle to skip constituent refresh. However, it does not disclose whether the sync overwrites, appends, or updates existing data, nor any side effects, permissions, or failure behavior. This is reasonable but incomplete for a write/sync operation.

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

Conciseness5/5

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

The description is a single, focused sentence that front-loads the core purpose and then explains the key parameter behavior. There is no redundant wording, and every phrase adds information.

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

Completeness4/5

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

For a simple tool with one optional boolean parameter and no output schema, the description covers the essential scope and the parameter effect. It mentions the data types synced (quotes, bars, constituents) and the optional refresh behavior, which is sufficient for an agent to invoke the tool correctly in most cases. Minor gaps remain around return values and database update semantics, but these are not critical given the tool's simplicity.

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

Parameters3/5

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

The input schema already provides 100% coverage with a clear description for the 'members' parameter. The description's 'members=false skips constituent refresh' restates the schema's meaning in a slightly more operational way, adding marginal value. Since the schema is already comprehensive, a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly identifies the operation ('Sync'), the resource ('all GICS sector ETFs'), and the scope ('quote, ~30d bars, top-holding constituents'). It also differentiates from sibling tools by focusing on sector-level synchronization rather than a single stock or read-only data retrieval.

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

Usage Guidelines3/5

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

The description implies when to use this tool—when you need sector ETF data synced into the database—but it does not explicitly contrast it with alternatives like sync_stock or read-only tools such as get_quote or get_sector_members. The 'members=false' note gives a usage hint for the optional parameter, but no explicit when-to-use vs when-not-to-use guidance is provided.

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

sync_stockA

Sync a stock from providers into the local MySQL database. full = complete history from 2000; incremental = only new data.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoincremental
symbolYesTicker, e.g. NVDA
intradayNoAlso sync intraday bars at this interval

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the full behavioral disclosure burden. It clearly states the side effect of syncing into a local MySQL database and defines the scope of each mode, but it does not disclose whether the sync overwrites existing data, whether it is idempotent, or any performance/rate-limit considerations.

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

Conciseness5/5

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

The description is two short sentences with no filler. The primary action is front-loaded, and the mode semantics are compactly conveyed in a single clause. Every word earns its place.

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

Completeness3/5

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

The operation is simple and the core behavior is clear, but with no output schema and no annotations, there is no mention of return values, status reporting, or failure behavior. It is minimally viable for a 3-parameter tool but leaves some practical details unspecified.

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%, so the schema already handles 'symbol' and 'intraday'. The description adds genuinely useful semantics for the 'mode' parameter by defining 'full' and 'incremental', which the schema's enum alone does not explain. This goes beyond the baseline for parameter documentation.

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

Purpose5/5

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

The description uses a specific verb ('Sync'), a resource ('a stock'), and a destination ('local MySQL database'), making the tool's function immediately clear. It also explains the two modes ('full' vs 'incremental') in concrete terms, which further distinguishes the operation from the read-only sibling tools like get_bars.

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

Usage Guidelines2/5

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

The description explains the meaning of 'full' and 'incremental' but gives no explicit guidance on when to choose this tool over alternatives such as get_bars or sync_sectors. There are no when-to-use or when-not-to-use conditions, leaving the agent to infer the appropriate context.

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. 27 tool updatesv0.2.1
    • First observedget_analyst_actions
    • First observedget_analyst_forecast
    • First observedget_bars
    • First observedget_company_events
    • First observedget_dividends
    • First observedget_earnings
    • First observedget_earnings_trend
    • First observedget_financials
    • First observedget_fund_holders
    • First observedget_holder_breakdown
    • First observedget_holders
    • First observedget_insider_transactions
    • First observedget_intraday_bars
    • First observedget_news
    • First observedget_option_quote
    • First observedget_options
    • First observedget_profile
    • First observedget_quote
    • First observedget_ratios
    • First observedget_recommendation_trend
    • First observedget_sector_members
    • First observedget_sector_performance
    • First observedget_short_interest
    • First observedlist_sectors
    • First observedsearch_symbol
    • First observedsync_sectors
    • First observedsync_stock

TDQS

B3.1/5.0

Scored across 27 tools

Disambiguation3/5

Most retrievals map cleanly to distinct data slices (quote, bars, profile, financials), but there are several closely grouped families: get_holders/get_fund_holders/get_holder_breakdown, get_analyst_forecast/get_recommendation_trend/get_analyst_actions/get_earnings_trend, and get_options/get_option_quote. The descriptions help, but an agent could easily select the wrong endpoint within these clusters.

Naming Consistency5/5

All tools follow a clear snake_case verb_noun pattern: get_* for data retrieval, search_symbol for lookup, sync_* for data population, and list_sectors for catalog access. The only minor variation is the mix of verbs, but each verb maps consistently to an action category, so the set is predictable.

Tool Count2/5

At 27 tools, the server exceeds the comfortable 15-tool range and is just past the 25 threshold. While the stock-data domain is broad, several endpoints (e.g., owner/analyst families) could be consolidated without losing clarity.

Completeness4/5

The surface covers the core stock lifecycle: symbol search, quotes, daily/intraday bars, financial statements, dividends, analyst data, ownership, news, options, and sector performance. Minor gaps exist such as batch quote support or historical options chains, but agents can complete typical research workflows without dead ends.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Real-time financial market data MCP server. Stocks, crypto, technicals, sentiment, FDA calendar. No API keys required.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server that provides seamless access to Yahoo Finance stock market data, enabling retrieval of real-time quotes, historical data, charts, financial summaries, and market searches.
    35 npm
    ISC
  • A
    license
    A
    quality
    A
    maintenance
    MCP server that exposes Yahoo Finance data through tools for searching instruments, fetching quotes, history, company info, financials, dividends, news, recommendations, and options. Enables AI assistants to answer market-data questions using natural language.
    22
    MIT