Skip to main content
Glama
Yahoo Finance MCP Server

Yahoo Finance MCP Server

by narumiruna

Yahoo Finance MCP Server

PyPI version Python CI License: MIT

A Model Context Protocol (MCP) server that provides AI assistants with access to Yahoo Finance data via yfinance. Query stock information, financial news, sector rankings, and generate professional financial charts — all from your AI chat.

Features

  • Stock Data — Company info, financials, valuation metrics, dividends, and trading data

  • Analyst Data — Consensus targets, estimate/revision trends, recommendation history, and firm-level actions

  • Financial Statements — Income statement and balance sheet with historical data (EBIT, Invested Capital, etc.)

  • Financial News — Recent news articles and press releases for any ticker

  • Search — Find stocks, ETFs, and news across Yahoo Finance

  • Sector Rankings — Top ETFs, mutual funds, companies, growth leaders, and top performers by sector

  • Price History — Historical OHLCV data as markdown tables or professional charts

  • Chart Generation — Candlestick, VWAP, and volume profile charts returned as WebP images

  • Options Data — Option chains with calls, puts, strike prices, IV, and expiration dates

  • Ownership Data — Major holders, institutional investors, mutual fund holders, and insider transactions

  • Fund Look-Through — ETF and mutual-fund holdings, asset classes, sectors, ratings, and operating details

  • Screeners — Predefined, equity, mutual-fund, and ETF query trees

Related MCP server: DuckDuckGo MCP Server

Tools

yfinance_get_ticker_info

Retrieve comprehensive stock data including company info, financials, trading metrics, and governance data.

Parameter

Type

Required

Description

symbol

string

Yes

Stock ticker symbol (e.g. AAPL, GOOGL, MSFT)

Returns: JSON object with company details, price data, valuation metrics, trading info, dividends, financials, and performance indicators.

yfinance_get_analyst_price_targets

Fetch the current price and analyst consensus price targets for a stock.

Parameter

Type

Required

Description

symbol

string

Yes

Stock ticker symbol (e.g. AAPL, GOOGL, MSFT)

Returns: JSON object with current, low, high, mean, and median price fields. Analyst coverage and available fields vary by symbol.

yfinance_get_analyst_estimates

Fetch analyst consensus estimates, revision momentum, recommendations, growth estimates, and earnings history.

Parameter

Type

Required

Description

symbol

string

Yes

Stock ticker symbol

sections

array

No

Any of recommendations, earnings_estimate, revenue_estimate, eps_trend, eps_revisions, earnings_history, or growth_estimates. Omit for all sections

max_rows

number

No

Maximum rows per section. Default: 12. Use 0 for all rows

Returns: Named arrays for available sections plus _metadata containing per-section row counts, truncation status, unavailable sections, and failed sections. A failure in one section does not discard successfully fetched sections.

yfinance_get_upgrades_downgrades

Fetch analyst upgrades, downgrades, initiations, reiterations, and price-target changes, newest first.

Parameter

Type

Required

Description

symbol

string

Yes

Stock ticker symbol

max_rows

number

No

Maximum actions to return. Default: 25. Use 0 to return all rows

Returns: JSON object containing upgrades_downgrades records and _metadata with row counts and truncation status. Records can include:

  • GradeDate: Date and time of the analyst action

  • Firm: Analyst firm name

  • ToGrade and FromGrade: New and previous ratings

  • Action: Rating action

  • priceTargetAction: Price-target action such as Raises, Lowers, or Maintains

  • currentPriceTarget and priorPriceTarget: New and previous price targets

Available fields vary by symbol and analyst action.

yfinance_get_ticker_news

Fetch recent news articles and press releases for a specific stock.

Parameter

Type

Required

Description

symbol

string

Yes

Stock ticker symbol

symbol must be nonempty and contain only ASCII letters, digits, or ., -, ^, =, &, _. Invalid input returns INVALID_PARAMS without echoing the input or calling Yahoo Finance. Accepted formats include BRK.B, 2330.TW, ^GSPC, EURUSD=X, ES=F, and BTC-USD. This format check does not verify that a ticker exists.

Returns: JSON array of news items with title, summary, publication date, provider, URL, and thumbnail.

Search Yahoo Finance for stocks, ETFs, and news articles.

Parameter

Type

Required

Description

query

string

Yes

Search query — company name, ticker symbol, or keywords

search_type

string

Yes

"all" (quotes + news), "quotes" (stocks/ETFs only), or "news" (articles only)

Returns: Matching quotes and/or news results depending on search_type.

yfinance_get_top

Get top-ranked financial entities within a market sector.

Parameter

Type

Required

Description

sector

string

Yes

Market sector (see supported sectors below)

top_type

string

Yes

"top_etfs", "top_mutual_funds", "top_companies", "top_growth_companies", or "top_performing_companies"

top_n

number

No

Number of results to return (default: 10, max: 100)

Returns: JSON array of top entities with relevant metrics.

Supported Sectors

Basic Materials, Communication Services, Consumer Cyclical, Consumer Defensive, Energy, Financial Services, Healthcare, Industrials, Real Estate, Technology, Utilities

yfinance_screen

Run Yahoo Finance screeners using either predefined screener keys or custom query trees.

Parameter

Type

Required

Description

query

string/object

Yes

For query_type="predefined": screener key such as "day_gainers". For query_type="equity", "fund", or "etf": custom query tree with {operator, operands} nodes

query_type

string

No

"predefined" (default), "equity", "fund", or "etf"

offset

number

No

Result offset

size

number

No

Rows for custom queries; Yahoo maximum is 250

count

number

No

Rows for predefined queries; Yahoo maximum is 250

sort_field

string

No

Sort field, for example "percentchange"

sort_asc

boolean

No

Sort ascending if true, descending if false

user_id

string

No

Optional Yahoo user identifier

user_id_type

string

No

Optional Yahoo user ID type, commonly "guid"

Returns: JSON screener response from Yahoo Finance, typically including quote rows and metadata.

Custom equity screener example:

{
  "query_type": "equity",
  "query": {
    "operator": "and",
    "operands": [
      { "operator": "gt", "operands": ["percentchange", 3] },
      { "operator": "eq", "operands": ["region", "us"] },
      { "operator": "gte", "operands": ["intradayprice", 5] },
      { "operator": "gt", "operands": ["dayvolume", 500000] }
    ]
  },
  "sort_field": "percentchange",
  "sort_asc": false,
  "size": 50
}

Custom ETF screener example:

{
  "query_type": "etf",
  "query": {
    "operator": "and",
    "operands": [
      { "operator": "eq", "operands": ["categoryname", "Large Blend"] },
      { "operator": "lte", "operands": ["annualreportnetexpenseratio", 0.2] }
    ]
  },
  "sort_field": "fundnetassets",
  "sort_asc": false,
  "size": 25
}

yfinance_screen_gappers

Run a purpose-built custom screener for opening-session bullish gappers.

Parameter

Type

Required

Description

min_percent_change

number

No

Minimum percent gap/change from prior close (default: 3.0)

min_price

number

No

Minimum intraday price (default: 5.0)

min_volume

number

No

Minimum day volume (default: 500000)

min_market_cap

number

No

Minimum intraday market cap in USD (default: 2000000000)

region

string

No

Yahoo region code (default: "us")

size

number

No

Number of results (default: 50, max: 250)

offset

number

No

Result offset for pagination (default: 0)

sort_asc

boolean

No

Sort by percentchange ascending (true) or descending (false, default)

Returns: JSON screener response from Yahoo Finance.

yfinance_get_price_history

Fetch historical price data and optionally generate technical analysis charts.

Parameter

Type

Required

Description

symbol

string

Yes

Stock ticker symbol

period

string

No

Time range — 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max (default: 1mo)

interval

string

No

Data granularity — 1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo (default: 1d)

chart_type

string

No

Chart to generate (omit for tabular data)

prepost

boolean

No

Include pre-market and post-market data when available (default: false; useful with intraday requests like period="1d", interval="1m")

Chart types:

Value

Description

"price_volume"

Candlestick chart with volume bars

"vwap"

Price chart with Volume Weighted Average Price overlay

"volume_profile"

Candlestick chart with volume distribution by price level

Returns:

  • Without chart_type: Markdown table with Date, Open, High, Low, Close, Volume, Dividends, and Stock Splits columns.

  • With chart_type: Base64-encoded WebP image for efficient token usage.

yfinance_get_financials

Fetch financial statements (income statement, balance sheet, and cash flow) with historical data.

Parameter

Type

Required

Description

symbol

string

Yes

Stock ticker symbol

frequency

string

No

"annual" (yearly), "quarterly" (quarterly), or "ttm" (trailing twelve months). Default: "annual"

Returns: JSON object with income statement, balance sheet, and cash flow data for each reporting period.

  • Income Statement fields: EBIT, Net Income, Tax Provision, Pretax Income, Interest Expense, Total Revenue, Operating Income, EBITDA, Normalized Income

  • Balance Sheet fields: Stockholders Equity, Total Debt, Cash And Cash Equivalents, Invested Capital, Net Debt, Total Assets, Total Liabilities Net Minority Interest, Net Tangible Assets, Tangible Book Value

  • Cash Flow fields: Operating Cash Flow, Free Cash Flow, Capital Expenditure, Net Income From Continuing Operations, Depreciation And Amortization, Change In Working Capital, Cash Dividends Paid

yfinance_get_holders

Fetch major holders, institutional holders, mutual fund holders, and insider data.

Parameter

Type

Required

Description

symbol

string

Yes

Stock ticker symbol (e.g. AAPL, MSFT)

max_rows

number

No

Maximum rows returned per holder section. Default: 10. Use 0 to return all rows

Returns: JSON object with:

  • major_holders — Aggregated breakdown where each row has an index label (e.g. insidersPercentHeld, institutionsPercentHeld, institutionsFloatPercentHeld, institutionsCount) and a Value

  • institutional_holders — Institutional investors; records typically include fields such as Date Reported, Holder, Shares, Value, pctChange, pctHeld

  • mutualfund_holders — Mutual fund holders; records typically include fields similar to institutional holders

  • insider_transactions — Recent insider trades; records typically include fields such as Shares, Value, Insider, Position, Transaction, Start Date, Ownership

  • insider_purchases — Six-month summary where each row describes a category (Purchases, Sales, Net Shares, etc.); records typically include fields such as Insider Purchases Last 6m, Shares, Trans

  • insider_roster — Known insiders; records typically include fields such as Name, Position, Shares Owned Directly, Most Recent Transaction, Latest Transaction Date

  • _metadata — Row limit metadata with max_rows and per-section total_rows, returned_rows, and truncated

Holder sections are limited to 10 rows by default to keep responses concise. Pass max_rows: 0 when you need the complete holder datasets. Field names for holder-related datasets are provided by yfinance and may vary by ticker, data availability, and yfinance version.

yfinance_get_fund_data

Fetch ETF or mutual-fund portfolio composition and operating details.

Parameter

Type

Required

Description

symbol

string

Yes

ETF or mutual-fund ticker symbol (for example SPY, BND, or VFIAX)

sections

array

No

Any of description, fund_overview, fund_operations, asset_classes, top_holdings, equity_holdings, bond_holdings, bond_ratings, or sector_weightings. Omit for all sections

max_rows

number

No

Maximum rows per tabular section. Default: 25. Use 0 for all rows

Returns: Available fund sections plus _metadata with row limits, per-section truncation, unavailable sections, and failed sections. The mix of sections depends on the fund; for example, equity funds and bond funds expose different portfolio breakdowns.

yfinance_get_option_dates

Fetch available option expiration dates for a stock.

Parameter

Type

Required

Description

symbol

string

Yes

Stock ticker symbol (e.g. AAPL, MSFT)

Returns: JSON array of expiration dates in YYYY-MM-DD format.

yfinance_get_option_chain

Fetch option chain data (calls and puts) for a stock with available strike prices.

Parameter

Type

Required

Description

symbol

string

Yes

Stock ticker symbol

expiration_date

string

No

Option expiration date in YYYY-MM-DD format. Omit to fetch all dates.

option_type

string

No

"calls", "puts", or "all" (default: "all")

Returns: JSON object keyed by expiration date, with calls and/or puts data including:

  • contractSymbol: Option contract identifier

  • strike: Strike price

  • lastPrice: Last traded price

  • bid/ask: Bid and ask prices

  • volume: Trading volume

  • openInterest: Open interest

  • impliedVolatility: IV

  • inTheMoney: Whether option is ITM

  • contractSize: Contract size (REGULAR)

  • currency: Currency (USD)

Usage

  1. Install uv

  2. Add the following to your MCP client configuration:

{
  "mcpServers": {
    "yfmcp": {
      "command": "uvx",
      "args": ["yfmcp@latest"]
    }
  }
}

Via Docker

{
  "mcpServers": {
    "yfmcp": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "narumi/yfinance-mcp"]
    }
  }
}

From Source

  1. Clone the repository and install dependencies:

git clone https://github.com/narumiruna/yfinance-mcp.git
cd yfinance-mcp
uv sync
  1. Add the following to your MCP client configuration:

{
  "mcpServers": {
    "yfmcp": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/yfinance-mcp",
        "yfmcp"
      ]
    }
  }
}

Replace /path/to/yfinance-mcp with the actual path to your cloned repository.

Testing with Codex CLI

This repository includes .codex/config.toml, which registers the local yfmcp MCP server for Codex CLI using uv run yfmcp. After cloning the repository and running uv sync, open Codex CLI from the repository root and try prompts such as:

Show VOO ticker info
Show VOO price history for the last 5 days
Find the ticker symbol for Toyota
Get AAPL option expiration dates

Development

Prerequisites

  • Python ≥ 3.12

  • uv package manager

Setup

uv sync --extra dev

Lint & Format

uv run ruff check .
uv run ruff format .

Type Check

uv run ty check src tests

Test

uv run pytest -v -s --cov=src tests

Demo Chatbot

See the demo chatbot in its dedicated repository: yfinance-mcp-demo

Contributors

Made with contrib.rocks.

License

This project is licensed under the MIT License.

Available Tools

15 tools
yfinance_get_analyst_estimatesB
Read-onlyIdempotent

Fetch consensus estimates, EPS/revenue trends, revisions, recommendations, and earnings history.

Inputs: symbol (required), max_rows, sections. Returns: result

yfinance_get_analyst_price_targetsA
Read-onlyIdempotent

Fetch the current price and analyst consensus price targets for a stock.

Returns a JSON object with the fields supplied by Yahoo Finance:
- current: Current market price
- low: Lowest analyst price target
- high: Highest analyst price target
- mean: Mean analyst price target
- median: Median analyst price target

Analyst coverage and available fields vary by symbol.

Inputs: symbol (required). Returns: result

yfinance_get_financialsA
Read-onlyIdempotent

Fetch financial statements (income statement, balance sheet, and cash flow) with historical data.

Returns JSON with income statement, balance sheet, and cash flow data across reporting periods.

Use the data to analyze trends, calculate ratios, or compare periods.

Inputs: symbol (required), frequency. Returns: result

yfinance_get_fund_dataA
Read-onlyIdempotent

Fetch ETF or mutual-fund composition, holdings, exposures, ratings, and operating details.

Inputs: symbol (required), max_rows, sections. Returns: result

yfinance_get_holdersA
Read-onlyIdempotent

Fetch major holders, institutional holders, mutual fund holders, and insider data.

Returns JSON with:
- major_holders: Aggregated breakdown including insider % held, institutional % held,
  institutional % float held, and institution count.
- institutional_holders: List of institutional investors with shares held, date reported,
  value, and % change.
- mutualfund_holders: List of mutual fund holders with same fields.
- insider_transactions: Recent insider transactions including shares, value, transaction
  type, and date.
- insider_purchases: Summary of insider buy/sell activity over the last 6 months.
- insider_roster: List of known insiders by name and position.

Use this to analyze ownership concentration, insider activity, and institutional interest.

Inputs: symbol (required), max_rows. Returns: result

yfinance_get_option_chainA
Read-onlyIdempotent

Fetch option chain data (calls and puts) for a stock with available strike prices.

Returns JSON with calls and/or puts data for each expiration date.

JSON fields include:
- contractSymbol: Option contract identifier
- strike: Strike price
- lastPrice: Last traded price
- bid/ask: Bid and ask prices
- volume: Trading volume
- openInterest: Open interest
- impliedVolatility: Implied volatility (IV)
- inTheMoney: Whether option is ITM
- contractSize: Contract size (REGULAR)
- currency: Currency (USD)

Use this to analyze options pricing, IV surfaces, and strike levels.

Inputs: symbol (required), option_type, expiration_date. Returns: result

yfinance_get_option_datesA
Read-onlyIdempotent

Fetch available option expiration dates for a stock.

Returns JSON array of expiration dates in YYYY-MM-DD format.

Use these dates with the 'yfinance_get_option_chain' tool to fetch
the options chain for a specific date.

Inputs: symbol (required). Returns: result

yfinance_get_price_historyA
Read-onlyIdempotent

Fetch historical price data and optionally generate technical analysis charts.

When chart_type is None, returns Markdown table with columns:
- Date: Trading date (index)
- Open: Opening price
- High: Highest price
- Low: Lowest price
- Close: Closing price
- Volume: Trading volume
- Dividends: Dividend payments (if any)
- Stock Splits: Split events (if any)

When chart_type is specified, returns a chart image:
- 'price_volume': Candlestick chart with volume bars
- 'vwap': Price with Volume Weighted Average Price overlay
- 'volume_profile': Volume distribution by price level

Set prepost=True to include pre-market and post-market data when available.

Note: Not all period/interval combinations are valid. Minute intervals (1m, 5m, etc.)
only work with short periods (1d, 5d).

Inputs: symbol (required), period, prepost, interval, +1 more. Returns: result

yfinance_get_ticker_infoA
Read-onlyIdempotent

Retrieve comprehensive stock data including company information, financials, trading metrics and governance.

Returns JSON object with fields including:
- Company: symbol, longName, sector, industry, longBusinessSummary, website, city, country
- Price: currentPrice, previousClose, open, dayHigh, dayLow, fiftyTwoWeekHigh, fiftyTwoWeekLow
- Valuation: marketCap, enterpriseValue, trailingPE, forwardPE, priceToBook, pegRatio
- Trading: volume, averageVolume, averageVolume10days, bid, ask, bidSize, askSize
- Dividends: dividendRate, dividendYield, exDividendDate, payoutRatio
- Financials: totalRevenue, revenueGrowth, earningsGrowth, profitMargins, operatingMargins
- Performance: beta, fiftyDayAverage, twoHundredDayAverage, trailingEps, forwardEps

Note: Available fields vary by security type. Timestamps are converted to readable dates.

Inputs: symbol (required). Returns: result

yfinance_get_ticker_newsA
Read-onlyIdempotent

Fetch recent news articles and press releases for a specific stock.

Returns JSON array where each news item has:
- id: Unique article identifier
- content: Object containing:
    - title: Article headline
    - summary: Brief article summary
    - pubDate: Publication date (ISO 8601 format)
    - provider: Object with displayName (e.g., "Yahoo Finance") and url
    - canonicalUrl: Object with article url, site, region, lang
    - thumbnail: Object with image URLs and resolutions
    - contentType: Type of content (e.g., "STORY", "VIDEO")

Use this to track company announcements, market sentiment, and breaking news.

Inputs: symbol (required). Returns: result

yfinance_get_topA
Read-onlyIdempotent

Get top-ranked financial entities within a sector.

This unified tool provides access to various rankings:
- ETFs and mutual funds focused on the sector
- Largest companies by market capitalization
- Fastest-growing companies by revenue/earnings
- Best-performing stocks by price appreciation

Returns JSON data with relevant metrics for each entity type.

Inputs: sector (required), top_type (required), top_n. Returns: result

yfinance_get_upgrades_downgradesB
Read-onlyIdempotent

Fetch analyst upgrades, downgrades, initiations, and price target changes.

Returns analyst actions newest first. Fields supplied by Yahoo Finance can include:
- GradeDate: Date and time of the analyst action
- Firm: Analyst firm name
- ToGrade and FromGrade: New and previous ratings
- Action: Rating action, such as upgrade, downgrade, initiation, or reiteration
- priceTargetAction: Price target action, such as Raises, Lowers, or Maintains
- currentPriceTarget and priorPriceTarget: New and previous price targets

Available fields vary by symbol and analyst action.

Inputs: symbol (required), max_rows. Returns: result

yfinance_screenA
Read-onlyIdempotent

Run a Yahoo Finance screener query.

Supports predefined Yahoo screener keys and custom equity, mutual-fund, or ETF query trees.

Inputs: query (required), size, count, offset, +5 more. Returns: result

yfinance_screen_gappersA
Read-onlyIdempotent

Run a custom equity screener tuned for opening-session stock gappers.

Inputs: size, offset, region, sort_asc, +4 more. Returns: result

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 15 tools

    Disambiguation5/5

    Each tool targets a distinct data domain: ticker info, analyst data, news, search, screening, price history, financials, options, and holders. Even the closely related analyst and screener tools are clearly separated by their specific outputs and descriptions.

    Naming Consistency4/5

    The tools consistently use the yfinance_ prefix and snake_case, with most following a yfinance_get_* pattern. A few exceptions like yfinance_search, yfinance_screen, and yfinance_screen_gappers break the pattern slightly but remain predictable and readable.

    Tool Count5/5

    At 15 tools, the set is at the upper edge of well-scoped but still appropriate for Yahoo Finance's broad data coverage. Each tool covers a meaningful financial data category without obvious redundancy.

    Completeness5/5

    The surface comprehensively covers the main Yahoo Finance data categories: quotes, financials, price history, options, holders, news, analyst activity, screening, rankings, and fund data. For a read-only financial data server, there are no significant dead ends or missing core operations.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • -
      license
      Not graded
      quality
      Not graded
      maintenance
      A basic MCP server built with FastMCP framework that provides example tools including message echoing and server information retrieval. Supports both stdio and HTTP transports with Docker deployment capabilities.
      -
    • -
      license
      Not graded
      quality
      Not graded
      maintenance
      A basic MCP server built with FastMCP framework that provides example tools for echoing messages and retrieving server information. Supports both stdio and HTTP transports with Docker deployment capabilities.
      -
    • -
      license
      Not graded
      quality
      Not graded
      maintenance
      A basic MCP server with example tools including message echo functionality and server information retrieval. Built with FastMCP framework and supports both stdio and HTTP transports.
      -
    • -
      license
      Not graded
      quality
      Not graded
      maintenance
      A basic MCP server built with FastMCP framework that provides example tools including message echoing and server information retrieval. Supports both stdio and HTTP transports for integration with various MCP clients.
      -