fmp-mcp
Supports estimate-revision tools by requiring a PostgreSQL database to store and retrieve historical EPS and revenue estimate revision data.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fmp-mcpcompare Apple with its peers"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
fmp-mcp
Financial intelligence for your AI agent — powered by live market data.
Give Claude (or any MCP-compatible AI) the ability to analyze stocks, screen markets, compare peers, read earnings calls, and track sector rotations — all grounded in real financial data from Financial Modeling Prep.
This isn't a raw API wrapper. Each tool is purpose-built for a specific analytical task, composing multiple data sources into structured, analysis-ready outputs designed for AI consumption.
Tool surface below was verified against fmp/server.py on 2026-04-30. The repo build exposes 20 MCP tools; the two estimate-revision tools require the estimates extra plus database access for useful live results.
What your AI can do
Market Intelligence
get_market_context— One-call market snapshot: indices, sectors, gainers/losers, economic eventsget_sector_overview— Sector and industry performance with P/E valuationsget_news— Stock-specific or broad market newsget_events_calendar— Earnings, dividends, splits, and IPO calendarsget_economic_data— Economic indicators and high-impact event tracking
Fundamental Analysis
fmp_fetch— Direct access to 60+ financial data endpoints (income statements, balance sheets, cash flows, key metrics, and more)fmp_market_cap_check— Compare current market cap against the latest annual filing valuecompare_peers— Side-by-side peer comparison across 12 financial ratiosget_earnings_transcript— Parsed earnings calls with speaker attribution and Q&A sections
Stock Screening & Discovery
screen_stocks— Screen by sector, market cap, beta, dividend, volume, and moreget_institutional_ownership— Institutional holder analytics and ownership trendsget_insider_trades— Insider transaction flow and statisticsget_etf_holdings— ETF/fund holdings, sector and country allocation
Technical Analysis
get_technical_analysis— Composite signals from 7 indicators (SMA, EMA, RSI, MACD, Bollinger, ADX, Williams %R) with buy/sell scoring
Analyst Sentiment
get_estimate_revisions— Historical EPS/revenue estimate revision trendsscreen_estimate_revisions— Screen for estimate momentum across a universe of stocks
Data Discovery
fmp_list_endpoints— Browse all 60+ available data endpoints by categoryfmp_describe— Get parameter documentation for any endpointfmp_search— Search for companies by name or tickerfmp_profile— Company profile with sector, industry, and key stats
Related MCP server: Financial Modeling Prep MCP Server
Install
pip install fmp-mcpOptional estimate-revision tools (requires PostgreSQL):
pip install "fmp-mcp[estimates]"Configuration
Set your API key:
export FMP_API_KEY="your_key"Optional settings:
FMP_CACHE_DIR— Custom cache directory (default:~/.cache/fmp-mcp/)FMP_CACHE_MAXSIZE— Max in-memory cache entries (default: 200)
Run
fmp-mcpOr register it with Claude Code from the repo root:
claude mcp add fmp-mcp --scope user \
-- python3 -m fmp.serverYou can also use a generic MCP config:
{
"mcpServers": {
"fmp-mcp": {
"type": "stdio",
"command": "uvx",
"args": ["fmp-mcp"],
"env": { "FMP_API_KEY": "your_key" }
}
}
}How it's different
Raw API wrapper | fmp-mcp | |
Approach | Expose every endpoint 1:1 | Purpose-built analytical tools |
Output | Raw JSON, dozens of fields | Structured, summarized, analysis-ready |
Composition | One API call per tool | Multiple sources stitched together |
AI-optimized | Generic descriptions | Tool descriptions and schemas designed for LLM tool selection |
Caching | None | Per-endpoint disk caching with configurable refresh strategies |
Requirements
Python 3.11+
FMP API key (get one here)
Related Docs
docs/reference/FMP_ENDPOINTS.md— registered endpoint catalogdocs/reference/MCP_SERVERS.md— server registration and troubleshooting
Available Tools
21 toolscompare_peersA
Compare a stock against its peers on key financial ratios.
Fetches the peer group for a stock and builds a side-by-side comparison of financial ratios including valuation, profitability, margins, and leverage. By default, auto-discovery is operating-peer oriented. For dividend payout, buyback, and shareholder-return questions, pass peer_context="capital_allocation" or metric="dividend_payout" so the peer set favors mature dividend-paying capital-allocation comps over no-dividend growth operating peers.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of peers to include (default: 5, max: 10). | |
| peers | No | Optional comma-separated peer tickers (e.g., "MSFT,GOOGL,META"). If not provided, peers are auto-discovered via FMP. | |
| format | No | Output format: - "summary": Comparison table with key metrics (P/E, P/B, P/S, ROE, ROA, gross/operating/net margin, debt/equity, current ratio, dividend yield, PEG ratio) - "full": All TTM ratios for each peer (60+ metrics) | summary |
| metric | No | Optional metric hint used to infer peer_context. | |
| symbol | Yes | Stock symbol to compare (e.g., "AAPL", "MSFT"). | |
| fiscal_year | No | Optional fiscal year for supported annual metric comparisons. For "FY24", pass 2024. Currently supports metric="dividend_payout_ratio". | |
| peer_context | No | Optional peer-selection context. Use "capital_allocation" for payout ratio, dividend, buyback, or shareholder-return metrics. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavior. It describes that the tool fetches peer groups (auto-discovery) and builds a side-by-side comparison, and notes the default operating-peer orientation. However, it omits details about whether it mutates data, required permissions, rate limits, or side effects, which given the absence of annotations, leaves some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (7 sentences) and well-structured: it opens with the primary purpose, then details the output, and ends with specific usage guidelines. Every sentence adds value, and the critical information (purpose and key usage notes) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters), the presence of an output schema, and no annotations, the description covers the main behavior (peer comparison, ratio types) and provides specific usage guidance for edge cases (dividend/buyback). It might miss explaining the output format beyond the summary/full distinction, but the output schema likely handles that. Overall, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all 7 parameters described in schema), but the description adds valuable context beyond what the schema provides. For example, it explains that peer_context='capital_allocation' favors mature dividend-paying comps and that metric hints can infer peer_context. This extra guidance helps agents use parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb-resource pair: 'Compare a stock against its peers on key financial ratios.' It specifies the action (compare), the object (stock against peers), and the content (financial ratios including valuation, profitability, margins, leverage). This distinguishes it from sibling tools like fmp_profile (single stock) or get_market_context (broader market).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides specific guidance on when to use the peer_context='capital_allocation' or metric='dividend_payout' for dividend/buyback questions, and notes that default auto-discovery is operating-peer oriented. While it gives clear context, it does not explicitly state when not to use this tool or name alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fmp_describeA
Get detailed documentation for an FMP endpoint.
Discovery tool to understand what parameters an endpoint accepts. Use this before calling fmp_fetch to know required vs optional params.
| Name | Required | Description | Default |
|---|---|---|---|
| endpoint | Yes | Name of the endpoint (e.g., "income_statement", "historical_price_adjusted"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 it's a discovery tool returning documentation, implying safe read-only behavior, but does not explicitly mention no side effects, speed, or access requirements. Slightly more detail would enhance transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no fluff. Each sentence adds value: purpose, role as discovery tool, and usage tip.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return values need not be explained. The description fully covers purpose, usage, and context for a simple documentation tool. It is complete and self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single endpoint parameter, and the description adds examples like 'income_statement', 'historical_price_adjusted', which clarify naming conventions beyond the schema's generic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Get detailed documentation for an FMP endpoint' and positions it as a discovery tool. It distinguishes from sibling tools like fmp_fetch (which fetches data) and fmp_list_endpoints (which lists endpoints).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises 'Use this before calling fmp_fetch to know required vs optional params', providing clear when-to-use guidance. The sibling tool list further aids decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fmp_fetchA
Fetch data from any registered FMP endpoint.
This is the primary data fetching tool. Use fmp_list_endpoints to discover available endpoints, and fmp_describe to see required parameters.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filing type filter (for sec_filings endpoint, e.g., "10-K", "10-Q"). | |
| year | No | Fiscal year (for earnings_transcript endpoint). | |
| limit | No | Maximum number of records to return. | |
| query | No | Search query (for search endpoint). | |
| output | No | Output mode: inline records or CSV file path. | inline |
| period | No | Reporting period for financial statements ("annual" or "quarter"). | |
| symbol | No | Stock symbol (e.g., "AAPL", "MSFT"). Required for most endpoints. | |
| columns | No | Optional columns filter as JSON array or comma-separated string. | |
| quarter | No | Quarter 1-4 (for earnings_transcript endpoint). | |
| to_date | No | End date for price/rate data (YYYY-MM-DD format). | |
| endpoint | Yes | Name of the FMP endpoint. Common endpoints: - income_statement: Income statement data. `date` is period-end/as-of date. - balance_sheet: Balance sheet data. `date` is period-end/as-of date. - cash_flow: Cash flow statement data. `date` is period-end/as-of date. - key_metrics: Financial ratios and metrics. `date` is period-end/as-of date; `marketCap` is period-aligned, not current. - key_metrics_ttm: TTM metrics; FMP does not surface a period-end column. - historical_price_eod: Raw end-of-day prices and FX pair closes. For historical FX, use symbols such as USDTWD with from_date/to_date, then label basis as management_guidance_fx_assumption when guidance provides the FX rate or fmp_historical_fx_exact_date / fmp_historical_fx_previous_close when using FMP daily closes. - historical_price_adjusted: Adjusted stock prices - dividends: Dividend history - analyst_estimates: Analyst EPS/revenue estimates - price_target: Analyst price targets - earnings_transcript: Earnings call transcripts - sec_filings: SEC filing metadata | |
| from_date | No | Start date for price/rate data (YYYY-MM-DD format). | |
| use_cache | No | Whether to use cached data (default: True). Set False for fresh data. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only says 'Fetch data' but does not disclose read-only nature, side effects, rate limits, error behavior, or any other behavioral traits. The minimal description leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero wasted words. Front-loaded with the core action and immediately provides usage guidance. Highly concise and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 13 parameters and an output schema, the description is extremely brief. It does not explain how to construct queries, interpret results, or handle common scenarios. It relies too heavily on other tools and schema, making it incomplete for a primary tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds no extra meaning beyond the schema; it relies entirely on the schema for parameter details. The mention of fmp_describe is about discovery, not semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Fetch data from any registered FMP endpoint' with a specific verb and resource. It distinguishes from sibling tools fmp_list_endpoints and fmp_describe by positioning itself as the primary fetching tool, which is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use fmp_list_endpoints for discovery and fmp_describe for parameters. Provides clear context for when to use this tool vs alternatives, though no explicit when-not scenarios are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fmp_list_endpointsA
List available FMP data endpoints.
Discovery tool to see what data is available. Use this first to understand what endpoints exist before fetching data.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter by category. Available categories: - prices: Historical stock prices - treasury: Treasury rates - dividends: Dividend history - search: Company search and profiles - fundamentals: Financial statements (income, balance, cash flow) - analyst: Analyst estimates and price targets - transcripts: Earnings call transcripts - filings: SEC filing metadata |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It indicates the tool is a read-only discovery tool, which is safe, but does not detail behavior like what happens without a category filter (likely lists all). Output schema exists but is not referenced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with zero waste. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with one optional parameter and an output schema, the description is complete. It covers purpose, usage, and discovery context without missing critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The tool description adds no additional meaning to the 'category' parameter beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists available FMP endpoints, using specific verb 'list' and resource 'endpoints'. It positions itself as a discovery tool, distinguishing from sibling data-fetching tools like fmp_fetch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states to 'Use this first to understand what endpoints exist before fetching data,' providing a clear when-to-use and implicitly when-not-to-use (when actual data is needed, use other tools).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fmp_market_cap_checkA
Compare current profile market cap against latest annual key_metrics market cap.
Use this when fmp_profile.mktCap and fmp_fetch(endpoint="key_metrics") marketCap values appear to disagree. The profile value is a current snapshot; the latest annual key_metrics value is aligned to that row's period-end date.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Stock symbol (e.g., "AAPL", "MSFT", "GOOGL"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully carries the burden. It discloses that the comparison is between a current snapshot and a period-end value, adding context about the nature of the discrepancy. No side effects mentioned; appropriate for a read-only comparison.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states purpose, second gives usage guidance. No wasted words, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an output schema, the description is complete: it explains the tool's purpose, when to use it, and the difference between the compared values. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (single parameter 'symbol' with examples). The description adds no additional meaning beyond what the schema already provides; baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Compare current profile market cap against latest annual key_metrics market cap') with specific resources and distinguishes from siblings by naming the exact endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context when to use the tool (when fmp_profile.mktCap and fmp_fetch endpoint marketCap values disagree) and explains the difference between the two values, but does not explicitly state when not to use or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fmp_profileA
Get detailed company profile information as a current FMP /profile snapshot.
Returns comprehensive company data including sector, industry,
description, CEO, employees, website, and key financial metrics.
The profile mktCap field is price times shares as of the API call time,
or up to 1 week stale when served from cache. FMP does not include a
snapshot timestamp on this endpoint. For historical period-aligned market
cap, use fmp_fetch(endpoint="key_metrics", period="annual") and read the
date field on each row.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | Stock symbol (e.g., "AAPL", "MSFT", "GOOGL"). | |
| ticker | No | Alias for symbol, accepted for consistency with other ticker-keyed tools. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that mktCap may be stale (up to 1 week from cache) and that no timestamp is included. This is transparent about data freshness and potential misleading values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two focused paragraphs. The first states purpose and return fields; the second addresses data freshness and provides an alternative. No redundant or unnecessary sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description doesn't need to detail return values. It covers the main behavioral traits (data freshness, snapshot nature) and provides an alternative for historical data. Complete for a profile-lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well-documented in the schema. The description adds that ticker is an alias for symbol, which is already implied by the schema. No additional semantic value beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets 'detailed company profile information' and lists specific fields (sector, industry, description, CEO, employees, website, key financial metrics). It distinguishes from siblings by noting an alternative for historical market cap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly gives when-to-use guidance: for historical period-aligned market cap, use fmp_fetch instead. It also warns about potential staleness of mktCap, helping the agent decide if this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fmp_searchB
Search for companies by name or ticker.
Convenience wrapper for company search. Returns matching companies with their symbols, names, and exchange information.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results (default: 10, max: 100). | |
| query | Yes | Search query (company name, partial name, or ticker). | |
| exchange | No | Filter by exchange (e.g., "NASDAQ", "NYSE", "AMEX"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description states it returns matching companies with basic info. It misses details like rate limits, pagination behavior, or what happens with no results, but the core behavior is described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three brief, front-loaded sentences with zero waste. Every sentence provides information about purpose, output, or convenience.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple search functionality, rich schema (parameter descriptions), and output schema presence, the description covers input, output, and purpose adequately. Lacks only some behavioral details for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description adds a high-level note about search input (name/ticker) but does not elaborate on parameter values beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it searches for companies by name or ticker and returns symbols, names, and exchange info. However, it does not explicitly differentiate from sibling tools like fmp_fetch or fmp_profile, though the intent is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Labels itself as a 'convenience wrapper' but offers no guidance on when to use this versus alternatives, no exclusion criteria, and no prerequisites. The agent receives little context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_earnings_transcriptA
Parse and navigate an earnings call transcript.
Splits the raw transcript into structured sections: prepared remarks and Q&A with per-speaker segments and grouped Q&A exchanges.
IMPORTANT — default mode is summary (metadata only). This protects your context window. Full text is returned only when you explicitly request format="full".
Recommended workflow:
Call with default format="summary" to see the speaker list, word counts, and exchange count (costs ~1 KB of context)
Identify the section or speaker you need
Call again with format="full" and specific filters (section, filter_role, filter_speaker) to read only that content
Each text field is capped at max_words (default 3000). Set max_words=None to remove the cap (use with caution). Note: If format="full" is used WITHOUT any filters (no section, filter_role, or filter_speaker), a bounded preview is returned instead (first 3 segments per section, 500 words each, 2 exchanges). Add at least one filter to get full content with max_words control.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Fiscal year of the earnings call (e.g., 2024). | |
| format | No | Output format: - "summary": Metadata only — speaker list, word counts, exchange count. No text content. This is the DEFAULT. Use this first to scout the transcript before reading full text. - "full": Text content for all matching segments, truncated to max_words per field. | summary |
| output | No | Output mode: - "inline": Return content in MCP response (default). - "file": Write full untruncated markdown to disk and return metadata + absolute file_path. | inline |
| symbol | Yes | Stock symbol (e.g., "AAPL", "MSFT", "NVDA"). | |
| quarter | Yes | Quarter 1-4. | |
| section | No | Which section to return: - "all": Both prepared remarks and Q&A (default) - "prepared_remarks": Management presentations only - "qa": Q&A session only | all |
| max_words | No | Maximum words per text field when format="full". Default 3000. Set to None for unlimited (use with caution — CEO prepared remarks can exceed 5K words). Ignored when format="summary" or output="file". | |
| filter_role | No | Filter to segments by role: - "CEO", "CFO", "COO", "CTO": C-suite executives - "Analyst": Sell-side analysts asking questions - "IR": Investor Relations host - "Operator": Call operator | |
| filter_speaker | No | Filter to segments by this speaker (substring match, e.g., "Cook" matches "Tim Cook"). Case-insensitive. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full responsibility. It thoroughly discloses key behaviors: default format is summary to protect context, full mode returns bounded preview when unfiltered, max_words cap, and output mode differences (inline vs file). This covers potential pitfalls and resource usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points and clear sections, but it is somewhat lengthy. The recommended workflow is stated in two places (paragraph form and list), introducing minor redundancy. Still, it is easy to scan and logically ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 9 parameters and the existence of an output schema, the description covers all critical aspects: parameter explanations, behavioral nuances, workflow guidance, and trade-offs. It prepares the agent for complex usage scenarios like avoiding massive context consumption.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds significant value beyond parameter names and types. It explains default values, interactions (e.g., max_words ignored in summary or file mode), filtering behavior (substring match, case-insensitive), and the bounded preview logic. This rich contextual information is essential for correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as parsing and navigating earnings call transcripts, explaining the structured output (prepared remarks and Q&A). It distinguishes itself from sibling tools, which are other financial data retrieval tools, by focusing specifically on earnings transcript content and navigation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a step-by-step recommended workflow: start with summary to scout, then use full with filters. It warns about context window size, explains the bounded preview behavior when no filters are provided, and describes when to use inline vs file output. However, it does not explicitly state when not to use this tool or compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_economic_dataA
Get economic indicators or upcoming economic events.
Fetches macroeconomic data from FRED via FMP. Use indicator mode for time series data (GDP, CPI, unemployment, etc.) or calendar mode for upcoming/recent economic releases.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Data type to fetch: - "indicator": Economic indicator time series (requires indicator_name) - "calendar": Upcoming economic events with forecasts and actuals | indicator |
| limit | No | Optional cap for indicator mode (most recent N rows). | |
| format | No | Output format: - "summary": Latest value, trend, and key context - "full": Complete time series or event list | summary |
| output | No | Output mode for indicator full data: inline or file. | inline |
| country | No | Country filter for calendar mode (default: "US"). | US |
| to_date | No | End date in YYYY-MM-DD format (optional). | |
| from_date | No | Start date in YYYY-MM-DD format (optional). | |
| use_cache | No | Use cached data when available (default: True). | |
| indicator_name | No | Indicator to fetch (required for indicator mode). Available: GDP, realGDP, CPI, inflationRate, federalFunds, unemploymentRate, totalNonfarmPayroll, initialClaims, consumerSentiment, retailSales, durableGoods, industrialProductionTotalIndex, housingStarts, totalVehicleSales, smoothedUSRecessionProbabilities, 30YearFixedRateMortgageAverage, tradeBalanceGoodsAndServices. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 mentions the data source (FRED via FMP) and output modes, but does not disclose caching behavior, rate limits, or mutable side effects. The description is adequate but could be improved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose. It is concise and well-structured, with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters) and the presence of an output schema, the description provides a sufficient overview. It explains the two modes and mentions output formats, but lacks details on prerequisites or error handling. Still, it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 little beyond the schema, e.g., listing available indicators (partially) which is already in the schema. It provides a high-level overview but does not significantly enhance understanding of parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: fetching economic indicators or events. It explicitly names the two modes and distinguishes from sibling tools (e.g., no other tool focuses on economic data).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use each mode: 'Use indicator mode for time series data... or calendar mode for upcoming/recent economic releases.' It does not explicitly mention when not to use or list alternatives, but the context is clear and sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_estimate_revisionsA
Get estimate revision history for one ticker and fiscal period.
Reads snapshots through the hosted estimates API backed by the monthly
collection job. If fiscal_date is omitted, defaults to the nearest
available upcoming fiscal period for the ticker.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Estimate horizon: - "quarter": Quarterly estimates (default) - "annual": Annual estimates | quarter |
| ticker | Yes | Ticker symbol (e.g., "AAPL", "MSFT"). | |
| fiscal_date | No | Fiscal period date (YYYY-MM-DD). Optional. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context such as the data source ('hosted estimates API backed by the monthly collection job') and default behavior for omitted 'fiscal_date'. Without annotations, these details are valuable for understanding data freshness and default handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences front-loaded with the core purpose. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description need not explain return values. It covers purpose, data source, and default behavior. Minor omission: could mention data ordering or pagination, but overall adequate for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description adds context by explaining that omitting 'fiscal_date' defaults to the nearest upcoming fiscal period, which is not in the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Get[s] estimate revision history for one ticker and fiscal period.' It specifies the verb, resource, and scope, distinguishing it from sibling tools like 'screen_estimate_revisions' which likely screen across multiple entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for a specific ticker and period but does not explicitly state when to use or avoid this tool, nor does it mention alternatives beyond the implied distinction from screening tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_etf_holdingsC
Get ETF/fund composition across holdings, sector/country weights, and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows in summary mode for holdings/exposure/disclosure (default: 25). | |
| format | No | Output format: - "summary": Normalized section outputs - "full": Raw endpoint payloads | summary |
| output | No | Output mode for full holdings section: inline or file. | inline |
| symbol | Yes | ETF symbol (e.g., "SPY", "QQQ", "VTI"). | |
| include | No | Optional section subset as JSON array or comma-separated string. Valid sections: "holdings", "sectors", "countries", "info", "exposure", "disclosure". Default: all sections. | |
| use_cache | No | Use cached data when available (default: True). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavior like caching, rate limits, or read-only nature. It only states what is retrieved, not how it behaves (e.g., no mention of live vs delayed data, or that it supports caching via the use_cache parameter). Minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, 13 words, no fluff. Very concise, but it sacrifices detail. Could add a second sentence for usage guidance while remaining concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (so return values need no explanation), the description lacks coverage of behavioral aspects (no annotations) and does not explain how parameters like limit, format, and output affect results. Incomplete for a 6-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds no extra parameter meaning beyond the schema. Mentioning 'holdings, sector/country weights, and metadata' aligns with the include parameter options, but does not enrich semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves ETF/fund composition including holdings, sector/country weights, and metadata. This distinguishes it from siblings like fmp_profile (company profile) and get_sector_overview (sector-level data). However, it does not differentiate from fmp_fetch or fmp_search, which could also retrieve ETF data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. For instance, it does not explain when to prefer this over fmp_fetch or get_market_context. The description simply states the action without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_events_calendarA
Fetch upcoming corporate events: earnings, dividends, splits, or IPOs.
Can show market-wide calendars or filter to specific symbols. Useful for tracking upcoming catalysts and corporate actions. Date ranges wider than 90 days are split into FMP-compatible windows internally. Note: For portfolio-aware auto-fill, use get_portfolio_events_calendar on portfolio-reads-mcp.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of events to return (max: 500). If omitted, defaults to 20 for unfiltered event_type="all", otherwise 50. Applied after symbol filtering and date sorting. | |
| format | No | Output format: - "summary": Key event info (date, symbol, type-specific fields) - "full": Complete event data from FMP | summary |
| symbols | No | Comma-separated tickers to filter results (e.g., "AAPL,MSFT"). | |
| to_date | No | End date in YYYY-MM-DD format (default: today + 30 days). Requests may span more than 90 days; the tool splits them internally because FMP calendar endpoints accept max 90-day windows per call. | |
| from_date | No | Start date in YYYY-MM-DD format (default: today). | |
| event_type | No | Calendar type: - "earnings": Earnings dates with EPS estimates (default) - "dividends": Ex-dividend dates and amounts - "splits": Stock split dates - "ipos": Upcoming IPO dates - "all": All event types merged and sorted by date | earnings |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses internal date range splitting but omits authentication, rate limits, and read-only nature. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, each serving a purpose: purpose statement, capability, usefulness, behavioral note, and alternative tool. No redundancy, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complex tool with 6 params and no annotations; description covers core functionality, usage alternatives, and a key behavioral quirk. Output schema exists, so return format is not needed. Missing error handling or authorization hints, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all 6 parameters with full descriptions (100%). The description adds only the date splitting context for from_date/to_date, which is a minor addition beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it fetches corporate events (earnings, dividends, splits, IPOs) with symbol filtering. However, it does not distinguish itself from sibling tools like get_earnings_transcript, which might overlap in functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear alternative (get_portfolio_events_calendar) for portfolio-aware use, and notes date range splitting. Lacks guidance on when to use vs other event-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_insider_tradesB
Get insider buying/selling activity and summary statistics for a stock.
Fetches recent insider transactions and aggregate insider trading stats.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max trade rows to return in summary mode (default: 20). | |
| format | No | Output format: - "summary": Normalized recent trades and key stats - "full": Raw endpoint payloads | summary |
| symbol | Yes | Stock symbol (required, e.g., "AAPL"). | |
| use_cache | No | Use cached data when available (default: True). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It mentions fetching recent transactions and aggregate stats but does not clarify recency limits, caching behavior, or potential side effects beyond what is in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences. The first sentence clearly states purpose, though there is slight redundancy between the two sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters and an output schema, the description covers the core functionality. However, it lacks context on when to use different format options or how caching works, making it minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and each parameter has a description in the schema. The tool description does not add extra meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves insider buying/selling activity and summary statistics for a stock, specifying the resource and action. It distinguishes itself from sibling tools like get_institutional_ownership by focusing specifically on insider trades.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 such as get_institutional_ownership or fmp_fetch. There is no mention of prerequisites, optimal contexts, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_institutional_ownershipA
Get institutional ownership analytics for a stock.
Combines institutional holder-level data with aggregate ownership summary metrics to show which institutions are accumulating or reducing positions.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Optional filing year filter. | |
| limit | No | Max holder rows to return in summary mode (default: 20). | |
| format | No | Output format: - "summary": Normalized top holders and key ownership summary - "full": Raw endpoint payloads | summary |
| symbol | Yes | Stock symbol (e.g., "AAPL", "MSFT"). | |
| quarter | No | Optional filing quarter filter (1-4). | |
| use_cache | No | Use cached data when available (default: True). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It mentions combining data types but omits details on caching (use_cache param), rate limits, authentication, error handling, or output structure beyond 'summary' and 'full' formats. This leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. The first sentence gives the primary purpose, and the second adds relevant detail. Information is front-loaded and efficiently presented.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters and an output schema, the description adequately states what the tool returns but lacks guidelines on when to use it and behavioral details. It is functional but incomplete for an agent needing full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions, so baseline is 3. The tool description adds context about combining holder-level and aggregate data, which relates to the format parameter, but does not provide additional meaning beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves institutional ownership analytics for a stock, combining holder-level data with aggregate metrics. It names a specific resource and verb, and its purpose is distinct from siblings like get_etf_holdings or fmp_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for institutional ownership data but provides no explicit guidance on when to use this tool versus alternatives (e.g., get_etf_holdings for ETF data). No exclusions or conditions are mentioned, making the guidance minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_contextA
Get a one-call market snapshot across indices, sectors, movers, and events.
Useful for quick "what's happening in the market?" checks. Fetches major index moves, sector heatmap, top gainers/losers, most active names, and upcoming high-impact economic events.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: - "summary": Curated top items (top 5 movers/events) - "full": Same normalized fields with no item limits | summary |
| include | No | Optional section filter as JSON array or comma-separated string. Available sections: - "indices": S&P 500, Dow Jones, Nasdaq, Russell 2000 - "sectors": Sector performance heatmap - "gainers": Top daily gainers - "losers": Top daily losers - "actives": Most active by volume - "events": Upcoming high-impact economic events Default: all sections. | |
| use_cache | No | Use cached data when available (default: True). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses what data is fetched (indices, sectors, movers, events) and parameter effects (format limits, section filtering, caching). Lacks details on data staleness or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded paragraphs. First sentence conveys purpose; second paragraph adds operational detail. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 optional parameters, no required inputs, and presence of output schema, the description sufficiently covers tool purpose and parameter usage. Minor gap: no mention of performance or data currency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description reaffirms parameter effects already in schema (e.g., format controls item limits, include selects sections), adding minimal extra meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Get a one-call market snapshot across indices, sectors, movers, and events', clearly specifying the verb, resource, and scope. It distinguishes from siblings (e.g., get_news, get_sector_overview) by offering a comprehensive overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Useful for quick "what's happening in the market?" checks', indicating when to use the tool. However, it does not mention when not to use or provide explicit alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_newsA
Fetch news articles for stocks or the broad market.
Three modes: stock-specific news, general market news, and company press releases. Requires symbols for stock and press modes. Note: For portfolio-aware auto-fill, use get_portfolio_news on portfolio-reads-mcp.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | News source: - "stock": Per-symbol news articles (default) - "general": Broad market news (symbols ignored) - "press": Official company press releases | stock |
| limit | No | Max articles to return, 1-50 (default: 10). | |
| format | No | Output format: - "summary": Headline, date, source, snippet per article - "full": Complete article data | summary |
| quality | No | Source quality filter (default: "trusted"): - "trusted": Wire services + credible journalism (default) - "wire": Official press releases only (BusinessWire, PR Newswire, etc.) - "journalism": Credible financial journalism only (WSJ, Bloomberg, etc.) - "all": No filtering — includes all sources | trusted |
| symbols | No | Comma-separated tickers (e.g., "AAPL,MSFT"). Required for "stock" and "press" modes. | |
| to_date | No | End date in YYYY-MM-DD format (optional). | |
| from_date | No | Start date in YYYY-MM-DD format (optional). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. It discloses that symbols are required for stock and press modes, and that general mode ignores symbols. While it doesn't cover rate limits or error handling, the operational behavior (modes and parameter dependencies) is clear. No contradictions with annotations (none exist).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise and well-structured: a one-sentence purpose, a bulleted list of modes, and a note about an alternative tool. Every sentence adds value and the description is front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (stated in context signals), the description does not need to explain return values. With 7 parameters fully described in the schema, the description covers usage modes and alternatives, providing sufficient context for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds minimal extra meaning beyond the schema; it summarizes modes and symbol requirements, but the schema already documents all parameters comprehensively with detailed descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Fetch news articles for stocks or the broad market' and enumerates three specific modes (stock-specific, general market, company press releases). It distinguishes itself from the sibling tool get_portfolio_news by noting the portfolio alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes the three modes and when to use each, including the requirement of symbols for stock and press modes. Provides a direct alternative tool (get_portfolio_news) for portfolio-aware auto-fill, guiding the agent away from this tool in that context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_performance_windowsA
Get compact benchmark-relative price-performance windows.
Use this for historical-coincidence evidence when a workflow needs 3-5 outperformance/underperformance periods. It fetches adjusted historical prices for the stock and benchmark, aligns common trading dates, computes rolling returns, and returns only the largest non-overlapping windows. This avoids raw historical-price CSV parsing for ordinary stock-move analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Stock symbol to analyze. | |
| to_date | No | Optional end date (YYYY-MM-DD). Defaults to today. | |
| direction | No | both, outperformance, or underperformance. | both |
| from_date | No | Optional start date (YYYY-MM-DD). Defaults to lookback_years ago. | |
| use_cache | No | Whether to use cached FMP data. | |
| max_windows | No | Maximum windows to return (1-10). | |
| window_days | No | Common-trading-day window length for each return slice. | |
| lookback_years | No | Default lookback when from_date is omitted. | |
| benchmark_symbol | No | Benchmark symbol for relative returns (default SPY). | SPY |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description explains internal steps (fetch, align, compute, filter) but omits auth or rate limits, which are not critical for this read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences front-loading purpose, usage, and internal steps with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Describes algorithm and output (non-overlapping windows); output schema exists, so additional detail is not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; description adds context on overall algorithm but not parameter-specific details beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool fetches adjusted prices, aligns dates, computes rolling returns, and returns non-overlapping windows, distinguishing it from raw CSV parsing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends use for historical-coincidence evidence needing 3-5 periods, but does not specify when not to use or compare to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sector_overviewA
Get sector or industry performance and valuation overview.
Combines daily performance snapshot and P/E ratio snapshot into a unified heatmap view. Supports both sector-level and industry-level granularity.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Snapshot date in YYYY-MM-DD format (optional, defaults to latest). | |
| level | No | Granularity level: - "sector": GICS sector level (default, ~11 sectors) - "industry": More granular industry level | sector |
| format | No | Output format: - "summary": Sector heatmap with performance + valuation - "full": Complete raw data from all endpoints | summary |
| sector | No | Filter to one sector or industry (e.g., "Technology", "Energy", "Healthcare"). If not provided, returns all sectors/industries. | |
| symbols | No | Optional symbols as JSON array or comma-separated string for per-stock P/E comparison mode. Example: '["AAPL","MSFT","NVDA"]' or "AAPL,MSFT,NVDA". Cannot be combined with `sector`. | |
| use_cache | No | Use cached data when available (default: True). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It mentions combining daily performance and P/E ratio into a heatmap and supports granularity. However, it does not disclose data source, staleness, caching behavior, or limitations. The use_cache parameter is in the schema but not highlighted in the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, concise and front-loaded. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and full parameter documentation, the description is mostly complete. It explains the tool's purpose and output format. However, it could briefly mention that date defaults to latest and that sector/symbols are filters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 does not add meaning beyond the schema; it only provides a general overview of the output. No specific parameter details are elaborated in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'sector or industry performance and valuation overview'. It specifies that it combines daily performance and P/E ratio into a heatmap, distinguishing it from sibling tools like get_price_performance_windows or get_market_context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for obtaining a unified sector/industry heatmap, but does not explicitly state when to use this tool versus alternatives (e.g., compare_peers or get_market_context). No exclusion criteria or scenarios are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_technical_analysisA
Get composite technical analysis for a single stock or ETF.
Fetches multiple technical indicators and provides trend direction, momentum signals, volatility analysis, and support/resistance levels with an overall buy/sell signal.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: - "summary": Current signals and key values - "full": Signals plus complete time series data | summary |
| last_n | No | Optional cap for recent points per indicator in full mode. | |
| output | No | Output mode for full time series: inline or file. | inline |
| symbol | Yes | Stock or ETF symbol to analyze (e.g., "AAPL", "SPY"). | |
| timeframe | No | Candle timeframe for analysis: - "1day": Daily (default, most common) - "1hour", "4hour": Intraday swing - "1min", "5min", "15min", "30min": Intraday scalping | 1day |
| use_cache | No | Use cached indicator data when available (default: True). | |
| indicators | No | Optional indicator subset as JSON array or comma-separated string. Options: "sma", "ema", "rsi", "adx", "williams", "macd", "bollinger". Default: all indicators. | |
| period_overrides | No | Override default period lengths. Example: {"sma_periods": [10, 50, 200], "rsi_period": 21} |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 outlines the type of analysis provided (trend, momentum, volatility, support/resistance, buy/sell signal) but does not mention caching behavior (though the use_cache parameter hints at it), rate limits, or error handling. The description is adequate but leaves some behavioral aspects implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: only two sentences that convey the core functionality. Every sentence is informative, with no redundant or extraneous information. It is optimally sized for an agent to quickly grasp the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, output schema exists), the description provides a solid overview of what is returned (trend, momentum, volatility, support/resistance, buy/sell signal). The existence of an output schema reduces the need to detail return values. However, the description could mention the available output modes (full/summary) and timeframe options to enhance completeness. Overall, it is well-rounded but leaves a few details to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 does not add significant meaning beyond the parameter descriptions already in the schema. It mentions 'multiple technical indicators' but does not elaborate on parameters like format, last_n, output, or indicators. Thus, it provides minimal additional value for parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 composite technical analysis for a single stock or ETF.' It specifies the resource (single stock/ETF) and the action (get composite technical analysis). The sibling tools include generic fetch and market context tools, making this tool distinct as a focused technical analysis provider.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus its siblings (e.g., fmp_fetch, get_market_context). There is no mention of prerequisites, alternatives, or conditions that would make this tool more appropriate than others. The agent must infer usage from the tool name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_estimate_revisionsA
Screen a ticker universe for material estimate momentum.
Compares latest estimates against a lookback snapshot (days ago) and
returns per-ticker deltas/direction. By default, trivial revisions are
filtered out unless either EPS changed by at least 1% of baseline consensus
or revenue changed by at least 0.5% of baseline consensus. If tickers is
omitted, screens the full stored universe.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window for baseline comparison (default: 30). | |
| period | No | Estimate horizon: - "quarter": Quarterly estimates (default) - "annual": Annual estimates | quarter |
| tickers | No | Optional tickers as JSON array or comma-separated string. Example: '["AAPL","MSFT"]' or "AAPL,MSFT". | |
| direction | No | Filter direction: - "up": Positive estimate revisions only - "down": Negative estimate revisions only - "all": Return all directions (default) | all |
| min_eps_delta_pct | No | Minimum absolute EPS change as decimal fraction of baseline EPS consensus. Default 0.01 = 1%. | |
| include_immaterial | No | If true, return rows below materiality thresholds annotated with `is_material=false` instead of filtering them. | |
| min_revenue_delta_pct | No | Minimum absolute revenue change as decimal fraction of baseline revenue consensus. Default 0.005 = 0.5%. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries behavioral disclosure. It explains the comparison logic, materiality thresholds, filtering directions, and the effect of omitting tickers. However, it doesn't describe the return format or any side effects, though an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two paragraphs, front-loaded with purpose, and each sentence adds value. It could be more structured, but it's clear and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description competently covers all inputs, default behavior, materiality logic, and optional parameters. Given the output schema exists, return format is not needed. It is complete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description adds only marginal value beyond schema. It does provide context on default behavior and how thresholds work, but the parameter meanings are already clear from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool screens a ticker universe for material estimate momentum, compares latest estimates against a lookback snapshot, and returns per-ticker deltas/direction. It specifies default filtering criteria and optional parameters, making the purpose distinct from sibling tools like get_estimate_revisions or screen_stocks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to screen for estimate momentum) and details default behavior and parameter overrides. It doesn't explicitly state when not to use or mention alternative tools, but the sibling tool names provide indirect guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_stocksA
Screen stocks by fundamental criteria (sector, market cap, beta, dividend, etc.).
Searches the full universe of stocks and ETFs using financial filters. Combine multiple criteria to narrow results.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results (default: 50). | |
| format | No | Output format. Exposed as Literal["full", "summary"]; values are case-sensitive: - "summary": Key metrics per result (symbol, name, sector, market cap, price, beta) - "full": All available fields from the screener | summary |
| is_etf | No | Set to true to screen ETFs only, false for stocks only. | |
| sector | No | Sector filter (e.g., "Technology", "Healthcare", "Energy"). | |
| country | No | Country filter (e.g., "US", "GB", "JP"). | |
| is_fund | No | Set to true to screen funds only, false to exclude funds. | |
| beta_max | No | Maximum beta. | |
| beta_min | No | Minimum beta (market sensitivity). | |
| exchange | No | Exchange filter (e.g., "NASDAQ", "NYSE", "LSE"). | |
| industry | No | Industry filter (e.g., "Software", "Biotechnology"). | |
| price_max | No | Maximum stock price. | |
| price_min | No | Minimum stock price. | |
| volume_max | No | Maximum average daily volume. | |
| volume_min | No | Minimum average daily volume. | |
| dividend_max | No | Maximum annual dividend per share. | |
| dividend_min | No | Minimum annual dividend per share. | |
| market_cap_max | No | Maximum market capitalization in USD. | |
| market_cap_min | No | Minimum market capitalization in USD (e.g., 10000000000 for $10B). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Describes search and filtering behavior but does not explicitly state read-only nature, limitations, authentication, or rate limits. Adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no fluff. Efficiently communicates the tool's function and usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 18 parameters (none required) and existence of output schema, description adequately explains the tool's capability. Could be slightly more explicit about return format, but output schema covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. Description only lists a few criteria ('sector, market cap, beta, dividend') without adding meaning beyond the detailed schema descriptions. Baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Screen stocks by fundamental criteria' with examples, distinguishing from siblings like 'compare_peers' or 'screen_estimate_revisions'. Could be more specific about what 'screen' entails (filter and return results).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context: 'Searches the full universe of stocks and ETFs' and 'Combine multiple criteria to narrow results.' No explicit when-not or alternatives, but is adequate for a filtering tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose, covering specific financial data domains (e.g., profile, transcripts, insider trades, economics, screening). Even overlapping areas like fmp_profile and fmp_fetch are differentiated by description.
Tool names are inconsistent: some use the 'fmp_' prefix (fmp_fetch, fmp_describe) while others use 'get_' (get_news, get_earnings_transcript) or 'screen_' (screen_stocks). This mixed convention may confuse an agent.
With 21 tools covering a broad range of financial data (company, market, technical, events, ownership, etc.), the count is well-scoped for a comprehensive financial data MCP server.
The tool surface covers major financial analysis areas: profile, peers, market context, price performance, technical, sector, news, events, earnings transcripts, insider trades, institutional ownership, ETF holdings, economic data, and screening. The generic fmp_fetch endpoint fills any remaining gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
SEC filing intelligence for AI agents. Financials, screening, peer comparison for 5,000+ companies.
The financial MCP for AI agents - 90+ financial tables, SEC filings, signals, alt-data.
US stock market data for AI agents: SEC filings, financials, insider trades, 13F, options, macro.
Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools.
Related MCP Servers
- AlicenseCqualityAmaintenanceEnables AI assistants to access and analyze financial data including stock information, company fundamentals, and market insights through the Financial Modeling Prep API.100375142TypeScriptApache 2.0
- AlicenseNot gradedqualityDmaintenanceProvides AI assistants access to comprehensive financial data including real-time stock quotes, company fundamentals, financial statements, market analysis, economic indicators, and 250+ financial tools across 24 categories from Financial Modeling Prep API.375Apache 2.0
- FlicenseAqualityFmaintenanceProvides financial data from Financial Modeling Prep for AI-assisted investment research, including company profiles, financial statements, and analyst ratings. It features high-level workflow tools for market analysis and atomic tools for deep dives into valuation and institutional ownership.21
- FlicenseAqualityDmaintenanceProvides AI assistants with real-time stock prices, financial statements, SEC filings, and analytical tools like DCF valuation and ratio analysis.14
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/henrysouchien/fmp-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server