Fund and ETF data MCP server: seven read-only tools for assistants and agents
Yes, there is an MCP server for fund and ETF data: FundFacts API runs one at https://fundfactsapi.com/api/mcp. It is a remote server over Streamable HTTP with seven read-only tools that look up, search, compare and look through UCITS funds, ETFs, money-market funds and French SCPIs by ISIN, ticker or name, from the fund houses' own documents. Clients sign in with a FundFacts account (OAuth) or send an API key, on every plan including Free.Published October 6, 2026What the server is
A remote MCP server (Model Context Protocol, the open standard AI apps use to call tools) at https://fundfactsapi.com/api/mcp: nothing to install or host. It reads the same 24-hour store as the REST API, with figures from each fund house's factsheet, KID, holdings and NAV files and dataAsOf, the date of the figures.
- Authentication: Claude, ChatGPT and Claude Code sign in with the FundFacts account (OAuth 2.1, PKCE, dynamic client registration); other clients send an API key as
Authorization: Bearer ffk_…. OAuth tokens only work on the MCP server. - Cards: in ChatGPT and in Claude on the web and desktop, results render as interactive cards (MCP Apps); elsewhere, the same figures come as text.
The seven tools
All seven only read data. A fund nobody asked for in the last 24 hours is read from its documents on demand, typically in 15–90 seconds.
| Tool | What it does | Counted | Plans |
|---|---|---|---|
get_fund | Structured factsheet for one fund or ETF share class. | 1 per fund found (example fund free) | All |
search_funds | Finds ISINs by fund name, issuer or ISIN prefix among the funds already loaded. | No | All |
compare_funds | Side-by-side comparison of several ISINs. | 1 per fund found | All (1 ISIN per call on Free) |
analyze_portfolio | Looks through weighted fund positions to what the portfolio actually holds. | 1 per position | Pro, Scale and Enterprise |
fund_overlap | Measures how much two or more funds hold in common. | 1 per fund found | Pro, Scale and Enterprise |
get_scpi | Structured data for one French SCPI (unlisted real-estate fund). | 1 per SCPI | All |
search_scpi | Finds French SCPIs by name, management company or ISIN prefix. | No | All |
A tour prompt explains the service on the example fund IE00B4L5Y983 (iShares Core MSCI World UCITS ETF), preloaded and not counted. search_funds also matches the tickers of the listed ETFs it knows, such as IWDA or VWCE.
Connect it in five steps
- Create a FundFacts account. Sign up at /signup with an e-mail address or Google. The Free plan needs no card and gives 15 lookups a month.
- Choose how the client signs in. Claude, ChatGPT and Claude Code (through
/mcp) sign in with the account. For Cursor, VS Code, Windsurf, Codex or a script, create an API key in the dashboard, one per tool so each can be revoked alone. - Add the server. Give the client
https://fundfactsapi.com/api/mcpwith the configuration below. Where a client asks for an OAuth client ID and secret, leave them empty: it registers itself. - Check the tools. The client lists seven tools. In Claude Code,
/mcpshows the server and its status; Cursor, VS Code and Windsurf show it in their MCP settings. - Ask about a fund. Start with the example fund IE00B4L5Y983, which is not counted, or ask for a tour of FundFacts.
Configuration by client
Claude Code
bashclaude mcp add --transport http fundfacts https://fundfactsapi.com/api/mcp
Then /mcp in a session to sign in. With an API key instead:
bashclaude mcp add --transport http fundfacts https://fundfactsapi.com/api/mcp --header "Authorization: Bearer ffk_your_api_key"
Cursor
In .cursor/mcp.json (or ~/.cursor/mcp.json for every project):
json{"mcpServers": {"fundfacts": {"url": "https://fundfactsapi.com/api/mcp","headers": {"Authorization": "Bearer ffk_your_api_key"}}}}
VS Code (GitHub Copilot agent mode)
In .vscode/mcp.json; VS Code asks for the key once and keeps it out of the file:
json{"inputs": [{"id": "fundfacts-key","type": "promptString","description": "FundFacts API key","password": true}],"servers": {"fundfacts": {"type": "http","url": "https://fundfactsapi.com/api/mcp","headers": {"Authorization": "Bearer ${input:fundfacts-key}"}}}}
Windsurf
In ~/.codeium/windsurf/mcp_config.json, where the URL key is serverUrl:
json{"mcpServers": {"fundfacts": {"serverUrl": "https://fundfactsapi.com/api/mcp","headers": {"Authorization": "Bearer ffk_your_api_key"}}}}
Codex
In ~/.codex/config.toml, with FUNDFACTS_API_KEY=ffk_… exported in the shell that starts Codex:
toml[mcp_servers.fundfacts]url = "https://fundfactsapi.com/api/mcp"bearer_token_env_var = "FUNDFACTS_API_KEY"
Claude and ChatGPT
Both sign in with the account: FundFacts in Claude, FundFacts in ChatGPT.
Any other client
Remote clients take the URL and the header, as for Cursor. Clients that only speak stdio, including claude_desktop_config.json, go through mcp-remote:
json{"mcpServers": {"fundfacts": {"command": "npx","args": ["-y","mcp-remote","https://fundfactsapi.com/api/mcp","--header","Authorization: Bearer ffk_your_api_key"]}}}
What it costs
Each fund found counts as one request, like the REST API. Searches, the example fund and ISINs still loading are not counted, nor are misses, up to as many a month as the plan's allowance. Monthly prices, VAT included:
| Plan | Price | Requests a month | ISINs per call | Look-through and overlap |
|---|---|---|---|---|
| Free | $0, no card | 15 | 1 | No |
| Starter | $9.99 a month | 500 | 10 | No |
| Pro | $49 a month | 9,000 | 50 | Yes |
| Scale | $249 a month | 60,000 | 200 | Yes |
Prompts that work as they are
- "Look up IWDA with FundFacts: its ongoing charge, its ten largest holdings and the date of the figures." (
search_funds, thenget_fund) - "Compare IE00B4L5Y983 and IE00B3RBWM25 on fees, 5-year returns and worst drawdown." (
compare_fundsfrom Starter; on Free, oneget_fundper fund) - "How much do IE00B4L5Y983 and IE00B3RBWM25 overlap, and which holdings do they share?" (
fund_overlap, Pro and above) - "What has the SCPI Épargne Pierre distributed over the last few years, and how full are its buildings?" (
search_scpi, thenget_scpi)
What it does not do
- No prices or quotes. Factsheet data re-read at most every 24 hours and a monthly performance series; prices come from a market-data API or a broker.
- Funds only. UCITS funds, ETFs, money-market funds and French SCPIs. Stocks, bonds and indices come back as not found.
- No advice. Published figures with their date; the server tells the assistant not to recommend buying or selling.
- Read-only. No tool touches your account, keys or billing.
Informational data, not investment advice. The MCP server docs cover every input, privacy and troubleshooting.
Frequently asked questions
Is there an MCP server for ETF data?
Yes. FundFacts API runs a remote MCP server at https://fundfactsapi.com/api/mcp (Streamable HTTP) with seven read-only tools for UCITS ETFs and funds, money-market funds and French SCPIs. It works on every plan, Free included.
Can an MCP server look up a fund by ISIN?
Yes: get_fund takes a 12-character ISIN and returns the fund's factsheet as JSON, with fees, the 1–7 risk indicator, holdings, exposures, returns and dataAsOf. search_funds finds the ISIN from a name, an issuer or a ticker such as IWDA.
Does the FundFacts MCP server need an API key?
Not in Claude, ChatGPT or Claude Code (through /mcp): they sign in with the FundFacts account (OAuth 2.1 with PKCE and dynamic client registration). Cursor, VS Code, Windsurf, Codex and scripts send an ffk_ key as an Authorization: Bearer header.
Which MCP clients does it work with?
Any client that supports remote MCP servers over Streamable HTTP, including Claude, ChatGPT, Claude Code, Cursor, VS Code, Windsurf and Codex. Clients that only speak stdio go through the mcp-remote bridge.
What does a tool call cost?
One request per fund found, exactly like the REST API; searches, misses and the example fund IE00B4L5Y983 are not counted. The Free plan gives 15 lookups a month; pricing lists the other plans.
Does it give real-time prices?
No. It returns factsheet data re-read at most every 24 hours and a monthly performance series, not quotes, intraday prices or daily NAVs. Use a market-data API or a broker feed for prices.
Does it cover stocks and bonds?
No. Stocks, bonds and indices are not funds and come back as not found. Bond funds and bond ETFs are covered, with yield to maturity, duration and credit quality where the fund house publishes them.