FinancialFilings

eu.financialreportsv1.4.105更新于 Oct 9, 2026

Regulatory filings, XBRL financials and company data from securities regulators worldwide

已验证Streamable HTTP可网页运行Data & AnalyticsFinanceKnowledge & Memory

概览

AI 生成的概览

让助手查询全球监管机构提交的监管文件、XBRL 财务数据和公司信息。

功能
这是 FinancialFilings API 的远程 MCP 服务器,默认提供 16 个精选工具,用于公司搜索与档案、标准化财务数据、文件列表与详情、文件 Markdown 获取、单份文件内关键词搜索、ISIN 查询与双重上市,以及参考分类体系。设置 MCP_FULL_SURFACE=1 可扩展到 46 个工具,增加 ISIC 层级、参考数据、自选清单、Webhook 订阅和按交易所的证券列表。配套技能可指导多公司财务对比和文件监控流程。
适用场景
当助手需要回答关于上市公司监管文件、年报、财务指标或 ISIN 的问题时使用,例如总结 10-K 风险因素、比较多家公司的净债务,或按行业筛选公司。
运行要求
远程 Streamable HTTP 端点 mcp.financialfilings.com/mcp,无需本地运行时或软件包。需要免费的 FinancialFilings 账户,客户端须在浏览器中完成 OAuth 登录(PKCE 加动态客户端注册)。客户端不保存 API 密钥或机密。
安装前请注意
连接时会打开浏览器,使用 FinancialFilings 账户进行 OAuth 登录;访问令牌会在每次调用时转发给上游 API。文件与公司数据为只读,但完整的 46 工具集包含会创建或修改数据的自选清单和 Webhook 订阅。文档说明注册失效时需要移除并重新添加连接器。

安装

在 SourceWeft 中

  1. 打开 控制台中的 FinancialFilings,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "mcp-server": {
      "type": "http",
      "url": "https://mcp.financialfilings.com/mcp"
    }
  }
}

README

FinancialFilings MCP Server

[License: MIT] [Python] [MCP Spec] [Status]

Official Model Context Protocol (MCP) server for the FinancialFilings API. Direct access from Claude (and any MCP-compatible client) to regulatory filings, financial data, and corporate information from listed companies worldwide. 16 curated tools by default (set MCP_FULL_SURFACE=1 for the full 46-tool surface). Free for any FinancialFilings account. Sourced from official regulators.


Quick start

If you're an analyst, researcher, or anyone who wants to ask Claude about public-company filings:

  1. Create a free account at financialfilings.com — the MCP connector is free for any FinancialFilings user. No paid plan required.
  2. Add the connector in your MCP client — pick yours under Connect your client below. The two most common:
    • Claude.ai / Claude Desktop: Settings → Connectors → Add custom connector → URL: https://mcp.financialfilings.com/mcp
    • Claude Code: claude mcp add --transport http financialreports https://mcp.financialfilings.com/mcp
  3. Sign in with your FinancialFilings account when prompted. That's it.

Full setup walkthrough with screenshots: financialfilings.com/integrations/claude/.


Connect your client

This is a remote MCP server — Streamable HTTP with OAuth (PKCE + Dynamic Client Registration). There is no API key to copy and no secret to store: connecting opens a browser sign-in with your FinancialFilings account.

Endpoint: https://mcp.financialfilings.com/mcp

Find your client below. If it isn't listed, use the Generic block at the end — the endpoint and OAuth flow are identical everywhere; only the config file differs.

Claude.ai / Claude Desktop

Settings → Connectors → Add custom connector → URL: https://mcp.financialfilings.com/mcp. Sign in when prompted.

Claude Code

bash
claude mcp add --transport http financialreports https://mcp.financialfilings.com/mcp

Run /mcp in-session to complete the browser sign-in.

Codex (OpenAI)

Codex uses TOML. Add to ~/.codex/config.toml (or a project .codex/config.toml):

toml
[mcp_servers.financialreports]url = "https://mcp.financialfilings.com/mcp"

Then authenticate — Codex runs the OAuth browser flow for servers that support it:

bash
codex mcp login financialreports

Cursor

~/.cursor/mcp.json (global) or .cursor/mcp.json (per project):

json
{  "mcpServers": {    "financialreports": { "url": "https://mcp.financialfilings.com/mcp" }  }}

OAuth runs in the browser on first use.

Kilo Code

Project .kilocode/mcp.json (or the global MCP settings file):

json
{  "mcpServers": {    "financialreports": {      "type": "remote",      "url": "https://mcp.financialfilings.com/mcp"    }  }}

opencode

opencode.json:

json
{  "$schema": "https://opencode.ai/config.json",  "mcp": {    "financialreports": {      "type": "remote",      "url": "https://mcp.financialfilings.com/mcp",      "enabled": true    }  }}

Gemini CLI

~/.gemini/settings.json:

json
{  "mcpServers": {    "financialreports": { "httpUrl": "https://mcp.financialfilings.com/mcp" }  }}

Hermes

mcp_servers in your Hermes config (YAML):

yaml
mcp_servers:  financialreports:    url: "https://mcp.financialfilings.com/mcp"    auth: oauth

Generic (any MCP client)

Most MCP-aware harnesses accept a mcpServers object. Point it at the endpoint over Streamable HTTP:

json
{  "mcpServers": {    "financialreports": {      "type": "streamable-http",      "url": "https://mcp.financialfilings.com/mcp"    }  }}

Clients with native remote-MCP OAuth (Claude, Cursor, Windsurf, VS Code, opencode, Codex via codex mcp login) run the sign-in in a browser automatically. For OpenClaw and other MCP-aware harnesses, use this block with the connector URL and complete OAuth when prompted — see your client's own MCP configuration docs for the exact file location.

Troubleshooting: "Client Not Registered"

If signing in sends you to a page titled Client Not Registered — "The client ID … was not found in the server's client registry" — your client is presenting a registration this server no longer has.

Remove the connector and add it again. That is the only thing that resolves it, and it takes a few seconds:

ClientWhat to do
ChatGPT / OpenAISettings → Connectors → remove FinancialFilings (listed as FinancialReports if you connected before the rename) → add it back with https://mcp.financialfilings.com/mcp and sign in again.
Claude.ai / Claude DesktopSettings → Connectors → remove FinancialFilings (listed as FinancialReports if you connected before the rename) → re-add and sign in again.
Claude Code / Codex / Cursor / opencodeRemove and re-add the server (e.g. claude mcp remove financialreports, then re-add), or run the client's login command again (codex mcp login financialreports).

Two things the error page itself doesn't tell you:

  • It won't fix itself, and retrying won't help. Sign-in happens in your browser, so your client never learns it failed — it waits for a callback that never arrives and simply replays the same dead ID. Restarting doesn't help either: hosted connectors (ChatGPT, Claude.ai) keep the registration server-side, so only removing the connector clears it.
  • Nothing is wrong with your account and no data is affected. Re-adding creates a fresh registration and everything works as before.

If you were affected on or after 14 July 2026: a cache failover dropped stored client registrations. Sign-ins have worked normally since — only connectors added before that date need the remove-and-re-add above.


What you get

16 LLM-callable tools by default — the curated surface analysts actually use:

DomainToolsUse cases
Companies5Search by name/ticker/ISIN, retrieve full company profiles, get normalized financials, predict next annual report, batch-resolve a list of identifiers to company IDs
Filings4List, retrieve, fetch markdown content (capped at 150K chars), keyword-search inside a single filing
ISINs2Lookup by ISIN, list dual-listings
Reference taxonomy2Filing categories and filing types
Guides3Filing-type taxonomy, ISIC industry classification, and markdown-fetch strategy — callable references for tool-only clients that can't read MCP resources

Set MCP_FULL_SURFACE=1 to restore the full 46-tool surface: the ISIC section/division/group/class hierarchy, the rest of the reference data (countries, languages, sources, line-item definitions, filing history), per-user watchlists, webhook subscriptions, the company-merge audit feed, and per-exchange security listings.

The shipped surface is generated from a committed, reviewed snapshot of the FinancialFilings OpenAPI schema (scripts/openapi.snapshot.json, pinned via FR_PIN_SCHEMA=1 in CI and the Docker build), so it's deterministic and never drifts silently on a rebuild.

Companion skill

The repository ships an Agent Skill — financial-filings-research — that teaches Claude how to compose these tools into the workflows analysts actually run: company lookup, filing summarization, multi-company financial comparison, ISIC industry screening, and filings monitoring. It activates automatically when the user mentions a company name, ticker, ISIN, filing type, or financial metric.


Architecture

┌──────────────────┐     OAuth (PKCE + DCR)      ┌──────────────────┐│  Claude / MCP    │  ───────────────────────►   │  AWS Cognito     ││  client          │                              │  (user pool)     │└────────┬─────────┘                              └────────┬─────────┘         │  Streamable HTTP /mcp                           │         │  + bearer token                                 │         ▼                                                 │┌──────────────────┐     verify subscription tier          ││  This server     │  ───────────────────────────────────► ││  (FastAPI +      │                                       ▼│   FastMCP)       │     proxy bearer token         ┌──────────────────┐│                  │  ─────────────────────────►    │  api.            ││  16 tools        │                                │  financial-      ││  generated from  │                                │  reports.eu      ││  OpenAPI schema  │                                │  (first-party)   │└──────────────────┘                                └──────────────────┘

Key design decisions:

  • Tools are generated, not hand-written. scripts/generate_mcp_tools.py reads the OpenAPI schema — pinned to a committed snapshot via FR_PIN_SCHEMA=1 in CI and the Docker build — and emits src/financial_reports_mcp.py. The default surface is curated to a focused 16-tool set; MCP_FULL_SURFACE=1 emits the full surface. Note that _PRUNED_EXCLUDE in the generator is a denylist, so a new upstream endpoint joins the curated surface unless the snapshot-refresh PR explicitly excludes it.
  • Bearer-token proxy, not session storage. The user's Cognito access token is forwarded to the upstream API on every call. No conversation data, no API responses cached server-side.
  • Subscription gating in-process. A 15-second LRU cache holds Cognito sub → tier mappings to avoid hammering the FR API on every tool call.
  • Same-origin asset proxy. /favicon.ico, /icon.png, /icon-{32,192,512}.png are served from this origin (proxied + cached from CDN) so connector UIs and the /consent page render without cross-origin CSP friction.

MCP spec compliance

Compliant with the MCP 2025-11-25 specification:

  • ✅ Streamable HTTP transport — POST /mcp with MCP-Protocol-Version echo, 400 on unsupported versions
  • ✅ OAuth 2.0 — RFC 7591 dynamic client registration + PKCE S256
  • ✅ RFC 9728 protected-resource metadata — both at /.well-known/oauth-protected-resource and /.well-known/oauth-protected-resource/mcp
  • ✅ Tool annotations — every tool has title plus readOnlyHint or destructiveHint
  • ✅ outputSchema — six structured-content tools (companies_list, companies_retrieve, companies_financials_retrieve, filings_list, filings_retrieve, isins_list)
  • ✅ Origin validation — 403 on unrecognized origins, 401 with proper WWW-Authenticate header for unauthenticated requests
  • ✅ Multi-size connector icons — 32×32, 192×192, 512×512 PNG advertised in initialize response

CI verifies all of the above on every PR.


Tool catalog

The list below is regenerated by scripts/generate_mcp_tools.py on every build. Do not hand-edit between the markers.

Companies

  • companies_financials_retrieve — Retrieve Company Financials
  • companies_list — List Companies
  • companies_next_annual_report_retrieve — Predict Next Annual Report
  • companies_resolve_create — Resolve Companies by Identifier (Batch)
  • companies_retrieve — Retrieve Company Details

Filing Categories

  • filing_categories_list — List Filing Categories

Filing Types

  • filing_types_list — List Filing Types

Filings

  • filings_list — List Filings
  • filings_markdown_retrieve — Retrieve Filing Markdown
  • filings_retrieve — Retrieve Filing Details

ISINs

  • isins_list — List ISINs
  • isins_retrieve — Retrieve ISIN

Example prompts

Once connected, try:

  • "Find Apple's most recent 10-K and summarize the risk factors that changed year-over-year."
  • "Get full company details for ASML."
  • "Compare net debt for Iberdrola, Engie, Enel, RWE for the latest fiscal year."
  • "List EU airlines that filed annual reports in the last 6 months."
  • "Show me insider-transaction filings at Tesla in the last 30 days."
  • "Alert me when any company in my watchlist files an 8-K."
  • "What's the LEI for Volkswagen AG?"

Self-hosting

Self-hosting requires standing up your own AWS Cognito user pool and is primarily useful for forking + adapting to a different upstream API. For the FinancialFilings API specifically, the hosted server at mcp.financialfilings.com is the supported path.

Detailed self-hosting docs (Docker, Cognito setup, env vars, CDN/icon configuration): docs/SELF-HOSTING.md.


Development

One-shot bootstrap (venv → deps → env check → generate → run):

bash
cp .env.example .env   # fill in Cognito values first; see docs/SELF-HOSTING.mdmake dev               # creates .venv, installs, validates env, regenerates, serves on :8000# MCP endpoint: http://localhost:8000/mcp

Or step by step:

bash
# 1. Setuppython3 -m venv venvsource venv/bin/activatepip install -r requirements.txt -r requirements-test.txt
# 2. Configurecp .env.example .env  # then fill in Cognito values; see docs/SELF-HOSTING.md
# 3. Generate the MCP module from the OpenAPI schemapython scripts/generate_mcp_tools.py
# 4. Run testspytest
# 5. Run locallypython -m uvicorn src.financial_reports_mcp:app --host 0.0.0.0 --port 8000# MCP endpoint: http://localhost:8000/mcp

CI runs the full unit suite plus a Docker-Compose end-to-end test (with Redis) on every PR. See .github/workflows/ci.yml.

Local development with a personal API key

For iterating on the generator, tools, or prompts against a real backend without going through the Cognito OAuth dance every restart, the server supports a dev-only DEV_MODE_API_KEY env var. When set, JWT validation is skipped on the existing /mcp endpoint (both the subscription_required and _authorize_or_raise paths) and the key is forwarded as X-API-Key to API_BASE_URL.

This is a maintainer convenience, not a production auth path. The module refuses to import if MCP_BASE_URL contains a production hostname (mcp.financialfilings.com).

  1. Add your personal FinancialFilings API key to .env:
    DEV_MODE_API_KEY=fr_pat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxMCP_BASE_URL=http://localhost:8000
  2. Regenerate and start the server (Cognito vars must still be set — the OAuth proxy module loads even when the bypass is active):
    bash
    make regenpython -m uvicorn src.financial_reports_mcp:app --host 0.0.0.0 --port 8000 --reload
  3. Point Claude Code at the local instance:
    bash
    claude mcp add --transport http financialreports-local http://localhost:8000/mcp

Production headless / API-key auth (parallel /mcp/apikey endpoint with per-request X-API-Key) is tracked in #28 and is a separate feature from this dev-mode shortcut.

Common tasks

bash
# Regenerate tools after the OpenAPI schema changespython scripts/generate_mcp_tools.py
# Run only fast unit testspytest tests/test_*.py
# Run end-to-end tests with Redis (requires Docker)make e2e

Evaluating changes

This server is benchmarked by financial-reports/mcp-evals (private). Cross-model scorecards (task success, tool-selection accuracy, path consistency, tokens/turns/latency) live there, not here. Before merging changes to tool descriptions, Prompts, or the generator, run the harness against either prod or a local dev MCP and compare the scorecard.

What lives in this repo: deterministic prompt-registration tests at tests/eval/ — fast, no API keys, run on every PR. See tests/eval/README.md for the cross-repo workflow.


Security

This server handles OAuth flows and bearer tokens. Found a vulnerability? Please don't open a public issue. See SECURITY.md for the responsible-disclosure process.

Server-side guarantees:

  • Bearer tokens are proxied per-request, never logged or persisted.
  • HTTPS is enforced (HTTP redirects to HTTPS at the edge).
  • CSP is applied to HTML responses (default-src 'none', only same-origin assets allowed).
  • Origin validation rejects requests from unrecognized origins.
  • All cryptographic operations rely on standard library + AWS SDKs; no custom crypto.

Contributing

Contributions welcome. See CONTRIBUTING.md for development setup, the regenerate→test→PR workflow, and what kinds of changes are welcome (tests, docs, generator improvements, hand-tuned tool descriptions in scripts/generate_mcp_tools.py) versus what gets rejected (hand-edited src/financial_reports_mcp.py — it's auto-generated and overwritten on every build).


Project status

  • Production: live at https://mcp.financialfilings.com/mcp
  • MCP Directory: submitted for inclusion (May 2026)
  • Spec compliance: MCP 2025-11-25
  • Tested with: Claude.ai, Claude Code, Claude Desktop, Cursor, Windsurf. Config snippets also provided for Codex, Kilo Code, opencode, Gemini CLI, and Hermes (see Connect your client).

License

MIT — © FinancialReports.


Acknowledgments

Special thanks to @itisaevalex for the original community-built MCP server, which served as the proof-of-concept that motivated this official version.

Built on FastMCP, FastAPI, and the Model Context Protocol.

来源:README.md,提交 b8c89cf

工具

0
工具元数据尚未被收录。

版本历史

1
  1. v1.4.105最新Oct 9, 2026