MCP server implementation for yahoo finance integration
This server has 12 tools with basic schema coverage but significant description and parameter quality issues. All tools have input schemas defined with proper JSON types (ticker, period, interval, etc.), which is positive. However, descriptions are often generic or incomplete, and many parameters lack adequate context. The server follows verb_noun naming convention (get_*, fetch_*) but descriptions do not consistently explain when to use each tool vs similar alternatives. No output schemas are documented. Error handling is absent from visible code, no guidance on retryability, user-fixable errors, or recovery steps. The fastmcp framework provides basic structure but lacks implementation of modern MCP patterns like tool annotations, structured error responses, or confirmation workflows for destructive operations. All tools are read-only (no risk of data loss), which mitigates some concerns, but the definition quality remains below production baseline.
Get financial statement for a given ticker symbol from yahoo finance. You can choose from the following financial statement types: income_stmt, quarterly_income_stmt, balance_sheet, quarterly_balance_sheet, cashflow, quarterly_cashflow. Args: ticker: str The ticker symbol of the stock to get financial statement for, e.g. "AAPL" financial_type: str The type of financial statement to get. You can choose from the following financial statement types: income_stmt, quarterly_income_stmt, balance_sheet, quarterly_balance_sheet, cashflow, quarterly_cashflow.
Get historical stock prices for a given ticker symbol from yahoo finance. Include the following information: Date, Open, High, Low, Close, Volume, Adj Close. Args: ticker: str The ticker symbol of the stock to get historical prices for, e.g. "AAPL" period : str Valid periods: 1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max Either Use period parameter or use start and end Default is "1mo" interval : str Valid intervals: 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo Intraday data cannot extend last 60 days Default is "1d"
Get holder information for a given ticker symbol from yahoo finance. You can choose from the following holder types: major_holders, institutional_holders, mutualfund_holders, insider_transactions, insider_purchases, insider_roster_holders.
Get company-specific news headlines from Yahoo Finance, perform sentiment analysis on headlines, and predict stock price movement (UP/DOWN/STABLE) based on average sentiment.
No output schemas documented. Tools return data but LLMs cannot predict field names, types, or structure. This forces downstream tool calls to rely on trial-and-error parsing.
Parameter descriptions lack depth and constraints. 'period' accepts '1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max' but this should be an enum constraint, not a free-form string. Same for 'interval', 'financial_type', 'holder_type', 'option_type', 'recommendation_type'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Fetch the option chain for a given ticker symbol, expiration date, and option type.
Fetch the available options expiration dates for a given ticker symbol.
Get recommendations or upgrades/downgrades for a given ticker symbol from yahoo finance. You can also specify the number of months back to get upgrades/downgrades for, default is 12.
Analyze stock growth and revenue projection over the last 5 years using Yahoo Finance data.
Get stock dividends and stock splits for a given ticker symbol from yahoo finance. Args: ticker: str The ticker symbol of the stock to get stock actions for, e.g. "AAPL"
Get stock information for a given ticker symbol from yahoo finance. Include the following information: Stock Price & Trading Info, Company Information, Financial Metrics, Earnings & Revenue, Margins & Returns, Dividends, Balance Sheet, Ownership, Analyst Coverage, Risk Metrics, Other. Args: ticker: str The ticker symbol of the stock to get information for, e.g. "AAPL"
Fetch the 1-year analyst target price for the given ticker symbol.
Get news for a given ticker symbol from yahoo finance. Args: ticker: str The ticker symbol of the stock to get news for, e.g. "AAPL"
Descriptions are too brief or generic. 'Get news for a given ticker symbol from yahoo finance' (44 chars) does not explain when to use this vs get_news_sentiment_and_price_prediction (which also fetches news). Baseline is 194 chars; most descriptions are 30-60 chars.
Tool naming contains potential ambiguities. 'get_news_sentiment_and_price_prediction' contains 'and', signaling multiple responsibilities (news sentiment + price prediction). Should split into get_news_sentiment and get_price_prediction.
No error handling documented. Tools do not explain how LLMs should handle invalid tickers, network failures, rate limits, or missing data. Visible code lacks try-catch with recovery guidance.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). While all tools are read-only (good), this should be explicitly declared via tool annotations so clients know these are safe to call repeatedly.
Overlapping tool functionality. Both 'get_yahoo_finance_news' and 'get_news_sentiment_and_price_prediction' fetch news. LLMs must reason about which to call, wasting tokens and inviting selection errors. Consolidate or clearly document the difference.
Parameter 'ticker' appears in every tool but lacks validation rules. Should document: min/max length, allowed characters (uppercase A-Z, digits), and note that invalid tickers return 404/empty (not a constraint violation).