A side-by-side look at the Financial Modeling Prep (fmpsdk) and Yahoo Finance MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Financial Modeling Prep (fmpsdk) for finance & fintech work as a local process; choose Yahoo Finance for finance & fintech as a local process. You can also run both side by side in one mcpServers block.
FMP_API_KEY.get_quote, get_company_profile, get_income_statement.get_stock_quote, get_historical_prices, get_company_info.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Finance & Fintech | Finance & Fintech |
| Quality signal | 61/100 · Good | 63/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | Not declared |
| Pricing | Not declared | Not declared |
| Required env vars | FMP_API_KEY | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 215 | 22 |
| Directory activity | 2 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 13 | 13 |
| Full listing | View Financial Modeling Prep (fmpsdk) | View Yahoo Finance |
get_quoteFull real-time quote for one symbol (equity, index, commodity, crypto,
or forex pair): price, change, day/52-week range, volume, market cap,
50/200-day averages.get_company_profileCompany profile: price and market cap, identifiers (CIK/ISIN/CUSIP),
sector and industry, headquarters, leadership, description, exchange.get_income_statementIncome statement (revenue, expenses, net income) for one company.
period: "annual" or "quarter". limit: how many periods, newest first.get_balance_sheetBalance sheet (assets, liabilities, equity) for one company.
period: "annual" or "quarter". limit: how many periods, newest first.get_cash_flowCash flow statement (operating, investing, financing) for one company.
period: "annual" or "quarter". limit: how many periods, newest first.get_key_metricsPer-period key metrics: valuation multiples, per-share figures, returns
on capital, margins — FMP-computed from the statements.get_financial_ratiosPer-period financial ratios: liquidity, leverage, efficiency,
profitability, and valuation — FMP-computed from the statements.get_historical_pricesDaily close price and volume for one symbol between two dates
(YYYY-MM-DD). Leave dates unset for FMP's default recent window. Long
ranges are returned page by page — see the response's `note`.search_symbolResolve a ticker symbol from a name or fragment (e.g. "apple" -> AAPL).get_stock_newsRecent news articles for one or more symbols (comma-separated, e.g.
"AAPL,MSFT"): headline, publisher, url, published date, snippet.list_fmp_endpointsFind FMP endpoints beyond the curated tools. `query` is a substring
match over name/group/summary; `group` filters to one category (e.g.
"congress", "institutional_ownership"); `free_only` drops endpoints that
need a paid FMP plan. Returns name, group, plan tier ("Free"/"Starter"/
"Premium"/"Ultimate"/"Add-on"), and one-line summary — pass a name to
`describe_fmp_endpoint` for the full signature.describe_fmp_endpointFull detail for one endpoint: call signature, every parameter, return
type, plan tier, FMP wire path, and the complete docstring. Use before
`call_fmp_endpoint` so the arguments are right.get_stock_quoteReal-time quote snapshot for ONE stock: last price, day change ($ and %), open, previous close, day range, 52-week range, volume and average volume, market cap, beta, trailing P/E, EPS, dividend yield, and sector/industry/website.
Use for "what's the price of X" or a quick single-stock snapshot. For several stocks side by side use compare_stocks; for the full company profile use get_company_info; for a past price series use get_historical_prices.
Returns Markdown by default, or structured JSON when response_format='json'. An unknown ticker or an upstream/rate-limit error returns a short error message rather than raising.
get_historical_pricesHistorical OHLCV price series for one stock over a chosen period/interval, plus summary stats (highest/lowest/average close, average volume) and total return over the window.
Use for performance, trends, or charting ("how has X done over the last year"). For a single current price use get_stock_quote; for dividend/split events use get_dividends_splits. Note: intraday intervals (1m-90m) are only available for short recent periods, and long periods return many rows, so prefer JSON or a shorter period if the output is truncated.
Returns Markdown (summary stats plus the last 10 rows) by default, or the full series as JSON when response_format='json'. An empty or unsupported period/interval combination returns a short message.
get_company_infoDetailed company profile for one stock: long business summary, sector/industry, key executives, headquarters/website/employee count, and valuation & financial-highlight stats (market cap, P/E, margins, and similar).
Use for "what does X do", company background, or a business overview. For the statement-level numbers (income/balance/cash flow) use get_financial_statements; for just the live price use get_stock_quote.
Returns Markdown by default, or JSON when response_format='json'. An unknown ticker or upstream error returns a short error message.
get_financial_statementsAnnual financial statements for one company: income statement, balance sheet, and cash flow statement, each with multiple years of data.
Use for revenue, earnings, assets/liabilities, cash flow, or fundamental analysis. For headline ratios only use get_company_info; for forward projections use get_analyst_estimates. Quarterly data is not returned; request JSON for the complete machine-readable export.
Returns Markdown by default, or JSON when response_format='json'. Companies without filed statements (for example some ETFs or ADRs) return empty sections or a short message.
compare_stocksSide-by-side comparison of 2-10 stocks across key metrics (price, market cap, P/E, EPS, dividend yield, 52-week range, and period performance) with brief auto-generated insights.
Use for "which is better, X or Y", peer/relative comparison, or screening a small set. For a deep dive on a single name use get_stock_quote or get_company_info.
Pass 2-10 tickers in the tickers list. Returns a Markdown comparison table by default, or JSON when response_format='json'. A ticker that fails to resolve is reported per-symbol rather than failing the whole call.
get_analyst_recommendationsWall Street analyst view on one stock: price targets (high/mean/low), consensus rating, the buy/hold/sell recommendation-trend breakdown, and recent upgrades/downgrades.
Use for "what do analysts think of X", ratings, or sentiment. For forward EPS/revenue/growth projections use get_analyst_estimates instead: this tool is ratings and targets, that one is the numeric estimates.
Returns Markdown by default, or JSON when response_format='json'. A stock with no analyst coverage returns the available fields as N/A; errors return a short message.
get_market_newsLatest news articles for one stock; each item has a title, publisher/source, publish date, a short summary, and a link.
Use for "what's the latest news on X", recent headlines, or catalysts. Returns news only: for price use get_stock_quote, for fundamentals use the financials tools.
count sets how many articles to return (1-20, default 10). Returns Markdown by default, or JSON when response_format='json'. No recent news returns a short message.
get_options_chainEquity options data for one underlying, in two modes: call with no expiration_date to LIST every available expiration date; call again with a specific 'YYYY-MM-DD' to get that expiration's chain (strike, bid/ask, last, volume, open interest, implied volatility).
Use for options pricing, implied volatility, or open-interest analysis. option_type selects 'calls', 'puts', or 'both'. Always discover the valid dates first (call with no date) before requesting a chain, since only listed expirations work.
Returns Markdown by default, or JSON when response_format='json'. A ticker with no listed options returns a short message.
get_holdersOwnership and insider activity for one stock, selected by holder_type: 'institutional' (top institutional holders), 'mutualfund' (top fund holders), 'major' (insider-vs-institutional ownership % breakdown), or 'insider_transactions' (recent insider buys and sells).
Use for "who owns X", institutional ownership, or insider trading activity. One holder_type per call: call again to get a different view.
Returns Markdown by default, or JSON when response_format='json'. Missing data for the chosen category returns a short message.
get_dividends_splitsFull dividend payment history (with a trailing-period summary) and the stock-split history for one stock.
Use for dividend-income analysis, payment dates and amounts, dividend growth, or past split events. For the current/forward dividend yield use get_stock_quote; for price history use get_historical_prices.
Returns Markdown by default, or JSON when response_format='json'. A stock that pays no dividend or has never split returns a short message noting that none exist.
get_analyst_estimatesForward-looking analyst estimates for one stock: price targets, EPS and revenue estimates by period (current and next quarter and year), and growth estimates.
Use for projected/expected numbers and forecasts. This complements get_analyst_recommendations: that tool returns ratings and the recommendation trend, this one returns the numeric forward estimates.
Returns Markdown by default, or JSON when response_format='json'. A stock without analyst coverage returns the available fields as N/A or a short message.
search_symbolsResolve a company name or keyword to ticker symbols; each match returns the symbol, name, exchange, and instrument type (equity, ETF, and so on).
Use this first when you have a company or brand name but not its ticker, then pass the resolved symbol to the other tools. Not for fetching prices or fundamentals.
query is the name/keyword to search; count caps the number of matches (1-20, default 8). Returns Markdown by default, or JSON when response_format='json'. No matches returns a short message.
Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"financial-modeling-prep-fmpsdk": {
"command": "uvx",
"args": [
"fmpsdk-mcp"
],
"env": {
"FMP_API_KEY": "YOUR_FMP_API_KEY_HERE"
}
}
}
}
{
"mcpServers": {
"yahoo-finance": {
"command": "npx",
"args": [
"-y",
"yahoo-finance-mcp-server"
]
}
}
}