Is there an MCP server for fund and ETF data?
Yes: https://fundfactsapi.com/api/mcp is a remote MCP server with seven read-only fund and SCPI tools and interactive cards in Claude and ChatGPT. Sign in with your account (OAuth) there, or send a bearer API key elsewhere. Setup for every client.Published September 12, 2026 · Updated October 13, 2026 · by FundFacts APIShort answer
Yes. FundFacts API runs a remote MCP server over Streamable HTTP at https://fundfactsapi.com/api/mcp. It authenticates with your FundFacts account (OAuth 2.1) or the same bearer API key as the REST API, and exposes get_fund (ISIN → full factsheet JSON), search_funds (name → ISINs, free), compare_funds, analyze_portfolio, fund_overlap, get_scpi and search_scpi. In ChatGPT and in Claude on the web and desktop, results render as interactive cards. Cursor, Codex, VS Code and any MCP-capable framework use it with a URL and one header; Claude Code signs in with /mcp or takes the header; claude.ai, Claude Desktop and ChatGPT sign in with the account.
The MCP server guide is the complete reference: every tool with its inputs and cost, the cards, setup for each client, billing, privacy and troubleshooting. In short:
The server
| URL | https://fundfactsapi.com/api/mcp |
| Transport | Streamable HTTP (stdio clients: npx -y mcp-remote https://fundfactsapi.com/api/mcp --header "Authorization: Bearer ffk_...") |
| Auth | Authorization: Bearer ffk_... header (free key at /signup); connectors without a header field (claude.ai, Claude Desktop, ChatGPT) sign in with the FundFacts account (OAuth 2.1, PKCE) |
| Cost | One request per fund found, as for REST, on every plan including Free; searches and the example fund are free |
| Cards | Interactive cards (MCP Apps) in ChatGPT and in Claude on the web and desktop; text in Claude Code |
The MCP server exposes seven tools, each counted like the REST endpoint it wraps: get_fund (ISIN → the full factsheet payload), search_funds (name → ISINs, free), compare_funds (side-by-side table for several ISINs), analyze_portfolio (weighted look-through of a list of positions, Starter and above), fund_overlap (shared holdings between funds, Starter and above), get_scpi (French SCPI data by name or ISIN) and search_scpi (SCPI name → matches, free), plus a tour prompt that explains the service on the example fund IE00B4L5Y983, which is not counted. Every tool only reads data. Authentication is either your FundFacts account (OAuth 2.1 with PKCE, the sign-in the claude.ai, Claude Desktop and ChatGPT connectors run) or the same bearer API key as the REST API, sent as an Authorization header by editors, CLIs and frameworks. The MCP server guide has the full tool reference, setup for every client and troubleshooting.
Universal configuration
Most code editors and agent frameworks accept this JSON (Cursor, Claude Code, Cline and others; Windsurf names the key serverUrl). Claude Desktop and claude.ai use the Connectors screen instead (Customize → Connectors), with the plain URL https://fundfactsapi.com/api/mcp and an account sign-in. The connector signs in with your FundFacts account (OAuth 2.1, PKCE): a consent screen opens in the browser, the connection then counts against the same plan and quota as an API key, and it appears in the dashboard, where you can disconnect it at any time. In ChatGPT and in Claude on the web and desktop, tool results also render as cards (fund, comparison, portfolio look-through, overlap, SCPI) next to the answer. No API key goes into the URL; for code and CLIs the Authorization header stays the recommended form.
json{"mcpServers": {"fundfacts": {"url": "https://fundfactsapi.com/api/mcp","headers": { "Authorization": "Bearer ffk_..." }}}}
Client-specific steps: ChatGPT, Claude, Claude Code, Cursor, Codex, VS Code / Copilot, LangChain, OpenAI Agents SDK, Vercel AI SDK, n8n.
What a tool call returns
get_fund returns the same envelope as GET /funds/{isin}: name, cached, expiresAt and a data object with key facts, fees, the 1–7 risk indicator, a rule-based profile, holdings, sector, country and asset breakdowns, calendar and annualised returns, a monthly series, risk statistics, SFDR article, PRIIPs costs and dataAsOf. compare_funds flattens several payloads into one table so the model can answer "which is cheaper / more concentrated / more US-heavy" without arithmetic on its side.
Why an MCP server rather than scraping in the agent
Agents that browse fund-house sites hit cookie walls, PDFs and per-issuer layouts, and they burn tokens on parsing. The MCP server returns one normalised JSON shape for every fund house, with a date, and the companion kit gives coding agents the same reference for writing code against it.
Paid plans include an AI companion kit generated from the live field reference: an AGENTS.md with every endpoint, field, rule and a reference client; a Cursor rule; a Claude Code skill; the OpenAPI spec and TypeScript types, with your key baked in or read from an environment variable. Download it from the dashboard; the public edition without a key is at /llms-full.txt.
Verify it yourself
The demo endpoint returns the live payload for a fund that is already in the store, without a key. Everything on this page can be checked against it.bashcurl -s https://fundfactsapi.com/api/v1/demo/funds/IE00B4L5Y983 | jq '{name, asOf: .data.dataAsOf, ter: .data.headlineMetrics.ter, risk: .data.riskRating, top: .data.topHoldings[:3]}'