toolstem-sec-mcp-server

toolstem/toolstem-sec-mcp-server
0 starsMITCommunity

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

SEC EDGAR signal intelligence for AI agents — insider trading (Form 4), 13F institutional holdings, 10-K/8-K filing velocity, activist risk flags, and multi-company disclosure comparisons.

README.md

SEC EDGAR MCP Server — Insider Signals, 13D Activist Risk & Filing Intelligence

![npm version](https://www.npmjs.com/package/toolstem-sec-mcp-server) ![npm downloads](https://www.npmjs.com/package/toolstem-sec-mcp-server) ![License: MIT](./LICENSE)

SEC EDGAR intelligence for AI agents. Five composite tools that pre-compute high-value signals directly from SEC EDGAR's public submissions API, returned as structured JSON.

No SEC API key required. Data is sourced directly from SEC EDGAR's public submissions API. A built-in sliding-window rate limiter keeps traffic under SEC's 10 rps fair-access ceiling automatically.

---

Quickstart — hosted endpoint (recommended)

Point your MCP client or agent at the hosted endpoint. No API key, no infra, no setup. Billing is per-call via x402 — the agent's wallet pays directly in USDC on Base mainnet.

https://mcp.toolstem.com/mcp/sec
  • No SEC API key, no signup, no marketplace account — the agent's wallet pays directly.
  • No infrastructure — nothing to install, host, or keep running.
  • No setup — connect an MCP client and call a tool.
  • initialize and tools/list are free (discovery and schema introspection).
  • tools/call is tiered per tool (see Pricing below).

Claude Desktop

Drop this into your claude_desktop_config.json:

{
  "mcpServers": {
    "toolstem-sec": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.toolstem.com/mcp/sec"
      ]
    }
  }
}

Restart Claude Desktop, then ask: "Has TSLA disclosed any material 8-K events in the last 90 days?"

Any MCP client (LangChain.js)

The official @langchain/mcp-adapters library connects directly to the hosted URL:

import { MultiServerMCPClient } from "@langchain/mcp-adapters";
import { ChatOpenAI } from "@langchain/openai";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const client = new MultiServerMCPClient({
  toolstem_sec: {
    transport: "http",
    url: "https://mcp.toolstem.com/mcp/sec",
    // Add your x402-signing middleware via headers, OR run an x402
    // proxy locally and point url at it. See https://www.x402.org/clients.
  },
});

const tools = await client.getTools();
const agent = createReactAgent({ llm: new ChatOpenAI({ model: "gpt-4o-mini" }), tools });
await agent.invoke({ messages: "Has TSLA disclosed any material 8-K events in the last 90 days?" });

LangChain quick-start (langchain-toolstem)

The langchain-toolstem wrapper handles x402 payment for you — pass a funded wallet key and the SEC tools are included automatically:

import { createToolstemTools } from 'langchain-toolstem';
const tools = await createToolstemTools({ walletPrivateKey: process.env.WALLET_KEY });
// SEC tools included automatically — agents pay per call in USDC

Prefer to run the server yourself over stdio/HTTP? See Advanced: self-host at the bottom.

Try the tools live in the Toolstem playground.

---

Pricing

  • MCP initialize and tools/list are free — discover the server and its tool surface without paying anything.
  • tools/call is tiered per tool, paid in USDC on Base mainnet via x402. No API key, no signup, no marketplace account — agents pay directly from their own wallet.

| Tier | Price per call | Tools | |------|----------------|-------| | Cheap | $0.005 | get_company_filings_summary | | Standard | $0.05 | get_insider_signal, get_institutional_signal | | Premium | $0.50 | get_material_events_digest, compare_disclosure_signals |

Per-tool breakdown:

| Tool | Tier | Per call | |------|------|----------| | get_company_filings_summary | Standard | $0.005 USDC | | get_insider_signal | Standard | $0.05 USDC | | get_institutional_signal | Standard | $0.05 USDC | | get_material_events_digest | Premium | $0.50 USDC | | compare_disclosure_signals | Premium | $0.50 USDC |

How billing works

Toolstem uses the x402 payment protocol. Agents pay per call in USDC on Base — no API keys, no subscriptions, no invoices. The agent's wallet settles each call automatically via EIP-3009.

See the live pricing page on toolstem.com/sec/ for current rates.

---

The five tools

All five tools are composite/curated (they compute derived signals or aggregate across multiple EDGAR endpoints — no raw passthroughs). Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true.

| # | Tool | Required input | Optional input (default) | Tier (price/call) | |---|------|----------------|--------------------------|-------------------| | 1 | get_company_filings_summary | ticker_or_cik (string) | — | Cheap ($0.005) | | 2 | get_insider_signal | ticker_or_cik (string) | lookback_days (int 1–730, default 90) | Standard ($0.05) | | 3 | get_institutional_signal | ticker_or_cik (string) | quarters_back (int 1–20, default 4) | Standard ($0.05) | | 4 | get_material_events_digest | ticker_or_cik (string) | lookback_days (int 1–1825, default 365) | Premium ($0.50) | | 5 | compare_disclosure_signals | tickers_or_ciks (string[2..5]) | — | Premium ($0.50) |

---

1. get_company_filings_summary

Overview of a company's filing activity: last 20 filings + computed signals.

| Signal | Description | |--------|-------------| | filing_velocity | ACCELERATING / NORMAL / SLOWING vs. trailing 365-day average | | material_event_count_90d | Count of 8-K filings in the last 90 days | | disclosure_volume_trend | RISING / STABLE / FALLING based on 10-K size comparison | | latest_form_types | Unique form types filed in the last 90 days |

Example output (abbreviated): ``json { "ticker": "AAPL", "cik": "0000320193", "company_name": "Apple Inc.", "signals": { "filing_velocity": "NORMAL", "material_event_count_90d": 4, "disclosure_volume_trend": "RISING", "latest_form_types": ["8-K", "4", "DEF 14A"] }, "meta": { "source": "sec_edgar_direct", "data_delay": "live" } } ``

---

2. get_insider_signal

Probes Form 3 / 4 / 4/A insider filing activity within a configurable lookback window. Required: ticker_or_cik. Optional: lookback_days (1–730, default 90).

Returns: recent_insider_filings[] (accession numbers + SEC URLs), net_transaction_count, buy_count, sell_count, and insider_signal.

v0.1 limitation — counts only. v0.1 returns counts and Form 4 references only; direction-aware buy/sell signals ship in v0.2 (Form 4 XML parsing). Today, insider_signal is null when filings exist in the window (direction unknown) and "NEUTRAL" when no insider filings exist (verified absence). buy_count / sell_count are 0 in v0.1.

Example output (abbreviated): ``json { "ticker": "MSFT", "cik": "0000789019", "company_name": "MICROSOFT CORP", "lookback_days": 90, "insider_signal": null, "net_transaction_count": 0, "buy_count": 0, "sell_count": 0, "recent_insider_filings": [ { "accession_number": "0001127602-26-001234", "filing_date": "2026-04-15", "sec_url": "https://www.sec.gov/Archives/edgar/data/789019/000112760226001234/0001127602-26-001234-index.htm" } ], "meta": { "source": "sec_edgar_direct", "data_delay": "live" } } ``

---

3. get_institutional_signal

Probes for activist investor activity via SC 13D / 13D/A filings. Required: ticker_or_cik. Optional: quarters_back (1–20, default 4 ≈ 1 year).

| Field | Description | |-------|-------------| | activist_risk_flag | true if any SC 13D or 13D/A was filed in the last 365 days | | recent_13d_filings | List of 13D filings with form type, date, and SEC URL |

v0.1 limitation — activist flag only. v0.1 ships the live activist_risk_flag (from 13D/13D-A) and a list of 13D filings. Quarterly 13F XBRL parsing — which produces institutional_signal (ACCUMULATING / HOLDING / DISTRIBUTING) and recent_13f_countships in v0.2. Today those two fields are null / 0.

Example output (abbreviated): ``json { "ticker": "NVDA", "cik": "0001045810", "company_name": "NVIDIA CORP", "quarters_back": 4, "institutional_signal": null, "recent_13f_count": 0, "activist_risk_flag": false, "recent_13d_filings": [], "meta": { "source": "sec_edgar_direct", "data_delay": "live" } } ``

---

4. get_material_events_digestPremium tier

Premium tier — $0.50 USDC per call on Base mainnet, settled via x402. See the live pricing page on toolstem.com/sec/ for current rates.

Severity-ranked digest of all 8-K and 8-K/A filings within a configurable lookback window. Each item code is mapped to a plain-English label and severity rating. Required: ticker_or_cik. Optional: lookback_days (1–1825, default 365).

| Severity | Examples | |----------|---------| | 🔴 RED | Cybersecurity incident (1.05), restatement (4.02), bankruptcy (1.03), delisting (3.01) | | 🟡 YELLOW | Acquisition (2.01), new debt (2.03), executive departure (5.02) | | 🟢 GREEN | Earnings release (2.02), Reg FD (7.01), shareholder vote (5.07) |

Returns: events[] (sorted newest-first), redflag_count, category_counts.

Example output (abbreviated): ``json { "ticker": "TSLA", "cik": "0001318605", "company_name": "Tesla, Inc.", "lookback_days": 180, "redflag_count": 1, "category_counts": { "RED": 1, "YELLOW": 3, "GREEN": 7 }, "events": [ { "accession_number": "0001628280-26-005678", "filing_date": "2026-04-10", "form": "8-K", "items": [ { "code": "4.02", "label": "Non-Reliance on Previously Issued Financial Statements", "category": "financial", "severity": "RED" } ], "sec_url": "https://www.sec.gov/Archives/edgar/data/1318605/000162828026005678/0001628280-26-005678-index.htm" } ], "meta": { "source": "sec_edgar_direct", "data_delay": "live" } } ``

---

5. compare_disclosure_signals

Side-by-side comparison of 2–5 companies across all key disclosure signals. Required: tickers_or_ciks (string[2..5]). All lookups run in parallel.

Returns per-company: filing_velocity, material_event_count_90d, redflag_count_365d, activist_risk_flag, last_filing_date.

Returns winners (as CIKs, not tickers — cross-reference with the companies[] array): quietest_disclosure, most_active, most_redflags, activist_targets.

Example output (abbreviated): ``json { "companies": [ { "ticker": "AAPL", "cik": "0000320193", "filing_velocity": "NORMAL", "material_event_count_90d": 4, "redflag_count_365d": 0, "activist_risk_flag": false, "last_filing_date": "2026-04-25" }, { "ticker": "MSFT", "cik": "0000789019", "filing_velocity": "ACCELERATING", "material_event_count_90d": 7, "redflag_count_365d": 0, "activist_risk_flag": false, "last_filing_date": "2026-04-26" } ], "winners": { "quietest_disclosure": "0000320193", "most_active": "0000789019", "most_redflags": null, "activist_targets": [] }, "meta": { "source": "sec_edgar_direct", "data_delay": "live" } } ``

---

Advanced: self-host

Most users should use the hosted endpoint above — it needs no API key, no infrastructure, and no setup. This section is for users who specifically want to run the server themselves. When self-hosting you are responsible for running the process and for supplying an EDGAR fair-access contact (SEC_USER_AGENT_CONTACT).

Claude Desktop (self-hosted over stdio)

Run locally over stdio — no x402 charges, you bring your own EDGAR fair-access contact:

{
  "mcpServers": {
    "toolstem-sec": {
      "command": "npx",
      "args": ["-y", "toolstem-sec-mcp-server"],
      "env": {
        "SEC_USER_AGENT_CONTACT": "you@yourorg.com"
      }
    }
  }
}

npm (MCP stdio transport)

npm install -g toolstem-sec-mcp-server
toolstem-sec-mcp-server

Self-hosted HTTP

Three modes:

Local-only (default — safest): ```bash toolstem-sec-mcp-server --http

Binds 127.0.0.1:3000 — reachable only from this machine


**Remote with auth:**

ALLOW_REMOTE=1 MCP_AUTH_TOKEN=my-secret toolstem-sec-mcp-server --http

Binds 0.0.0.0:3000 — requires Bearer token on every /mcp request


**Remote without auth (use at your own risk):**

ALLOW_REMOTE=1 MCP_AUTH_DISABLED=1 toolstem-sec-mcp-server --http

Binds 0.0.0.0:3000 — no authentication


| Variable | Description |
|----------|-------------|
| `PORT` | HTTP port (default `3000`) |
| `ALLOW_REMOTE` | Set to `1` to bind `0.0.0.0` instead of `127.0.0.1` |
| `MCP_AUTH_TOKEN` | Bearer token for `/mcp` routes (required when `ALLOW_REMOTE=1`) |
| `MCP_AUTH_DISABLED` | Set to `1` to skip auth even with `ALLOW_REMOTE=1` (not recommended) |
| `SEC_USER_AGENT_CONTACT` | Contact email for SEC EDGAR User-Agent header |

---

## SEC EDGAR fair-access policy

All outbound traffic goes through a shared sliding-window rate limiter (8 rps target, 4 rps safety margin below SEC's 10 rps hard cap). Every request includes a `User-Agent` header identifying the package and a contact email per SEC policy. Override the contact email via:

SEC_USER_AGENT_CONTACT=you@yourorg.com toolstem-sec-mcp-server ```

Violating SEC's fair-access policy can result in your IP being blocked. This server is designed to stay compliant automatically.

---

v0.2 roadmap

  • Form 4 XML parsing — direction-aware insider signals (STRONG_BUYING / BUYING / NEUTRAL / SELLING / STRONG_SELLING) with net share counts
  • 13F XBRL parsing — quarterly institutional flow signals (ACCUMULATING / HOLDING / DISTRIBUTING) with institution count
  • 8-K text extraction — natural-language summaries of each material event from the filing's primary HTML document

---

License & author

MIT License — see LICENSE.

Built by Toolstem. Data sourced directly from SEC EDGAR.

Related MCP servers

Browse all →