Fmp Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Fmp Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.
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 trackingFundamental 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 sectionsStock 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 allocationTechnical Analysis
get_technical_analysis — Composite signals from 7 indicators (SMA, EMA, RSI, MACD, Bollinger, ADX, Williams %R) with buy/sell scoringAnalyst Sentiment
get_estimate_revisions — Historical EPS/revenue estimate revision trendsscreen_estimate_revisions — Screen for estimate momentum across a universe of stocksData 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 statspip install fmp-mcpOptional local estimate storage (requires PostgreSQL; hosted MCP reads do not):
pip install "fmp-mcp[estimates]"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)The installed fmp-mcp distribution owns the fmp import. It does not search for a Risk checkout, load a checkout .env, or import application policy. The source package lives at Risk's fmp-mcp/. Install it from the Risk root with the single editable list, .venv/bin/python -m pip install --no-deps -r requirements-local.txt, which also installs brokerage-connect. Dev tools come from requirements-dev.txt.
Applications must explicitly configure the client once at startup before any network fetch. An unconfigured client refuses dispatch and names the required configure_client(...) call. Applications can bind these callbacks:
fmp.client.configure_client(budget_guard=..., event_observer=...).The guard accepts fn, args, kwargs plus provider/operation/budget metadata. The observer receives (event, endpoint, **details), where event is success (duration_ms, status), rate_limit, error (error), plan_limit (error), or cache_hit (params). Explicit configure_client() selects the public default: fmp.spend writes one machine-wide API spend-ledger row per network call and a zero-call cache_hit row per cache-answered request (hank-model-authority), refuses a call whose spend ceiling is already met with SpendCeilingExceeded, and rate limits and errors go to native Python logging. A host that passes its own budget_guard owns metering and nothing in fmp.spend runs. The public fmp-mcp / python -m fmp.server entrypoint selects the default policy before serving tools.
spot_fx_rate=...). Metric resolvers return the existing structural peers/source/to_dict() result; discovery returns ticker strings. Expected policy failures raise PeerSelectionError. Standalone discovery uses FMP stock_peers; metric-context selection without application policy asks for explicit peers. Standalone non-USD conversion reads the latest daily close of FMP's <currency>USD` pair. The optional FX callback returns a currency-to-USD rate.
Risk process entrypoints call fmp_runtime.configure() after environment hydration to bind all five callbacks; logging, billing, peer selection, and exchange-mapping policy remain application code. bootstrap_env.bootstrap() only hydrates environment and never imports FMP or application policy. scripts/run_fmp_server.py owns Risk credential hydration and policy setup before invoking the installed fmp.server.run() (which preserves the caller's policy). Risk-only wrappers live in utils/fmp_compat.py and utils/fmp_fx.py, and the local collector lives in scripts/snapshot_estimates.py.
The source retains the Hank-only transcript_kpi_fetcher.py and manifest_source_dispatcher.py; public distribution sync excludes them. Their application consumers require the separately installed named industry and value-semantics libraries. Sync copies source bytes without vendoring or rewriting imports.
fmp-mcpOr register the installed package with Claude Code from any directory:
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" }
}
}
}| 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 |
docs/reference/FMP_ENDPOINTS.md — registered endpoint catalogdocs/reference/MCP_SERVERS.md — server registration and troubleshooting~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.