TradeStar Insider

Official registry Security

Filing-verified SEC EDGAR insider (Form 4), 13D, 13F & 8-K data, no sign-in. Verify any claim.

Install

Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).

Remote (streamable-http)
Claude Code
claude mcp add --transport http tradestar-insider 'https://mcp.tradestarinsider.com/mcp'
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "tradestar-insider": {
            "type": "http",
            "url": "https://mcp.tradestarinsider.com/mcp"
        }
    }
}
PYPI package insider-signals-mcp
Claude Code
claude mcp add tradestar-insider -e 'INSIDER_SIGNALS_MCP_URL=<INSIDER_SIGNALS_MCP_URL>' -- uvx insider-signals-mcp==1.1.0
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "tradestar-insider": {
            "command": "uvx",
            "args": [
                "insider-signals-mcp==1.1.0"
            ],
            "env": {
                "INSIDER_SIGNALS_MCP_URL": "<INSIDER_SIGNALS_MCP_URL>"
            }
        }
    }
}

Environment variables

  • INSIDER_SIGNALS_MCP_URL Optional override for the remote MCP endpoint (defaults to https://mcp.tradestarinsider.com/mcp).
NPM package insider-signals-mcp
Claude Code
claude mcp add tradestar-insider -e 'INSIDER_SIGNALS_MCP_URL=<INSIDER_SIGNALS_MCP_URL>' -- npx -y insider-signals-mcp@1.1.0
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "tradestar-insider": {
            "command": "npx",
            "args": [
                "-y",
                "insider-signals-mcp@1.1.0"
            ],
            "env": {
                "INSIDER_SIGNALS_MCP_URL": "<INSIDER_SIGNALS_MCP_URL>"
            }
        }
    }
}

Environment variables

  • INSIDER_SIGNALS_MCP_URL Optional override for the remote MCP endpoint (defaults to https://mcp.tradestarinsider.com/mcp).

Documentation

From the project's README on GitHub, refreshed weekly. Links open on GitHub.

Contents
  1. Insider Buy Signals
  2. Free vs paid
  3. Run the MCP server locally
  4. What the data is
  5. What the data is not
  6. Coverage
  7. Install
  8. Quickstart (free, no key)
  9. Free tier vs. keyed tier
  10. Worked examples — one real request and response per tool
  11. Response shape
  12. MCP server (for AI assistants)
  13. Pricing
  14. Disclaimer
  15. License

Insider Buy Signals

Verify any U.S. SEC filing claim, field-by-field, against the filing it came from. Every figure here — shares, price, dollar value, percent, stake size — traces to a parsed field in a real EDGAR filing and ships with a link to that filing on sec.gov. Records that can't be linked to a filing are dropped, never guessed: no scores, no unsourced numbers. We call this filing-verified. We also ran the obvious question — does insider buying predict returns? — as four sealed, pre-registered tests. I tried four times to prove otherwise, and four times the data said no; the full record is at https://www.tradestarinsider.com/what-we-tested. This repo is the MIT-licensed MCP server, client library, and worked examples for the TradeStar Insider API.

Free vs paid

The data is the same on every plan. Every row is filing-verified and links to its source on sec.gov. Plans differ in history, volume and export:

FreePaid — $29/month
Calls100 / day100,000 / month
Historylast 30 daysfull history to 2024-01-02 + export
Verify any filing (free on both plans)full historyfull history

The free tier serves the last 30 days of filings. Older filings are not hidden: a request for an older date tells you the filing exists and is on the paid plan — it never claims that no filing exists. The verify_* tools check any filing across the full history for free. The paid plan is $29 a month on RapidAPI: 100,000 calls a month and full history since 2024, plus the key for the paid MCP endpoint from /v1/mcp-key.

(On RapidAPI the free Basic plan is 100 calls a day, or 3,000 calls a month where the console allows only a monthly quota.)

There are two free ways in, each with its own limit: the open, no-key endpoint (mcp.tradestarinsider.com/mcp and /public/v1) enforces a hard 100 data calls per day per IP, resetting at 00:00 UTC — over the cap it returns a plain message (a tool result on MCP, HTTP 429 on REST), never a transport error. MCP handshakes and verify_* checks both behave as expected (handshakes are free; a verify counts as one call). RapidAPI Basic meters per key at the same 100 calls/day. Both serve the same 30-day free window.

Full pricing and a key: https://www.tradestarinsider.com/pricing

Run the MCP server locally

The server is published as insider-signals-mcp — a tiny stdio proxy to the remote endpoint. Run it with no install using uvx:

uvx insider-signals-mcp

To wire it into Claude Desktop, add this to claude_desktop_config.json:

{
  "mcpServers": {
    "insider-signals": {
      "command": "uvx",
      "args": ["insider-signals-mcp"]
    }
  }
}

Or point any MCP client straight at the remote endpoint (no proxy needed): https://mcp.tradestarinsider.com/mcp (Streamable HTTP, no auth). The verify tools are the core: check an insider purchase, an activist 13D stake, an 8-K event, or a 13F holding against its source filing.

What the data is

Five filing-verified families from SEC EDGAR (plus federal contract awards from USAspending):

  • Insider Form 4 purchases (SEC transaction code P) — cluster buys (two or more insiders buying the same company inside a window of seven calendar days or fewer) and buys large relative to the insider's existing holdings.
  • Activist Schedule 13D stakes, 13F fund position changes, and recent federal contract awards.

Code P does not by itself prove an open-market buy. A purchase filed under P can be an IPO / offering / private-placement allocation, so every purchase record carries an offering_context flag (true = allocation, not open-market) and clusters carry a uniform_price_cluster flag marking a single administered price. Option exercises, 10b5-1 planned sales, and sub-threshold noise (below $50,000) are dropped. Every field we return is parsed from a real filing and ships with its sec.gov link. Records that can't be linked to a filing are dropped, never guessed. No scores, no unsourced numbers. We call this filing-verified.

What the data is not

It is not a prediction. We ran four pre-registered, sealed tests for whether insider buying precedes price moves over our own history, and all four returned NULL — no return edge distinguishable from base rate — so we do not claim one. The full record (question, method, sample, number, verdict per test) is public at **What we tested**. This is a clean, filing-verified lookup and verification layer over public purchases — you decide what they mean. It is also not real-time: ingestion is a once-daily weekday cron, so new filings surface next business day, not live.

Coverage

  • Insider Form 4 buys: full history 2024-01-02 → 2026-10-09 (686 U.S. trading days), no non-holiday gaps (market holidays such as Presidents' Day carry no filings and are not gaps). Read the live number any time at /v1/health — it is the source of truth and advances every business day. Every served purchase is a filing-verified code-P purchase, never an open-market guess: records that can't be traced to a parsed SEC filing field are dropped, never inferred.
  • Completeness: we capture 93.70% of in-window code P purchases (lower bound 87.28%); of the filings we skip, only 0.75% (95% CI 0.34–1.63%) turn out to be purchases we genuinely missed — the rest are sales, option exercises, amendments, and sub-$50k buys we exclude by design. (This recall figure is from a sealed, pre-registered 20-trading-day study, 2026-08-17 → 2026-09-14; see **What we tested**.)

Install

pip install insider-signals        # or, from a clone:  pip install -e .

Zero runtime dependencies — the client uses only the Python standard library.

Quickstart (free, no key)

The free tier answers on the open discovery surface with no key and per-IP rate limiting:

from insider_signals import InsiderSignals

api = InsiderSignals()                         # public base URL, no key

print(api.health()["datasets"]["insider"])     # coverage days + date range

for s in api.today():                          # today's filing-verified buys
    print(s["ticker"], s["value_usd"], s["filing_url"])

for s in api.clusters():                       # cluster buys (2+ insiders, ≤7 days)
    print(s["ticker"], s["cluster_insiders"], s["cluster_notional"])

# Verify a specific claim against the filings we hold:
v = api.verify("ETRA", "ORBIMED ADVISORS LLC")
print(v["status"], v["count"])                 # -> confirmed 2

See examples/rest_api.py for a runnable version.

Free tier vs. keyed tier

TierMethodsAccess
Free (no key)health, today, clusters, verify, verify_13d, verify_8k, verify_13fOpen /public/v1, per-IP rate limited
Keyed (RapidAPI)by_ticker, by_range, filing, fund_changes, federal_awards_recent, activist_stakes_recent, amendments_recentMetered, through RapidAPI

For the keyed tier, subscribe on RapidAPI and construct the client with your key:

api = InsiderSignals(base_url="https://<your-rapidapi-host>", rapidapi_key="...")
for s in api.by_ticker("GME"):
    print(s["insider"], s["shares"], s["price_per_share"], s["filing_url"])

Calling a keyed method without a key raises InsiderSignalsError with status == 403.

Worked examples — one real request and response per tool

Every response below is a real capture from the live public API, on the free tier (no key). The two free list tools (today, clusters) were re-captured on 2026-10-21 and show the free 30-day window in their coverage_* fields — a free caller sees exactly this. The verify_* examples are from an earlier capture (2026-09-23); verification is full-history on every plan, so their coverage_* fields reflect that capture date and are not clamped to the 30-day window. The live coverage window moves daily — read /v1/health for the current bounds.

today — today's insider buys
GET https://api.tradestarinsider.com/public/v1/signals/today
{
  "api_version": "v1",
  "endpoint": "signals/today",
  "rule2_guarantee": "Every record traces to a parsed SEC filing field and carries its source filing_url. Records without a filing link are dropped upstream and never returned.",
  "count": 0,
  "coverage_start": "2026-09-22", "coverage_end": "2026-10-20",
  "coverage_note": "Insider (Form-4 code P) signals collected 2026-09-22..2026-10-20. An empty result means no matching filing in this window — not absence at the SEC.",
  "total_matched": 0,
  "params": { "date": "2026-10-21", "limit": 25 },
  "signals": []
}

(An empty set is normal pre-market / on a non-trading day; it repopulates the moment new filings materialize.)

clusters — cluster buys (2+ insiders, one issuer, ≤7 days)
GET https://api.tradestarinsider.com/public/v1/signals/clusters
{
  "api_version": "v1",
  "endpoint": "signals/clusters",
  "count": 1,
  "coverage_start": "2026-09-22", "coverage_end": "2026-10-20",
  "coverage_note": "Insider (Form-4 code P) signals collected 2026-09-22..2026-10-20. An empty result means no matching filing in this window — not absence at the SEC.",
  "total_matched": 177,
  "params": { "limit": 1 },
  "signals": [
    {
      "filed_date": "2026-10-19",
      "ticker": "APLD",
      "issuer_name": "Applied Digital Corp.",
      "issuer_cik": "0001144879",
      "insider": "Jason Zhang",
      "relationship": { "director": false, "officer": true, "ten_pct_owner": false, "officer_title": "President" },
      "code": "P",
      "shares": 300000.0, "price_per_share": 18.86, "value_usd": 5658000.0,
      "transaction_date": "2026-10-16", "acceptance_datetime": "2026-10-19T07:06:33-04:00",
      "cluster": true, "cluster_insiders": 2, "cluster_notional": 6664686.12,
      "offering_context": false, "uniform_price_cluster": false,
      "accession": "0001900445-26-000006",
      "filing_url": "https://www.sec.gov/Archives/edgar/data/1900445/000190044526000006/0001900445-26-000006-index.htm"
    }
  ]
}
verify — confirm an insider code P purchase claim
GET https://api.tradestarinsider.com/public/v1/verify?ticker=ETRA&person=ORBIMED ADVISORS LLC
{
  "api_version": "v1",
  "endpoint": "verify",
  "coverage_start": "2026-01-20", "coverage_end": "2026-09-23",
  "coverage_note": "Checked SEC Form-4 code P purchases collected 2026-01-20..2026-09-23. Absence here means not in this window — not absence at the SEC.",
  "status": "confirmed",
  "matched": ["ticker/issuer", "person"],
  "filings": [
    {
      "ticker": "ETRA", "issuer_name": "Electra Therapeutics, Inc.",
      "insider": "ORBIMED ADVISORS LLC",
      "code": "P", "shares": 1000000.0, "price_per_share": 15.0, "value_usd": 15000000.0,
      "filed_date": "2026-09-23", "accession": "0000947871-26-000880",
      "transaction_date": "2026-09-19",
      "acceptance_datetime": "2026-09-23T18:04:11-04:00",
      "aff10b5One": 0,
      "is_amendment": false,
      "original_accession": null,
      "filing_url": "https://www.sec.gov/Archives/edgar/data/2088082/000094787126000880/0000947871-26-000880-index.htm"
    }
  ],
  "count": 2,
  "message": "Confirmed: 2 matching Form-4 code P purchase filing(s)."
}

A claim with no matching filing returns "status": "not_found" (in-window) or "out_of_coverage" (outside the collected days) — never a guess.

Purchase record fields. Every confirmed purchase filing — on both verify (by claim) and the by-accession fetch — carries the same four extra fields, so a consumer reads one shape regardless of how the row was pulled:

fieldmeaning
transaction_datethe reported transaction date (Form 4 periodOfReport), distinct from filed_date; null when the filing carried no parseable date.
acceptance_datetimethe EDGAR acceptance timestamp (when the SEC accepted the filing), ISO-8601 with offset; null on rows collected before this stamp was captured.
aff10b5Onethe 10b5-1 trading-plan flag parsed from the Form 4 (1 = filer affirmed a 10b5-1 plan, 0 = not affirmed); null when the raw filing field was unavailable.
is_amendment / original_accessionis_amendment is true for a Form 4/A; original_accession links it to the original it amends when that filing is in our collected window (SEC Form 4/A carries no native pointer, so the link is by issuer + reporting owner + period), else null.

Any field that could not be resolved is null and explained under a partial_fields object (field → reason) on that record — a missing value is never silent. A record with everything resolved omits partial_fields entirely. Example:

"partial_fields": { "acceptance_datetime": "row collected before the acceptance stamp was captured" }

Form 4/A amendments. When an insider files a Form 4/A that corrects an earlier Form 4, verify returns the amended filing as the current record — the superseded original is not returned as a co-equal filing. If your claim cited the figure the amendment changed, the verdict carries a superseded object naming the original_accession, the amendment_accession, and the corrected figure, and the message says the figure was corrected by 4/A. The keyed amendments_recent (GET /v1/amendments/recent) lists these amendments newest-first, each with its original_accession and a changed_fields map of what the 4/A changed (before → after); an amendment whose original is outside our collected window is still listed, flagged original_in_corpus: false, with the before/after left null — never guessed.

verify_13d — confirm a Schedule 13D activist-stake claim
GET https://api.tradestarinsider.com/public/v1/verify/13d?subject_name=New Fortress Energy Inc.&filer_name=Strategic Value Partners, LLC
{
  "endpoint": "verify/13d",
  "coverage_start": "2026-06-22", "coverage_end": "2026-09-18",
  "status": "confirmed",
  "filings": [
    {
      "filed_date": "2026-09-18", "form_type": "SCHEDULE 13D",
      "subject_name": "New Fortress Energy Inc.", "subject_tickers": ["NFE", "NFEGP"],
      "filer_name": "Strategic Value Partners, LLC",
      "percent_of_class": 14.7, "aggregate_amount_owned": 19208710.0,
      "signal": "new_13d_bare", "stated_intent": "New 13D. No activist purpose stated.",
      "accession": "0001193125-26-395888",
      "filing_url": "https://www.sec.gov/Archives/edgar/data/1749723/0001193125-26-395888.txt"
    }
  ],
  "count": 1,
  "message": "Confirmed: 1 matching Schedule 13D/13D-A filing(s)."
}
verify_8k — confirm an 8-K material-event claim
GET https://api.tradestarinsider.com/public/v1/verify/8k?cik=1650648&company_name=4D Molecular Therapeutics, Inc.
{
  "endpoint": "verify/8k",
  "coverage_start": "2025-03-06", "coverage_end": "2026-09-22",
  "status": "confirmed",
  "filings": [
    {
      "cik": "1650648", "company_name": "4D Molecular Therapeutics, Inc.",
      "accession": "0001193125-26-277563",
      "filing_date": "2026-06-22", "event_date": "2026-06-17", "form": "8-K",
      "items": [{ "code": "5.07", "label": "Submission of Matters to a Vote of Security Holders" }],
      "filing_url": "https://www.sec.gov/Archives/edgar/data/1650648/000119312526277563/"
    }
  ],
  "count": 4,
  "message": "Confirmed: 4 matching 8-K filing(s) carrying the claimed item(s)."
}
verify_13f — confirm a 13F institutional-holding claim
GET https://api.tradestarinsider.com/public/v1/verify/13f?filer=BERKSHIRE HATHAWAY INC&issuer_name=ALPHABET INC&quarter=2026-06-30
{
  "endpoint": "verify/13f",
  "coverage_start": "2024-06-30", "coverage_end": "2026-06-30",
  "coverage_note": "Values are AS-OF quarter-end and up to ~45 days stale.",
  "status": "held",
  "filings": [
    {
      "filer_name": "BERKSHIRE HATHAWAY INC",
      "as_of_quarter_end": "2026-06-30", "filed_date": "2026-08-14", "lag_days": 45,
      "change": "added", "issuer_name": "ALPHABET INC", "title_of_class": "CAP STK CL A",
      "value_usd": 28157599351, "prior_value_usd": 15600071913, "ssh_prnamt": 78791167,
      "accession": "0001193125-26-352200",
      "filing_url": "https://www.sec.gov/Archives/edgar/data/1067983/000119312526352200/"
    }
  ],
  "count": 2,
  "message": "Held: 2 matching 13F position(s) reported as of the covered quarter."
}

Response shape

Every data route returns the same envelope; the rows live under signals, and the client's list-returning methods hand you that list directly. The verify* methods return the full envelope (you want the status and matched/filings fields).

List controls

Every list route (today, clusters, ticker, range, amendments/recent) accepts the same optional query parameters. The response echoes the ones you set under params and always reports total_matched, so you page rather than hit a silent cap.

parammeaning
limitmax rows returned (default 25, newest-first); limit<=0 removes the cap.
offsetrows to skip before this page (pagination).
dayskeep only rows filed within the last N days (relative to today).
tickercase-insensitive exact ticker filter.
as_ofpublish-boundary replay. A UTC ISO-8601 instant (or a bare YYYY-MM-DD, read as end-of-day UTC). Returns only rows that had crossed our publish boundary at or before it — the exact feed a client would have seen at that past moment.

Every listing row carries first_served_at — the UTC ISO-8601 instant that row first crossed our publish boundary (the atomic write that made it public). It is stamped once, per ingest batch, and never rewritten, so it is a stable anchor for as_of replay and for measuring publish latency. On rows materialized before this field existed it is null, explained under partial_fields (and such rows are kept by an as_of query, since they were already public before the field). as_of is the companion to days: days bounds the filing date, as_of bounds when we served it.

MCP server (for AI assistants)

Ask an AI client (Claude and other MCP clients) for these signals directly. Open, free, per-IP rate limited — no API key, no OAuth:

claude mcp add --transport http insider-signals https://mcp.tradestarinsider.com/mcp

Then ask: "Show today's insider buy signals" or "Any insider cluster buys this week? Link the filings." See examples/mcp_client.md for the tool list and a programmatic SDK example.

Pricing

RapidAPI is the checkout. Two plans: Basic (free) and one $29-a-month plan with 100,000 calls a month and full history since 2024. After subscribing, call /v1/mcp-key to get your key and both keyed URLs — the key also unlocks the paid MCP endpoint.

Hard limits, no overage — requests over the cap return 429 until the window resets. The free discovery surface and the MCP server are open and per-IP rate limited; metered API billing runs through RapidAPI.

Disclaimer

Information, not investment advice. Every figure is parsed from a public SEC filing and links to its source on sec.gov. Insider buying guarantees nothing — insiders are wrong plenty — but code P purchases are real money on the line.

License

MIT. Changelog: CHANGELOG.md.

Frequently asked questions

What is TradeStar Insider?

Filing-verified SEC EDGAR insider (Form 4), 13D, 13F & 8-K data, no sign-in. Verify any claim.

How do I install TradeStar Insider?

It runs as a remote server. In Claude Code: claude mcp add --transport http tradestar-insider 'https://mcp.tradestarinsider.com/mcp'. For other clients, paste the JSON configuration from this page into their MCP settings.

Does TradeStar Insider need an API key?

Its registry entry lists no required key or secret. Some features may still need an account with the service it connects to.

Is TradeStar Insider open source?

Yes. Its code is on GitHub under the MIT license.

Who maintains TradeStar Insider?

It is published by TradestarV5. AI.tn lists it but does not maintain or endorse it.

From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.