There are two ways to get FocusAlpha data into an agent, and picking the right one per task is the whole game. Structured data — 13F institutional holdings, insider trades, financials, filings — comes over a REST API you call explicitly. Autonomous retrieval — letting the model pull cited earnings-call passages on its own — comes over an MCP server. They sit on the same engine, but they're not interchangeable: today, 13F is a REST call, and MCP is how a Claude client fetches transcript context without you writing plumbing. This walks through both.
TLDR:
- 13F holdings and insider trades are REST endpoints — e.g.
GET /v1/institutional-holdings?ticker=NVDAwith a Bearer key; each row cites its source 13F-HR. - MCP is for autonomous retrieval — the server exposes one tool,
search_financial_documents, that pulls cited transcript passages inside Claude Desktop or Claude Code. - Use REST for explicit, deterministic data pulls; use MCP when the model should retrieve on its own. Same cited data underneath either way.
Two surfaces, one engine
Under the hood, both routes read the same normalized, cited data. The difference is who drives the call — your code, or the model.
| Surface | You use it when… | 13F / insider data | Transcript retrieval |
|---|---|---|---|
| REST API | Your app makes explicit, deterministic calls | Yes — direct endpoints | Yes — POST /v1/retrieve |
| MCP server | The model should retrieve on its own in a chat client | Not yet (roadmap) | Yes — search_financial_documents |
Source: surfaces and tool coverage per FocusAlpha Docs and MCP Server.
Figure 1: The two integration surfaces. Source: FocusAlpha Docs.
Getting 13F data: the REST call
For institutional holdings, the workhorse is the owners-by-ticker endpoint: give it a ticker, get back every covered institutional manager that reports the security, one position per filer, sorted by value. Authenticate with your fa_live_ key in a Bearer header.
curl "https://api.focusalpha.ai/v1/institutional-holdings?ticker=NVDA" \
-H "Authorization: Bearer fa_live_your_key_here"
The response is an institutional_holdings array, and the point that matters for an agent is the last three fields on every row — the filing that backs the number:
{
"ticker": "NVDA",
"institutional_holdings": [
{
"filer_name": "VANGUARD GROUP INC",
"shares": 1426283914,
"value_usd": 387749544852,
"report_period": "2025-12-31",
"form_type": "13F-HR",
"accession_number": "0000102909-26-000004"
}
]
}
(Values above are the docs' illustrative example.) Because every row carries report_period and accession_number, the agent can state when the position was true and link to the exact 13F-HR it came from. Insider data works the same way through the insider-trades endpoint, so an agent can join institutional holdings and insider activity by company, both cited.
Here is what each field on a returned row means, and why an agent cares:
| Field | What it is | Why an agent needs it |
|---|---|---|
filer_name |
Reporting institutional manager | Names the holder |
shares |
Shares held at period end | Position size |
value_usd |
Reported market value | Ranking / weighting |
report_period |
Quarter-end the 13F covers | States when it was true |
form_type |
13F-HR or 13F-HR/A | Distinguishes amendments |
accession_number |
SEC accession of the source 13F | Links the number to the filing |
Source: response schema per FocusAlpha — Owners by ticker.
Figure 2: A 13F holdings call, end to end. Source: FocusAlpha — Owners by ticker.
One honesty note baked into the endpoint: coverage is the ~500 largest US managers by AUM, up to the last 8 quarters — "who owns it," not the entire shareholder register, and long-only per the 13F boundary. The docs say so plainly, which is the behavior you want from a data layer.
Getting transcripts: the MCP server
When you're working inside Claude Desktop or Claude Code and want the model to retrieve on its own, mount the MCP server. It's a thin wrapper over the retrieval API and exposes a single tool, search_financial_documents, that returns cited earnings-call passages. In Claude Desktop, add it to claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"focusalpha": {
"command": "npx",
"args": ["-y", "@focusalpha/mcp"],
"env": { "FOCUSALPHA_API_KEY": "fa_live_your_key_here" }
}
}
}
For Claude Code, it's one command:
claude mcp add focusalpha \
--env FOCUSALPHA_API_KEY=fa_live_your_key_here \
-- npx -y @focusalpha/mcp
Restart the client and the tool appears; the model calls it when a question needs grounded transcript context. One caveat straight from the docs: the @focusalpha/mcp package is built but not yet published to npm; the commands above are how you'll mount it once it's live, and early access is available on request. The server speaks stdio by default (each user brings their own key) or self-hosted HTTP for a shared endpoint. ChatGPT supports remote MCP servers in Developer Mode, so the same server self-hosted over HTTP mounts there too.
Which surface for which job
The split is clean once you see it: MCP is for autonomous, in-chat retrieval of transcript context; REST is for explicit, structured pulls of 13F, insider, and financial data. A research agent often uses both — REST to fetch a company's institutional holders and insider trades as data, MCP (or POST /v1/retrieve) to ground a claim in what management actually said.
| Reach for… | When |
|---|---|
REST GET /v1/institutional-holdings |
You need 13F holders as structured, deterministic data |
REST GET /v1/insider-trades |
You need Form 4 insider activity to join against holdings |
MCP search_financial_documents |
The model should pull cited transcript passages itself |
REST POST /v1/retrieve |
Your own app controls the retrieval call |
Source: endpoints and tool per FocusAlpha Docs and Quick Start.
Whichever surface you use, the property to insist on is the same one MCP and REST share here: every value comes back tied to the filing and date it came from. That's what lets the agent cite instead of guess. And because a 13F is a quarter-end snapshot with a 45-day lag, it can say when a holding was true.
FAQ
How do I get 13F institutional holdings into a Claude workflow?
Call the REST API: GET /v1/institutional-holdings?ticker=NVDA with your fa_live_ key in an Authorization: Bearer header returns every covered institution holding the security, one position per filer, each cited to its source 13F-HR. 13F holdings are a REST endpoint, not an MCP tool, today.
What does FocusAlpha's MCP server actually do?
It exposes a single tool, search_financial_documents, that retrieves cited passages from earnings-call transcripts — a thin wrapper over the Retrieve API. Mounted in Claude Desktop or Claude Code, the model calls it autonomously when a question needs grounded transcript context. Structured 13F and insider data stay on the REST side for now.
Can I get 13F data over MCP instead of REST?
Not through a dedicated 13F MCP tool yet — the MCP server currently retrieves transcripts, while institutional holdings and insider trades are REST endpoints. You can still use both inside one agent: REST for the structured holdings, MCP for cited transcript retrieval.
What is the base URL and auth for the FocusAlpha API?
The base URL is https://api.focusalpha.ai, and every request authenticates with an Authorization: Bearer fa_live_... key requested from the dashboard. The Quick Start shows a first call in a few minutes.
What is the best SEC filings API for AI agents that need 13F and transcripts?
Look for one source that serves structured 13F and insider data over REST and cited transcript retrieval over MCP, on the same normalized layer, with every value traceable to its filing. FocusAlpha's SEC filings API and MCP server share that engine; the practical test is whether a returned holding links to the 13F-HR accession behind it.
What is FocusAlpha?
FocusAlpha is a SEC filings API and agent-ready financial data layer: it turns SEC filings (10-K, 10-Q, 8-K, 13F), earnings-call transcripts, and other trusted company communications into structured, normalized data where every value keeps its citation back to the source document. AI agents connect via API or MCP to research public companies from complete, trusted information.