TradeStar Insider
Filing-verified SEC EDGAR insider (Form 4), 13D, 13F & 8-K data, no sign-in. Verify any claim.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"edgar-insider-signals": {
"command": "uvx",
"args": [
"insider-signals-mcp"
]
}
}
}Runnable packages
1.1.0stdio1.1.0stdioRemote endpoints
https://mcp.tradestarinsider.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (10)
🟢insider_buys(start, end, limit, offset, days, ...)
Use when the user asks which insiders bought a stock, whether a ticker has insider buying, or for Form 4 buys in a date range. Pass `ticker`, `start`+`end` for an inclusive ISO range, or neither for today's buys (SEC code P); `days` narrows, `include_unlisted` adds non-listed issuers. Each row carries filing_url, `offering_context`, `transaction_date`, `acceptance_datetime`, `aff10b5One` (10b5-1 flag), `is_amendment`/`original_accession` (4/A linkage), and `partial_fields` (reason for any null). Caveat: only purchases that pass the signal filter are returned; code P is not proof of a buy.
Input Schema
{
"type": "object",
"properties": {
"start": {
"type": "string",
"format": "date",
"description": "Inclusive range start, ISO YYYY-MM-DD. Give with `end` for a date range."
},
"end": {
"type": "string",
"format": "date",
"description": "Inclusive range end, ISO YYYY-MM-DD. Give with `start` for a date range."
},
"limit": {
"type": "integer",
"description": "Max rows to return (default 25, newest first). Page with offset; the response's total_matched shows the full count. limit<=0 = no cap."
},
"offset": {
"type": "integer",
"description": "Rows to skip before this page (pagination). Default 0."
},
"days": {
"type": "integer",
"description": "Only rows filed within the last N days (relative to today)."
},
"as_of": {
"type": "string",
"description": "Publish-boundary replay: UTC ISO-8601 instant (or a bare YYYY-MM-DD, read as end-of-day UTC). Returns only rows that had crossed the publish boundary at or before it — the exact feed visible at that past moment. Each row carries `first_served_at` (null on rows published before the stamp existed; those are kept, as they were already public)."
},
"include_unlisted": {
"type": "boolean",
"description": "Include unlisted issuers (blank/NONE/N/A tickers and 5-letter mutual-fund classes). Default false = exchange-listed common stock only. Every row carries a `listed_equity` boolean."
},
"ticker": {
"type": "string",
"description": "Case-insensitive exact ticker filter, e.g. DKS."
}
},
"required": [],
"additionalProperties": false
}🟢insider_cluster_buys(limit, offset, days, as_of, include_unlisted, ...)
Use when the user asks about cluster buying or several insiders buying the same company. Returns only clusters, two or more insiders buying one issuer in the window, newest first; days and ticker narrow. Each row carries filing_url, offering_context, uniform_price_cluster (true when 3+ insiders bought at one price on one day), `transaction_date`, `acceptance_datetime`, `aff10b5One` (10b5-1 flag), `is_amendment`/`original_accession` (4/A linkage), and `partial_fields` (reason for any null). Caveat: only purchases that pass the signal filter are returned; code P alone is not proof of a buy.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "Max rows to return (default 25, newest first). Page with offset; the response's total_matched shows the full count. limit<=0 = no cap."
},
"offset": {
"type": "integer",
"description": "Rows to skip before this page (pagination). Default 0."
},
"days": {
"type": "integer",
"description": "Only rows filed within the last N days (relative to today)."
},
"as_of": {
"type": "string",
"description": "Publish-boundary replay: UTC ISO-8601 instant (or a bare YYYY-MM-DD, read as end-of-day UTC). Returns only rows that had crossed the publish boundary at or before it — the exact feed visible at that past moment. Each row carries `first_served_at` (null on rows published before the stamp existed; those are kept, as they were already public)."
},
"include_unlisted": {
"type": "boolean",
"description": "Include unlisted issuers (blank/NONE/N/A tickers and 5-letter mutual-fund classes). Default false = exchange-listed common stock only. Every row carries a `listed_equity` boolean."
},
"ticker": {
"type": "string",
"description": "Case-insensitive exact ticker filter, e.g. DKS."
}
},
"required": [],
"additionalProperties": false
}🟢federal_awards_recent(min_amount, limit, offset, days)
Use when the user asks about recent federal contracts, government awards, or who won a U.S. federal contract. Returns newly signed federal awards, newest first; `min_amount` sets a USD floor, `days` a last-N-days window. Every award carries its source award_url. Caveat: awards without a source link are dropped and never returned.
Input Schema
{
"type": "object",
"properties": {
"min_amount": {
"type": "number",
"description": "Only awards at or above this USD amount"
},
"limit": {
"type": "integer",
"description": "Max rows to return (default 25, newest first). Page with offset; the response's total_matched shows the full count. limit<=0 = no cap."
},
"offset": {
"type": "integer",
"description": "Rows to skip before this page (pagination). Default 0."
},
"days": {
"type": "integer",
"description": "Only awards signed within the last N days."
}
},
"required": [],
"additionalProperties": false
}🟢activist_stakes_recent(min_percent, ticker, limit, offset, days)
Use when the user asks about activist investors, hedge-fund stakes, or recent 13D filings on a company. Returns activist Schedule 13D/13D-A filings on US-listed companies, newest first then by stated-intent strength; `ticker`, `min_percent` and `days` narrow. Each row carries its source filing_url and `item4_excerpt` (the activist's own Item 4 intent sentence, quoted from the filing as data, capped at its current length of 600 chars). Caveat: passive 13G is not covered; filings without a source link are dropped.
Input Schema
{
"type": "object",
"properties": {
"min_percent": {
"type": "number",
"description": "Only stakes at or above this percent-of-class"
},
"ticker": {
"type": "string",
"description": "Filter to one subject ticker (case-insensitive), e.g. DH"
},
"limit": {
"type": "integer",
"description": "Max rows to return (default 25, newest first). Page with offset; the response's total_matched shows the full count. limit<=0 = no cap."
},
"offset": {
"type": "integer",
"description": "Rows to skip before this page (pagination). Default 0."
},
"days": {
"type": "integer",
"description": "Only stakes filed within the last N days."
}
},
"required": [],
"additionalProperties": false
}🟢fund_position_changes(filer, change_type, min_value_usd, limit, offset, ...)
Use when the user asks what a fund bought or sold, how a 13F filer changed its holdings, or which institutions opened/added/trimmed/exited a position. Returns quarter-over-quarter deltas, newest first; `filer`, `change_type`, `min_value_usd`, `days` narrow. Each row carries as_of_quarter_end, filed_date, lag_days, value_usd (whole dollars), cusip, issuer_name and its source filing_url; ticker is null (never guessed). Caveat: the delta is the product, not a trading edge — see the instructions and each response's `coverage` note for the universe and CIK scope.
Input Schema
{
"type": "object",
"properties": {
"filer": {
"type": "string",
"description": "Filter to one fund by name substring (case-insensitive, e.g. 'Berkshire') or exact filer CIK"
},
"change_type": {
"type": "string",
"enum": [
"new_position",
"added",
"trimmed",
"exited",
"no_prior_quarter"
],
"description": "Only this kind of quarter-over-quarter change"
},
"min_value_usd": {
"type": "number",
"description": "Only positions at or above this current value in WHOLE US dollars"
},
"limit": {
"type": "integer",
"description": "Max rows to return (default 25, newest first). Page with offset; the response's total_matched shows the full count. limit<=0 = no cap."
},
"offset": {
"type": "integer",
"description": "Rows to skip before this page (pagination). Default 0."
},
"days": {
"type": "integer",
"description": "Only changes filed within the last N days."
}
},
"required": [],
"additionalProperties": false
}🟢insider_amendments_recent(ticker, issuer_name, person, start, end, ...)
Use when the user asks which insider filings were amended, corrected, or restated, or wants recent Form 4/A amendments. Returns 4/A amendments, newest-filed first; `ticker`, `issuer_name`, `person`, `start`/`end`, `days` narrow. Each row carries the amendment_accession, filed_date, issuer/insider, source filing_url, the original_accession it amends (when collected), and `changed_fields` (before/after). Caveat: when the original is not collected the amendment is still listed with original_in_corpus=false and before/after null (never guessed); linkage is by issuer/owner/period.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Filter to one issuer ticker (case-insensitive substring), e.g. GLBZ"
},
"issuer_name": {
"type": "string",
"description": "Filter by issuer/company name substring (case-insensitive)"
},
"person": {
"type": "string",
"description": "Filter by insider name substring (case-insensitive)"
},
"start": {
"type": "string",
"format": "date",
"description": "Only amendments filed on/after this ISO date"
},
"end": {
"type": "string",
"format": "date",
"description": "Only amendments filed on/before this ISO date"
},
"limit": {
"type": "integer",
"description": "Max rows to return (default 25, newest first). Page with offset; the response's total_matched shows the full count. limit<=0 = no cap."
},
"offset": {
"type": "integer",
"description": "Rows to skip before this page (pagination). Default 0."
},
"days": {
"type": "integer",
"description": "Only amendments filed within the last N days."
},
"as_of": {
"type": "string",
"description": "Publish-boundary replay: UTC ISO-8601 instant (or a bare YYYY-MM-DD, read as end-of-day UTC). Returns only rows that had crossed the publish boundary at or before it — the exact feed visible at that past moment. Each row carries `first_served_at` (null on rows published before the stamp existed; those are kept, as they were already public)."
}
},
"required": [],
"additionalProperties": false
}🟢verify_insider_purchase(ticker, issuer_name, person, amount_usd, shares, ...)
Use when the user wants to verify a claim that an insider bought a stock, or to pull the purchases in one filing by accession. Pass the claim (ticker/issuer, person, amount, timeframe), or `accession` alone for that filing's gated purchase records. Returns confirmed, not_found, partial, out_of_scope (sales/options/grants), or out_of_coverage. Each matched filing carries `transaction_date`, `acceptance_datetime`, `aff10b5One` (10b5-1 flag), `is_amendment`/`original_accession` (4/A linkage), and `partial_fields` (reason for any null). Caveat: filing-verified — absence is reported, not guessed.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Issuer ticker (case-insensitive), e.g. CAVA"
},
"issuer_name": {
"type": "string",
"description": "Issuer/company name (use if you don't have the ticker)"
},
"person": {
"type": "string",
"description": "Insider name in any order, e.g. 'Alfonso de Angoitia'"
},
"amount_usd": {
"type": "number",
"description": "Claimed purchase value in USD (matched ±5% or ±$1)"
},
"shares": {
"type": "number",
"description": "Claimed share count"
},
"date": {
"type": "string",
"format": "date",
"description": "Claimed date, ISO YYYY-MM-DD (matched ±3 filing days)"
},
"start": {
"type": "string",
"format": "date",
"description": "Window start (ISO) if the claim is a range"
},
"end": {
"type": "string",
"format": "date",
"description": "Window end (ISO) if the claim is a range"
},
"txn_type": {
"type": "string",
"description": "Optional; only code P purchases are covered — sale/option/grant returns out_of_scope"
},
"accession": {
"type": "string",
"description": "SEC filing accession, e.g. 0001493152-26-040454. If you already have the exact filing, pass this to pull its gated purchase records directly — it is used alone and ignores the claim fields above."
}
},
"required": [],
"additionalProperties": false
}🟢verify_activist_13d(ticker, subject_name, filer_name, percent_of_class, intent, ...)
Use when the user wants to verify or fact-check a claim about an activist stake or 13D filing (ticker/subject, filer, percent-of-class, stated intent, timeframe). Returns confirmed (with source filing + link), not_found, partial (itemised claimed-vs-filed), out_of_scope (passive 13G isn't covered), or out_of_coverage. Every response states the coverage window checked. Caveat: filing-verified — absence is reported as absence, never guessed.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"description": "Subject-company ticker (case-insensitive), e.g. DH"
},
"subject_name": {
"type": "string",
"description": "Subject/target company name (use if you don't have the ticker)"
},
"filer_name": {
"type": "string",
"description": "Activist filer name in any order, e.g. 'Elliott Management'"
},
"percent_of_class": {
"type": "number",
"description": "Claimed percent-of-class owned (matched ±0.5 percentage points)"
},
"intent": {
"type": "string",
"enum": [
"I1",
"I2",
"I3"
],
"description": "Optional pre-registered intent: I1 control/take-private, I2 board/proxy, I3 strategic/value"
},
"date": {
"type": "string",
"format": "date",
"description": "Claimed filed date, ISO YYYY-MM-DD (matched ±3 filing days)"
},
"start": {
"type": "string",
"format": "date",
"description": "Window start (ISO) if the claim is a range"
},
"end": {
"type": "string",
"format": "date",
"description": "Window end (ISO) if the claim is a range"
},
"form_type": {
"type": "string",
"description": "Optional; only activist 13D/13D-A is covered — a passive 13G returns out_of_scope"
}
},
"required": [],
"additionalProperties": false
}🟢verify_8k_event(cik, company_name, accession, items, date, ...)
Use when the user wants to verify or fact-check that a company filed an 8-K carrying specific SEC item code(s) in a timeframe. Pass registrant (cik/company/accession), item code(s) and dates. Returns confirmed (with source filing + link), not_found, partial (itemised claimed-vs-filed), out_of_scope (claims about the filing's meaning aren't covered — it is never paraphrased), or out_of_coverage. Caveat: filing-verified — item codes are the SEC controlled vocabulary parsed from the filing, never inferred.
Input Schema
{
"type": "object",
"properties": {
"cik": {
"type": "string",
"description": "Registrant CIK (leading zeros ignored), e.g. 320193"
},
"company_name": {
"type": "string",
"description": "Registrant name substring (case-insensitive), e.g. 'Apple'"
},
"accession": {
"type": "string",
"description": "SEC filing accession, e.g. 0001193125-26-389400"
},
"items": {
"type": "string",
"description": "Claimed SEC 8-K item code(s), comma-separated (e.g. '5.02' or '1.01,9.01') — checked against the filing"
},
"date": {
"type": "string",
"format": "date",
"description": "Claimed filing date, ISO YYYY-MM-DD (matched ±3 filing days)"
},
"start": {
"type": "string",
"format": "date",
"description": "Window start (ISO) if the claim is a range"
},
"end": {
"type": "string",
"format": "date",
"description": "Window end (ISO) if the claim is a range"
}
},
"required": [],
"additionalProperties": false
}🟢verify_13f_change(filer, issuer_name, cusip, quarter, start, ...)
Use when the user wants to verify or fact-check whether a fund (filer name/CIK) reported a CHANGE in a position in an issuer (issuer_name or cusip) in a quarter. Returns held (reported a change — opened/added/trimmed, with source filing + link), not_held (reported the position exited), not_found (no reported change — does NOT mean the fund didn't hold it), or out_of_coverage. Caveat: filing-verified; CANNOT confirm an unchanged holding (13F deltas only) — a 'held, unchanged' position produces no row.
Input Schema
{
"type": "object",
"properties": {
"filer": {
"type": "string",
"description": "Fund/institution name substring (case-insensitive, e.g. 'Berkshire') or exact filer CIK — REQUIRED"
},
"issuer_name": {
"type": "string",
"description": "Held company/issuer name (e.g. 'Apple') — give this or cusip"
},
"cusip": {
"type": "string",
"description": "9-char CUSIP of the held security — give this or issuer_name. (ticker is never accepted: 13F carries no authoritative ticker)"
},
"quarter": {
"type": "string",
"format": "date",
"description": "As-of quarter-end the claim is about, ISO YYYY-MM-DD (e.g. '2026-06-30')"
},
"start": {
"type": "string",
"format": "date",
"description": "Quarter-window start (ISO) if the claim spans quarters"
},
"end": {
"type": "string",
"format": "date",
"description": "Quarter-window end (ISO) if the claim spans quarters"
}
},
"required": [],
"additionalProperties": false
}Community
Evidence