AIMCPTutorial

Connect Claude, ChatGPT or Cursor to fund data with an MCP server

Set up the FundFacts MCP server in Claude, ChatGPT, Claude Code and Cursor: one URL, an account sign-in or an API key, and tools for fund lookup, comparison, look-through and overlap.Published 18 September 2026 · Updated 13 October 2026 · 7 min read · by FundFacts API

An MCP server gives an AI assistant tools it can call, and a fund data MCP server gives it the ability to look up any fund or ETF by ISIN, compare several, aggregate a portfolio and check holdings overlap, with the answers grounded in the fund's own published documents rather than the model's memory. FundFacts runs a remote Model Context Protocol server at https://fundfactsapi.com/api/mcp over Streamable HTTP; any client that supports remote servers with a bearer header (Claude Code, Cursor, Windsurf, or your own agent) can use it with one URL and an API key, and claude.ai, Claude Desktop and ChatGPT, whose connector forms have no header field, sign in with your FundFacts account instead.

In short
Server URL: https://fundfactsapi.com/api/mcp, transport: Streamable HTTP, auth: Authorization: Bearer ffk_..., or a sign-in with your FundFacts account in claude.ai, Claude Desktop, ChatGPT and Claude Code (a free account covers 5 lookups a month; the portfolio and overlap tools need Starter). Tools: get_fund, search_funds, compare_funds, analyze_portfolio, fund_overlap, plus get_scpi and search_scpi for French real-estate funds. Tools count against the same monthly requests as the REST endpoints; search is free. Stdio-only clients can bridge with mcp-remote.

What the Model Context Protocol is, briefly

MCP is an open protocol that standardises how an AI application discovers and calls external tools. A server publishes a list of tools with JSON schemas; the client (Claude, Cursor, ChatGPT, an agent framework) shows those tools to the model, and when the model decides to call one, the client forwards the call and returns the result. The point is that the same server works in every client without per-client integration code. For fund data this replaces a pattern where each team wrote its own getFund function-calling wrapper, which the LLM tooling post describes.

Remote MCP servers speak Streamable HTTP: the client POSTs JSON-RPC messages to one URL and can receive streamed responses. Authentication is a normal HTTP header, so a FundFacts API key works as the bearer token exactly as it does for the REST API.

The seven tools

ToolWhat it doesInputCost
get_fundStructured factsheet for one ISIN: key facts, TER, risk indicator, derived profile, holdings, breakdowns, returns, series, risk statistics, as-of date{ isin }1
search_fundsFind ISINs by name, issuer or ISIN prefix among loaded funds{ query, limit? }Free
compare_fundsSide-by-side table for several ISINs: category, TER, risk, size, distribution, 1/3/5-year annualised returns, volatility, Sharpe, max drawdown, top-10 concentration{ isins[], includeFullData? }1 per ISIN
analyze_portfolioLook-through of weighted positions: blended TER, weighted risk indicator, asset / sector / country / region / credit exposure, currency split, combined top holdings, each with coverage{ positions: [{ isin, weight }] }1 per position
fund_overlapPairwise holdings overlap and shared positions for two or more ISINs{ isins[] }1 per ISIN
get_scpiStructured data for a French SCPI by slug, ISIN or name{ id }1
search_scpiFind SCPIs by name, manager or ISIN prefix{ query, limit? }Free

The tools behave exactly like the corresponding REST endpoints (GET /funds/{isin}, GET /search, POST /funds, POST /portfolio, GET /overlap, GET /scpi/{id}, GET /scpi?q=) and draw from the same 24-hour store, so a fund the API has served today is answered in well under a second. A fund nobody has requested before is loaded on demand, which can take a few minutes; the tool tells the model to ask again shortly rather than block. Tool descriptions carry the operational rules (no advice, quote the as-of date, one request per ISIN) so the model reads them without a system prompt.

Claude Code

One command:

bash
claude mcp add --transport http fundfacts https://fundfactsapi.com/api/mcp

Then run /mcp in a session and sign in with your FundFacts account. To use an API key instead, add --header "Authorization: Bearer ffk_..." to the command.

Or install the FundFacts plugin, which adds the server together with skills that tell Claude Code how to read the fund data: /plugin marketplace add fundfactsapi/fundfacts-plugin, then /plugin install fundfacts@fundfacts, then /mcp to sign in.

Once signed in, ask: "Compare IE00B4L5Y983 and IE00B3RBWM25 on fees, risk and top holdings, and tell me how much they overlap." Claude Code calls compare_funds and fund_overlap and answers from the results. If you are using Claude Code to build a product rather than to ask questions, the coding-agent post covers the AI companion kit (an AGENTS.md, a Claude skill, a Cursor rule and the OpenAPI spec) that ships with every paid plan.

Cursor and Windsurf

Both read an mcp.json (project-level .cursor/mcp.json or the global one in Cursor's settings). The remote-server entry is:

json
{
"mcpServers": {
"fundfacts": {
"url": "https://fundfactsapi.com/api/mcp",
"headers": { "Authorization": "Bearer ffk_live_..." }
}
}
}

Enable the server in the MCP settings panel and the seven tools appear in the agent's tool list. A useful pattern while coding is to let the agent call get_fund on a real ISIN once, so it sees the actual payload shape rather than guessing field names.

claude.ai and Claude Desktop

Both add remote servers through Customize → Connectors → Add custom connector (on Team and Enterprise an Owner adds it under Organization settings → Connectors; the Free plan allows one custom connector). The form takes a name and a URL and has no field for a custom header, so enter https://fundfactsapi.com/api/mcp, leave the advanced OAuth client fields empty and click Connect: a consent screen opens and you sign in with your FundFacts account (OAuth 2.1 with PKCE; the client registers itself). The connection then appears in the dashboard, where it can be disconnected, and counts against the same quota as an API key. Once the connector is enabled the seven tools are available in the conversation, and their results render as cards (fund, comparison, portfolio look-through, overlap, SCPI) next to Claude's answer, as they do in ChatGPT.

Claude Desktop's configuration file (claude_desktop_config.json) is for stdio servers, entries of the form "command + args". To register the FundFacts server there, bridge it with mcp-remote, which runs locally, forwards to the remote URL and adds the header:

json
{
"mcpServers": {
"fundfacts": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://fundfactsapi.com/api/mcp", "--header", "Authorization: Bearer ffk_live_..."]
}
}
}

This is the configuration to use for any client whose config format is "command + args".

ChatGPT

ChatGPT adds remote MCP servers in developer mode, available on Plus, Pro, Business, Enterprise and Edu, on the web. Turn it on under Settings → Security and login → Developer mode, then open Plugins (chatgpt.com/plugins) and click +. The form has no custom-header field and ChatGPT cannot send an API key, so enter a name and https://fundfactsapi.com/api/mcp, set Authentication to OAuth and click Create: ChatGPT opens the FundFacts consent screen, you sign in with your account, and that connection is what authenticates the calls. The seven tools then show up in the conversation, and a prompt such as "What does LU1681043599 hold and what does it cost?" triggers get_fund. In Business workspaces only admins and owners can use developer mode.

Your own agent

If you are writing the agent, use an MCP client library and connect to the URL with the header. In TypeScript with the official SDK:

typescript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
​
const transport = new StreamableHTTPClientTransport(new URL("https://fundfactsapi.com/api/mcp"), {
requestInit: { headers: { Authorization: `Bearer ${process.env.FUNDFACTS_API_KEY}` } },
});
const client = new Client({ name: "my-agent", version: "1.0.0" });
await client.connect(transport);
​
const tools = await client.listTools(); // get_fund, search_funds, compare_funds, …
const result = await client.callTool({ name: "get_fund", arguments: { isin: "IE00B4L5Y983" } });
// result.content[0].text is the JSON envelope: { isin, name, cached, generatedAt, data: { … } }

If you would rather generate tools from a spec, the OpenAPI 3.1 document describes the same endpoints and /llms-full.txt is the whole documentation in one file for a retrieval step.

Prompts that work well

The tools are narrow on purpose (an ISIN in, a factsheet out), so the best prompts give the model an ISIN or a name it can search:

  • "Search for 'core msci world' and get the factsheet of the accumulating USD share class."
  • "Compare FR0010315770 with IE00B4L5Y983: fees, risk indicator, 3-year volatility, top holdings."
  • "I hold 60% IE00B4L5Y983, 30% IE00B3RBWM25 and 10% LU1681043599. What is my country and sector exposure and my blended TER?"
  • "How much do IE00B4L5Y983 and IE00B3RBWM25 overlap, and which shared holdings drive it?"
  • "Get the SCPI 'perial-o2' and summarise its distribution rate history and occupancy."

Each answer should quote the dataAsOf date, which the tool returns; the tool descriptions ask the model to do so.

Requests, keys and safety

  • Requests. The MCP server draws on the same monthly requests as the REST API: Free 5, Starter 60 ($9.99), Pro 1,000 ($49), Scale 10,000 ($249); Enterprise is metered at $0.01 per request. See pricing. Search tools are free; the others cost one request per fund found. analyze_portfolio and fund_overlap are available from Starter.
  • Keys. The key in your MCP config is a real credential. Keep it in a config file that is not committed, and create a separate key per machine from the dashboard so one can be revoked without touching the others (Starter allows two keys, Pro and Scale ten).
  • Grounding. The model only sees what the tool returns. It cannot fabricate a TER for a fund the server does not cover, because get_fund returns a clear not-found message and the description tells the model not to answer from memory. The grounding and guardrails post covers the rules to add on your side for a customer-facing assistant, and the AI fund assistant use case shows the product shape.

The full setup reference, including the OpenAPI spec and the companion kit, is on the AI agents and MCP docs page. A free key is enough to try every tool.

FAQ

What is the URL of the FundFacts MCP server?

https://fundfactsapi.com/api/mcp, using the Streamable HTTP transport. Authenticate with Authorization: Bearer ffk_..., the same API key used for the REST endpoints.

Which tools does the fund data MCP server expose?

get_fund (factsheet by ISIN), search_funds (find ISINs by name), compare_funds (side-by-side table), analyze_portfolio (look-through of weighted positions), fund_overlap (pairwise holdings overlap), and get_scpi / search_scpi for French SCPIs.

Does the MCP server cost extra?

No. Tool calls draw on the plan's monthly requests exactly like REST calls: one request per fund found, search free. The Free plan's 5 lookups are enough to try get_fund and compare_funds on your own funds; analyze_portfolio and fund_overlap need Starter ($9.99).

My client only supports stdio MCP servers. Can I still use it?

Yes. Run npx -y mcp-remote https://fundfactsapi.com/api/mcp --header "Authorization: Bearer ffk_..." as the server command; mcp-remote bridges stdio to the remote Streamable HTTP endpoint and adds the header.

Can the model give investment advice through these tools?

The tools return data, not recommendations, and their descriptions instruct the model to describe rather than advise and to quote the as-of date. For a customer-facing assistant you should still enforce a no-advice rule in your own system prompt and code.

Try it on your own ISINs

One request returns key facts, holdings, risk and performance as JSON. Free plan, no card.

Questions this answers

AI agents & LLMs

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.
AI agents & LLMs

How do I give Claude access to fund and ETF data by ISIN?

Add the FundFacts MCP server to claude.ai, Claude Desktop or Cowork as a custom connector and ask about any ISIN: TER, holdings, exposures, returns, overlap and portfolio look-through, shown as interactive cards.
AI agents & LLMs

How can I get ChatGPT to look up fund and ETF data by ISIN?

Connect the FundFacts MCP server in ChatGPT's developer mode and ask about any ISIN, with results shown as interactive cards. Or build a custom GPT on the OpenAPI spec, or paste the JSON. Steps for each.
AI agents & LLMs

How do I use FundFacts API in Cursor?

Set up Cursor to build on fund data: add the companion Cursor rule, keep AGENTS.md in the repo, and register the MCP server in .cursor/mcp.json so the agent can test real ISINs while it codes.
For your project

Where do I get fund data for an AI financial assistant or chatbot?

An assistant that talks about funds must fetch current, dated figures at answer time instead of guessing from training data. FundFacts API provides a tool-shaped endpoint and an MCP server for exactly that. Setup for LangChain, OpenAI Agents, Vercel AI SDK, Claude and ChatGPT.
Choosing a data source

What is the best fund data source for AI agents and MCP?

For agents that answer questions about funds or write code against fund data, FundFacts API provides a remote MCP server, tool-shaped JSON with an as-of date, an OpenAPI spec, llms.txt and a complete AGENTS.md. Why that matters and how each client connects.
AI agents & LLMs

What is the FundFacts MCP server?

The FundFacts MCP server puts fund, ETF and SCPI data inside Claude and ChatGPT: seven read-only tools, interactive cards, a guided tour, every plan including Free. What it does and how to connect it.
AI agents & LLMs

How do I use FundFacts API with Claude Code?

Register the FundFacts MCP server with claude mcp add or install the plugin, sign in with /mcp, then add AGENTS.md so Claude Code looks up real funds and builds screeners, reports or bots on the API.
AI agents & LLMs

How do I use FundFacts API with OpenAI Codex?

Codex reads AGENTS.md natively. Put the FundFacts AGENTS.md in the repo, add the MCP server to ~/.codex/config.toml, and prompt Codex to build fund tools with real data.
AI agents & LLMs

How do I use FundFacts API with GitHub Copilot in VS Code?

Register the FundFacts MCP server in .vscode/mcp.json so Copilot agent mode can call get_fund and search_funds, and add copilot-instructions.md so it writes correct code against the API.
AI agents & LLMs

How do I add fund and ETF data as a tool in LangChain or LangGraph?

Wrap one API call in a LangChain @tool so an agent can answer questions about any ISIN with current TER, holdings, exposures and returns. Python code, plus the MCP adapter route.
AI agents & LLMs

How do I give an OpenAI Agents SDK agent access to fund data?

Add a function tool that calls the fund API by ISIN, or attach the hosted MCP server, so an OpenAI Agents SDK agent answers fund questions with current figures. Code for both.