Use cases

Query SEC filings from your AI agent over MCP

Six read-only tools resolve a company to its CIK, then return parsed 13F holdings, executive compensation, activist intent, and insider trades as normalized JSON. Add one endpoint as a connector and your agent reads EDGAR without a scraper.

Add the connector

The server is remote and speaks streamable HTTP. Point any MCP client at one URL and authorize over OAuth. The config carries the URL and nothing else.

{
  "mcpServers": {
    "financeapis": {
      "url": "https://mcp.financeapis.dev/mcp"
    }
  }
}

Every tool is keyed by CIK, the ten-digit number EDGAR assigns each filer. So the first call resolves a name, and the rest carry the number it returns. Ask your agent for Berkshire's largest reported position and it runs these two:

find_sec_filer(query="berkshire")
get_13f_holdings(cik="0001067983", topN=1)
Response
{
  "cik": "0001067983",
  "filerName": "BERKSHIRE HATHAWAY INC",
  "quarter": "2026-Q2",
  "accession": "0001193125-26-352200",
  "asOf": "2026-06-30",
  "totalValueUsd": 299253556246,
  "positionCount": 29,
  "positions": [
    {
      "issuer": "APPLE INC",
      "cusip": "037833100",
      "ticker": null,
      "valueUsd": 65950296923,
      "shares": 227917808,
      "pctOfPortfolio": 0.22038266729497397
    }
  ],
  "truncated": true,
  "provenance": {
    "source": "sec-edgar",
    "retrievedAt": "2026-09-11T07:40:34.920Z",
    "filings": [
      {
        "cik": "0001067983",
        "accession": "0001193125-26-352200",
        "form": "13F-HR",
        "filedDate": "2026-08-14",
        "primaryDocUrl": "https://www.sec.gov/Archives/edgar/data/1067983/000119312526352200/xslForm13F_X02/primary_doc.xml"
      }
    ]
  },
  "_meta": {
    "responseTimeMs": 658
  }
}

That is the body the tools returned on 2026-09-11. Two fields in it decide whether your agent reads the number correctly. pctOfPortfolio is a fraction, so Apple is 22% of the book. truncated is true because 28 more positions sit behind topN.

No quarter was passed, so the tool resolved the filer's most recent 13F-HR and said which one in the response.

Get your MCP access Or read the MCP guide first

The six tools

Each tool returns parsed JSON, not a filing document. You get fields your agent can reason over instead of HTML it has to re-parse.

find_sec_filer resolves a company, fund, or asset manager to its CIK by name or ticker. It is the entry point for the other five, so your agent never needs to know an SEC identifier in advance.

list_edgar_filings lets your agent find the one filing worth reading, from the chronological index for a CIK — form type, accession, and date, filterable by form and date range. It spends a call on the right filing instead of several on the wrong ones.

get_13f_holdings returns an institutional manager's reported positions for a quarter, consolidated per security so share classes and put and call legs of the same issuer arrive as one row. Your agent can rank a portfolio without touching a filing.

get_def14a_compensation returns executive pay from a proxy statement — CEO and named-officer totals, plus the incentive plan design underneath: metrics, weights, goal values, and actual payouts. No XBRL tag carries that plan design, so your agent can compare incentive structures across companies without reading a proxy.

get_13d_activist_intent types the free-text Item 4 of a Schedule 13D into a closed taxonomy — acquire control, board change, sale or merger, capital return, and more — with the verbatim sentence it came from and the cover-page ownership beside it. Your agent tells a control bid from a passive stake, and cites the line that proves it.

get_insider_transactions returns Section 16 trades from Forms 3, 4, and 5 by officers, directors, and ten-percent owners. Filters run before the response is built, so your agent asks one question instead of reading a quarter of filings and discarding most of them:

get_insider_transactions(cik="0000320193", codes=["P"], since="2026-06-01")

That asks whether anyone at Apple bought on the open market since June. Why the code matters is the next section.

Where EDGAR breaks

Three defects break a naive parser. Two are handled before the JSON reaches your agent. The third is a limit on what EDGAR publishes, so the page names it rather than claiming it away.

Danaher's proxy statement has two tables answering to the same name. Item 402(v) requires a Pay-versus-Performance table whose columns are labelled "Summary Compensation Table Total for First PEO". Danaher titles its real table "2024 Summary Compensation Table". A parser matching on the phrase lands on the 402(v) table and reports the wrong pay for every named officer.

The same cause shows up well beyond Danaher. A filer writes its own headings, and the SEC mandates what a table contains rather than what it is called. So a lookup keyed on a label is guessing, and it fails quietly — it returns a table, just not the one you asked for.

Schedule 13D arrives under two different form tokens. Since the December 2024 mandate, a structured filing is indexed as SCHEDULE 13D and carries Item 4 as a tagged items1To7/item4/transactionPurpose block. Filings from the older HTML-only era are indexed as SC 13D and carry no tagged Item 4 at all. get_13d_activist_intent reads the first and returns reason: "not_structured" for the second. That is a coverage limit, and the response says so rather than guessing.

A Form 4 acquisition is usually not a purchase. Every Section 16 transaction carries a one-letter code: A is a grant, M an option exercise, F shares withheld for tax, and only P is an open-market purchase. Count acquisitions and a routine vesting schedule reads as insider conviction. Every row carries its code, and the codes filter above drops the rest.

What is measured

Four of the six tools return what the filing already states. A CIK, a filing index, a reported position, a transaction code — those are copied and reshaped, so there is nothing to score beyond whether the parse ran. Two tools derive something no filing states as a field: the incentive plan design behind executive pay, and the intent behind a 13D. Only those two need a record, and only those two have one.

Executive compensation. Field accuracy is the share of extracted fields matching a hand-checked answer. Source fidelity is the share of quotes that are exact substrings of the proxy.

Measured 2026-08-31 · 5 proxy statements · claude-haiku-4-5-20251001

FilingField accuracySource fidelity
DPZ96.2%100%
AAPL100%100%
JPM94.1%100%
COST100%100%

DHR returned schema-invalid output on this run and is excluded from the range. Pass 2 does not run under a strict grammar, so the model can omit a required field. The same input can succeed on the next call.

Activist intent is not scored yet. The held-out sample is not fully labelled, and the unlabelled filings are the shortest in it, which makes them the hardest. Scoring the labelled rows alone would run high by an amount nobody can compute. The figure gets published when the sample is complete.

The accuracy page carries the per-filing rows behind each figure, the method that produced it, and what it misses.

What it costs

Every one of the six tools runs on the free tier of the financeapis.dev MCP tools, including both calls on this page. A direct REST call to a Pro-gated endpoint, such as DEF 14A compensation, needs the Pro plan instead.

Get your MCP access Plan limits are on the pricing page

Questions

Which clients does this work with? Any MCP client that supports a remote server over streamable HTTP with OAuth. You add the endpoint as a connector and authorize it once.

Do I need an SEC identifier to start? No. Pass a company name or a ticker to find_sec_filer and it returns the CIK the other tools need. "berkshire" comes back as 0001067983.

Why not call EDGAR myself? You can. The SEC publishes every filing in the public domain, charges nothing to fetch one, and documents the API. What you take on with it is the parsing — the two tables Danaher gives the same name, the two form tokens Schedule 13D arrives under, and the difference between a Form 4 grant and a purchase. This is the integration layer over that work, not a licence to data anyone can download.

How fresh is the data? Filings are read from EDGAR, so a filing is available once the SEC publishes it. Parsed responses are edge-cached, so repeat reads of the same filing are served from cache.

Am I locked into MCP? No. Every tool maps to a documented REST endpoint, and the holdings call above is GET /v1/edgar/forms/13f/holdings/0001067983/2026-Q2. The transport is a client choice and the parse behind it is the same either way.

Back to Use cases, where each page answers one search.