stock-mcp
This server is an MCP (Model Context Protocol) tool that syncs stock market data from Yahoo Finance and Investing.com into an external MySQL database and lets you query, analyze, and trade-analyze that data via MCP tools.
Sync stocks: full or incremental sync of daily/weekly/monthly bars, fundamentals, options, news, and forward-looking data (earnings, insider trades, analyst actions, etc.).
Get quotes & profiles: latest price, 52-week range, key ratios, company summary, sector/industry, and contact info.
Historical & intraday bars: query stored OHLCV candles at 1d/1wk/1mo or 1m/5m/15m/30m/60m intervals.
Financials & ratios: income statement, balance sheet, cash flow, valuation ratios (PE, PS, PB, margins, ROE, beta).
Dividends & earnings: dividend history/summary, earnings history, estimates, and estimate trends.
Analyst & ownership data: forecasts, recommendation trends, upgrades/downgrades, institutional/fund holders, insider transactions, short interest, holder breakdown.
Options data: synced options chain snapshots plus on-demand live option quotes (bid/ask/last/volume/open interest/IV) directly from Yahoo.
Company events: forward-looking calendar with next earnings, earnings call, ex-dividend, and dividend payment dates.
Technical indicators: compute 42 indicators (SMA, EMA, RSI, MACD, KDJ, BBANDS, ATR, ADX, OBV, etc.) from stored bars, plus a catalog of all indicators.
Sector analysis: list GICS sectors mapped to SPDR ETFs, sync sector ETF quotes/constituents, and view sector rotation performance ranked vs SPY.
Search & discovery: search locally stored instruments by symbol or name.
Stores and retrieves stock market data in a MySQL database, providing tools for querying quotes, historical K-line data, company profiles, financial statements, ratios, dividends, analyst forecasts, earnings, holders, news, and options chains.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@stock-mcpGet latest quote for AAPL"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
yahoo-stock-mcp
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-mcpRequires 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 serverCommand 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 numberRun 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 commandsTests
# 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 threeTests use a dedicated ZZTEST symbol and clean up automatically, so they never touch real data.
MCP tools
Tool | Description |
| Full/incremental sync of one stock to MySQL |
| Search stored instruments by symbol/name |
| Latest quote + key metrics |
| Historical candles (1d/1wk/1mo) |
| Company profile |
| The three financial statements |
| Valuation / financial ratios |
| Dividend history & summary |
| Analyst consensus & price target |
| Earnings history & estimates |
| Institutional holders |
| News |
| Option chain snapshot (queried after being synced to DB) |
| Live option quotes straight from Yahoo (on demand, no local DB needed): underlying quote + optional expiry/strike/direction filters |
| Forward-looking event calendar: next earnings / call / ex-dividend / dividend dates (Yahoo |
| Insider trading: executive/director buys & sells, shares, amounts (Yahoo |
| Analyst upgrades/downgrades & target-price changes (Yahoo |
| Quarterly earnings estimate trend: EPS/revenue estimates, growth, 7/30/60/90-day revisions (Yahoo |
| Analyst rating trend (monthly strong buy/buy/hold/sell/strong sell) |
| Mutual fund ownership (Yahoo |
| Short-interest snapshot: shares short, short ratio, % of float (Yahoo |
| Ownership breakdown: insider/institutional %, institutional float, institutional count (Yahoo |
| Minute-level bars (1m/5m/15m/30m/60m, queried after being synced to DB) |
| Compute 42 technical indicators (SMA/EMA/RSI/MACD/KDJ/BBANDS/ATR/ADX/OBV/...) from stored bars: date-aligned series + latest value per channel |
| Self-describing catalog of every supported indicator: group, parameters, defaults/ranges, output channels, warm-up length |
| Sector catalog: the 11 GICS sectors + SPY benchmark, mapped to SPDR sector ETFs |
| Sector rotation view: each sector's latest price + 1d/5d/20d change ranking vs SPY benchmark |
| Sector constituents (sector ETF |
| 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=adjustedby default: OHLC is rescaled byadjClose/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_indicatorsfor 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 |
| Yahoo |
Insider transactions |
| Yahoo |
Analyst actions |
| Yahoo |
Earnings estimate trend |
| Yahoo |
Recommendation trend |
| Yahoo |
Fund holders |
| Yahoo |
Short interest |
| Yahoo |
Holder breakdown |
| Yahoo |
Minute bars |
| Yahoo chart v8 (1m/5m/15m/30m/60m) |
Sector catalog & rotation |
| GICS 11 sectors + SPY benchmark, sector ETF (XLC..XLU/SPY) quotes + |
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"
}
}
}
}
commandrelies onyahoo-stock-mcpbeing 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 theYAHOO_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(default2000-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 intointraday_bars(idempotent upsert).Sectors:
sync --sectorssyncs the 11 GICS sector ETFs (XLC..XLU) + SPY benchmark quotes andtopHoldingsconstituents in one go;get_sector_performancereturns the rotation ranking.Options:
get_optionsreads the snapshot synced to the DB;get_option_quotefetches 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/gqlproxyThe 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:allEnvironment variables
Var | Default | Description |
| derived from | Full MySQL connection string, e.g. |
| 127.0.0.1/3306/stock/stock123/yahoo_stock_mcp | MySQL connection (used when |
| Chrome 148 UA | Request fingerprint |
| 300 | Per-request rate limit |
| none | HTTP(S) proxy for all Node fetch requests, e.g. |
| 2000-01-01 | Full-sync start date |
| yahoo | Bar source (yahoo/investing) |
| yahoo | Which source is authoritative when both return a value (yahoo/investing); the other fills only what the primary lacks |
| 20 | News count per fetch |
| auto | node / go / auto |
| .cache/gqlproxy_cookies.txt | sidecar cookie session file |
Available Tools
27 toolsget_analyst_actionsB
Get analyst upgrades, downgrades and price-target changes.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| symbol | Yes | Ticker, e.g. NVDA |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Ticker, e.g. NVDA |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date YYYY-MM-DD | |
| from | No | Start date YYYY-MM-DD | |
| limit | No | ||
| symbol | Yes | Ticker, e.g. NVDA | |
| interval | No | 1d |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| symbol | Yes | Ticker, e.g. NVDA |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Ticker, e.g. NVDA |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Ticker, e.g. NVDA |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Ticker, e.g. NVDA |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | ||
| symbol | Yes | Ticker, e.g. NVDA | |
| statement | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| symbol | Yes | Ticker, e.g. NVDA |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Ticker, e.g. NVDA |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| symbol | Yes | Ticker, e.g. NVDA |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| symbol | Yes | Ticker, e.g. NVDA |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End datetime YYYY-MM-DD | |
| from | No | Start datetime YYYY-MM-DD | |
| limit | No | ||
| symbol | Yes | Ticker, e.g. NVDA | |
| interval | No | 15m |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| symbol | Yes | Ticker, e.g. NVDA |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Only return CALL or PUT legs | |
| limit | No | Max legs to return | |
| strike | No | Only return legs at this exact strike | |
| symbol | Yes | Ticker, e.g. NVDA | |
| expiration | No | Expiration date YYYY-MM-DD (default: nearest listed) |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Ticker, e.g. NVDA | |
| expiration | No | Expiration date YYYY-MM-DD |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Ticker, e.g. NVDA |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Ticker, e.g. NVDA |
TDQS
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.
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.
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.
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.
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.
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.).
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Ticker, e.g. NVDA |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Ticker, e.g. NVDA |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| sector | Yes | Sector code, e.g. XLK (Technology) or ETF symbol |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Ticker, e.g. NVDA |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Symbol or name fragment, e.g. NVDA or NVIDIA |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| members | No | Also refresh sector_members from ETF topHoldings |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | incremental | |
| symbol | Yes | Ticker, e.g. NVDA | |
| intraday | No | Also sync intraday bars at this interval |
TDQS
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.
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.
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.
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.
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.
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.
27 tool updates
v0.2.1- First observed
get_analyst_actions - First observed
get_analyst_forecast - First observed
get_bars - First observed
get_company_events - First observed
get_dividends - First observed
get_earnings - First observed
get_earnings_trend - First observed
get_financials - First observed
get_fund_holders - First observed
get_holder_breakdown - First observed
get_holders - First observed
get_insider_transactions - First observed
get_intraday_bars - First observed
get_news - First observed
get_option_quote - First observed
get_options - First observed
get_profile - First observed
get_quote - First observed
get_ratios - First observed
get_recommendation_trend - First observed
get_sector_members - First observed
get_sector_performance - First observed
get_short_interest - First observed
list_sectors - First observed
search_symbol - First observed
sync_sectors - First observed
sync_stock
TDQS
Scored across 27 tools
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.
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.
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.
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
Related MCP Connectors
MCP server for stocksense-ai documentation, generated by doc2mcp.
Finnhub MCP — wraps Finnhub Stock API (finnhub.io)
Market Data App MCP — wraps the Market Data App API (marketdata.app)
A Model Context Protocol server exposing real-time and historical Colombo Stock Exchange (CSE) data to AI agents and LLM applications. Provides quotes and OHLCV price history, full financial statements (income, balance sheet, cash flow), pre-computed technicals (moving averages, RS ratings, volume signals), macroeconomic indicators, corporate actions, and rule-based screening across CSE stocks and sector indices, everything needed to build CSE-aware trading assistants, research tools, and market-analysis agents. This is the official MCP server of www.ceyloncharts.com
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceReal-time financial market data MCP server. Stocks, crypto, technicals, sentiment, FDA calendar. No API keys required.-
- AlicenseNot gradedqualityDmaintenanceA 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 npmISC
- FlicenseNot gradedqualityDmaintenanceA lightweight MCP server for accessing Yahoo Finance data, providing stock prices, history, company information, and financial statements.-
- AlicenseAqualityAmaintenanceMCP 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.22MIT