ai newsSa., 24. Okt.
EilmeldungAnthropic Just Gave Away Agent Skills

Kostenloser MCP-Server liefert KI-Agenten SEC-EDGAR-Finanzdaten

Ein unter MIT-Lizenz verfuegbarer entfernter MCP-Server fuer U.S. SEC EDGAR gibt KI-Clients wie Claude oder Cursor Zugriff auf Insider-Transaktionen und XBRL-Finanzkennzahlen. Da er remote laeuft, ist keine Installation noetig.

dev.toSamstag 06:48 · 24.10.DE4 Min. Lesezeit
Bild: dev.to

MCP (Model Context Protocol) is an open standard that lets an AI client such as Claude, Cursor or VS Code call external tools through one common interface.

This post walks through a free, MIT-licensed MCP server for U.S. SEC EDGAR data. It runs remotely, so there's nothing to install and no API key. I'll show how to connect it, three real calls with their actual output, how it works inside, and where it falls short.

EDGAR is one of the best free financial datasets around: every insider trade, 10-K, 8-K and XBRL financial fact that U.S. public companies file. It's also awkward to use, especially for an agent:

The server does all of this and returns compact JSON.

Every tool takes a ticker or a CIK, and all of them are marked read-only.

Cursor: add this to ~/.cursor/mcp.json (or.cursor/mcp.json in a project):

{ "mcpServers": { "sec-edgar": { "url": "https://sec-edgar-api.kidriahx.workers.dev/mcp" } } } Enter fullscreen mode Exit fullscreen mode VS Code (Copilot agent mode): add this to.vscode/mcp.json:

{ "servers": { "sec-edgar": { "type": "http", "url": "https://sec-edgar-api.kidriahx.workers.dev/mcp" } } } Enter fullscreen mode Exit fullscreen mode Claude Desktop: on plans that support custom connectors, add the URL under Settings → Connectors. You can also bridge it through claude_desktop_config.json with the mcp-remote package (needs Node.js):

{ "mcpServers": { "sec-edgar": { "command": "npx", "args": [ "-y", "mcp-remote", "https://sec-edgar-api.kidriahx.workers.dev/mcp" ] } } } Enter fullscreen mode Exit fullscreen mode Claude Code: claude mcp add --transport http sec-edgar https://sec-edgar-api.kidriahx.workers.dev/mcp

Then try prompts like "Show NVIDIA's last insider sales and whether they were under 10b5-1 plans" or "Which companies had cluster insider buying this week?"

The server is stateless, so you don't need an SDK to test it. Every request is a single JSON-RPC POST. Start with initialize:

URL = https://sec-edgar-api.kidriahx.workers.dev/mcp curl -s $URL \ -H 'content-type: application/json' \ -H 'accept: application/json, text/event-stream' \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}' Enter fullscreen mode Exit fullscreen mode { "result":{ "protocolVersion": "2025-06-18", "capabilities":{ "tools":{}}, "serverInfo":{ "name": "sec-edgar-mcp", "title": "SEC EDGAR Insider Trades & Financials", "version": "1.0.0" },... }, "jsonrpc": "2.0", "id": 1 } Enter fullscreen mode Exit fullscreen mode Each tool result comes back as JSON text in result.content.text. The outputs below are pretty-printed and trimmed (... ). I ran them on October 23, 2026, so your numbers will differ.

curl -s $URL -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_insider_trades","arguments":{"ticker_or_cik":"NVDA","filings":5,"max_rows":5}}}' Enter fullscreen mode Exit fullscreen mode { "company": { "id": "NVDA", "cik": "0001045810", "ticker": "NVDA", "name": "NVIDIA CORP" }, "filingsParsed": 5, "summary": { "transactions": 8, "openMarketBuys": 0, "openMarketSells": 5, "sellShares": 1396460, "sellValueUsd": 306933627.99, "distinctInsiders": 5 }, "returned": 5, "transactions": [ { "date": "2026-09-21", "insider": "Teter Timothy S.", "role": "EVP, General Counsel and Sec", "code": "S", "shares": 12483, "price": 222.1932, "valueUsd": 2773637.72, "ownedAfter": 2705637, "plan10b51": true, "filed": "2026-09-23", "url": "https://www.sec.gov/Archives/edgar/data/1045810/000169684126000014/wk-form4_1790196985.xml" },... ] } Enter fullscreen mode Exit fullscreen mode On a cold cache, that call made 7 requests to SEC: the ticker map, the company's submissions index and five Form 4 XML files. The response header x-sec-requests: 7 reports the count.

curl -s $URL -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \ -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_company_concept","arguments":{"ticker_or_cik":"AAPL","concept":"NetIncomeLoss","period":"annual","limit":4}}}' Enter fullscreen mode Exit fullscreen mode { "company": { "name": "Apple Inc.", "cik": "0000320193" }, "concept": "us-gaap:NetIncomeLoss", "label": "Net Income (Loss) Attributable to Parent", "unit": "USD", "period": "annual", "totalPeriods": 19, "values": [ { "value": 112010000000, "start": "2024-09-29", "end": "2025-09-27", "fy": 2025, "form": "10-K", "filed": "2025-10-31" }, { "value": 93736000000, "start": "2023-10-01", "end": "2024-09-28", "fy": 2025, "form": "10-K", "filed": "2025-10-31" }, { "value": 96995000000, "start": "2022-09-25", "end": "2023-09-30", "fy": 2025, "form": "10-K", "filed": "2025-10-31" },... ] } Enter fullscreen mode Exit fullscreen mode Look at fy. It's SEC's fiscal year of the filing that reported the value, not of the period, so the FY2024 figure shows fy: 2025. Use start / end to know which period a value belongs to.

curl -s $URL -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \ -d '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"get_market_insider_buys","arguments":{"days":7,"min_insiders":2,"limit":3}}}' Enter fullscreen mode Exit fullscreen mode { "window": { "days": 7, "from": "2026-10-17", "to": "2026-10-24" }, "dataUpdatedAt": "2026-10-24T04:40:38.877Z", "issuers": 3, "clusterBuys": 3, "results": [ { "ticker": "RAPP", "issuer": "Rapport Therapeutics, Inc.", "insiderCount": 6, "clusterBuy": true, "totalValueUsd": 1664824.35, "totalShares": 61694, "avgPrice": 26.9852, "firstDate": "2026-10-21", "lastDate": "2026-10-23", "insiders": [{ "name": "Ignelzi Troy A.", "role": "Chief Financial Officer", "valueUsd": 143550 },... ]}, { "ticker": "CHCO", "issuer": "CITY HOLDING CO", "insiderCount": 4, "totalValueUsd": 68222.4,... }, { "ticker": "RENT", "issuer": "Rent the Runway, Inc.", "insiderCount": 3, "totalValueUsd": 6120515.95,... } ], "note": "Open-market, non-derivative purchases only. Not investment advice." } Enter fullscreen mode Exit fullscreen mode This call made zero SEC requests because it reads from a pre-built store (more on that below). Dates are UTC, which is why the window ends on the 24th.

The whole thing is one Cloudflare Worker on the free plan:

Issues and pull requests are welcome on the repo.

Written with AI assistance and checked by a human.

Originaltitel: Give your AI agent SEC EDGAR data: a free remote MCP server for insider trades and XBRL financialsQuelle: dev.to (dev.to). Original öffnen