Skip to main content
Glama
ozp

yfinance

by ozp

MCP Yahoo Finance Server

PyPI version PyPI - Downloads Python 3.10+ License: MIT MCP

A production-ready Model Context Protocol (MCP) server providing comprehensive access to Yahoo Finance data through 18 specialized tools. Features intelligent caching, multi-market support, and complete type safety.

🌟 Features

  • 18 Comprehensive Tools - Complete coverage of pricing, financials, options, holders, and news

  • Intelligent SQLite Caching - Reduces latency by 90% with TTL-based cache management

  • Multi-Market Support - Works globally with configurable market normalization (US, BR, UK, DE, FR, JP, IN, HK, AU, CA, and more)

  • Type-Safe - Full Pydantic models with complete type hints throughout

  • Production-Ready - Robust error handling with custom exception hierarchy

  • Zero Configuration - Deploy instantly via uvx with no setup required

  • Async/Await - Optimized for concurrent operations

Related MCP server: MCP Yahoo Finance

πŸš€ Quick Start

Add to your Claude Desktop configuration (claude_desktop_config.json):

{
  "mcpServers": {
    "yfinance": {
      "command": "uvx",
      "args": ["mcp-yfinance"],
      "env": {
        "YFINANCE_DEFAULT_MARKET": "US"
      }
    }
  }
}

Manual Installation

# Install with pip
pip install mcp-yfinance

# Or install from source
git clone https://github.com/yourusername/mcp-yfinance.git
cd mcp-yfinance
pip install -e .

πŸ› οΈ Configuration

Market Selection

Set your default market via environment variable:

# US stocks (default)
export YFINANCE_DEFAULT_MARKET=US

# Brazilian stocks (auto-adds .SA suffix)
export YFINANCE_DEFAULT_MARKET=BR

# UK stocks (auto-adds .L suffix)
export YFINANCE_DEFAULT_MARKET=UK

# Indian stocks - NSE (auto-adds .NS suffix)
export YFINANCE_DEFAULT_MARKET=IN_NSE

# Indian stocks - BSE (auto-adds .BO suffix)
export YFINANCE_DEFAULT_MARKET=IN_BSE

Supported Markets:

  • US - United States (no suffix)

  • BR - Brazil (.SA)

  • UK - United Kingdom (.L)

  • DE - Germany (.DE)

  • FR - France (.PA)

  • JP - Japan (.T)

  • IN_NSE - India NSE (.NS)

  • IN_BSE - India BSE (.BO)

  • HK - Hong Kong (.HK)

  • AU - Australia (.AX)

  • CA - Canada (.TO)

Cache Configuration

Cache is automatically created at ~/.mcp-yfinance/cache.db with the following TTLs:

Data Type

TTL

Use Case

Current Quotes

5 min

Real-time price tracking

Option Chains

5 min

Options trading

News

30 min

Recent news updates

Stock Info

1 hour

Company information

Historical Data

24 hours

Price history

Financial Statements

24 hours

Quarterly/annual reports

Holders

24 hours

Ownership data

Recommendations

24 hours

Analyst ratings

πŸ“š Available Tools

Pricing & Historical Data (6 tools)

1. get_current_stock_price

Get current stock price with day change information.

Input:

{
  "symbol": "AAPL"
}

Output:

{
  "symbol": "AAPL",
  "price": 234.56,
  "change": 2.34,
  "change_percent": 1.01,
  "volume": 52487900,
  "currency": "USD",
  "timestamp": "2025-01-15T16:00:00"
}

2. get_stock_price_by_date

Get closing price for a specific date.

Input:

{
  "symbol": "MSFT",
  "date": "2025-01-10"
}

3. get_stock_price_date_range

Get price series for a date range.

Input:

{
  "symbol": "GOOGL",
  "start_date": "2025-01-01",
  "end_date": "2025-01-15"
}

4. get_historical_stock_prices

Get full OHLCV (Open, High, Low, Close, Volume) historical data.

Input:

{
  "symbol": "TSLA",
  "period": "1mo",
  "interval": "1d"
}

Supported periods: 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max

Supported intervals: 1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo

5. get_dividends

Get complete dividend payment history.

6. get_stock_actions

Get all stock actions (dividends + splits).


Company Information (1 tool)

7. get_stock_info

Get comprehensive company information (~100 fields).

Output includes:

  • Company name, sector, industry

  • Market cap, enterprise value

  • P/E ratio, dividend yield

  • 52-week high/low

  • Beta, trailing EPS

  • And much more...


Financial Statements (3 tools)

8. get_income_statement

Get income statement (DRE - DemonstraΓ§Γ£o de Resultados do ExercΓ­cio).

Input:

{
  "symbol": "AAPL",
  "freq": "yearly"
}

Frequencies: yearly, quarterly, trailing

9. get_balance_sheet

Get balance sheet (BalanΓ§o Patrimonial).

10. get_cashflow

Get cash flow statement.


Holders & Ownership (1 tool)

11. get_holder_info

Get holder information with 6 different types.

Input:

{
  "symbol": "NVDA",
  "holder_type": "institutional_holders"
}

Holder types:

  • major_holders - Major ownership percentages

  • institutional_holders - Institutional investors

  • mutualfund_holders - Mutual fund holdings

  • insider_transactions - Recent insider trades

  • insider_purchases - Insider buy transactions

  • insider_roster_holders - Current insider roster


Options (2 tools)

12. get_option_expiration_dates

Get all available option expiration dates.

Output:

["2025-01-17", "2025-01-24", "2025-02-21", ...]

13. get_option_chain

Get option chain for specific expiration date.

Input:

{
  "symbol": "SPY",
  "expiration_date": "2025-01-17",
  "option_type": "both"
}

Option types: calls, puts, both

Output includes:

  • Contract symbols

  • Strike prices

  • Last prices, bid, ask

  • Volume and open interest

  • Implied volatility


News & Analysis (5 tools)

14. get_news

Get recent news articles.

Output:

[
  {
    "title": "Apple announces new iPhone",
    "summary": "...",
    "url": "https://...",
    "provider": "Reuters",
    "publishedAt": "2025-01-15T10:30:00Z"
  }
]

15. get_recommendations

Get analyst recommendations and upgrades/downgrades.

Input:

{
  "symbol": "TSLA",
  "recommendation_type": "upgrades_downgrades",
  "months_back": 12
}

Recommendation types: recommendations, upgrades_downgrades

16. get_earning_dates

Get earnings announcement dates (past and future).

Input:

{
  "symbol": "META",
  "limit": 12
}

17. get_stock_splits

Get historical stock split data.

Input:

{
  "symbol": "AAPL"
}

Output:

[
  {
    "date": "2020-08-31",
    "ratio": 4.0
  },
  {
    "date": "2014-06-09",
    "ratio": 7.0
  }
]

18. get_analyst_price_targets

Get analyst price targets and estimates.

Input:

{
  "symbol": "NVDA"
}

Output includes:

  • Current price

  • Target mean, median, high, low

  • Number of analysts

  • Recommendation (buy/hold/sell)


πŸ’‘ Usage Examples

With Claude Desktop

User: What's the current price of Apple stock?
Claude: [Uses get_current_stock_price tool]
        Apple (AAPL) is currently trading at $234.56, up $2.34 (1.01%) today.

User: Show me Microsoft's quarterly revenue for the last year
Claude: [Uses get_income_statement with freq="quarterly"]
        Here's Microsoft's quarterly revenue...

User: Get Tesla call options expiring next month
Claude: [Uses get_option_expiration_dates, then get_option_chain]
        Here are Tesla's call options for 2025-02-21...

Brazilian Market Example

{
  "mcpServers": {
    "yfinance-br": {
      "command": "uvx",
      "args": ["mcp-yfinance"],
      "env": {
        "YFINANCE_DEFAULT_MARKET": "BR"
      }
    }
  }
}
User: Qual o preΓ§o atual de PETR4?
Claude: [Automatically normalizes to PETR4.SA]
        Petrobras PN (PETR4.SA) estΓ‘ cotada a R$ 38.45...

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Claude Desktop / API Client    β”‚
β”‚   (User makes stock queries)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚ stdio
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   server.py (MCP Protocol)       β”‚ ◄─── Tool registration
β”‚   - @server.list_tools()         β”‚      Input validation
β”‚   - @server.call_tool()          β”‚      Response formatting
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   cache.py (Cache Layer)         β”‚ ◄─── TTL-based caching
β”‚   - Check cache by key           β”‚      5min: quotes
β”‚   - Return if valid              β”‚      1h: stock info
β”‚   - Pass through if miss         β”‚      24h: historical
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚ (cache miss)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   service.py (Business Logic)    β”‚ ◄─── YahooFinanceService
β”‚   - Normalize ticker             β”‚      Input validation
β”‚   - Call yfinance                β”‚      Data transformation
β”‚   - Map to Pydantic models       β”‚      Error handling
β”‚   - Save to cache                β”‚      Market normalization
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   yfinance library               β”‚
β”‚   (Yahoo Finance API)            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Project Structure

mcp-yfinance/
β”œβ”€β”€ src/
β”‚   └── mcp_yfinance/
β”‚       β”œβ”€β”€ __init__.py       # Version, exports, main()
β”‚       β”œβ”€β”€ __main__.py       # CLI entry point
β”‚       β”œβ”€β”€ server.py         # MCP server orchestration
β”‚       β”œβ”€β”€ service.py        # Business logic (18 methods)
β”‚       β”œβ”€β”€ models.py         # Pydantic schemas + Enums
β”‚       β”œβ”€β”€ cache.py          # SQLite cache manager
β”‚       β”œβ”€β”€ exceptions.py     # Custom exception hierarchy
β”‚       β”œβ”€β”€ utils.py          # Helper functions
β”‚       β”œβ”€β”€ config.py         # Configuration management
β”‚       └── py.typed          # Type checking marker
β”œβ”€β”€ tests/                    # Test suite
β”œβ”€β”€ pyproject.toml           # Package configuration
└── README.md                # This file

πŸ§ͺ Development

Setup Development Environment

# Clone repository
git clone https://github.com/yourusername/mcp-yfinance.git
cd mcp-yfinance

# Install with dev dependencies
pip install -e ".[dev]"

# Or with uv (recommended)
uv pip install -e ".[dev]"

Running Tests

# Run all tests
pytest

# Run with coverage
pytest --cov=mcp_yfinance --cov-report=html

# Run specific test file
pytest tests/test_service.py

Type Checking

# Run mypy
mypy src/mcp_yfinance

# Run ruff (linter + formatter)
ruff check src/mcp_yfinance
ruff format src/mcp_yfinance

Testing the Server

# Run server directly
python -m mcp_yfinance

# Test with MCP Inspector
npx @modelcontextprotocol/inspector uv run mcp-yfinance

# Test with environment variable
YFINANCE_DEFAULT_MARKET=BR python -m mcp_yfinance

πŸ”§ Troubleshooting

Common Issues

Issue: "Ticker not found"

  • Make sure the ticker symbol is correct

  • Check if you're using the right market (US vs BR vs UK, etc.)

  • Some tickers may not be available on Yahoo Finance

Issue: "Cache permission denied"

  • Ensure ~/.mcp-yfinance/ directory is writable

  • Check disk space

Issue: "Module not found"

  • Reinstall package: pip install --force-reinstall mcp-yfinance

  • Check Python version (requires β‰₯3.10)

Issue: "SSL certificate verification failed"

  • Set verify=False in service initialization (not recommended for production)

  • Update CA certificates: pip install --upgrade certifi


🀝 Contributing

Contributions are welcome! Please follow these guidelines:

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Write tests for new functionality

  4. Ensure all tests pass (pytest)

  5. Run type checking (mypy src/mcp_yfinance)

  6. Format code (ruff format)

  7. Commit changes (git commit -m 'Add amazing feature')

  8. Push to branch (git push origin feature/amazing-feature)

  9. Open a Pull Request

Code Standards

  • All code in English (comments, docstrings, variable names)

  • Complete type hints on all functions

  • Google-style docstrings

  • Test coverage β‰₯80%

  • Pass mypy strict mode


πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


πŸ™ Acknowledgments


πŸ“ž Support


πŸ—ΊοΈ Roadmap

v0.2.0 (Planned)

  • Advanced retry logic with exponential backoff

  • Rate limiting protection

  • WebSocket support for real-time quotes

  • Additional markets (CN, KR, TW, etc.)

v0.3.0 (Future)

  • Multiple data sources (Alpha Vantage, IEX Cloud)

  • Backtesting tools

  • Technical indicators (RSI, MACD, Bollinger Bands)

  • Portfolio tracking


πŸ“Š Performance

Benchmarks (on average hardware):

Operation

Without Cache

With Cache

Improvement

Get Stock Price

450ms

15ms

96% faster

Get Historical Data

1200ms

20ms

98% faster

Get Option Chain

800ms

18ms

97% faster

Get Financial Statements

950ms

25ms

97% faster

Cache hit rate: ~85% after 1 hour of usage


Made with ❀️ for the MCP community

Available Tools

18 tools
get_analyst_price_targetsC

Get analyst price targets and recommendations summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided; description carries full burden. The one-line description lacks behavioral details such as data sources, aggregation method, or whether it provides a single summary or historical data.

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?

Very concise one-sentence description. However, it may be too brief, lacking important details that could be included without excessive length.

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 simple input (one string parameter) and no output schema, the description is minimally complete. However, it fails to explain what the returned 'summary' contains, leaving ambiguity for the 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 description coverage is 100% for the single parameter 'symbol' with standard description 'Stock ticker symbol.' The description adds no additional meaning beyond what the schema already provides.

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

Purpose4/5

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

The description clearly states 'Get analyst price targets and recommendations summary,' indicating the tool retrieves a summary of analyst price targets and recommendations. It distinguishes from siblings like get_recommendations which may provide more detailed recommendation data.

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 guidelines on when to use this tool vs. alternatives like get_recommendations. The description only states the action without context for selection.

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

get_balance_sheetC

Get balance sheet for a stock.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.
freqNoFrequency - "yearly" or "quarterly".

TDQS

C2.8/5.0
Behavior2/5

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

No annotations provided, and the description discloses no behavioral traits such as data freshness, read-only nature, rate limits, or pagination. The burden falls on the description, which fails to deliver.

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

Conciseness3/5

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

The description is extremely concise (one sentence), which is efficient but lacks structure. It misses important details like parameter usage or output expectations, making it minimally adequate.

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?

Without an output schema, the description should explain what the balance sheet includes (e.g., assets, liabilities, equity). It also fails to clarify the freq parameter's effect. The description is incomplete for a tool with no output schema.

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

Parameters3/5

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

Schema coverage is 100%, so the description adds no meaning beyond the schema's definitions for symbol and freq. Baseline 3 is appropriate because the schema already documents both parameters adequately.

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 verb 'Get' and resource 'balance sheet for a stock,' making the purpose unambiguous. However, it does not mention the optional frequency parameter, which could differentiate it from siblings like get_income_statement or get_cashflow.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., get_income_statement, get_cashflow) or when to include the freq parameter. The description is a single sentence without any context on selection criteria.

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

get_cashflowC

Get cash flow statement for a stock.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.
freqNoFrequency - "yearly" or "quarterly".

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 fails to disclose any behavioral traits such as data freshness, rate limits, or whether the call is idempotent. The agent is left uninformed about side effects or reliability.

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

Conciseness4/5

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

The description is extremely concise (one sentence). It is efficient and front-loaded, but could benefit from a brief elaboration on output without becoming verbose.

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?

The description is too sparse given the lack of output schema. It does not explain what fields or structure the cash flow statement will contain, leaving the agent without enough 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 input schema has 100% coverage and includes descriptive parameter names and an enum for freq. The description adds no additional meaning, so baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states it retrieves a cash flow statement using a verb-resource structure. However, it does not differentiate this tool from siblings like get_income_statement or get_balance_sheet, all of which retrieve financial statements.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives, nor any prerequisites or conditions. The agent has no context about the tool's applicability.

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

get_current_stock_priceB

Get the current stock price for a given symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol (e.g., "AAPL", "PETR4").

TDQS

B3.2/5.0
Behavior2/5

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

No annotations exist, so the description must carry the full burden. It does not disclose behavioral traits such as data freshness (real-time vs delayed), dependency on market hours, error handling for invalid symbols, or rate limits. The agent lacks critical context for usage decisions.

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

Conciseness4/5

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

The description is a single concise sentence that is front-loaded with the essential action and resource. However, it may be overly minimal, lacking details that could fit without clutter.

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 simple nature (one parameter, no output schema, no annotations), the description provides basic purpose but omits necessary context like whether the price is real-time, during market hours, or for any exchange. More context would improve completeness.

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

Parameters3/5

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

Schema coverage is 100% with a description for the single parameter 'symbol'. The description adds no extra meaning beyond the schema (e.g., the example values are already in the schema). Baseline 3 is appropriate since the schema does the heavy lifting.

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

Purpose5/5

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

The description 'Get the current stock price for a given symbol' clearly states the verb (get), resource (stock price), and scope (current, for a given symbol). It distinguishes itself from siblings like get_historical_stock_prices by specifying 'current'.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives (e.g., get_stock_price_by_date). There are no prerequisites, exclusion criteria, or contextual hints about market hours or data freshness.

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 for a stock.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description bears full burden for behavioral disclosure but only states basic purpose. No mention of output format, historical range, or any limitations.

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?

Single sentence is very concise, but could be slightly expanded for clarity without losing efficiency.

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?

Minimally complete: explains purpose sufficiently for a one-parameter tool, but lacks detail on output or constraints, especially given no output schema.

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

Parameters3/5

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

Schema coverage is 100% for the single parameter 'symbol', so baseline is 3. The description adds no extra meaning beyond the schema's description.

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

Purpose5/5

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

The description clearly states the verb 'Get' and resource 'dividend history' for a stock, distinguishing it from other stock-related tools like get_stock_splits.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives such as get_historical_stock_prices or get_current_stock_price. The description lacks any context for selection.

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

get_earning_datesA

Get upcoming and historical earnings dates for a stock.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.
limitNoMaximum number of earnings dates to retrieve.

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It states the tool returns both upcoming and historical dates, but does not disclose any authentication needs, rate limits, data range limitations, or behavior nuances beyond the basic description.

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

Conciseness5/5

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

The description is a single, concise sentence that contains no unnecessary words. It is front-loaded with the key action and resource.

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 simplicity and the presence of a clear input schema, the description is minimally adequate. However, it does not explain the output format or behavior (e.g., ordering, date range), which could be helpful for an AI agent. Adding a note about what the returned data looks like would improve completeness.

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

Parameters3/5

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

The input schema provides descriptions for both parameters (symbol and limit) with 100% coverage. The description does not add additional meaning beyond what the schema already offers, such as clarifying how the limit applies to upcoming vs. historical dates.

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

Purpose5/5

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

The description clearly states the tool's function: 'Get upcoming and historical earnings dates for a stock.' It uses a specific verb and resource, and distinguishes it from sibling tools that focus on other financial data like analyst price targets or balance sheets.

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

Usage Guidelines3/5

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

The description implies the tool is for retrieving earnings dates, but does not provide guidance on when to use it versus alternatives like get_news for earnings reports. No explicit when-to-use or when-not-to-use context is given.

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

get_historical_stock_pricesB

Get historical stock prices for a given period and interval.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.
periodNoTime period (e.g., "1mo", "1y", "max").
intervalNoData interval (e.g., "1d", "1wk", "1mo").

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 disclosing behavior. It only states the basic function, omitting details like return format (e.g., open/close prices), compatibility constraints between period and interval, or any rate limits. This bare minimum fails to inform the agent of behavioral nuances.

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 of 11 words, front-loading the verb and resource. Every word is necessary, and there is no fluff or redundancy. It is 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?

For a simple tool with full schema coverage, the description is adequate but incomplete. It fails to mention important context such as valid period-interval combinations or the structure of the returned data (e.g., OHLCV). Given no output schema, this adds a gap in understanding the tool's behavior.

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

Parameters3/5

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

Schema description coverage is 100% with each parameter having a basic description (e.g., 'Stock ticker symbol.'). The tool description adds no additional meaning beyond restating the period and interval. Baseline is 3, and no extra value is provided.

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 verb 'Get', the resource 'historical stock prices', and the constraints 'period and interval'. It differentiates from siblings like balance sheet or news, but does not explicitly distinguish from similar sibling tools such as get_stock_price_date_range, leaving slight ambiguity.

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 (e.g., get_current_stock_price for current prices, get_stock_price_by_date for a single date). It lacks context on typical use cases or prerequisites.

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

get_holder_infoB

Get holder and ownership information for a stock.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.
holder_typeYesType of holder information to retrieve. Options: - "major_holders": Major shareholders overview - "institutional_holders": Institutional ownership details - "mutualfund_holders": Mutual fund ownership details - "insider_transactions": Insider trading activity - "insider_purchases": Insider purchase transactions - "insider_roster_holders": Current insider roster

TDQS

B3/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 convey behavioral traits. However, it merely states 'Get... info' without disclosing whether the operation is read-only, has any side effects, or requires specific permissions. This leaves the agent without crucial context for invoking the tool.

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

Conciseness3/5

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

The description is a single, concise sentence. While it avoids verbosity, it lacks any structural elements (e.g., bullet points or sections) that could improve readability for the agent. It is minimally adequate.

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 the holder_type enum (six options) and the lack of an output schema, the description is too brief. It does not explain what each type returns or how to interpret the results, leaving the agent potentially confused about the tool's behavior.

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

Parameters3/5

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

The input schema has 100% coverage with clear descriptions for both parameters, including an enum for holder_type. The description adds no additional meaning beyond the schema, 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.

Purpose5/5

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

The description clearly identifies the verb 'Get' and the resource 'holder and ownership information for a stock', making the tool's function unambiguous. It effectively distinguishes from sibling tools like get_stock_info by focusing specifically on holders and ownership.

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, such as the other financial data tools in the sibling list. It lacks any context about appropriate use cases or conditions for selecting specific holder_type values.

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 income statement for a stock.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.
freqNoFrequency - "yearly" or "quarterly".

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 must convey behavioral traits. It only states 'get', implying read-only, but does not disclose return format, data scope, error handling, or any side effects. Minimal transparency.

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

Conciseness4/5

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

The description is a single, clear sentence with no unnecessary words. It is appropriately concise for a simple tool, though it could benefit from slightly more context.

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?

Despite low complexity and no output schema, the description fails to explain what the income statement contains, how it is structured, or any limitations. Incomplete for a financial data 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 the input schema already documents both parameters. The description adds no additional meaning beyond the schema, resulting in a baseline score.

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

Purpose4/5

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

The description clearly states it retrieves an income statement for a stock, using a specific verb and resource. However, it does not differentiate from sibling tools like get_balance_sheet or get_cashflow, missing the chance to clarify its unique purpose.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. The description lacks context about the income statement's role or typical use cases, leaving the agent without decision support.

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

get_newsB

Get recent news articles for a stock.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.

TDQS

B3.3/5.0
Behavior2/5

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

No annotations exist, so the description must disclose behavioral traits. It does not mention that this is a read-only operation, any authentication requirements, rate limits, or what 'recent' means (e.g., last 24 hours, last week). The term 'recent' is vague and lacks precision.

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

Conciseness5/5

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

The description is a single, compact sentence with no superfluous words. It is concise and gets straight to the point, which is appropriate for a simple tool.

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

Completeness3/5

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

The tool is simple with one parameter and no output schema, but the description does not hint at the return format (e.g., list of headlines, articles with links) or define 'recent'. These omissions leave some ambiguity, but the basic purpose is clear.

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

Parameters3/5

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

Schema description coverage is 100% with a clear parameter description ('Stock ticker symbol.'). The tool description adds no extra meaning beyond what the schema provides, which is acceptable given the simplicity. It neither enhances nor detracts from parameter understanding.

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

Purpose5/5

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

The description clearly states the verb 'Get', the resource 'recent news articles', and the target 'a stock'. It distinguishes this tool from sibling tools that retrieve specific financial data like prices, balance sheets, or earnings.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool over alternatives. With 18 sibling tools, the description should specify contexts (e.g., 'Use this to get market sentiment or breaking news') or exclude cases (e.g., 'Not for historical news analysis').

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

get_option_chainB

Get option chain data for a specific expiration date.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.
expiration_dateYesOption expiration date (YYYY-MM-DD format).
option_typeNoType of options - "calls", "puts", or "both".

TDQS

B3.4/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 only states the general function, lacking details on what the return data contains, potential errors (e.g., invalid symbol), rate limits, or any side effects. This is insufficient for a data retrieval tool.

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

Conciseness5/5

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

The description is a single sentence that directly states the tool's purpose with no extraneous words. It is concise and front-loaded with the key action and resource.

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 tool has three parameters, no output schema, and no annotations, the description should provide more context about the returned data, error behavior, or usage notes. It is too brief to be fully useful 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?

The input schema has 100% coverage, and the parameters are well-described in the schema. The description adds 'for a specific expiration date' but does not elaborate on the meaning or constraints of the parameters beyond what the schema already provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool retrieves option chain data for a specific expiration date. It uses a specific verb 'Get' and resource 'option chain data', and the purpose is distinct from sibling tools that focus on stock prices, financials, or option expiration dates.

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

Usage Guidelines3/5

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

The description implies usage when needing option chain data for a given expiration, but it does not explicitly state when to use this tool versus siblings like 'get_option_expiration_dates' or other stock data tools, nor does it mention any prerequisites or exclusions.

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

get_option_expiration_datesC

Get available option expiration dates for a stock.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.

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 must disclose behavioral traits. It only states the purpose without mentioning whether the operation is read-only, the format of dates, or any 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.

Conciseness4/5

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

The description is a single, concise sentence that quickly conveys the tool's function. It is front-loaded but could include more context without becoming verbose.

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 simplicity of the tool (one parameter, no output schema), the description is adequate but minimal. It does not explicitly clarify that only expiration dates are returned, not the full option chain.

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 'symbol' parameter described. The description does not add additional meaning beyond the schema, meeting the baseline expectation.

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 retrieves option expiration dates for a stock, using a specific verb and resource. However, it does not differentiate from the sibling tool 'get_option_chain', which may also provide expiration dates.

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_option_chain'. There is no mention of prerequisites or when not to use it.

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

get_recommendationsC

Get analyst recommendations for a stock.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.
recommendation_typeNoType of recommendations - "recommendations" or "upgrades_downgrades".
months_backNoNumber of months of historical recommendations to retrieve.

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 is the sole source for behavioral traits. It does not disclose that this is likely a read-only operation, any rate limits, or data freshness. The tool's behavior is implied but not explicitly stated.

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

Conciseness4/5

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

The description is a single concise sentence without extraneous words. However, it could be slightly expanded to include critical usage context without losing conciseness.

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 tool has 3 parameters, no output schema, and many sibling tools, the description is insufficient. It does not explain return format, pagination, or how the 'months_back' parameter interacts with other tools. The tool feels incomplete for effective selection.

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 baseline is 3. The description adds 'for a stock' which reinforces the schema's required 'symbol'. However, the enum values for 'recommendation_type' are only partially explained in the schema description, and the description does not clarify the missing 'recommendations_summary' option.

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 'Get analyst recommendations for a stock', specifying the verb (Get) and resource (analyst recommendations). However, it does not distinguish itself from the sibling tool 'get_analyst_price_targets', which could be confused with recommendations.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool vs alternatives like 'get_analyst_price_targets' or other financial data tools. There is no mention of prerequisite knowledge or context.

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

get_stock_actionsB

Get stock actions (splits and dividends) history.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are present, so the description must fully convey behavioral traits. It only states the action without disclosing whether results are limited, how history is ordered, or any constraints like pagination or rate limits.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It efficiently communicates the core action and resource.

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

Completeness3/5

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

For a simple one-parameter tool without output schema, the description is adequate but lacks context regarding how it relates to sibling tools (e.g., whether it returns both splits and dividends in one call). This omission reduces completeness given the tool set.

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 sole parameter 'symbol' is already described in the schema as 'Stock ticker symbol.' The description adds no further context beyond the schema, achieving baseline 3 due to 100% schema coverage.

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

Purpose4/5

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

The description clearly states 'Get stock actions (splits and dividends) history,' specifying the verb and resource with examples. However, it does not differentiate from sibling tools like get_dividends and get_stock_splits, which serve more specific purposes.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. With sibling tools that cover subsets of this functionality, the agent lacks direction on tool selection.

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

get_stock_infoC

Get comprehensive stock information and metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.

TDQS

C2.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. The description only mentions fetching information, which implies a read operation, but does not discuss data freshness, rate limits, or any side effects. This is insufficient for a tool returning 'comprehensive' data.

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

Conciseness3/5

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

The description is a single sentence with no waste, but it is overly terse, omitting important details that would justify its length. It is concise but at the expense of clarity and completeness.

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 tool's broad name and lack of output schema, the description fails to specify what 'comprehensive' includes (e.g., price, fundamentals, metadata). With numerous sibling tools providing specific data, the description should clarify the scope but does not, leaving the agent uncertain about the tool's coverage.

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 'symbol' has a schema description of 'Stock ticker symbol.', which is adequate but minimal. The tool description does not add additional meaning beyond the schema (e.g., format requirements, case sensitivity). With 100% schema coverage, the baseline score is 3.

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

Purpose3/5

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

The description states it provides 'comprehensive stock information and metadata', which indicates a broad overview. However, 'comprehensive' is vague and does not specify what exactly is included, nor does it differentiate from the many sibling tools that offer specific stock data.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus the extensive list of sibling tools (e.g., get_current_stock_price, get_balance_sheet). The agent is left to infer that this tool aggregates general info, but no explicit when-to-use or when-not-to-use advice is given.

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 specific date.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.
dateYesDate 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?

With no annotations, the description bears full burden for behavioral disclosure. It only says 'get the stock price' without clarifying the type of price (e.g., closing, adjusted), handling of non-trading days, or potential errors. This is insufficient for safe and correct invocation.

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

Conciseness4/5

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

The description is a single, concise sentence with no wasted words. However, it could be slightly more informative without becoming verbose, so a 4 (not a 5) reflects that it is efficient but not optimally helpful.

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 simple tool with 2 parameters and no output schema, the description is minimal. It does not explain return values, edge cases (e.g., holidays), or error handling. Given the context of 17 sibling tools, more detail would aid selection and 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?

Schema description coverage is 100%, so the schema already documents both parameters. The description adds no additional meaning beyond the schema; it simply restates the purpose. Baseline score of 3 is appropriate as the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get the stock price for a specific date.' It specifies the verb (get), resource (stock price), and scope (specific date), distinguishing it from siblings like get_current_stock_price (no date) and get_stock_price_date_range (date range).

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 usage guidelines are provided. The description does not indicate when to use this tool over alternatives (e.g., get_current_stock_price for latest price, get_historical_stock_prices for multiple dates), nor does it mention any prerequisites or limitations.

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_rangeB

Get stock prices for a date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.
start_dateYesStart date in YYYY-MM-DD format.
end_dateYesEnd date in YYYY-MM-DD format.

TDQS

B3.2/5.0
Behavior2/5

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

No annotations provided. Description does not disclose any behavioral traits beyond basic operation (no side effects, rate limits, or prerequisites mentioned). For a read operation, the description should at least hint at being non-destructive.

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

Conciseness3/5

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

Description is very concise (one sentence), but context with 3 parameters and no annotations could benefit from slightly more detail. It is appropriately front-loaded but may be too minimal.

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?

Tool has many siblings and no output schema. Description does not explain return format or key behavioral details, leaving gaps for an agent to fully understand usage.

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 parameters are fully described in the schema. Description adds no additional meaning beyond the schema, meeting baseline.

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

Purpose5/5

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

Description explicitly states it gets stock prices for a date range, which clearly distinguishes it from sibling get_stock_price_by_date (single date). The verb 'Get' and resource 'stock prices' are specific.

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?

No explicit when-to-use or when-not-to-use guidance. It is implied that this tool is for date ranges, but 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_stock_splitsB

Get stock split history for a stock.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol.

TDQS

B3/5.0
Behavior2/5

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

No annotations provided; description only states it returns history without details on output format, date range, or behavioral traits. Fails to add 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.

Conciseness3/5

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

Single sentence is concise but lacks necessary detail. Not too verbose, but could be more informative without sacrificing brevity.

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

Completeness2/5

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

Given no output schema and 1 parameter, the description is insufficient for an agent to understand the result or use the tool correctly among many siblings.

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

Parameters3/5

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

Schema coverage is 100% with a clear description for 'symbol'. Description adds no extra meaning beyond reinforcing the function.

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

Purpose5/5

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

Description clearly states the tool retrieves stock split history for a stock, specifying the verb and resource. It differentiates from siblings like dividends or price history.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. Lacks context about prerequisites or exclusions.

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

Tool Schema Changelog

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

  1. 18 tool updatesv0.1.4
    • First observedget_analyst_price_targets
    • First observedget_balance_sheet
    • First observedget_cashflow
    • First observedget_current_stock_price
    • First observedget_dividends
    • First observedget_earning_dates
    • First observedget_historical_stock_prices
    • First observedget_holder_info
    • First observedget_income_statement
    • First observedget_news
    • First observedget_option_chain
    • First observedget_option_expiration_dates
    • First observedget_recommendations
    • First observedget_stock_actions
    • First observedget_stock_info
    • First observedget_stock_price_by_date
    • First observedget_stock_price_date_range
    • First observedget_stock_splits

TDQS

A3.5/5.0

Scored across 18 tools

Disambiguation5/5

Each tool has a distinct, clearly defined purpose with no overlap. For example, get_current_stock_price, get_stock_price_by_date, and get_stock_price_date_range target different price queries, while financial statements (get_balance_sheet, get_income_statement, get_cashflow) are unique.

Naming Consistency5/5

All tools follow a consistent 'get_' prefix followed by descriptive snake_case noun phrases. No mixing of convention or verb styles.

Tool Count4/5

18 tools is slightly above the typical sweet spot (3-15) but still reasonable for a comprehensive financial data API. Each tool contributes to a well-scoped domain without feeling excessive.

Completeness5/5

The tool surface covers all major aspects of stock data: prices (current/historical/by date), financial statements, dividends, splits, options, analysts, news, holder info, and metadata. No obvious gaps for fundamental stock analysis.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    A Model Context Protocol server that enables interaction with Yahoo Finance to retrieve stock pricing, company information, and historical financial data through natural language queries.
    10
    1,798 PyPI
    29
    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
  • F
    license
    Not graded
    quality
    C
    maintenance
    Financial MCP server providing 15 tools for stock quotes, financials, risk metrics, news sentiment, SEC filings, and session summaries via Yahoo Finance data.
    -