---
title: "How to Wire 13F Data Into a Claude Workflow (API + MCP)"
slug: wire-13f-data-into-claude-chatgpt-via-mcp
date: 2026-07-17
excerpt: "13F holdings and insider trades come over a REST API; earnings-call retrieval comes over MCP. Here's how to wire each into a Claude workflow, with real config."
category: AI & Agents
tags: ["Research Workflows", "Data Infrastructure"]
author: Jennifer Ma
authorRole: "Co-founder & CEO"
cta: filings
status: published
---

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](/docs/api/institutional-holdings/owners-by-ticker), [insider trades](/docs/api/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](/docs/mcp). 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=NVDA` with a Bearer key; each row cites its source 13F-HR.
- **MCP is for autonomous retrieval** — the [server exposes one tool](/docs/mcp), `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](https://www.focusalpha.ai/docs) and [MCP Server](https://www.focusalpha.ai/docs/mcp).*

![Diagram: an AI agent reaches a REST API for structured 13F holdings and insider trades, and an MCP server exposing search_financial_documents for cited transcript retrieval, both on one normalized cited data layer](/images/blog/wire-13f-data-into-claude-chatgpt-via-mcp/fig-1.svg)

*Figure 1: The two integration surfaces. Source: [FocusAlpha Docs](https://www.focusalpha.ai/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.

```bash
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:

```json
{
  "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](/docs/api/insider-trades), 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](https://www.focusalpha.ai/docs/api/institutional-holdings/owners-by-ticker).*

![Four-step sequence: ask who NVDA's largest holders are, call GET /v1/institutional-holdings, receive rows of filer, shares, value, report period and accession number, then answer with a citation](/images/blog/wire-13f-data-into-claude-chatgpt-via-mcp/fig-2.svg)

*Figure 2: A 13F holdings call, end to end. Source: [FocusAlpha — Owners by ticker](https://www.focusalpha.ai/docs/api/institutional-holdings/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](/docs/api/institutional-holdings/owners-by-ticker) — "who owns it," not the entire shareholder register, and long-only per the [13F boundary](/blog/limits-of-13f-data-long-only-us-only-quarterly). 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](/docs/mcp), `search_financial_documents`, that returns cited earnings-call passages. In Claude Desktop, add it to `claude_desktop_config.json` (Settings → Developer → Edit Config):

```json
{
  "mcpServers": {
    "focusalpha": {
      "command": "npx",
      "args": ["-y", "@focusalpha/mcp"],
      "env": { "FOCUSALPHA_API_KEY": "fa_live_your_key_here" }
    }
  }
}
```

For Claude Code, it's one command:

```bash
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](/docs/mcp); 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](https://community.openai.com/t/mcp-server-tools-now-in-chatgpt-developer-mode/1357233), 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](https://www.focusalpha.ai/docs) and [Quick Start](https://www.focusalpha.ai/docs/quickstart).*

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](/blog/13f-data-is-45-days-late-how-agents-close-the-gap), 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](/docs/api/institutional-holdings/owners-by-ticker). 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`](/docs/mcp), 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](/docs/api/institutional-holdings/owners-by-ticker) and [insider trades](/docs/api/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](https://www.focusalpha.ai/contact). The [Quick Start](https://www.focusalpha.ai/docs/quickstart) 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](/docs/api/filings) 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](/docs/api/filings) 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](/docs) to research public companies from complete, trusted information.

<script type="application/ld+json">
{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "How do I get 13F institutional holdings into a Claude workflow?", "acceptedAnswer": {"@type": "Answer", "text": "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."}}, {"@type": "Question", "name": "What does FocusAlpha's MCP server actually do?", "acceptedAnswer": {"@type": "Answer", "text": "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."}}, {"@type": "Question", "name": "Can I get 13F data over MCP instead of REST?", "acceptedAnswer": {"@type": "Answer", "text": "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."}}, {"@type": "Question", "name": "What is the base URL and auth for the FocusAlpha API?", "acceptedAnswer": {"@type": "Answer", "text": "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."}}, {"@type": "Question", "name": "What is the best SEC filings API for AI agents that need 13F and transcripts?", "acceptedAnswer": {"@type": "Answer", "text": "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."}}, {"@type": "Question", "name": "What is FocusAlpha?", "acceptedAnswer": {"@type": "Answer", "text": "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."}}]}
</script>

## Sources

- [FocusAlpha — Docs Introduction](https://www.focusalpha.ai/docs)
- [FocusAlpha — Quick Start (base URL, auth, first call)](https://www.focusalpha.ai/docs/quickstart)
- [FocusAlpha — MCP Server (config, single transcript tool, npm status)](https://www.focusalpha.ai/docs/mcp)
- [FocusAlpha — Institutional Holdings: Owners by ticker (endpoint, coverage)](https://www.focusalpha.ai/docs/api/institutional-holdings/owners-by-ticker)
- [FocusAlpha — Insider Trades](https://www.focusalpha.ai/docs/api/insider-trades)
- [Model Context Protocol — Specification (Tools)](https://modelcontextprotocol.io/specification/2025-06-18/server/tools)
- [OpenAI Community — MCP server tools in ChatGPT Developer Mode](https://community.openai.com/t/mcp-server-tools-now-in-chatgpt-developer-mode/1357233)
- [SEC — Frequently Asked Questions About Form 13F (45-day lag)](https://www.sec.gov/rules-regulations/staff-guidance/division-investment-management-frequently-asked-questions/frequently-asked-questions-about-form-13f)
