Skip to main content
Glama
TradestarV5

Insider Signals MCP Server

by TradestarV5

Insider Buy Signals

Filing-verified U.S. insider open-market purchase signals, parsed straight from SEC EDGAR Form 4 filings. This repo is the MIT-licensed client library and worked examples for the TradeStar Insider API and MCP server.

What the data is

We read Form 4 filings from SEC EDGAR and keep only the open-market buys that carry information:

  • Cluster buys — two or more insiders buying the same company inside a single window of seven calendar days or fewer.

  • Large buys — purchases large relative to the insider's existing holdings.

Option exercises, 10b5-1 planned sales, and sub-threshold noise (below $50,000) are dropped. Every field we return — shares, price, dollar value, percent versus holdings — is parsed from a real 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 Rule 2.

Related MCP server: SEC EDGAR MCP

What the data is not

It is not a prediction. We tested whether these two filters precede price moves over our own history and could not find a return edge distinguishable from base rate, so we do not claim one. 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: 172 U.S. trading days, 2026-01-20 → 2026-09-23, no gaps in the window (market holidays such as Presidents' Day carry no filings and are not gaps). Read the live number any time at /v1/health.

  • Completeness: we capture 93.70% of in-window open-market 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.

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

Tier

Methods

Access

Free (no key)

health, today, clusters, verify, verify_13d, verify_8k, verify_13f

Open /public/v1, per-IP rate limited

Keyed (RapidAPI)

by_ticker, by_range, filing, fund_changes, federal_awards_recent, activist_stakes_recent

Metered, 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 (coverage as of 2026-09-23).

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,
  "params": { "date": "2026-09-24" },
  "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": 1596,
  "signals": [
    {
      "filed_date": "2026-07-22",
      "ticker": "CLBK",
      "issuer_name": "Columbia Financial, Inc./MD/",
      "insider": "Splaine Thomas Jr",
      "relationship": { "director": false, "officer": true, "officer_title": "EVP, CFO" },
      "code": "P",
      "shares": 50000.0, "price_per_share": 10.0, "value_usd": 500000.0,
      "cluster": true, "cluster_insiders": 16, "cluster_notional": 4760370.0,
      "accession": "0001339736-26-000014",
      "filing_url": "https://www.sec.gov/Archives/edgar/data/2115119/000133973626000014/0001339736-26-000014-index.htm"
    }
  ]
}

verify — confirm an insider open-market-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 open-market purchases (code P) 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",
      "filing_url": "https://www.sec.gov/Archives/edgar/data/2088082/000094787126000880/0000947871-26-000880-index.htm"
    }
  ],
  "count": 2,
  "message": "Confirmed: 2 matching Form-4 open-market 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.

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).

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

Plan

Price

Requests

Basic

$0

3,000 / month

Pro

$18 / month

10,000 / month

Ultra

$58 / month

100,000 / month

Mega

$100 / month

500,000 / month

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 open-market purchases are real money on the line.

License

MIT. Changelog: CHANGELOG.md.

Available Tools

12 tools
activist_stakes_recentRecent activist stakes (SEC Schedule 13D)AInspect

Recent activist Schedule 13D / 13D-A filings on US-listed companies, newest first then by stated-intent strength (control/take-private > board/proxy > strategic/value, or none stated). Returns the newest 25 by default (set limit; page with offset); total_matched reports the full count. Optional min_percent (percent-of-class floor), ticker, and days (last-N-days window). Every stake carries its source filing_url; filings without a source link are dropped.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoOnly stakes filed within the last N days.
limitNoMax rows to return (default 25, newest first). Page with offset; the response's total_matched shows the full count. limit<=0 = no cap.
offsetNoRows to skip before this page (pagination). Default 0.
tickerNoFilter to one subject ticker (case-insensitive), e.g. DH
min_percentNoOnly stakes at or above this percent-of-class

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses several behavioral traits: newest-first ordering with intent-strength tiebreaker, default limit of 25, pagination via offset, total_matched count reporting, and the data-quality rule that filings without a source filing_url are dropped. This is strong behavioral disclosure for a read-only query tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, all informative, with the core purpose front-loaded and no redundant filler. Every sentence earns its place by adding sorting, pagination, filtering, or data-quality context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, full parameter schema coverage, and absence of an output schema, the description is complete enough to invoke correctly. It covers ordering, default limit, pagination, all optional filters, the count field, and the source-link requirement, leaving no critical operational gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters. The description adds little beyond restating limit/offset/total_matched behavior already present in the schema, so it does not significantly enhance parameter-level understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource ('Recent activist Schedule 13D / 13D-A filings on US-listed companies') and a clear operation ('Returns the newest 25 by default'), with distinctive sorting by stated-intent strength. This makes the tool clearly distinguishable from siblings like verify_activist_13d and insider_signals_today.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: when you need recent activist Schedule 13D/13D-A filings, with optional filtering by ticker, percent, and days. It does not explicitly name alternative tools or state when not to use it, but the context is unambiguous enough to infer appropriate use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

federal_awards_recentRecent federal contract awards (USAspending)AInspect

Recently signed U.S. federal new awards from USAspending.gov, newest first. Returns the newest 25 by default (set limit; page with offset); total_matched reports the full count. Optional min_amount (USD floor) and days (last-N-days window). Every award carries its source award_url; awards without a source link are dropped and never returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoOnly awards signed within the last N days.
limitNoMax rows to return (default 25, newest first). Page with offset; the response's total_matched shows the full count. limit<=0 = no cap.
offsetNoRows to skip before this page (pagination). Default 0.
min_amountNoOnly awards at or above this USD amount

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral disclosure. It proactively reveals a non-obvious behavior: awards without a source link are dropped and never returned. It also clarifies ordering, pagination behavior, and the total_matched field. This goes beyond a generic 'returns awards' statement and helps an agent set expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences: purpose and ordering first, pagination and defaults second, filters and a key behavioral caveat third. Every sentence contributes distinct information and there is no filler or repetition of the schema field names.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with no output schema and no annotations, the description covers the necessary operational details: default page size, pagination, filtering, full count, and the dropped-award behavior. It does not enumerate award fields beyond award_url, but an agent can still call the tool correctly; the missing return schema is a minor gap given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema: it specifies the default limit (25), the 'newest first' ordering, the use of total_matched for full count, and interprets min_amount as a 'USD floor' and days as a 'last-N-days window'. This helps an agent compose correct queries without opening the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Returns the newest U.S. federal new awards from USAspending.gov', and explicitly states ordering ('newest first'). It clearly distinguishes itself from the sibling tools, which are all about insider trading and 13F filings, by naming its unique data source and subject.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear operational context: default limit of 25, pagination via offset, total_matched for full count, min_amount and days as optional filters. It does not explicitly name alternatives or exclusions, but none of the sibling tools are relevant substitutes, so the guidance is sufficient for an agent to know when to invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fund_position_changesFund position changes (SEC 13F quarter-over-quarter)AInspect

What large institutional filers CHANGED quarter-over-quarter in their SEC 13F-HR holdings (opened / added / trimmed / exited a position) — the delta is the product; the raw snapshot is only the input. Every row carries as_of_quarter_end, filed_date and lag_days (values are up to ~45 days stale), value_usd in whole dollars, cusip + issuer_name, and its source filing_url. ticker is null (no authoritative free CUSIP->ticker source; never guessed). A missing prior quarter is the explicit state 'first_filing_on_record', not 'everything new'. Covers LONG US 13(f)-listed positions only — no shorts, non-US, or options. UNIVERSE: the fifty largest 13F filers by reported value as of the latest quarter, re-ranked quarterly. Because it is ranked BY REPORTED VALUE, the head is the biggest asset managers (BlackRock, Vanguard, State Street, Fidelity, ...) whose quarter-over-quarter changes largely reflect index rebalancing, not conviction; the feed reports WHAT WAS FILED, not what it means, and does not tag any manager active or passive (that would be inference). Coverage is PER SEC CIK, not per brand: a firm filing under several CIKs appears as several entries, and when a filer's 13F moves to a new CIK, historical coverage stays attached to the CIK that filed it. This is a convenience/completeness view of public data, NOT a trading edge. Returns the newest 25 by default (set limit; page with offset); total_matched reports the full count. Optional filer, change_type, min_value_usd, and days (last-N-days window).

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoOnly changes filed within the last N days.
filerNoFilter to one fund by name substring (case-insensitive, e.g. 'Berkshire') or exact filer CIK
limitNoMax rows to return (default 25, newest first). Page with offset; the response's total_matched shows the full count. limit<=0 = no cap.
offsetNoRows to skip before this page (pagination). Default 0.
change_typeNoOnly this kind of quarter-over-quarter change
min_value_usdNoOnly positions at or above this current value in WHOLE US dollars

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden and excels: it discloses data staleness (~45 days), ticker null policy, 'first_filing_on_record' state, CIK vs brand coverage, re-ranking, active/passive non-tagging, and the nature as a convenience view. This is exemplary transparency beyond what any schema could encode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence carries substantive information—no filler. It front-loads the core purpose and then layers caveats logically. While a bit dense, the structure is efficient for the tool's complexity, earning a 4 rather than 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description enumerates all returned fields (as_of_quarter_end, filed_date, lag_days, value_usd, cusip, issuer_name, filing_url, ticker) and covers pagination, defaults, filtering, and edge cases. An agent has everything needed to call it correctly and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter already has a descriptive schema entry (e.g., 'filer' substring/CIK, 'change_type' enum, 'min_value_usd' in whole dollars). The description adds marginal semantic value, mostly reinforcing pagination defaults. It meets the baseline 3 without adding new meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb+resource: 'What large institutional filers CHANGED quarter-over-quarter in their SEC 13F-HR holdings'. It explicitly contrasts the delta product vs raw snapshot, and distinguishes from siblings like verify_13f_holding by focusing on changes, not static holdings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by clarifying what it covers (LONG US 13(f)-listed positions, top 50 filers) and what it doesn't (shorts, non-US, options). It also warns 'NOT a trading edge' and explains that changes reflect index rebalancing, guiding an agent on interpretation. It does not name specific sibling tools, but the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insider_cluster_buysInsider cluster buysAInspect

Rule-2 cluster buys only (>=2 insiders buying the same issuer in-window) — the highest-signal subset. Each row carries uniform_price_cluster: true when >=3 distinct insiders bought at the IDENTICAL price on the same filed_date for the same issuer — the fingerprint of an offering/conversion (one administered price), NOT independent open-market conviction. Note Form-4 code P covers open-market purchases AND some offering/conversion purchases filed under P; this flag marks the latter. Genuine clusters rank ABOVE uniform-price ones. Returns the newest 25 by default (set limit; page with offset; optional days/ticker); total_matched reports the full count. Each record carries its source filing_url.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoOnly rows filed within the last N days (relative to today).
limitNoMax rows to return (default 25, newest first). Page with offset; the response's total_matched shows the full count. limit<=0 = no cap.
offsetNoRows to skip before this page (pagination). Default 0.
tickerNoCase-insensitive exact ticker filter, e.g. DKS.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral-disclosure burden. It explains the uniform_price_cluster flag, the Form-4 code P ambiguity, the ranking of genuine clusters above uniform-price ones, default limit and pagination, total_matched, and filing_url. This is far more transparency than a typical 'returns cluster buys' statement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and organized: scope, flag caveat, ranking, pagination, and source URL. No sentence is filler; the Form-4 note is essential to interpreting uniform_price_cluster correctly. It is somewhat long and packed into one paragraph, so it is not maximally concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite lacking an output schema, it tells the agent the key returned fields (uniform_price_cluster, total_matched, filing_url) and the exact collection semantics: newest 25 by default, limit/offset pagination, optional days/ticker filters, and ordering/ranking. Nothing critical is missing for a read-only filtered query tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds semantic guidance: 'set limit; page with offset; optional days/ticker; total_matched reports the full count' and reiterates default 25 newest-first. This is a modest but real addition over the input schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with 'Rule-2 cluster buys only (>=2 insiders buying the same issuer in-window)' and later 'Returns the newest 25' – a specific resource and filtering rule. This clearly identifies it as the focused cluster-buy subset and distinguishes it from broader insider-signal siblings without needing to inspect their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Rule-2 cluster buys only' plus 'highest-signal subset' tells an agent to use this endpoint for high-conviction cluster signals, not general single-insider signals. It also explains the uniform-price distinction and ranking, but it does not name sibling tools or state explicit when-not conditions, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insider_filing_lookupSingle filing lookup by accessionAInspect

The single Rule-2 record for one SEC filing accession, with its filing_url. Returns an error if no gated filing matches the accession.

ParametersJSON Schema
NameRequiredDescriptionDefault
accessionYesSEC filing accession, e.g. 0001493152-26-040454

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does disclose the return item (single Rule-2 record + filing_url) and an error on no gated match. It does not, however, mention read-only/safety status, access restrictions, or any other operational constraints beyond the brief 'gated' hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler; the resource and scope are front-loaded and the error condition adds useful information. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with no output schema, the description provides the lookup key, the returned object (including filing_url), and the failure condition. It is complete enough to invoke correctly, though the full Rule-2 record shape is not enumerated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents the only parameter (accession) with an example, so the description adds no new parameter-level meaning. With 100% schema coverage, baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific resource: the single Rule-2 SEC filing record for one accession, and states that it includes the filing_url. This accession-keyed lookup is clearly distinguished from sibling signal/date/ticker tools, so an agent can tell what it does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for one SEC filing accession' implies that the tool is for resolving a single known filing ID, but the description never explicitly says when to prefer it over the sibling signal/cluster tools or when not to use it. Usage is inferable rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insider_signals_by_date_rangeInsider-buy signals in a date rangeAInspect

Rule-2 insider-buy signals filed within an inclusive ISO date range. Returns the newest 25 by default (set limit; page with offset; optional days/ticker); total_matched reports the full count. Each record carries its source filing_url.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYesInclusive end date, ISO YYYY-MM-DD
daysNoOnly rows filed within the last N days (relative to today).
limitNoMax rows to return (default 25, newest first). Page with offset; the response's total_matched shows the full count. limit<=0 = no cap.
startYesInclusive start date, ISO YYYY-MM-DD
offsetNoRows to skip before this page (pagination). Default 0.
tickerNoCase-insensitive exact ticker filter, e.g. DKS.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does well: it discloses the default limit of 25, pagination via offset, the total_matched count, and the filing_url on each record. It does not cover error behavior or the interaction between days and start/end, but the core query behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two dense, well-structured sentences that front-load the core purpose and then compactly cover defaults, pagination, filtering, and response context. There is no filler or redundant repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only query tool with no output schema and no annotations, this description is largely complete: it explains default behavior, pagination, full count, and a key response field. Minor gaps include the undefined meaning of 'Rule-2' and the ambiguous interplay of days with start/end, but these do not block correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and each parameter already has a meaningful description. The tool description restates limit/offset/days/ticker behavior and mentions total_matched, but adds little semantic meaning beyond what the input schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Returns'), a concrete resource ('Rule-2 insider-buy signals'), and a clear scope (filed within an inclusive ISO date range). This distinguishes it from siblings like insider_signals_by_ticker and insider_signals_today.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The date-range focus is clear, and optional filters like ticker and days signal when this tool is appropriate. It does not explicitly name alternatives or exclusion criteria, but the context is strong enough for an agent to select it for date-based insider-buy signal queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insider_signals_by_tickerInsider-buy signals for a tickerAInspect

All Rule-2 insider-buy signals for one ticker (case-insensitive). Returns the newest 25 by default (set limit; page with offset; optional days); total_matched reports the full count. Each record carries its source filing_url.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoOnly rows filed within the last N days (relative to today).
limitNoMax rows to return (default 25, newest first). Page with offset; the response's total_matched shows the full count. limit<=0 = no cap.
offsetNoRows to skip before this page (pagination). Default 0.
tickerYesTicker symbol (case-insensitive), e.g. DKS

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden, and it discloses the default limit of 25 newest-first, pagination via offset, optional days filtering, the total_matched count behavior, and filing_url on each record. It could add details about invalid-ticker handling or what Rule-2 means, but the main behavioral surface is covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: scope first, then defaults and pagination, then response highlights. Every clause adds operational value and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-required-parameter listing endpoint, the description is complete: it explains the default behavior, how to paginate, the optional time filter, the full count field, and the source URL on each record. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All four parameters are already documented in the schema (100% coverage), so the baseline is 3. The description mostly restates the schema's default, pagination, and days behavior without adding genuinely new semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening phrase 'All Rule-2 insider-buy signals for one ticker' names a specific resource and scope, and the title reinforces the ticker focus. The case-insensitive note and pagination details make the tool's job unambiguous and distinguish it from date-range or cluster siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states that the tool is scoped to a single ticker and explains how to page and filter, so an agent can infer when it is the right choice for a known-ticker signal query. It does not explicitly name alternatives or say when not to use it, but the ticker scope implicitly separates it from insider_signals_by_date_range and insider_signals_today.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insider_signals_todayToday's insider-buy signalsAInspect

Rule-2 insider-buy signals filed today (SEC code P open-market purchases). Returns the newest 25 by default (set limit; page with offset); the response's total_matched reports the full count. Optional days/ticker filters. Each record carries its source filing_url.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoOnly rows filed within the last N days (relative to today).
limitNoMax rows to return (default 25, newest first). Page with offset; the response's total_matched shows the full count. limit<=0 = no cap.
offsetNoRows to skip before this page (pagination). Default 0.
tickerNoCase-insensitive exact ticker filter, e.g. DKS.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses pagination via limit/offset, the total_matched count, and that each record has a filing_url. It does not mention rate limits or auth, but as a read-only query tool, the key behaviors are covered. The default of 25 and the limit<=0 no-cap behavior are also noted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The main purpose is stated first, followed by key behavioral details and parameter hints. Every clause adds information, and the structure is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should clarify the response shape. It mentions total_matched and filing_url, giving some idea of the structure. However, it does not list all fields returned or describe error scenarios. Given the simplicity of the tool (4 optional params, no nesting), this is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter already has a description. The tool description adds value by explaining how the parameters work together (e.g., default limit of 25, pagination with offset, and total_matched for full count). It also highlights the optional days/ticker filters, which helps an agent understand the intended usage context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns insider-buy signals that meet a specific rule (Rule-2, SEC code P open-market purchases) and are filed today by default. It explicitly names the resource and the action, and the detail about the default behavior (newest 25) distinguishes it from sibling tools like insider_signals_by_date_range or insider_signals_by_ticker.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for 'today' with optional days/ticker filters, but it does not explicitly compare to sibling tools or state when not to use it. The context is clear enough for an agent to infer that for arbitrary date ranges or specific tickers, other tools might be more appropriate, but this is not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_13f_holdingVerify a 13F holding claim against SEC Form 13F-HRAInspect

Check whether a fund (filer name/CIK) HELD an issuer (issuer_name or cusip) as of a quarter, against the filed 13F-HR record. Returns status=held with the source filing(s) + link; not_held (the fund reported the position EXITED that quarter — a filed 'no', distinct from not_found); not_found (no such row in the covered window); or out_of_coverage (the claimed quarter is outside the collected as-of window). Every response states the coverage window checked. Rule-2: LONG US 13(f) positions only, values are as-of quarter-end and up to ~45 days stale, and ticker is never guessed — match on issuer_name or cusip.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoQuarter-window end (ISO) if the claim spans quarters
cusipNo9-char CUSIP of the held security — give this or issuer_name. (ticker is never accepted: 13F carries no authoritative ticker)
filerNoFund/institution name substring (case-insensitive, e.g. 'Berkshire') or exact filer CIK — REQUIRED
startNoQuarter-window start (ISO) if the claim spans quarters
quarterNoAs-of quarter-end the claim is about, ISO YYYY-MM-DD (e.g. '2026-06-30')
issuer_nameNoHeld company/issuer name (e.g. 'Apple') — give this or cusip

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it delivers: it discloses distinct negative outcomes (not_held as a filed 'no' vs not_found), the coverage-window concept, staleness ('up to ~45 days stale'), and the guarantee that 'Every response states the coverage window checked.' These are behavioral traits an agent cannot infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause earns its place: core action in the first sentence, outcome vocabulary immediately after, and a compact 'Rule-2' for limitations. No filler or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, it is remarkably complete: the possible return statuses, source link, coverage window, match key rules, and staleness are all stated. An agent can predict both the input requirements and the likely response variants before invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains why ticker is never accepted, ties values to quarter-end as-of dates, and explains start/end as a span when the claim crosses quarters. One inconsistency remains: the schema's required array is empty while the filer property is marked REQUIRED, though the description itself at least identifies filer as the key lookup input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific check verb and resource ('Check whether a fund (filer name/CIK) HELD an issuer ... against the filed 13F-HR record') and enumerates distinct return statuses (held, not_held, not_found, out_of_coverage), making the tool's purpose unmistakable. This is clearly separated from sibling verification tools by the 13F-specific scope and status vocabulary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly sets the context: verifying a historical 13F holding claim by quarter, and even gives exclusions ('LONG US 13(f) positions only', 'ticker is never accepted'). It does not explicitly name sibling tools or state when another verification tool would be preferred, so it stops short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_8k_eventVerify an 8-K disclosure claim against SEC Form 8-KAInspect

Check a claim that a registrant (cik/company/accession) filed an 8-K carrying specific SEC item code(s) in a timeframe, against the filed record. Returns status=confirmed with the source filing(s) + link; not_found; partial (same registrant/filing but the claimed item(s) aren't carried, or the date differs — itemised claimed-vs-filed); out_of_scope (claims about the body's meaning/materiality aren't covered — the filing is never paraphrased); or out_of_coverage. Every response states the coverage window checked. Rule-2: item codes are the SEC controlled vocabulary parsed from the filing — never inferred from prose.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikNoRegistrant CIK (leading zeros ignored), e.g. 320193
endNoWindow end (ISO) if the claim is a range
dateNoClaimed filing date, ISO YYYY-MM-DD (matched ±3 filing days)
itemsNoClaimed SEC 8-K item code(s), comma-separated (e.g. '5.02' or '1.01,9.01') — checked against the filing
startNoWindow start (ISO) if the claim is a range
accessionNoSEC filing accession, e.g. 0001193125-26-389400
company_nameNoRegistrant name substring (case-insensitive), e.g. 'Apple'

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it delivers: it discloses the matching tolerance (±3 filing days), the partial-match semantics (same registrant/filing but item/date mismatch), the out_of_scope boundary (no paraphrasing of filing meaning), the out_of_coverage case, and the invariant that every response states the coverage window. It also states Rule-2, that item codes are parsed from the filing, never inferred from prose. This is rich behavioral disclosure beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized: it front-loads the core verification purpose, then enumerates return statuses, then states the coverage-window invariant and Rule-2. Every sentence earns its place, though the status enumeration is long and could arguably be tightened. It is appropriately sized for a tool with 7 parameters and no annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a verification tool with 7 optional parameters, no output schema, and no annotations, the description is quite complete: it explains the return statuses, the matching tolerance, the coverage window, and the item-code parsing rule. It does not explicitly explain how the optional parameters combine (e.g., whether cik/company/accession are alternatives or all required), but the schema's 100% coverage and the description's status semantics make the tool usable. A small gap remains around parameter combination logic.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 7 parameters. The description adds context about how the parameters are used together (e.g., 'in a timeframe', 'claimed item(s)'), and the ±3 filing-day tolerance for the date parameter, but it does not need to restate each parameter. Baseline 3 is appropriate because the schema does the heavy lifting and the description adds only marginal semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Check'), a precise resource ('a claim that a registrant ... filed an 8-K carrying specific SEC item code(s) in a timeframe'), and the exact verification target. It clearly distinguishes itself from sibling tools by focusing on 8-K item-code verification, not activist stakes, insider purchases, or fund positions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the verification workflow and enumerates all possible return statuses (confirmed, not_found, partial, out_of_scope, out_of_coverage), which tells an agent what to expect. It does not explicitly name sibling alternatives or state when not to use this tool, but the status semantics and Rule-2 boundary provide clear context for when it applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_activist_13dVerify an activist 13D claim against SEC Schedule 13D/13D-AAInspect

Check a claim about an activist stake (ticker/subject, filer, percent-of-class, stated intent, timeframe) against the filed Schedule 13D/13D-A record. Returns status=confirmed with the source filing(s) + link; not_found; partial (same filer/subject but percent/intent/date differs, itemised claimed-vs-filed); out_of_scope (passive 13G isn't covered); or out_of_coverage (outside the collected window). Every response states the coverage window checked. Rule-2: no estimates — absence is reported as absence, never guessed.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoWindow end (ISO) if the claim is a range
dateNoClaimed filed date, ISO YYYY-MM-DD (matched ±3 filing days)
startNoWindow start (ISO) if the claim is a range
intentNoOptional pre-registered intent: I1 control/take-private, I2 board/proxy, I3 strategic/value
tickerNoSubject-company ticker (case-insensitive), e.g. DH
form_typeNoOptional; only activist 13D/13D-A is covered — a passive 13G returns out_of_scope
filer_nameNoActivist filer name in any order, e.g. 'Elliott Management'
subject_nameNoSubject/target company name (use if you don't have the ticker)
percent_of_classNoClaimed percent-of-class owned (matched ±0.5 percentage points)

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral disclosure burden, and it does so strongly. It reveals the status taxonomy, explains what 'partial' means, promises that every response states the coverage window, and explicitly states the no-estimates rule: absence is reported as absence, never guessed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient: each sentence contributes either scope, return behavior, coverage disclosure, or the no-guessing rule. There is no filler, and the most important purpose statement is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is richly complete for a verification tool with no output schema: it defines all response statuses and coverage behavior. However, all nine schema parameters are optional and the description never states the minimum required claim information, such as at least one identifying field, nor what happens if the agent calls it with no claim details at all.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all nine parameters, including tolerances like ±3 filing days and ±0.5 percentage points. The description adds framing about claim components but does not materially extend parameter meaning beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Check a claim ... against the filed Schedule 13D/13D-A record.' It goes beyond a generic verify action by enumerating the exact statuses returned and explicitly excluding passive 13G coverage, which differentiates it from related verification tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when the tool applies: activist 13D/13D-A claims only, with out_of_scope as the result for passive 13G filings and out_of_coverage outside the collected window. It does not explicitly name sibling alternatives such as verify_insider_purchase or activist_stakes_recent, so it stops short of a full when-to-use vs. alternatives statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_insider_purchaseVerify an insider-purchase claim against SEC Form 4AInspect

Check a claim about an insider open-market buy (ticker/issuer, person, amount, timeframe) against the filed record. Returns status=confirmed with the source filing(s) + link; not_found; partial (same insider/company but value/date differs, itemised claimed-vs-filed); out_of_scope (sales/options/grants aren't covered); or out_of_coverage (outside the collected window). Every response states the coverage window checked. Rule-2: no estimates, no unlabelled partial matches — absence is reported as absence, never guessed.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoWindow end (ISO) if the claim is a range
dateNoClaimed date, ISO YYYY-MM-DD (matched ±3 filing days)
startNoWindow start (ISO) if the claim is a range
personNoInsider name in any order, e.g. 'Alfonso de Angoitia'
sharesNoClaimed share count
tickerNoIssuer ticker (case-insensitive), e.g. CAVA
txn_typeNoOptional; only open-market buys are covered — sale/option/grant returns out_of_scope
amount_usdNoClaimed purchase value in USD (matched ±5% or ±$1)
issuer_nameNoIssuer/company name (use if you don't have the ticker)

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so thoroughly. It discloses the exact response statuses (confirmed, not_found, partial, out_of_scope, out_of_coverage), the coverage-window behavior, the itemisation of partial matches, and the 'no estimates' rule, giving the agent an accurate mental model of the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action, then efficiently lists statuses and key rules without fluff. Every sentence earns its place: purpose, response variants, coverage-window guarantee, and the critical no-guessing policy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 9 optional parameters and no output schema, the description unusually well explains what the tool returns and how it behaves across matching outcomes. It only marginally misses guidance on minimum required inputs (e.g., whether ticker/issuer or person alone suffices), but the schema and claim-components list make it largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter meaning and format, and the description does not add substantive semantic detail beyond grouping them as 'ticker/issuer, person, amount, timeframe'. The mention of value/date matching tolerances is already present in the schema, so the description adds only limited value here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Check a claim about an insider open-market buy ... against the filed record.' It clearly defines the tool's scope by naming the claim components and explicitly listing what is not covered (sales/options/grants), distinguishing it from the sibling signal and lookup tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The first sentence establishes the clear use case: verifying a factual claim against SEC Form 4, which differentiates it from the sibling discovery tools like insider_signals_by_ticker or insider_cluster_buys. It also states an exclusion ('sales/options/grants aren't covered') but does not explicitly name alternative tools for those cases, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updatesv1.0.0
    • First observedactivist_stakes_recent
    • First observedfederal_awards_recent
    • First observedfund_position_changes
    • First observedinsider_cluster_buys
    • First observedinsider_filing_lookup
    • First observedinsider_signals_by_date_range
    • First observedinsider_signals_by_ticker
    • First observedinsider_signals_today
    • First observedverify_13f_holding
    • First observedverify_8k_event
    • First observedverify_activist_13d
    • First observedverify_insider_purchase

TDQS

A4.1/5.0

Scored across 12 tools

Disambiguation3/5

The three insider_signals_* tools (today, by_ticker, by_date_range) all return the same underlying Rule-2 insider-buy data and accept the same filters (days, ticker), creating significant functional overlap. An agent could use any of them for most queries, leading to potential misselection. Other tools are distinct.

Naming Consistency4/5

All tool names use snake_case with clear domain prefixes (insider_, federal_, activist_, fund_) and a consistent 'verify_' prefix for verification tools. The retrieval tools use descriptive noun phrases rather than a uniform verb_noun pattern, but the style is coherent and readable.

Tool Count4/5

12 tools is reasonable for the scope, covering multiple signal domains and verification. However, the three insider signal retrieval tools are somewhat redundant and could be consolidated into one with filters, making the count slightly higher than necessary.

Completeness4/5

Core insider signal retrieval and verification is complete (today, ticker, date range, cluster, filing lookup, verify). Non-core domains have gaps: federal awards lacks verification, 8-K lacks a discovery listing, and 13F lacks a raw holdings listing, but agents can work around these for primary use cases.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Real-time SEC Form 4 insider trading data — transactions with post-trade returns, cluster-buy signals, Form 144 early warnings, and 13F institutional holdings. 27 tools + 6 research prompts; free tier available.
    36
    249 npm
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables to search and retrieve SEC EDGAR filings, insider transactions, major shareholders, and executive compensation data through natural language.
    13 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to research US public company filings, financials, and insider transactions using SEC EDGAR data, with no API keys required. Provides tools for company lookup, recent filings, full-text search, financial facts, and insider activity.
    MIT