Skip to main content
Glama
maxscheijen

MCP Yahoo Finance

by maxscheijen

MCP Yahoo Finance

PyPI - Version PyPI - Python Version PyPI - License

MCP Yahoo Finance is a Model Context Protocol (MCP) server. It gets data from Yahoo Finance. You can use it to get stock prices, company data, past prices, financial reports, news, analyst ratings, earnings dates, dividends, and options data.

This project is in early development. Tool names and response fields can change between releases.

Install

You can run mcp-yahoo-finance without a separate install. Use uvx.

Use pip

pip install mcp-yahoo-finance

Use Git

Clone the repository. Then install the development environment:

git clone git@github.com:maxscheijen/mcp-yahoo-finance.git
cd mcp-yahoo-finance
uv sync

Related MCP server: MCP Yahoo Finance

Configure

Claude Desktop

Add this entry to your claude_desktop_config.json file:

{
    "mcpServers": {
        "yahoo-finance": {
            "command": "uvx",
            "args": ["mcp-yahoo-finance"]
        }
    }
}

You can also use Docker. Replace IMAGE with the Docker image name:

{
    "mcpServers": {
        "yahoo-finance": {
            "command": "docker",
            "args": ["run", "-i", "--rm", "IMAGE"]
        }
    }
}

VS Code

Add this entry to your .vscode/mcp.json file:

{
    "servers": {
        "yahoo-finance": {
            "command": "uvx",
            "args": ["mcp-yahoo-finance"]
        }
    }
}

Example questions

You can ask questions like these:

  1. "What is the stock price of Apple?"

  2. "Give me a rich quote for AAPL with the previous close, intraday range, and market status."

  3. "Show me the company overview for Nvidia."

  4. "What is the difference in stock price between Apple and Google?"

  5. "How much did the stock price of Apple change between 2024-01-01 and 2025-01-01?"

  6. "What are the available options expiration dates for AAPL?"

  7. "Show me the options chain for AAPL expiring on 2024-01-19."

  8. "What are the call and put options for Tesla?"

Response data

Tools return data in JSON format. This is an example of a rich quote:

{
  "symbol": "AAPL",
  "currentPrice": 243.5822,
  "previousClose": 241.33,
  "absoluteChange": 2.2522,
  "percentChange": 0.9331,
  "open": 242.1,
  "dayHigh": 244.2,
  "dayLow": 241.9,
  "volume": 45678901,
  "marketStatus": "REGULAR",
  "currency": "USD",
  "exchange": "NMS",
  "timestamp": "2025-01-02T15:30:00+00:00",
  "source": {
    "provider": "Yahoo Finance",
    "endpoint": "info",
    "fetchedAt": "2025-01-02T15:30:01+00:00"
  }
}

Errors use the same format for all tools. An error includes an error code and a message:

{
  "error": {
    "code": "NO_DATA",
    "message": "No historical data found for AAPL"
  }
}

Historical and table results keep the column names from the data source. Dates use the YYYY-MM-DD format. The server does not show the time zone used by Yahoo Finance.

Historical price tools return adjusted prices by default. Adjusted prices include changes from stock splits and dividends. To get prices without these changes, set adjusted to false in get_historical_stock_prices.

Date searches include both the start date and the end date. If a date is a weekend or market holiday, there may be no price data for that date. In that case, the tool returns a NO_DATA error.

If quote or company data is missing, its value is null. The news tool returns 10 articles by default. It can return up to 100 articles. It includes the title, URL, publisher, thumbnail, related stock symbols, and publish time. The publish time uses UTC and the ISO 8601 format. You can set start_date and end_date to filter news. The filter includes both dates.

Recommendation, earnings, dividend, financial report, and options tools use a top-level symbol field. They return data from Yahoo Finance when that data is available.

Available tools

Use Yahoo Finance ticker symbols for symbol values. Examples are AAPL and MSFT.

Tool

Purpose

get_current_stock_price

Gets the current stock price and quote data.

get_rich_quote

Gets a quote with price, price change, trading range, market status, and source data.

get_company_overview

Gets a company profile with its sector, industry, market value, website, employee count, description, and source data.

get_symbol_comparison

Compares current quotes for up to 20 symbols.

get_performance_analysis

Compares returns, moving averages, volatility, drawdown, benchmark returns, and correlation for multiple symbols.

get_stock_price_by_date

Gets the adjusted closing price for one trading date.

get_stock_price_date_range

Gets adjusted closing prices for a date range.

get_historical_stock_prices

Gets past prices for a period and time interval.

get_dividends

Gets past dividend payments.

get_stock_splits

Gets past stock splits.

get_capital_gains

Gets capital-gains payments.

get_upcoming_dividends

Gets future dividend dates and rates.

get_earnings_analytics

Gets earnings results and estimates.

get_income_statement

Gets an income statement by year, quarter, or trailing period.

get_cashflow

Gets a cash flow statement by period.

get_earning_dates

Gets past and future earnings dates.

get_news

Gets Yahoo Finance news. You can set date filters.

get_recommendations

Gets analyst recommendations.

get_option_expiration_dates

Gets available option expiration dates.

get_option_chain

Gets calls and puts for one expiration date. You can filter by strike price, moneyness, liquidity, spread, type, and number of results.

get_option_summary

Gets implied volatility, open interest, volume, put/call ratios, and max pain for one expiration date.

Performance calculations

Performance analysis uses closing prices adjusted for stock splits and dividends.

Total return is (last close / first close) - 1.

Annual volatility is the standard deviation of daily returns multiplied by sqrt(252).

Maximum drawdown is the largest fall from a previous high.

The tool calculates correlation from daily returns on dates shared by the symbols. This lets it compare symbols that have different trading calendars.

Develop locally

Run uv sync to install the locked development environment. Then run these commands:

uv run pytest
uv run ruff check .
uv run ruff format --check .
uv build

You can also use these Makefile commands:

make test
make lint
make docker-build

The tests use mock Yahoo Finance data. They do not make live requests to Yahoo Finance.

Build the Docker image

Run this command:

docker build -t mcp-yahoo-finance .

Test with MCP Inspector

Run this command:

npx @modelcontextprotocol/inspector uv run mcp-yahoo-finance

Yahoo Finance limits

Yahoo Finance is a third-party data source. Its data can be late, incomplete, or unavailable. This project does not give investment advice. It does not guarantee that the data is correct, complete, or up to date. Check important data with an authoritative source before you use it.

Available Tools

21 tools
get_capital_gainsB

Get normalized capital-gains distributions for a symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock symbol in Yahoo Finance format.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It implies a read-only retrieval but does not disclose data source, update frequency, normalization method, or any side effects. Only the operation type and output subject are conveyed.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that communicates the core action and resource with zero wasted words. It is appropriately sized for a simple retrieval tool.

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

Completeness3/5

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

For a one-parameter retrieval tool with no output schema and no annotations, the description is minimally adequate: it identifies the returned data type but omits return format, frequency, and normalization details. It is complete enough for an agent to invoke the tool but leaves some contextual gaps.

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

Parameters3/5

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

The single parameter has 100% schema description coverage ('Stock symbol in Yahoo Finance format'), so the schema already fully documents it. The description adds no additional meaning beyond what the schema provides, making the baseline score of 3 appropriate.

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

Purpose4/5

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

The description states a specific verb ('Get') and resource ('capital-gains distributions') and adds the scope qualifier 'normalized'. It is clear what data is returned and distinguishes itself from most sibling tools by naming a distinct financial data type.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus siblings like get_dividends or get_performance_analysis. The implied use case is retrieving capital-gains distributions, but no conditions, prerequisites, or alternatives are stated.

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

get_cashflowB

Get the cashflow statement for a given stock symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
freqNoStatement frequency. Defaults to "yearly".yearly
symbolYesStock symbol in Yahoo Finance format.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It does not state whether the operation is read-only, what the return format is, what permissions are required, or how the data is sourced. It only asserts that a cashflow statement is returned.

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

Conciseness5/5

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

The description is a single efficient sentence with no redundant or filler content. The core purpose is front-loaded, making it easy to parse quickly.

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

Completeness3/5

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

The input schema is complete and self-documenting, which covers parameter semantics. However, with no annotations and no output schema, the description does not clarify basic behavioral or return-value expectations for a financial data retrieval tool.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are well documented in the schema, including the 'freq' enum and its default. The description adds no parameter meaning beyond the schema, so the baseline of 3 applies.

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

Purpose4/5

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

The description states a specific verb ('Get') and resource ('cashflow statement') and identifies the required input ('stock symbol'). It distinguishes the tool from siblings like get_income_statement by resource, though it does not explicitly differentiate among statement types.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as get_income_statement or get_dividends, nor any prerequisites or exclusions. Usage is only implied by the resource name.

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

get_company_overviewC

Get a normalized company overview for one stock symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock symbol in Yahoo Finance format.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. 'Normalized' hints that values are standardized across sources, which is useful, but nothing is said about data freshness, rate limits, auth requirements, or what 'overview' actually contains.

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

Conciseness4/5

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

One tightly written sentence with the resource and scope front-loaded and no filler. It is appropriately sized for a simple single-parameter read tool, though it is arguably too terse to be maximally useful.

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

Completeness3/5

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

For a one-parameter read tool with full schema coverage, the description is adequate but thin. With no annotations and no output schema, it leaves the return contents ('overview' of what fields?) and safety profile undefined.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter is documented as Yahoo Finance format, so the baseline is 3. The description only reinforces that exactly one symbol is accepted (no batch/multi-symbol use), adding marginal value beyond the schema.

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

Purpose4/5

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

States a specific verb ('Get'), resource ('company overview'), and scope ('for one stock symbol'), so the agent knows this returns a broad profile rather than a single financial statement. It is distinguishable from most siblings by resource, though it does not name which sibling to prefer when a narrower metric is wanted.

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

Usage Guidelines2/5

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

No guidance on when to use this versus the many sibling tools (get_rich_quote, get_income_statement, get_symbol_comparison, etc.). The agent must infer that 'overview' means a summary profile, and there is no stated exclusion or prerequisite.

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

get_current_stock_priceC

Get the current stock price based on stock symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock symbol in Yahoo Finance format.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool's function but doesn't describe traits such as rate limits, authentication needs, data freshness, error handling, or return format. This leaves significant gaps for a tool that likely interacts with external data sources.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste. It is appropriately sized for a simple tool and front-loads the key information without unnecessary elaboration.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete. It doesn't address behavioral aspects like data source reliability, potential errors, or return structure. For a tool fetching real-time financial data, more context on limitations or usage constraints would be beneficial.

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

Parameters3/5

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

The schema description coverage is 100%, with the parameter 'symbol' fully documented in the schema as 'Stock symbol in Yahoo Finance format.' The description adds no additional meaning beyond what the schema provides, so it meets the baseline for high schema coverage without compensating value.

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

Purpose4/5

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

The description clearly states the action ('Get') and resource ('current stock price') with the specific condition ('based on stock symbol'). It distinguishes from siblings like get_historical_stock_prices and get_stock_price_by_date by specifying 'current', but doesn't explicitly contrast them in the description text.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like get_stock_price_by_date or get_historical_stock_prices. It lacks any mention of prerequisites, exclusions, or comparative contexts with sibling tools.

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

get_dividendsB

Get normalized dividend history for a given stock symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock symbol in Yahoo Finance format.

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. 'Normalized' hints at adjusted/standardized data but is never explained, and there is no disclosure of date coverage, pagination, rate limits, or auth requirements for a financial data endpoint.

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

Conciseness4/5

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

One short, front-loaded sentence with no wasted words. The only cost is that the unexplained qualifier 'normalized' occupies space that could have clarified behavior.

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

Completeness3/5

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

For a simple single-parameter read tool with no output schema and no annotations, the description is minimally adequate. It omits return shape, date-range behavior, and any mention of the closely related upcoming-dividends sibling, which an agent would need to choose correctly.

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

Parameters3/5

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

Schema description coverage is 100% and there is a single parameter, so the schema already documents 'symbol' fully. The description adds no format or syntax detail beyond what the schema states, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb (get) and resource (dividend history) scoped to a stock symbol. The word 'history' implicitly distinguishes it from the sibling get_upcoming_dividends, but no sibling is named explicitly and the scope of 'history' is undefined.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can guess this retrieves past dividend records vs. the forward-looking get_upcoming_dividends or the tax-oriented get_capital_gains. No explicit when-to-use, prerequisites, or exclusions are stated.

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

get_earning_datesB

Get recent and upcoming earnings dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of earnings dates, from 1 to 100.
symbolYesStock symbol in Yahoo Finance format.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full behavioral burden. It discloses the temporal scope ('recent and upcoming') but omits auth needs, rate limits, return format, or whether it is a safe read-only operation, leaving significant behavioral gaps.

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

Conciseness5/5

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

The description is a single sentence, front-loaded with the verb and resource. Every word earns its place, with no redundancy or wasted structure.

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

Completeness3/5

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

For a simple read-only list tool with two fully documented parameters, the description is minimally adequate. However, with no annotations and no output schema, it does not explain return values or safety profile, leaving notable gaps for an agent.

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

Parameters3/5

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

Schema coverage is 100%, so the schema fully documents both parameters. The description adds no additional meaning beyond the resource name; it does not clarify symbol format or the limit's effect, so it meets the baseline only.

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

Purpose4/5

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

States a clear verb 'Get' and resource 'earnings dates' with scope 'recent and upcoming'. This distinguishes it from siblings like get_earnings_analytics and get_upcoming_dividends by resource type, but it does not explicitly name alternatives or clarify its unique scope relative to them.

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

Usage Guidelines2/5

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

No when-to-use guidance, prerequisites, or alternatives are provided. The description merely states what the tool does without indicating when an agent should select it over related tools such as get_earnings_analytics.

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

get_earnings_analyticsC

Get earnings surprise history and analyst estimate history.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows returned for each history, from 1 to 100.
symbolYesStock symbol in Yahoo Finance format.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It implies a read of two parallel histories and the limit param hints at pagination up to 100 rows each, but it never states whether results are capped, whether the histories are aligned by period, or anything about auth or return shape. Adequate-but-thin 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.

Conciseness4/5

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

A single front-loaded sentence with no filler, though it is arguably under-specified rather than truly concise given what it omits.

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

Completeness3/5

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

A simple two-parameter read tool with full schema coverage and no output schema, so the bar is modest and the description covers the returned data. It still leaves the dual-history structure and limit semantics unstated in prose.

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

Parameters3/5

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

Schema description coverage is 100%, so both symbol and limit are already documented in the schema, including the 1-100 range. The description adds no parameter-level detail, so the baseline 3 applies.

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

Purpose4/5

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

The description names a specific resource and its contents: earnings surprise history plus analyst estimate history. That is far more informative than a tautology, but it never distinguishes this from the adjacent get_earning_dates or get_recommendations siblings, so an agent still has to guess at the boundary.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of the near-identical sibling get_earning_dates. The agent is left to infer the intended scenario from the noun phrases alone.

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

get_historical_stock_pricesC

Get historical stock prices for a given stock symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoThe period for historical data.1mo
symbolYesStock symbol in Yahoo Finance format.
adjustedNoReturn split- and dividend-adjusted prices. Defaults to True.
intervalNoThe interval between data points.1d

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing about the data source, rate limits, whether the response is paginated, or what the returned series looks like. For a read-only data fetch the risk is low, but the disclosure is essentially absent.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or repetition. It is efficient, though arguably under-specified rather than optimally concise.

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

Completeness3/5

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

All four parameters are documented by the schema with defaults, and no output schema exists so return values need not be explained. Still, a data-retrieval tool with no annotations would benefit from a note on the data source and the shape/frequency of returned prices.

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

Parameters3/5

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

Schema description coverage is 100% and both enums (period, interval) plus the adjusted flag are self-documenting in the schema, so the baseline of 3 applies. The description adds no syntax, format, or default-value information beyond the schema.

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

Purpose4/5

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

States a specific verb (Get) and resource (historical stock prices), scoped to a stock symbol. It does not, however, distinguish itself from close siblings like get_stock_price_date_range, get_stock_price_by_date, or get_current_stock_price, which an agent must disambiguate by name alone.

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

Usage Guidelines2/5

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

No guidance on when to use this versus get_current_stock_price, get_stock_price_by_date, or get_stock_price_date_range, and no mention of prerequisites or data source constraints. The agent is left to infer selection from tool names.

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

get_income_statementC

Get the income statement for a given stock symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
freqNoStatement frequency. Defaults to "yearly".yearly
symbolYesStock symbol in Yahoo Finance format.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, yet it discloses nothing beyond an implicit read operation. It does not say whether results are limited in history, what currency/units the figures use, whether the call is rate-limited or authenticated, or what happens with an invalid symbol.

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

Conciseness4/5

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

A single front-loaded sentence with zero filler, which is structurally clean. It is arguably too terse for a financial-statement tool with no output schema, but nothing is wasted.

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

Completeness3/5

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

The tool is low-complexity (two parameters, one required, no nested objects) and the schema is self-documenting, so the description is minimally sufficient to invoke it. With no output schema, however, it gives no hint about the shape of the returned statement or which periods are covered.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (symbol format, freq enum with default) are already fully documented in the schema. The description's phrase "for a given stock symbol" adds no meaning beyond that, making the baseline 3 appropriate.

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

Purpose4/5

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

The description states a specific verb (Get) and resource (income statement) scoped to a stock symbol, so an agent knows exactly what it returns. It does not, however, differentiate itself from adjacent financial-statement siblings like get_cashflow or get_company_overview, which a reader must disambiguate on their own.

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

Usage Guidelines2/5

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

The description offers no when-to-use, when-not-to-use, or alternative guidance. It never mentions that get_cashflow covers the cash-flow statement or that get_company_overview may be the better entry point, so routing must be inferred from the name alone.

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

get_newsB

Get normalized, bounded news for a stock symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of articles, from 1 to 100.
symbolYesStock symbol in Yahoo Finance format.
end_dateNoInclude articles published on or before this YYYY-MM-DD date.
start_dateNoInclude articles published on or after this YYYY-MM-DD date.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full behavioral burden. It adds only 'normalized, bounded' (the latter partly duplicates the schema's limit) and does not disclose read-only status, data source, rate limits, or return format.

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

Conciseness5/5

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

A single front-loaded sentence with no filler; every word contributes to the tool's core purpose.

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

Completeness3/5

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

Minimum viable: the schema fully documents the parameters, so an agent can invoke it, but with no annotations and no output schema the description does not explain return shape or normalization details. It leaves meaningful behavioral context unstated.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents symbol, limit, start_date, and end_date. The description adds 'for a stock symbol' but no additional parameter syntax, defaults, or constraints beyond the schema.

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

Purpose4/5

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

States a specific verb ('Get') and resource ('news') scoped to a stock symbol, clearly distinct from the many price and financial-statement siblings. However, 'normalized, bounded' are vague qualifiers and it does not explicitly name what it is not.

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

Usage Guidelines2/5

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

Provides no when-to-use, when-not-to-use, or alternative-tool guidance among the many sibling data tools. Usage is only inferable from the resource name.

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

get_option_chainC

Get a filtered, bounded option chain for one expiration date.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum contracts returned per side, from 1 to 100.
symbolYesStock symbol in Yahoo Finance format.
moneynessNoRestrict results to in-the-money, out-of-the-money, or at-the-money contracts.
max_strikeNoMaximum strike price, inclusive.
min_strikeNoMinimum strike price, inclusive.
min_volumeNoMinimum volume, inclusive.
option_typeNoReturn calls, puts, or both.both
expiration_dateYesExpiration date in YYYY-MM-DD format.
min_open_interestNoMinimum open interest, inclusive.
max_bid_ask_spreadNoMaximum ask minus bid spread, inclusive.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. 'Bounded' hints at the per-side limit, but nothing is said about permissions, rate limits, pagination, or whether results are split into calls/puts — significant gaps for a 10-param read tool.

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

Conciseness4/5

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

A single front-loaded sentence with no wasted words, though it is arguably too sparse for a tool with ten parameters.

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

Completeness2/5

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

With ten parameters, no annotations, and no output schema, a one-line description leaves too much unaddressed: the shape of the return (calls vs puts), the prerequisite expiration lookup, and how filters combine are all unstated.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in the schema; the description adds only the vague qualifier 'filtered, bounded'. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb (Get), resource (option chain), and scope (one expiration date), which implicitly separates it from siblings like get_option_expiration_dates and get_option_summary. It stops short of naming those siblings explicitly, so differentiation is left to inference.

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

Usage Guidelines2/5

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

The phrase 'for one expiration date' implies a required expiration input but never states when to use this over get_option_summary or that get_option_expiration_dates is the natural prerequisite. No alternatives or exclusions are given.

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

get_option_expiration_datesB

Get available option expiration dates for a stock symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock symbol in Yahoo Finance format.

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It does not state that the operation is read-only, nor does it describe response format, rate limits, or any other behavioral trait beyond the basic purpose.

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

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the core action and resource. Every word earns its place with zero redundancy.

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

Completeness4/5

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

For a simple retrieval tool with one parameter and no output schema, the description adequately conveys what is returned ('available option expiration dates'). It is nearly complete, though it could mention read-only behavior or formatting to be fully self-contained.

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

Parameters3/5

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

Schema coverage is 100% with the single 'symbol' parameter fully documented as 'Stock symbol in Yahoo Finance format.' The description adds no additional meaning beyond what the schema already 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.

Purpose4/5

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

The description states a specific verb ('Get') and resource ('available option expiration dates for a stock symbol'), making the tool's purpose immediately clear. It does not explicitly differentiate from siblings like get_option_chain or get_option_summary, which may also surface expiration-related data, so it falls short of a 5.

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

Usage Guidelines2/5

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

No when-to-use or when-not-to-use guidance is provided. There is no mention of alternatives (e.g., whether get_option_chain also returns expiration dates) or any context that would help an agent choose between this and sibling option tools.

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

get_option_summaryB

Summarize option interest, volume, volatility, ratios, and max pain.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum contracts considered per side, from 1 to 100.
symbolYesStock symbol in Yahoo Finance format.
expiration_dateYesExpiration date in YYYY-MM-DD format.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It lists summary metrics but does not state whether the data is read-only, how fresh it is, what permissions are needed, or how the summary is computed.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It efficiently lists the core metrics the tool summarizes.

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

Completeness3/5

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

With no output schema and no annotations, the description should do more to explain the result shape and usage context. It lists the metrics covered, which is helpful, but leaves behavioral and selection details unaddressed.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already documents symbol, expiration_date, and limit in detail. The description adds no parameter-level information beyond what the schema provides, making the baseline 3 appropriate.

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

Purpose4/5

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

The description states a clear verb ('Summarize') and a specific set of option data points: interest, volume, volatility, ratios, and max pain. It does not differentiate this tool from siblings like get_option_chain, but the purpose itself is unambiguous.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives such as get_option_chain or get_option_expiration_dates. Usage is only implied by the tool name and the metrics listed.

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

get_performance_analysisC

Analyze adjusted performance for multiple symbols over a date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum price rows returned per symbol, from 1 to 500.
symbolsYesOne to 10 Yahoo Finance symbols to analyze.
end_dateYesInclusive end date in YYYY-MM-DD format.
start_dateYesInclusive start date in YYYY-MM-DD format.
benchmark_symbolNoOptional symbol used for relative return and correlation.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full burden. It does not explain what 'adjusted' means (adjusted close?), what metrics the analysis produces (returns, correlation, benchmark-relative performance), or whether it is read-only. For a computation tool with no output schema, this is a substantial gap.

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

Conciseness4/5

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

A single efficient sentence with the core action and scope front-loaded and no filler. It is concise, though its brevity is partly the source of the missing detail rather than an intentional structural choice.

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

Completeness2/5

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

With no annotations, no output schema, and five parameters, the definition should say more about what the analysis returns and how symbols/benchmark combine. As written, an agent knows the inputs only from the schema and has no idea what output to expect.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters, including the optional benchmark_symbol, are already documented in the schema. The description adds no parameter-level meaning (e.g., how benchmark_symbol affects results), so baseline 3 applies.

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

Purpose4/5

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

States a specific verb (Analyze) and resource (adjusted performance) with scope (multiple symbols, date range). It is clear, but it does not differentiate itself from siblings like get_symbol_comparison or get_historical_stock_prices, which an agent could plausibly pick for similar requests.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no alternative tools named. With ~20 sibling retrieval tools, the description leaves the agent to infer that this is the multi-symbol comparative analysis option rather than, say, a raw price fetch.

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

get_recommendationsC

Get analyst recommendations for a given symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock symbol in Yahoo Finance format.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Get') but doesn't describe any traits like whether it's a read-only operation, potential rate limits, data freshness, or what the output format looks like (e.g., list of recommendations, summary). This is a significant gap for a tool with no annotation coverage.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without any unnecessary words. It is appropriately sized and front-loaded, making it easy to parse quickly.

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

Completeness2/5

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

Given the complexity of financial data tools, no annotations, and no output schema, the description is incomplete. It doesn't explain what 'analyst recommendations' entail (e.g., buy/sell ratings, target prices), how results are returned, or any behavioral aspects, leaving the agent with insufficient context for effective use.

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

Parameters3/5

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

The schema description coverage is 100%, with the single parameter 'symbol' fully documented in the schema as 'Stock symbol in Yahoo Finance format.' The description adds no additional meaning beyond this, so it meets the baseline for high schema coverage without compensating value.

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

Purpose4/5

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

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('analyst recommendations'), specifying it's for a given symbol. However, it doesn't differentiate from sibling tools like get_news or get_current_stock_price, which might also provide related financial data, so it doesn't reach the highest clarity level.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any context, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone among many financial data siblings.

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

get_rich_quoteC

Get a normalized quote snapshot for one stock symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock symbol in Yahoo Finance format.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read-only retrieval but does not state that explicitly, nor does it describe data freshness, permissions, rate limits, or what 'normalized' means. This is a significant gap for a tool with zero annotation coverage.

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

Conciseness5/5

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

The description is a single front-loaded sentence with zero waste. It is appropriately sized for a simple one-parameter tool.

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

Completeness2/5

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

With no output schema and no annotations, the description should compensate by explaining what a 'normalized quote snapshot' contains, how it differs from sibling quote tools, and any return format details. It does not, leaving an agent without enough context to understand the result or select this tool confidently over alternatives.

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

Parameters3/5

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

Schema description coverage is 100%, so the single symbol parameter is already fully documented in the schema. The description adds only 'one stock symbol,' which reinforces what the schema already states and provides no additional semantic detail. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

The description states a specific verb and resource: 'Get a normalized quote snapshot for one stock symbol.' It is clear what the tool does, but it does not distinguish itself from siblings like get_current_stock_price or get_stock_price_by_date, leaving ambiguity about which quote tool to select.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. The description offers no context, exclusions, or prerequisites, so an agent must infer usage from the name alone.

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

get_stock_price_by_dateB

Get the stock price for a given stock symbol on a specific date.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe date in YYYY-MM-DD format.
symbolYesStock symbol in Yahoo Finance format.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool's function but lacks details on error handling, data sources (e.g., Yahoo Finance implied by schema but not confirmed), rate limits, or authentication needs. For a read operation with zero annotation coverage, this is a significant gap in transparency.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose without unnecessary details. It uses minimal words to convey the essential action and inputs, making it easy for an agent to parse quickly. Every word earns its place, with no redundancy or fluff.

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

Completeness3/5

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

Given the tool's low complexity (2 parameters, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose but lacks behavioral context and usage guidelines. Without annotations or output schema, the description should ideally add more about return values or error cases, but it's sufficient for a simple lookup tool.

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

Parameters3/5

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

The schema description coverage is 100%, with clear descriptions for both parameters ('date' and 'symbol'). The description adds no additional parameter semantics beyond what the schema provides, such as format examples or constraints. Given the high schema coverage, a baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Get the stock price for a given stock symbol on a specific date.' It specifies the verb ('Get'), resource ('stock price'), and key constraints ('on a specific date'). However, it doesn't explicitly differentiate from siblings like 'get_current_stock_price' or 'get_historical_stock_prices', which would require a 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention siblings like 'get_current_stock_price' (for current prices) or 'get_historical_stock_prices' (for multiple dates), leaving the agent to infer usage from context alone. This lack of explicit comparison or exclusion criteria limits its utility.

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

get_stock_price_date_rangeC

Get stock prices for a symbol over an inclusive date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock symbol in Yahoo Finance format.
end_dateYesThe end date in YYYY-MM-DD format.
start_dateYesThe start date in YYYY-MM-DD format.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing beyond the query shape. It does not say what price fields are returned, the data granularity (daily vs. intraday), the data source/basis, whether ranges are limited by history, or whether this is a read-only call. The only real disclosure is that the range is inclusive.

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

Conciseness4/5

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

A single, front-loaded sentence with no filler or redundancy. It is efficient, though its brevity is partly under-specification rather than tight craftsmanship.

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

Completeness2/5

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

For a 3-required-parameter data-retrieval tool with no annotations and no output schema, the description leaves key questions unanswered: what price values come back, at what interval, and how it differs from the many sibling price tools. It is complete enough to fire a call but not to call it correctly with confidence.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents symbol, start_date, and end_date with formats, establishing the baseline of 3. The description adds one genuine semantic detail beyond the schema: the date range is inclusive, which affects how the agent sets start_date/end_date.

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

Purpose4/5

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

The description states a specific verb and resource ('Get stock prices for a symbol over an inclusive date range'), so the agent knows it retrieves time-series price data rather than a single quote. However, it does not distinguish itself from close siblings such as get_historical_stock_prices, get_stock_price_by_date, or get_current_stock_price, which is exactly where an agent needs help choosing.

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

Usage Guidelines2/5

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

No when-to-use, when-not-to-use, or alternative-tool guidance is given. With at least three sibling tools that look like plausible substitutes (get_stock_price_by_date, get_historical_stock_prices, get_current_stock_price), the description should route the agent but leaves selection entirely to inference.

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

get_stock_splitsB

Get normalized stock split history for a symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock symbol in Yahoo Finance format.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It implies a read-only lookup but says nothing about return format, error behavior for unknown symbols, rate limits, or what 'normalized' actually means for the split data.

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

Conciseness5/5

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

One short sentence with the verb and resource front-loaded and zero wasted words. Appropriately sized for a simple single-parameter lookup tool.

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

Completeness3/5

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

For a low-complexity tool with one fully documented parameter and no output schema, the description covers the essential purpose but leaves return shape and 'normalized' semantics undefined. Adequate but minimal.

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

Parameters3/5

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

Schema coverage is 100% and the single 'symbol' parameter is fully documented in the schema. The description adds no syntax or format detail beyond what the schema already conveys, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Get') and resource ('normalized stock split history') for a symbol. This is clearly distinct from siblings like get_dividends and get_capital_gains, though it does not explicitly name or contrast with any of them.

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

Usage Guidelines2/5

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

No indication of when to use this tool versus alternatives such as get_dividends or get_capital_gains, nor any prerequisites or context for invoking it. The agent must infer usage entirely from the name.

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

get_symbol_comparisonB

Compare current quote data for multiple stock symbols.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolsYesOne to 20 Yahoo Finance symbols to compare.

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. 'Compare current quote data' implies a read-only operation, but it says nothing about return shape, whether the comparison is side-by-side, latency/rate-limit behavior, or how the 1-20 limit is enforced. For a zero-annotation tool this leaves real gaps.

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

Conciseness5/5

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

One sentence, front-loaded with the verb and scope, with no filler or redundancy. Appropriate size for a single-parameter read tool.

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

Completeness4/5

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

For a simple one-parameter read tool with full schema coverage and no output schema, the essentials are covered. A brief note on what the comparison returns or how it differs from the single-symbol tool would complete it, but nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter already documents 'One to 20 Yahoo Finance symbols to compare,' including the format and bound. The description adds only the plural 'symbols' framing, so it does not meaningfully extend the schema.

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

Purpose4/5

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

States a specific verb (compare) plus resource (current quote data) and scope (multiple symbols), which separates it from the single-symbol get_current_stock_price and get_rich_quote siblings. It does not name those siblings explicitly, so differentiation is inferable rather than stated.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no mention of alternatives such as get_current_stock_price (single symbol) or get_rich_quote (deeper per-symbol data). An agent must infer the multi-symbol use case purely from the word 'multiple'.

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

get_upcoming_dividendsC

Get upcoming dividend dates and rates when Yahoo provides them.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock symbol in Yahoo Finance format.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It hints that results may be absent ('when Yahoo provides them'), which is useful, but never confirms this is a read-only lookup, nor mentions auth, rate limits, or what an empty response means.

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

Conciseness4/5

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

A single front-loaded sentence with no filler. The availability clause is compact and relevant, though the sentence is sparse enough that it could have carried one more clarifying clause at no cost.

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

Completeness3/5

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

For a simple one-parameter read tool with no output schema, the description covers the essentials (what data and the possibility of absence). It omits return shape details and any indication of how rates are represented, leaving modest gaps.

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

Parameters3/5

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

Schema description coverage is 100% for the single 'symbol' parameter, so the schema already defines format expectations. The description adds no syntax or format detail beyond that, making the baseline 3 appropriate.

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

Purpose4/5

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

States a specific verb ('Get') and resource ('upcoming dividend dates and rates'), which implicitly distinguishes it from the sibling get_dividends (presumably historical). However, it never explicitly names that sibling or draws the boundary, so differentiation is left to inference.

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

Usage Guidelines2/5

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

No guidance on when to use this versus get_dividends or get_earning_dates, and no prerequisites stated. The clause 'when Yahoo provides them' is an availability caveat, not usage guidance.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updatesv0.2.0
    • Addedget_capital_gains
    • Changedget_cashflow3 fields changed
      • addedInput schema / properties / freq / default
        Added value: +"yearly"
      • changedInput schema / properties / freq / description
        Previous value: -"At what frequency to get cashflow statements. Defaults to \"yearly\". Valid freqencies: \"yearly\", \"quarterly\", \"trainling\""New value: +"Statement frequency. Defaults to \"yearly\"."
      • addedInput schema / properties / freq / enum
        Added value: +[
        +  "yearly",
        +  "quarterly",
        +  "trailing"
        +]
    • Addedget_company_overview
    • Changedget_earning_dates3 fields changed
      • addedInput schema / properties / limit / default
        Added value: +12
      • changedInput schema / properties / limit / description
        Previous value: -"max amount of upcoming and recent earnings dates to return. Default value 12 should return next 4 quarters and last 8 quarters. Increase if more history is needed."New value: +"Maximum number of earnings dates, from 1 to 100."
      • changedInput schema / properties / limit / type
        Previous value: -"string"New value: +"integer"
    • Addedget_earnings_analytics
    • Changedget_historical_stock_prices7 fields changed
      • addedInput schema / properties / adjusted
        Added value: +{
        +  "default": true,
        +  "description": "Return split- and dividend-adjusted prices. Defaults to True.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / interval / default
        Added value: +"1d"
      • changedInput schema / properties / interval / description
        Previous value: -"The interval beween data points. Defaults to \"1d\". Valid intervals: \"1d\", \"5d\", \"1wk\", \"1mo\", \"3mo\""New value: +"The interval between data points."
      • addedInput schema / properties / interval / enum
        Added value: +[
        +  "1d",
        +  "5d",
        +  "1wk",
        +  "1mo",
        +  "3mo"
        +]
      • addedInput schema / properties / period / default
        Added value: +"1mo"
      • changedInput schema / properties / period / description
        Previous value: -"The period for historical data. Defaults to \"1mo\". Valid periods: \"1d\", \"5d\", \"1mo\", \"3mo\", \"6mo\", \"1y\", \"2y\", \"5y\", \"10y\", \"ytd\", \"max\""New value: +"The period for historical data."
      • addedInput schema / properties / period / enum
        Added value: +[
        +  "1d",
        +  "5d",
        +  "1mo",
        +  "3mo",
        +  "6mo",
        +  "1y",
        +  "2y",
        +  "5y",
        +  "10y",
        +  "ytd",
        +  "max"
        +]
    • Changedget_income_statement3 fields changed
      • addedInput schema / properties / freq / default
        Added value: +"yearly"
      • changedInput schema / properties / freq / description
        Previous value: -"At what frequency to get cashflow statements. Defaults to \"yearly\". Valid freqencies: \"yearly\", \"quarterly\", \"trainling\""New value: +"Statement frequency. Defaults to \"yearly\"."
      • addedInput schema / properties / freq / enum
        Added value: +[
        +  "yearly",
        +  "quarterly",
        +  "trailing"
        +]
    • Changedget_news3 fields changed
      • addedInput schema / properties / end_date
        Added value: +{
        +  "default": null,
        +  "description": "Include articles published on or before this YYYY-MM-DD date.",
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 10,
        +  "description": "Maximum number of articles, from 1 to 100.",
        +  "type": "integer"
        +}
      • addedInput schema / properties / start_date
        Added value: +{
        +  "default": null,
        +  "description": "Include articles published on or after this YYYY-MM-DD date.",
        +  "type": "string"
        +}
    • Addedget_option_chain
    • Addedget_option_expiration_dates
    • Addedget_option_summary
    • Addedget_performance_analysis
    • Addedget_rich_quote
    • Addedget_stock_splits
    • Addedget_symbol_comparison
    • Addedget_upcoming_dividends
  2. 10 tool updatesv1.0.0
    • First observedget_cashflow
    • First observedget_current_stock_price
    • First observedget_dividends
    • First observedget_earning_dates
    • First observedget_historical_stock_prices
    • First observedget_income_statement
    • First observedget_news
    • First observedget_recommendations
    • First observedget_stock_price_by_date
    • First observedget_stock_price_date_range

TDQS

B3.2/5.0

Scored across 21 tools

Disambiguation3/5

Several price-related tools overlap significantly: get_current_stock_price, get_rich_quote, get_stock_price_by_date, get_stock_price_date_range, and get_historical_stock_prices all return price data with only subtle scope differences. Other tool groups (options, earnings, dividends) are more clearly distinct, but the price cluster will likely cause misselection.

Naming Consistency5/5

All tools follow a consistent get_<noun> snake_case pattern. The vocabulary varies slightly (e.g., stock_price vs. symbol), but the verb and casing convention is uniform throughout.

Tool Count3/5

With 21 tools, the set is on the heavy side for a single finance data server. Many tools are justified, but the price-related group feels inflated with overlapping endpoints.

Completeness4/5

The surface covers quotes, historical prices, financial statements, options, earnings, dividends, splits, news, and recommendations. A balance sheet tool is missing, and some advanced Yahoo Finance capabilities (e.g., insider transactions, fund data) are absent, but core workflows are well supported.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

  • Financial data MCP server for Claude, ChatGPT, Cursor and Codex. Real-time stock quotes, financial statements, options flow, SEC filings, insider trades, 13F holdings, macro data and market news from gloom.sh, the open-source Bloomberg Terminal alternative.

  • 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

  • A Model Context Protocol server for Wix AI tools

  • Research US-listed companies and funds with the StockPortfolio.pro MCP server. Tools cover SEC filing-grounded financials, filing timelines, company comparisons, watchlist screens, fund profiles, and cited filing questions. Filed figures include their fiscal period and EDGAR source URL; missing filing data is returned as null. Public tools work without authentication; optional API-key or OAuth access is supported. US-listed, USD-reporting companies only. Keyless access includes 3 free AI questions per rolling 30-day window. To get more now, choose the Dev plan ($19.99/month, 200 credits) at https://www.stockportfolio.pro/register?plan=dev, then follow https://www.stockportfolio.pro/docs/api-mcp to connect with OAuth or an API key. Or wait for the free allowance to renew.

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    A Model Context Protocol server providing real-time stock data and options analysis through Yahoo Finance, enabling LLMs to access market data, analyze stocks, and evaluate options strategies.
    3
    27
    MIT
  • A
    license
    C
    quality
    Not graded
    maintenance
    A Model Context Protocol server that provides tools for interacting with Yahoo Finance, allowing users to retrieve stock prices, company information, and perform financial data comparisons.
    11
    MIT
  • A
    license
    C
    quality
    D
    maintenance
    A Model Context Protocol server providing comprehensive financial data from Yahoo Finance, allowing users to retrieve detailed stock information, financial statements, options data, and market news.
    34
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A Model Context Protocol server providing comprehensive access to Yahoo Finance data through the yahooquery library, enabling AI assistants to retrieve stock prices, financial statements, market data, and company analytics.
    14
    MIT