Yahoo Finance MCP Server
io.github.narumiruna/yfinance-mcp
Access Yahoo Finance stock data, news, analyst insights, options, and charts through AI assistants.
What is the Yahoo Finance MCP server?
The Yahoo Finance MCP server provides AI assistants with access to comprehensive financial data from Yahoo Finance, including stock information, analyst estimates, news, options chains, and technical charts. It enables queries for company financials, sector rankings, screeners, and fund holdings through a set of specialized tools.
This server connects Claude and other AI assistants to Yahoo Finance data, letting you query stock prices, analyst price targets, earnings estimates, news, options data, and generate professional financial charts. Use it to research companies, screen for trading opportunities, analyze fund holdings, and access real-time market information without leaving your chat interface.
How to install Yahoo Finance
Copy-paste configuration for popular MCP clients.
{
"mcpServers": {
"yfinance-mcp": {
"command": "uvx",
"args": [
"yfmcp"
]
}
}
}{
"mcpServers": {
"yfinance-mcp": {
"command": "uvx",
"args": [
"yfmcp"
]
}
}
}{
"mcpServers": {
"yfinance-mcp": {
"command": "uvx",
"args": [
"yfmcp"
]
}
}
}{
"servers": {
"yfinance-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"yfmcp"
]
}
}
}claude mcp add yfinance-mcp -- uvx yfmcpTools & capabilities
Tools this server exposes to the agent.
yfinance_get_ticker_info— Retrieve comprehensive stock data including company info, financials, trading metrics, valuation, dividends, and governance.yfinance_get_analyst_price_targets— Fetch current price and analyst consensus price targets (low, high, mean, median) for a stock.yfinance_get_analyst_estimates— Fetch analyst consensus estimates, revision momentum, recommendations, growth estimates, and earnings history.yfinance_get_upgrades_downgrades— Fetch analyst upgrades, downgrades, initiations, reiterations, and price-target changes with firm names and dates.yfinance_get_ticker_news— Fetch recent news articles and press releases for a specific stock with titles, summaries, and URLs.yfinance_search— Search Yahoo Finance for stocks, ETFs, and news articles by company name, ticker, or keywords.yfinance_get_top— Get top-ranked financial entities (ETFs, mutual funds, companies, growth leaders) within a market sector.yfinance_screen— Run Yahoo Finance screeners using predefined keys or custom query trees for equity, fund, and ETF filtering.yfinance_screen_gappers— Run a purpose-built screener for opening-session bullish gappers with customizable thresholds.yfinance_get_price_history— Fetch historical OHLCV data and optionally generate candlestick, VWAP, or volume profile charts as WebP images.yfinance_get_financials— Fetch financial statements (income statement, balance sheet, cash flow) with historical annual, quarterly, or TTM data.yfinance_get_holders— Fetch major holders, institutional investors, mutual fund holders, and insider transaction data.yfinance_get_fund_data— Fetch ETF or mutual-fund portfolio composition, holdings, asset classes, sectors, and operating details.yfinance_get_option_dates— Fetch available option expiration dates for a stock.yfinance_get_option_chain— Fetch option chain data (calls and puts) with strike prices, IV, bid/ask, volume, and open interest.
Use cases
- Research stock fundamentals, analyst targets, and earnings estimates for investment decisions
- Screen for trading opportunities using predefined or custom equity, ETF, and fund screeners
- Analyze option chains and implied volatility to evaluate options strategies
- Generate professional candlestick and volume profile charts for technical analysis
- Explore fund holdings and sector weightings for portfolio allocation research
Yahoo Finance MCP server FAQ
It's an MCP server that gives Claude and other AI assistants access to Yahoo Finance data—stock prices, analyst estimates, news, options, financials, and charts—through a set of specialized tools.
Yes. The server itself is open-source (MIT license) and free. Yahoo Finance data access is also free, though Yahoo may have rate limits or terms of service.
Add the server to your MCP client configuration. Via uv (recommended): use `uvx yfmcp@latest`. Via Docker: use `docker run -i --rm narumi/yfinance-mcp`. Via pip: install `yfmcp` from PyPI.
No API key or authentication is required. The server queries Yahoo Finance directly, which does not require credentials for public data.
Stock info, analyst price targets and estimates, news, options chains, financial statements, insider holdings, ETF/fund compositions, sector rankings, and historical price data with chart generation.
Yes. The `yfinance_get_price_history` tool can generate candlestick, VWAP, and volume profile charts as base64-encoded WebP images for efficient token usage.
README (reference)
Source of truth, from the repository.
Yahoo Finance MCP Server
<!-- mcp-name: io.github.narumiruna/yfinance-mcp -->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.
<a href="https://glama.ai/mcp/servers/@narumiruna/yfinance-mcp"> <img width="380" height="200" src="https://glama.ai/mcp/servers/@narumiruna/yfinance-mcp/badge" /> </a>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
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 actionFirm: Analyst firm nameToGradeandFromGrade: New and previous ratingsAction: Rating actionpriceTargetAction: Price-target action such asRaises,Lowers, orMaintainscurrentPriceTargetandpriorPriceTarget: 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 |
Returns: JSON array of news items with title, summary, publication date, provider, URL, and thumbnail.
yfinance_search
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 anindexlabel (e.g.insidersPercentHeld,institutionsPercentHeld,institutionsFloatPercentHeld,institutionsCount) and aValueinstitutional_holders— Institutional investors; records typically include fields such asDate Reported,Holder,Shares,Value,pctChange,pctHeldmutualfund_holders— Mutual fund holders; records typically include fields similar to institutional holdersinsider_transactions— Recent insider trades; records typically include fields such asShares,Value,Insider,Position,Transaction,Start Date,Ownershipinsider_purchases— Six-month summary where each row describes a category (Purchases, Sales, Net Shares, etc.); records typically include fields such asInsider Purchases Last 6m,Shares,Transinsider_roster— Known insiders; records typically include fields such asName,Position,Shares Owned Directly,Most Recent Transaction,Latest Transaction Date_metadata— Row limit metadata withmax_rowsand per-sectiontotal_rows,returned_rows, andtruncated
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 identifierstrike: Strike pricelastPrice: Last traded pricebid/ask: Bid and ask pricesvolume: Trading volumeopenInterest: Open interestimpliedVolatility: IVinTheMoney: Whether option is ITMcontractSize: Contract size (REGULAR)currency: Currency (USD)
Usage
Via uv (recommended)
- Install uv
- 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
- Clone the repository and install dependencies:
git clone https://github.com/narumiruna/yfinance-mcp.git
cd yfinance-mcp
uv sync
- 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
<a href="https://github.com/narumiruna/yfinance-mcp/graphs/contributors"> <img src="https://contrib.rocks/image?repo=narumiruna/yfinance-mcp" /> </a>Made with contrib.rocks.
License
This project is licensed under the MIT License.
Related MCP servers
Legislative Yuan
Model Context Protocol server for Taiwan Legislative Yuan API v2.