Skip to main content
Glama
theodor90

form4api-mcp

form4api-mcp

Production-grade SEC Form 4 insider trading data for any MCP-compatible AI assistant — amendment-aware, 10b5-1 clean, with Form 144 + institutional 13F-HR overlay, plus congressional STOCK Act trades and insider/Congress convergence — 35 tools + 6 ready-made research prompts

npm version Available on mcp.so form4api-mcp MCP server

An MCP server that exposes the hosted Form4API REST API to Claude Desktop, Cursor, Windsurf, VS Code, Codex CLI, and any other MCP-compatible client. Configured once, your LLM can answer questions about insider trading, institutional positioning, and intent-to-sell filings directly during research sessions.

Four data-quality claims no scraping-based alternative can make:

  • 🛡 Amendment-aware — Form 4/A amendments are reconciled automatically. No double-counting when an insider corrects a filing.

  • 🎯 10b5-1 clean — every transaction flagged as pre-scheduled (10b5-1 plan) or discretionary. Cluster signals exclude planned trades by construction.

  • 📜 Form 144 intent-to-sell — 118K+ Form 144 filings indexed. Catch insider sales ~2 days before they hit Form 4.

  • 🏛 Institutional × insider join — every transaction carries the current 13F-HR ownership context (top-3 holders, AUM trend) in the same response: no second call, no client-side join. Among the self-serve SEC data APIs we've surveyed, none return both sides in one query — sec-api.io and Kaleidoscope both ship 13F and insider data as separate endpoints.


Quick install

1. Get a free API key

Go to www.form4api.com → Sign in → Dashboard. Free plan includes 500 requests/day, no credit card required.

2. Add to your MCP client

Claude Desktop — edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "form4api": {
      "command": "npx",
      "args": ["-y", "form4api-mcp"],
      "env": {
        "FORM4API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

Restart the client. The tools appear automatically.

Claude Code (CLI):

claude mcp add form4api -- npx -y form4api-mcp

…then set FORM4API_KEY in your shell or in ~/.claude/mcp.json.

Cursor — edit ~/.cursor/mcp.json (user-level) or .cursor/mcp.json (workspace-level):

{
  "mcpServers": {
    "form4api": {
      "command": "npx",
      "args": ["-y", "form4api-mcp"],
      "env": {
        "FORM4API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

Restart Cursor. The tools appear automatically.

Windsurf — edit ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "form4api": {
      "command": "npx",
      "args": ["-y", "form4api-mcp"],
      "env": {
        "FORM4API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

Restart Windsurf. The tools appear automatically.

VS Code — edit .vscode/mcp.json (workspace-level). Note: VS Code uses the servers key (not mcpServers):

{
  "servers": {
    "form4api": {
      "command": "npx",
      "args": ["-y", "form4api-mcp"],
      "env": {
        "FORM4API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

Restart VS Code. The tools appear automatically.

Codex CLI — config is TOML at ~/.codex/config.toml:

[mcp_servers.form4api]
command = "npx"
args = ["-y", "form4api-mcp"]
env = { FORM4API_KEY = "YOUR_API_KEY" }

Verify it works

Ask your LLM to run the verify_setup tool — it confirms your API key is valid and the MCP server is reachable, or returns the exact fix steps.

Example: "Run the verify_setup tool to confirm the MCP is configured correctly."

Try before you commit a key

get_public_stats is a keyless tool — it works with no FORM4API_KEY set. Try it first to preview live data coverage before signing up:

FORM4API_KEY="" npx form4api-mcp

Once you like what you see, sign up for a free key at www.form4api.com → set FORM4API_KEY → all tools unlock.

3. Or run directly

FORM4API_KEY=YOUR_API_KEY npx form4api-mcp

Related MCP server: alphai-news

Available tools (35)

Form 4 insider trading

Tool

Description

Plan

research_company

Bundled insider-research context for one ticker in a single call — company profile, recent transactions, cluster signals, sentiment, and a computed buy/sell direction summary. Replaces 4 separate calls and degrades gracefully when a section needs a higher plan

Free (signals/sentiment sections need Business)

get_transactions

Search insider transactions — filter by ticker, insider, date range, transaction codes or whole categories (exclude_category=derivatives), 10b5-1 plan trades, a dollar floor (min_value), the 13F ownership trend (inst_ownership_trend), or use significant=true for real discretionary buys/sells only. Pro adds the remaining trade-size screens (max_value, min_shares, max_shares) and post-trade-return screening (min_return_1dmax_return_6m, has_returns; returns are fractions, 0.05 = +5%). Paging depth is plan-limited — see Plans

Free

get_recent_filings

Most recent Form 4 filings, optionally filtered by ticker

Free

list_filings

Form 4 filings as a paginated list, newest filed first — filter by ticker, cik, or a filed-date window. Use this to page through filings; get_recent_filings is the unfiltered head of the same feed

Free

get_filing

Single filing by accession number

Free

get_insider_profile

Insider profile — name, title, director/officer/10pct owner flags

Free

get_insider_transactions

All transactions for a specific insider (by CIK)

Free

get_company_overview

Company profile — name, CIK, SIC sector, state, website, filing counts

Free

get_company_insiders

All insiders who have filed Form 4s for a company

Free

list_companies

List companies, sorted by name or filing count

Free

get_insider_career_summary

Aggregate career rollup: total bought/sold, top companies, 10b5-1 split, return averages

Pro

get_insider_scorecard

Buy track-record scorecard for an insider (CIK) — hit rate and avg/median return on discretionary open-market buys; null when fewer than 5 matured samples

Pro

get_insider_leaderboard

Top insiders ranked by hit_rate or avg_return; filter by horizon (3m/6m), min_trades, and limit

Business

Signals + sentiment

Tool

Description

Plan

get_signals

Cluster buy/sell signals — multiple insiders at the same company in the same direction. Excludes 10b5-1 trades automatically

Business

get_sentiment

MSPR-style monthly sentiment score per ticker (-100 to +100). 10b5-1 excluded so the score reflects real insider conviction

Business

Form 144 + institutional

Tool

Description

Plan

get_form144

Notice-of-proposed-sale filings — early signal ~2 days before Form 4 sale lands

Business

get_holdings

Institutional positions from Form 13F-HR (filter by ticker, CUSIP, manager, quarter, min value)

Business

get_managers

Institutional manager index with latest AUM

Business

explain_signal

Explain why a signal fired — the insiders and trades counted, exclusions, and criteria

Business

get_data_quality

Public data-quality, freshness and coverage metrics

Free

Congress + convergence

Tool

Description

Plan

list_congress_trades

Congressional STOCK Act trades (periodic transaction reports) — filter by ticker, politician, party, chamber, state, transaction type, min amount, or date range. Coverage is U.S. House only — Senate eFD blocks datacenter traffic, so chamber=Senate matches nothing and the response carries X-Coverage-Note: chamber-not-covered. Every row carries amountLow/amountHigh (disclosed ranges, never a fabricated midpoint) and disclosureLagDays — up to 45 days under the STOCK Act, so "real-time" here means minutes-after-disclosure, not minutes-after-trade

Free (30-day disclosure window; Starter 366 days; Pro+ unlimited history)

list_congress_politicians

Ranked rollup of politicians by congressional trade activity — total/buy/sell counts, most recent disclosure

Pro

get_congress_politician

One politician's full profile by bioguide ID — totals, top traded tickers, most recent trades

Pro

get_congress_ticker_rollup

Which politicians traded a given ticker, with net buy/sell counts

Pro

get_convergence_signals

Tickers where an insider cluster-buy and a congressional purchase happened within a trailing window of each other. strength is documented arithmetic (distinct congressional purchasers × the signal's insider count) — never a black-box or predictive score. No performance/alpha claims are computed or implied

Pro

Utility

Tool

Description

Plan

check_usage

Your API key usage stats and current plan

Free

get_key_activity

Recent API requests for this key

Free

get_usage_history

Daily request counts for the last N days

Free

search_insiders

Substring search on insider names

Free

list_webhooks

List your webhook subscriptions

Free

get_webhook_events

Replay webhook delivery events since a timestamp

Free

verify_setup

Verify the MCP is configured correctly — confirms API key is valid and server is reachable

Free

get_public_stats

Public corpus-wide totals (filings, transactions, companies, 13F-HR AUM, ingestion latency) — no API key required

Free (keyless)

get_status_history

Trailing 90-day daily uptime history for the public status page

Free (keyless)

health_ingestion

Live ingestion-health check — Form 4 freshness, parse-queue backlog, price-feed staleness

Free (keyless)


Prompts (6)

Beyond the 29 tools, this MCP ships 6 prompts — ready-made research recipes that a client can list (prompts/list) and load (prompts/get) so you don't have to hand-assemble the right tool sequence yourself. Each one tells the LLM exactly which SEC Form 4 / Form 144 / 13F-HR tools to call, in what order, and how to read plan-gated results.

Prompt

Args

What it does

insider_monitor

ticker

Recent SEC Form 4 insider activity for a ticker — transactions (10b5-1 flagged), cluster signals, sentiment — summarized as buy/sell conviction with post-trade-return context

cluster_buy_scan

days (default 7)

Market-wide scan of recent cluster-buy signals, 10b5-1 excluded, ranked by conviction (insider count + $ value), each with a sentiment score

form144_early_warning

ticker (optional)

Pending Form 144 notice-of-proposed-sale filings cross-referenced against recent Form 4 sells — flags discretionary (non-10b5-1) notices as the highest-signal early warnings, ~2 days ahead of the sale

exec_conviction_check

insider (name or CIK)

An insider's career track record — total bought/sold, historical post-trade returns on discretionary buys, and whether their buying has historically beaten their scheduled 10b5-1 selling

institutional_insider_overlap

ticker

Combines 13F-HR institutional holders with recent insider transactions to spot where smart money and insiders agree or diverge

post_selloff_buys

min_return (default 0.05)

Screens insider buys with post-trade-return filters to surface historically-successful dip-buying patterns

These map to the recipe workflows scraping-based Form 4 MCPs don't offer — each one leans on data this MCP alone exposes (10b5-1 flags, Form 144, 13F-HR join, per-insider return scoring). Plan requirements are honored honestly: prompts that touch Business-plan tools (get_signals, get_sentiment, get_form144, get_holdings, get_managers) or Pro-plan tools (get_insider_career_summary, get_insider_scorecard) instruct the LLM to surface the structured upgrade_required response rather than silently failing.

In Claude Desktop, prompts surface as a / slash-command picker; in Claude Code or other MCP clients, ask the assistant to "use the insider_monitor prompt for NVDA" (or similar) and it will fetch and follow the recipe.


Example prompts

Configured? Ask your LLM:

Quality-led (these require our amendment-aware, 10b5-1 clean, joined dataset):

  • "Show me cluster buy signals from this week — discretionary only, no planned trades"

  • "Which companies have insiders buying while institutional ownership is increasing this quarter?"

  • "Are there any Form 144 filings at NVDA suggesting upcoming sales?"

  • "What's the monthly insider sentiment for TSLA over the last 6 months, with 10b5-1 plans excluded?"

  • "Berkshire Hathaway's top 13F-HR holdings — what did they add or trim this quarter?"

Standard insider research:

  • "What insider trades happened at NVDA in the last 30 days, excluding 10b5-1 plans?"

  • "What is Tim Cook's career insider-trading summary?"

  • "Show me all open-market purchases over $1M at Tesla in 2026"

  • "What has the CFO of Microsoft been doing with their shares this year?"


Why this MCP vs scraping-based alternatives

Some MCPs in this space scrape free public sites (e.g. openinsider.com) for Form 4 data. That's fine for a quick prototype but the data layer they give your LLM has structural gaps:

form4api-mcp

Scraping-based MCPs

Form 4/A amendment handling

✅ reconciled automatically

❌ double-counts

10b5-1 plan flag

✅ exposed on every transaction

❌ planned + discretionary mixed

Form 144 intent-to-sell

✅ 118K+ filings

❌ not exposed

Institutional × insider join

✅ top-3 holders + AUM trend per transaction

❌ insider only

Sentiment (10b5-1 excluded)

✅ MSPR-style score

❌ planned trades pollute score

Source resilience

✅ hosted API contract

❌ breaks when source HTML changes

Webhooks / production delivery

✅ HMAC + retry + DLQ

❌ MCP-only, no fallback

SDKs

✅ Python + JS

❌ MCP-only

Commercial support

If your LLM session is the start of a real research workflow that eventually wants production delivery, picking the MCP that has a graduation path matters.


Beyond MCP — when you need more

The MCP is the easiest entry point. When your workflow grows past LLM-mediated research, the rest of the Form4API platform is right behind it:

  • Webhooks — HMAC-signed, exponential backoff, dead-letter queue, auto-disable on persistent failure. For production pipelines, not just LLM chats.

  • Python SDKpip install form4api (PyPI)

  • JS / TypeScript SDKnpm install form4api (npm)

  • Dashboard — usage, billing self-serve, key rotation, webhook health, billing history.

The MCP wraps the same backend as all of the above — every fact your LLM cites can be re-fetched programmatically through any of these channels with the same key.


Plans

22 of the 35 tools work on the free plan, and every tool that is free today stays free. New premium capability gets tiered as it ships; nothing that already works on your key is taken away later.

Tool

Free

Pro

Business

get_transactions, get_recent_filings, get_filing

get_insider_profile, get_insider_transactions

get_company_overview, get_company_insiders

get_insider_career_summary, get_insider_scorecard

get_insider_leaderboard, get_signals, get_sentiment

get_form144, get_holdings, get_managers

list_congress_trades

✓ (30-day disclosure window)

✓ (unlimited history)

✓ (unlimited history)

list_congress_politicians, get_congress_politician, get_congress_ticker_rollup, get_convergence_signals

Requests/day

500

50,000

250,000

get_transactions paging depth

20 pages

unlimited

unlimited

For a bulk historical pull, use the REST /v1/transactions/export endpoint (Business) rather than paging — it streams the whole filtered set as CSV in one request.

What your agent sees at a paywall

A gated call never surfaces a bare HTTP error. The MCP returns a structured upgrade_required payload so the model can explain the situation and the fix in one turn:

{
  "error": "upgrade_required",
  "required_plan": "business",
  "current_plan": "Free",
  "message": "This endpoint requires the Business plan or higher. Your current plan is Free.",
  "unlocks": "Business ($149/mo) adds cluster-buy signals and sentiment scores, 13F institutional holdings and managers, Form 144 notices, bulk CSV export, and 250,000 requests/day.",
  "upgrade_url": "https://www.form4api.com/dashboard/billing",
  "pricing_url": "https://www.form4api.com/pricing"
}

message is the API's own explanation, kept verbatim — it names the specific limit or parameter that stopped the call, which is usually what the model needs to suggest a working alternative. The same shape is returned when a Pro-only parameter is used on an otherwise free tool, so the model can simply retry without that filter.

Upgrade at form4api.com/dashboard/billing, or compare tiers at form4api.com/pricing.


Data coverage

  • 1.3M+ Form 4 transactions from SEC EDGAR

  • 596K+ filings across all reporting companies

  • 118K+ Form 144 notice-of-proposed-sale filings (Business+)

  • 43M+ Form 13F-HR holdings across 114K+ filings, $71T+ AUM in the latest complete quarter (Business+)

  • 3.3+ years of history (since 2023-04)

  • 10b5-1 plan flag on every transaction

  • Amendment-aware — Form 4/A reconciled

  • Congressional STOCK Act trades (Pro+) — House Clerk PTR + Senate eFD, digital filings, amounts always shown as disclosed ranges (amountLow/amountHigh), never a fabricated midpoint, plus disclosureLagDays on every trade (up to 45 days under the STOCK Act)

  • Real-time ingestion — new filings within minutes of SEC publication


Install as a Claude Desktop Extension (DXT)

A manifest.json is included at the repo root for one-click install via the Desktop Extensions (DXT) format. Once Claude Desktop supports .dxt files natively, pack and install with:

npx @anthropic-ai/dxt pack
# Produces form4api-mcp.dxt — open it in Claude Desktop to install

Until then, use the standard claude_desktop_config.json method described in Quick install above.


How tools stay in sync with the backend

This MCP is split between two layers:

  • Hand-written tools in src/tools/*.ts (transactions, signals, sentiment, form144, holdings, …) — these carry the LLM-discriminator descriptions (amendment-aware, 10b5-1 clean, etc.) that make this MCP pick correctly over alternatives.

  • Auto-generated tools in src/tools/_generated.ts — produced from https://api.form4api.com/openapi/v1.json by npm run codegen. Every new backend endpoint that lands in the OpenAPI spec flows in here automatically. CI runs npm run codegen:check on every PR and fails the build if the committed file drifts from what the live spec would produce, so the MCP is never silently behind the backend.

To add a new generated tool: ship the endpoint on the backend, regenerate (npm run codegen), commit src/tools/_generated.ts, publish. No tool-wrapper code needed.

The 6 recipe prompts live in src/prompts/recipes.ts — also hand-written, not generated. They add no new backend surface area; each one is a client-side template that tells the LLM which existing tools to call and in what order.


  • Form4API — API homepage

  • Documentation — Full REST API reference

  • Dashboard — Manage your API key, view usage, configure webhooks

  • Status — live uptime, database, and ingestion-queue health

  • npm — npm package

  • mcp.so — MCP server directory listing

Available Tools

36 tools
check_usageA
Read-only

Snapshot of the authenticated API key's current usage — plan name, requests made today, daily limit, and all-time request count. Use this for a quick right-now check; use the generated get_usage_history tool for a daily trend over time, or get_key_activity for a per-request log. Free plan, works on every tier.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, indicating it's a safe read operation. The description adds useful behavioral context: it works on every tier and is free, and it's a snapshot of current usage. No contradictions with annotations.

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 sentences with no wasted words. It is front-loaded with the core purpose and efficiently includes usage guidelines and alternatives.

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 no output schema, the description sufficiently explains the tool's output fields (plan name, requests today, daily limit, all-time count). It is complete for a simple snapshot tool with no parameters.

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?

There are no parameters (schema coverage 100% trivial), so baseline is 4. The description adds meaning by explaining what the tool returns (plan name, requests today, etc.), compensating for the lack of an output 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 clearly states the tool provides a snapshot of the authenticated API key's current usage, listing specific fields (plan name, requests today, daily limit, all-time count). The verb 'check' matches the tool name and the resource is well-defined, distinguishing it from sibling tools like get_usage_history and get_key_activity.

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

Usage Guidelines5/5

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

The description explicitly says to use this for a quick right-now check and provides alternatives: get_usage_history for daily trends and get_key_activity for per-request logs. This gives clear when-to-use and when-not-to-use guidance.

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

explain_signalA
Read-only

Explain why a signal fired: the insiders and trades counted, what was excluded, and the criteria (Business plan+). Reconstructs the full evidence behind one company's insider signal from GET /v1/signals: the detection criteria (5-day cluster window, 3-insider threshold, 90-day ratio window, 10b5-1 exclusion), the list of cluster buyers and sellers (each with their role and individual trades in the window), trades that were excluded from the cluster count and why (10b5-1 plan or superseded by amendment), and the raw buy/sell share totals behind the 90-day ratio. Use this to audit or debug a specific signal rather than to scan many companies (use GET /v1/signals for that). This is a LIVE reconstruction from current non-superseded data, computed on every request (no caching) — it can differ slightly from the originally stored signal if trades were amended afterward. Requires Business plan or higher (402 PLAN_REQUIRED on Free/Starter/Pro). Returns 404 COMPANY_NOT_FOUND if the ticker isn't tracked, 404 SIGNAL_NOT_FOUND if no signal exists for the given/most-recent date, or 400 INVALID_DATE if date isn't YYYY-MM-DD.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoExact signal date to explain, format YYYY-MM-DD. Omit to explain the company's most recent signal. Returns 404 SIGNAL_NOT_FOUND if no signal exists for the given (or most recent) date.
tickerYesCompany ticker symbol, case-insensitive (e.g. "AAPL").

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and openWorldHint. The description adds critical behavioral context: live reconstruction, no caching, potential difference from stored signal, plan requirement, and specific error codes. No contradiction with annotations.

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 fairly concise for the amount of information conveyed, and front-loaded with the main purpose. However, it is somewhat verbose with the detailed reconstruction list; could be slightly more streamlined.

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 no output schema, the description thoroughly explains what the response contains (cluster buyers/sellers, excluded trades, ratios) and all error scenarios. It fully equips an agent to understand the tool's behavior.

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

Parameters5/5

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

Schema description coverage is 100%, but the description adds value by explaining that omitting 'date' retrieves the most recent signal, and by detailing error conditions for invalid date. This goes beyond the schema's descriptions.

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's purpose: 'Explain why a signal fired', detailing the specific resource (signal) and the elements it reconstructs (insiders, trades, exclusions, criteria). It distinguishes itself from the sibling 'get_signals' which is for scanning many companies.

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

Usage Guidelines5/5

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

Explicitly says when to use ('audit or debug a specific signal') and when not to ('rather than to scan many companies, use GET /v1/signals for that'). Also mentions plan requirement (Business plan+) and error conditions (404, 400).

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

get_company_insidersA
Read-only

Full roster of insiders who have ever filed a Form 4 for a given ticker — name, CIK, titles, director/officer/10%-owner flags, last-filed date, and total transaction count per insider. Use this to enumerate a company's insiders (e.g. before pulling each one's career summary); use get_transactions with ticker= for the underlying trade history itself. Free plan. Paginated, max 100/page.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number. Defaults to 1.
tickerYesStock ticker symbol, case-insensitive, e.g. MSFT.
per_pageNoResults per page. Defaults to 20, maximum 100.

TDQS

A4.6/5.0
Behavior5/5

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

Description adds value beyond readOnlyHint and openWorldHint by specifying pagination (max 100/page), free plan, and the exact fields returned. No contradictions with annotations.

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 concise sentences covering purpose, usage guidance, and pagination/free plan. No unnecessary words, highly efficient.

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?

Output fields are described, pagination mentioned. Lacks handling of edge cases like empty results or error conditions, but adequate for a list tool without output schema.

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%, so description does not need to add much. The description mentions 'given ticker' but adds no extra semantics beyond schema descriptions.

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 a full roster of insiders who filed Form 4 for a ticker, listing specific fields. It distinguishes from sibling tool get_transactions by noting it is for enumerating insiders before pulling career summaries.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool (to enumerate insiders before pulling career summaries) and directs to get_transactions for trade history, providing clear alternative guidance.

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

get_company_overviewA
Read-only

Company profile for a single ticker — name, CIK, SIC sector/description, state of incorporation, website, total Form 4 filing count, and active insider count. Use this for company identity/metadata; use get_company_insiders to list who is filing, or get_transactions with ticker= for their trade history. Free plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol, case-insensitive, e.g. MSFT.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the description adds value by specifying 'Free plan' (implies usage limits) and listing returned fields. No contradictions; additional context enhances transparency.

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 sentences, front-loaded with purpose and fields, followed by usage guidance. No unnecessary words; 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 simple tool with one parameter and no output schema, the description lists all returned fields and provides usage context. Lacks mention of limits or pagination, but not needed for single-ticker lookup. Adequately 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 coverage is 100% for the single parameter (ticker), so baseline is 3. The description doesn't add extra semantics beyond the schema, but it's adequate given the high coverage.

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 it provides a company profile for a single ticker, listing specific fields (name, CIK, SIC, etc.). It distinguishes from siblings by explicitly naming get_company_insiders and get_transactions as alternatives for different purposes.

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

Usage Guidelines5/5

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

Explicitly tells when to use this tool ('for company identity/metadata') and when to use alternatives ('use get_company_insiders to list who is filing, or get_transactions with ticker= for their trade history'). Clear and actionable guidance.

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

get_congress_politicianA
Read-only

Get one politician's congressional trading profile (Pro plan+). Returns one politician's profile — identity fields, total/buy/sell trade counts, most recent trade's disclosure date, their top N most-traded tickers (by trade count), and their N most recent trades (same shape as GET /v1/congress/trades). Use this for a one-call politician overview rather than paging /v1/congress/trades?politician= yourself. Accepts either a bioguide ID (e.g. "P000197") or the politician's URL slug (e.g. "nancy-pelosi") in the path, matched case-insensitively against whichever field applies. Returns 404 NOT_FOUND if neither matches. Requires Pro plan or higher (402 PLAN_REQUIRED on Free/Starter). Query runs live — no caching.

ParametersJSON Schema
NameRequiredDescriptionDefault
idOrSlugYesPolitician's bioguide ID (e.g. "P000197") or URL slug (e.g. "nancy-pelosi"), exact match, case-insensitive. Tried against both fields.
top_tickersNoNumber of most-traded tickers to include. Defaults to 10, maximum 50.
recent_tradesNoNumber of most recent trades to include. Defaults to 20, maximum 100.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint/anomaly annotations, the description discloses live execution with no caching, the Pro plan requirement (402 on Free/Starter), and the 404 behavior when neither ID nor slug matches. These are valuable behavioral traits that the annotations do not already cover.

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 front-loaded with purpose and contains all necessary behavioral context in a compact two-sentence paragraph, but there’s a small redundancy: the pseudo‑'Requires Pro plan or higher' line repeats the parenthetical '(Pro plan+)' from the opening sentence. Still, overall structure and placement are excellent.

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 there is no output schema, the description clearly enumerates the required return data: identity fields, buy/sell trade counts, most recent disclosure date, top N tickers, and recent trades with their shape. It also covers error responses and plan restrictions, making the tool realistically callable end-to-end without additional assumptions.

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 has 100% description coverage, so the baseline is 3. The main description adds marginal value by clarifying that 'most traded' is by trade count and that recent trades have a specific shared shape, but it does not materially change understanding of the three parameters beyond the schema descriptions.

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: 'Get one politician's congressional trading profile.' It then enumerates the exact returned fields and differentiates the tool from paging /v1/congress/trades by framing it as a 'one-call politician overview,' which helps an agent distinguish it from siblings like list_congress_trades or get_congress_ticker_rollup.

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

Usage Guidelines5/5

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

Explicitly directs agents with 'Use this for a one-call politician overview rather than paging /v1/politician= yourself.' This names the alternative approach and tells the agent when this tool is appropriate, satisfying both when-to-use and an alternative context.

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

get_congress_ticker_rollupA
Read-only

Which politicians traded a ticker, with net buy/sell counts (Pro plan+). Returns every politician who has a non-superseded congressional trade in the given ticker, each with their trade/buy/sell counts, plus ticker-level totals. Optional window_days restricts to trades with a transactionDate in the trailing N days; omit for all-time. A ticker with no congress trades returns 200 with an empty politicians array and zero counts rather than 404 — there is no separate ticker/company entity in this dataset to 404 against. Requires Pro plan or higher (402 PLAN_REQUIRED on Free/Starter). Query runs live — no caching.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesTicker symbol, case-insensitive (e.g. "AAPL").
window_daysNoTrailing window in days ending now, applied to transactionDate. Omit for all-time.

TDQS

A4.1/5.0
Behavior5/5

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

The description goes well beyond the readOnlyHint and openWorldHint annotations by disclosing plan gating, the PLAN_REQUIRED error on Free/Starter, the live no-cache behavior, the meaning of non-superseded trades, and the 200-with-empty-array behavior for tickers with no congressional trades. This is strong behavioral transparency.

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 appropriately detailed, covering return shape, edge cases, plan limits, and live behavior. It is not overly verbose, though the explanation about the absence of a separate ticker entity could have been tightened.

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?

With no output schema, the description sufficiently explains the expected return shape, empty-ticker behavior, and access constraints. It could be even more complete by specifying exact response fields or boundary behavior, but it is enough for an agent to select and invoke the tool correctly.

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 both parameters with 100% coverage, so the description adds little parameter meaning beyond repeating the trailing-window behavior for window_days. This matches the baseline of 3 when schema descriptions carry the semantic load.

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's purpose: it returns every politician who traded a given ticker, with per-politician trade counts and ticker-level totals. This is a specific verb-resource pairing that is semantically distinct from sibling tools like get_transactions or list_congress_trades.

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 description gives clear parameter context, such as optional window_days behavior and Pro plan requirements, but it never explicitly tells an agent when to choose this tool over a sibling like get_congress_politician or list_congress_trades. It provides implied usage rather than direct routing guidance.

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

get_convergence_signalsA
Read-only

Insider cluster-buy x congressional-purchase convergence (Pro plan+). Returns the tickers where an insider cluster-buy (InsiderSignal.IsClusterBuy) and at least one non-superseded congressional PURCHASE happened within window_days of EACH OTHER, restricted to convergences where the MORE RECENT of the pair's two dates is within a trailing lookback_days (so this surfaces CURRENT convergences, not ancient history). DEFINITION: for each result, insider.signalDate is the SignalDate of the qualifying cluster-buy signal with the most recent date (insider.insiderCount is that same signal's count — never summed or maxed across multiple signals), and congress is every non-superseded congressional purchase that paired with at least one qualifying cluster-buy (not every purchase in the window — only the ones that actually paired). firstSeen/lastSeen are the earliest/most recent dates among all qualifying insider and congress dates for that ticker. STRENGTH is documented arithmetic, NOT a black-box or predictive/ML score: strength = (distinct congressional purchasers among the qualifying legs) x (the representative signal's insiderCount) — a plain multiplication of two observed counts, nothing more. HONESTY: every congress leg always carries both amountLow and amountHigh (STOCK Act discloses ranges, never exact figures — never combined into a fabricated midpoint) and disclosureLagDays = (disclosureDate - transactionDate); congressional trades are disclosed up to 45 days after the actual trade under the STOCK Act, so this endpoint is detection/monitoring of what insiders AND members of Congress have DISCLOSED buying, not a claim of predictive edge, alpha, or win rate — no performance numbers are computed or implied anywhere in this response. window_days and lookback_days are both caller-overridable with clamps (see each parameter's own description for the exact bounds). Requires Pro plan or higher (402 PLAN_REQUIRED on Free/Starter). Query runs live against the database — no caching.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number. Defaults to 1.
tickerNoTicker symbol, case-insensitive exact match (e.g. "AAPL"). Omit to scan every ticker.
per_pageNoConverged tickers per page. Defaults to 100, maximum 500.
window_daysNoTrailing-day window: an insider cluster-buy date and a congressional purchase date must fall within this many days of EACH OTHER (either order) to count as a qualifying pair. Defaults to 30, clamped to [1, 90].
lookback_daysNoHow far back from now the MORE RECENT of a qualifying pair's two dates must fall to still count as a current convergence (the less-recent date in a pair can be older, as long as it's within window_days of a recent partner). Defaults to 180, clamped to [1, 730].

TDQS

A4.4/5.0
Behavior5/5

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

Despite readOnlyHint and openWorldHint already being present, the description adds substantial behavioral context: live database execution, no caching, Pro plan requirement, non-predictive non-ML semantics, explicit STOCK Act disclosure ranges, and exact definitions for strength, firstSeen, lastSeen, and disclosureLagDays.

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 deliberately structured and information-dense. The use of DEFINITION, STRENGTH, and HONESTY anchors helps parseability, though some redundancy around window semantics and non-predictive claims could be trimmed.

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?

This is a complex convergence endpoint with no output schema, and the description covers response field meanings, pair-picking logic, the representative signal, disclosure range semantics, filtering, pagination sufficient, and operating expectations. The agent is well equipped to invoke it correctly.

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 all parameters with 100% coverage, including defaults and clamps. The description reinforces the meaning of window_days and lookback_days but does not add materially new information beyond 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 states a specific action and resource: it returns tickers where an insider cluster-buy and a congressional purchase converged within a window. This clearly distinguishes it from broader tools like get_signals or get_insider_transactions by the defined convergence concept.

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: it is for surfacing current insider-plus-congress convergence signals, supports a trailing lookback, requires Pro plan, and runs live with no caching. It does not explicitly name alternatives or state when not to use it, 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.

get_data_qualityA
Read-only

Public data-quality, freshness and coverage metrics for the whole dataset. Returns public, keyless metrics on data freshness, ingestion latency, corpus coverage, and post-trade returns coverage — use this to check whether the dataset is current before relying on it (e.g. confirm Form 4 ingestion isn't stalled, or that price data isn't stale), not to look up any single company, insider, or transaction. Includes: most recent Form 4 processed timestamp and median/p95 filing-accepted-to-processed latency in seconds, latest price-bar date and how many days behind it is, total companies/transactions tracked plus filing counts by form type (4, 144, 13F-HR), the percentage of 13F CUSIPs resolved to a ticker, and the percentage of eligible transactions with fully computed post-trade returns. Takes no parameters. Cached for 30 minutes; no API key or plan required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint. The description adds valuable context: caching for 30 minutes, no API key required, and a detailed list of returned metrics. This goes beyond the annotations without contradicting them.

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 well-structured, starting with purpose, then usage guidance, then a bulleted list of included metrics, and finally caching/auth notes. It is slightly long but every sentence adds value.

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 no output schema, the description provides a comprehensive list of what is returned (timestamps, latencies, counts, percentages) and context on caching and public access. The tool is simple and the description fully explains its behavior and output.

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?

The schema has zero parameters and the description explicitly confirms 'Takes no parameters', adding certainty. With no parameters, the baseline is 4, and the description fulfills that.

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 public data-quality metrics for the whole dataset, using specific verbs like 'returns' and 'use this to check'. It distinguishes itself from sibling tools by explicitly stating it is not for looking up individual companies or transactions.

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 provides clear when-to-use guidance ('check whether the dataset is current before relying on it') and what not to use it for ('not to look up any single company'). It mentions it's public and needs no API key, but does not explicitly name alternative sibling tools.

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

get_filingA
Read-only

Fetch one Form 4 filing by its exact SEC accession number (format NNNNNNNNNN-YY-NNNNNN, e.g. 0000320193-26-000001). Use this once you already have an accession number from get_recent_filings or get_transactions. Returns filed/period-of-report dates, company and insider identity, and transaction count for that filing. Free plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
accessionYesSEC accession number in NNNNNNNNNN-YY-NNNNNN format (10-digit filer CIK, 2-digit year, 6-digit sequence), e.g. 0000320193-26-000001. Copy this from a get_recent_filings or get_transactions result.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint and openWorldHint. Description adds return fields (dates, identity, transaction count) and free plan mention, but lacks details on error behavior or limitations.

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, front-loaded with purpose and example, concise with no unnecessary words.

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?

Given 1 param and no output schema, description covers what is returned and when to use. Could mention missing accession handler but sufficient for context.

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% with description. Description adds format example (0000320193-26-000001) and context to copy from other tools, exceeding the schema's base description.

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?

Clearly states it fetches a Form 4 filing by accession number, with format example. Distinguishes from siblings like get_recent_filings and get_transactions.

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

Usage Guidelines5/5

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

Explicitly says 'Use this once you already have an accession number from get_recent_filings or get_transactions', providing clear when-to-use and source of input.

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

get_form144A
Read-only

Form 144 notice-of-proposed-sale filings — insiders disclose intent to sell roughly 2 days before the matching Form 4 sale lands, so this is an early-warning signal, especially discretionary (non-10b5-1) notices. Filter by ticker, insider name (partial match), date range, or exclude_10b5. Cross-reference with get_transactions/get_insider_transactions to see whether the intent was actually executed. Requires Business plan. Paginated, max 100/page.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd filing date, inclusive, format YYYY-MM-DD (e.g. 2026-12-31).
fromNoStart filing date, inclusive, format YYYY-MM-DD (e.g. 2026-01-01).
pageNo1-based page number. Defaults to 1.
tickerNoStock ticker symbol, case-insensitive, e.g. AAPL.
per_pageNoResults per page. Defaults to 20, maximum 100.
exclude_10b5NoIf true, exclude pre-scheduled 10b5-1 plan filings. Recommended for signal analysis — discretionary sale-intent notices only.
insider_nameNoFilter by insider name, case-insensitive partial/substring match, e.g. "cook".

TDQS

A4.8/5.0
Behavior5/5

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

Despite annotations already providing readOnlyHint and openWorldHint, the description adds valuable behavioral context: timing (2 days before Form 4), pagination (max 100/page), and the signal nature (discretionary vs 10b5-1). No contradiction with annotations.

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?

Every sentence adds value: purpose, timing, filtering, cross-reference, plan requirement, pagination. No wasted words, well-structured and 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?

Covers core purpose, filtering, usage advice, complementary tools, and restrictions. Lacks explicit output fields, but given no output schema and common knowledge of Form 144, it is sufficiently complete for an experienced agent.

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. The description adds marginal value by advising use of exclude_10b5 for signal analysis and clarifying date range and partial match on insider name, but mostly reiterates schema descriptions.

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 retrieves Form 144 'notice-of-proposed-sale' filings, explaining they are early-warning signals for insider sales. It distinguishes from siblings like get_transactions by suggesting cross-referencing to check execution, and specifies filtering options.

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

Usage Guidelines5/5

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

Explicitly guides when to use (early-warning signal) and when to use alternatives ('Cross-reference with get_transactions/get_insider_transactions'). Also recommends excluding 10b5-1 for signal analysis and notes 'Requires Business plan' as a usage restriction.

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

get_holdingsA
Read-only

Institutional 13F-HR positions — filter by ticker (CUSIP resolved to ticker automatically), CUSIP, manager CIK, quarter, or minimum position value. Answers "who owns NVDA" or "which managers hold AAPL this quarter"; pair with get_managers to look up a manager's identity/AUM, or get_transactions to cross-reference insider activity at the same company. Requires Business plan. Paginated, max 100/page.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number. Defaults to 1.
cusipNoCUSIP identifier of the security — the standard 9-character alphanumeric security identifier (8 chars + 1 check digit), e.g. 037833100.
tickerNoStock ticker the position is in, case-insensitive (e.g. AAPL). Resolves via CUSIP → ticker mapping for issuers without direct ticker rows.
quarterNoQuarter in YYYY-Qn format, e.g. 2026-Q1. Omit for the latest available quarter.
per_pageNoResults per page. Defaults to 20, maximum 100.
min_valueNoMinimum reported position value in USD, inclusive, as of the 13F-HR filing.
manager_cikNoCIK of the institutional manager (13F-HR filer) — SEC's numeric filer identifier. Leading zeros optional.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnly and openWorld hints. Description adds pagination limit (max 100/page) and plan requirement, which are useful behavioral details beyond annotations.

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 sentences, no redundancy. Efficiently conveys resource, filters, use cases, sibling associations, and constraints (plan, pagination).

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 tool with good schema and no output schema, description adequately covers functionality, filtering, pagination, and plan requirement. Missing return format details but acceptable.

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 covers all 7 parameters with descriptions (100% coverage). Description adds context like 'CUSIP resolved to ticker automatically' but mostly summarizes, not adding significant new semantics beyond 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?

Description clearly states the tool returns institutional 13F-HR holdings with filtering options. It gives concrete use cases ('who owns NVDA') and distinguishes from siblings like get_managers and get_transactions.

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?

Provides examples of when to use and pairs with siblings for further lookups. Mentions plan requirement. Lacks explicit when-not-to-use but context is clear.

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

get_insider_career_summaryA
Read-only

Aggregate career rollup for one insider by CIK — first/last transaction dates, total shares/value bought vs sold, top companies traded, transaction-code breakdown, 10b5-1 plan split, and average post-trade returns (stored as fractions, e.g. 0.05 = +5%). Use this instead of get_insider_transactions when you want a pre-computed summary rather than raw rows; pair with the generated get_insider_scorecard for hit-rate statistics on their discretionary buys specifically. Requires Pro plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesInsider CIK number — SEC's numeric filer identifier. Leading zeros optional. Example: 1214156 for Tim Cook. Resolve a name to a CIK first with search_insiders if you don't already have it. Note: response return fields are stored as fractions (0.05 = +5%), not percentages.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true. Description adds that it requires a Pro plan and that return fields are fractions (e.g., 0.05 = +5%), complementing annotations without contradiction. No missing behavioral traits.

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?

Single paragraph is efficient and front-loaded with the main purpose. Could be slightly more structured (bullets for fields), but no redundancy. Every sentence adds value.

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?

Covers purpose, usage guidance, behavioral nuances, and parameter details. Does not mention error handling or rate limits, but given simplicity (single param, no output schema) and annotations, it is sufficiently complete.

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

Parameters5/5

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

Schema covers the CIK parameter fully. Description adds value by noting leading zeros optional, providing a concrete example (Tim Cook), instructing to resolve names via search_insiders, and clarifying return format (fractions).

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 it aggregates a career rollup for one insider by CIK, listing specific data fields. It explicitly distinguishes from get_insider_transactions, making its purpose unambiguous and distinct among siblings.

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

Usage Guidelines5/5

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

Explicit usage guidance: 'Use this instead of get_insider_transactions when you want a pre-computed summary rather than raw rows; pair with the generated get_insider_scorecard'. Provides when-to-use, when-not, and recommended companion tool.

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

get_insider_directoryA
Read-only

Browse insiders alphabetically by surname. Returns the A-Z rail with a count per letter, plus one page of insiders under the requested letter. Omit letter to get the rail and totals with no rows.

Names come from EDGAR surname-first ("HENNEMAN JOHN B III"), so alphabetical order is order by surname. Casing in the source is inconsistent and is not normalised here.

This lists only insiders with at least 3 non-superseded transactions, capped at the 5,000 most active — the same set as the insiders sitemap shard, so the two cannot drift. To find someone outside that set, use GET /v1/insiders?name= which searches every filer. Rebuilt daily; refreshedAt reports when. Not plan-gated.

One row per FILER GROUP. A fund group files a single Form 4 listing several reporting owners — the fund, its GP, its management company — and each is a real EDGAR filer with its own CIK. Listing all of them spent about 11% of this capped surface describing the same actors more than once, so browse shows one per group and filerGroupSize says how many others share those exact transactions. The others are not hidden: each keeps its own profile and is still returned by GET /v1/insiders?name=.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number within the letter. Defaults to 1.
letterNoSingle letter A-Z to list, or "#" for names that do not begin with a letter. Omit to get the A-Z rail and totals without any rows.
per_pageNoRows per page. Defaults to 200, maximum 500.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly/openWorld annotations, the description discloses important behavior: only insiders with 3+ non-superseded transactions, the 5,000 most active cap, daily rebuilds, non-normalized casing, and de-duplication of filer groups into one row per group. It also confirms this is not plan-gated, which is useful invocation context.

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 longer than average, but every paragraph adds substantive context: coverage rules, source collision behavior, grouping rationale, and search alternative. It is front-loaded with the core behavior and mostly well organized.

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?

Given the absence of an output schema, the description does enough by stating the returned scaffold: A-Z rail, counts, one page of insiders, and filerGroupSize. Minor gaps remain around full row field names and pagination metadata, but nothing that blocks correct invocation.

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 value by explaining letter omission semantics, the '#' use case, sorting by surname due to EDGAR formatting, and how one page maps to a letter. This goes beyond simply restating 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 states a precise verb and resource: browse insiders alphabetically by surname, returning a per-letter rail and one page of rows. It clearly differentiates this from search-by-name tools, telling the agent this is not a full-text search over every filer.

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

Usage Guidelines5/5

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

It gives an explicit alternative: use GET /v1/insiders?name= to search every filer when a target is outside the capped directory set. It also explains the inclusion rule and caps, making the configured scope unambiguous.

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

get_insider_leaderboardA
Read-only

Ranked leaderboard of insiders by buy track-record (Business plan+). Returns the top insiders ranked by historical buy performance — same scored-buy methodology as GET /v1/insiders/{cik}/scorecard, applied across the whole corpus rather than one insider. Use this to discover which insiders have the best track record; use the per-insider scorecard once you have a specific CIK. Scores use absolute return (NOT market-adjusted) — a hit is a scored buy with a positive 3m (or 6m) return anchored at the filing-date close. Only discretionary open-market buys (P-code, not 10b5-1, not derivative) with a matured return are counted. Insiders with fewer than min_trades (floor 5) scored buys are excluded. Requires Business plan or higher (402 PLAN_REQUIRED on Free/Starter/Pro). Results are cached for 1 hour per unique parameter combination.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of insiders to return. Defaults to 25, maximum 100.
orderNo"hit_rate" (% of scored buys with a positive return) or "avg_return" (mean scored return). Defaults to "hit_rate".
horizonNo"3m" or "6m" — the post-trade return horizon to score and rank by. Defaults to "3m".
min_tradesNoMinimum number of scored buys an insider must have to be ranked. Defaults to 5; values below 5 are silently raised to 5 (the scorecard sample-sufficiency floor).

TDQS

A4.7/5.0
Behavior5/5

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

Discloses key behavioral traits beyond annotations: uses absolute return (not market-adjusted), only discretionary open-market buys, excludes non-10b5-1 buys, min_trades floor of 5, caching for 1 hour, and plan requirement. These details are not in the readOnlyHint or openWorldHint annotations.

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?

Well-structured with front-loaded purpose. Each sentence adds value, but the description is relatively long. For the complexity, it's acceptable; minor room for tightening.

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?

Covers return values implicitly, explains methodology, plan requirement, and caching. Without an output schema, it provides adequate context for an agent to understand what is returned and how it is computed.

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. The description adds value by explaining the min_trades floor (silently raised to 5) and referencing the scoring methodology. However, it does not enumerate each parameter's details beyond what the schema 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 clearly states the tool returns a ranked leaderboard of insiders by buy track record, distinguishing it from the per-insider scorecard sibling tool. It uses specific language like 'ranked leaderboard' and 'scored-buy methodology' to convey purpose.

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

Usage Guidelines5/5

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

Explicitly says 'Use this to discover which insiders have the best track record; use the per-insider scorecard once you have a specific CIK.' It also notes the Business plan requirement and caching behavior, guiding appropriate usage.

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

get_insider_profileA
Read-only

Look up one insider's identity by CIK (SEC's numeric filer identifier, e.g. 0001214128) — returns name, all known titles, and director/officer/10%-owner role flags. If you only have a name, resolve it to a CIK first with the generated search_insiders tool. For trading history use get_insider_transactions or get_insider_career_summary instead. Free plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesInsider CIK number — SEC's numeric filer identifier, e.g. 0001214128. Leading zeros optional. Resolve a name to a CIK first with search_insiders if you don't already have it.

TDQS

A4.8/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and openWorldHint=true, which the description does not contradict. The description adds context about being a free plan and the specific output fields, but nothing beyond that. With annotations covering safety, the description adds value without being exceptional.

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 sentences, each serving a distinct purpose: function/output, usage guidance, and context. Information is front-loaded and every sentence earns its place.

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 no output schema, the description enumerates return fields (name, titles, role flags). With one required parameter and a simple lookup, this is complete and sufficient for the agent to invoke correctly.

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

Parameters5/5

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

Only one parameter (cik) with 100% schema coverage. The description adds meaning by explaining the CIK format, leading zeros optionality, and linking to search_insiders for name resolution. This goes beyond the schema description.

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 looks up an insider by CIK and lists the returned fields (name, titles, role flags). It distinguishes from sibling tools like search_insiders, get_insider_transactions, and get_insider_career_summary.

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

Usage Guidelines5/5

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

Explicitly instructs to use search_insiders if only a name is available, and directs to other tools for trading history or career summary. This provides clear when-to-use and when-not-to-use guidance.

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

get_insider_scorecardA
Read-only

Get insider buy track-record scorecard (Pro plan+). Returns the historical hit rate and average/median return of an insider's discretionary open-market buys (TransactionCode=P, excluding 10b5-1 plans and derivatives), plus their best and worst scored buy. Scores use absolute return (NOT market-adjusted) anchored at the filing-date close. A 'hit' is a scored buy whose 3m (or 6m) return is positive. Use this over GET /v1/insiders/{cik}/summary when you specifically want a scored track record (with a sample-sufficiency guard) rather than raw totals; use GET /v1/insiders/leaderboard (Business+) to rank many insiders by this same methodology. Score fields (hitRate3m, avgReturn3m, etc.) are null when the insider has fewer than 5 matured scored buys (sampleSufficient=false), preventing misleading statistics from small samples. Requires Pro plan or higher (402 PLAN_REQUIRED on Free/Starter). Returns 404 NOT_FOUND if the CIK isn't tracked. Computed live — no caching. Note: all return fields (HitRate3m, AvgReturn3m, MedianReturn3m, etc.) are stored as FRACTIONS — 0.05 means +5%, -0.10 means -10%.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesInsider's SEC CIK, exact match.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint, openWorldHint), description details scoring methodology (absolute return, anchored at filing close), hit definition, handling of small samples, no caching, and specific return value formats (fractions). No contradiction with annotations.

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?

Description is comprehensive but efficiently structured: opens with purpose, then methodology, usage guidance, edge cases, and format notes. Every sentence adds value without unnecessary repetition.

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?

Covers all essential aspects: required parameter, output fields (with fraction notation), sample sufficiency guard, error scenarios, plan restrictions, and computational behavior. Suitable for correct invocation despite lack of output schema.

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?

Input schema fully describes the single parameter (cik) with 'exact match'. Description adds contextual value by mentioning plan requirement and 404 error for missing CIK, which aids agent understanding of parameter validation and error handling.

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?

Description clearly states it returns a scored track record of insider buys, differentiates from sibling tools like get_insider_summary (raw totals) and get_insider_leaderboard (ranking many insiders), and specifies the methodology and output fields.

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

Usage Guidelines5/5

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

Explicitly describes when to use this tool (for scored track record) versus alternatives, notes plan requirement (Pro+), mentions error conditions (402, 404), and explains when fields are null due to sample insufficiency.

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

get_insider_transactionsA
Read-only

All Form 4 transactions filed by one insider (by CIK), filterable by ticker, transaction code, date range, and 10b5-1 exclusion. Use this once you have an insider's CIK on hand; get_transactions with insider_cik= gives the same rows alongside its broader filter set, while get_insider_career_summary returns a pre-aggregated rollup instead of raw rows. Free plan. Paginated, max 100/page.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd date, inclusive, format YYYY-MM-DD (e.g. 2026-12-31). Filters on transactionDate.
cikYesInsider CIK number — SEC's numeric filer identifier, e.g. 0001214128. Leading zeros optional.
codeNoSingle SEC transaction code to filter to. P=open-market purchase, S=open-market sale, A=grant/award, M=option exercise, F=tax withholding on vesting, D=disposition to issuer, G=gift, C=conversion of derivative, J=other.
fromNoStart date, inclusive, format YYYY-MM-DD (e.g. 2026-01-01). Filters on transactionDate.
pageNo1-based page number. Defaults to 1.
tickerNoFilter to a specific company ticker, case-insensitive, e.g. AAPL.
per_pageNoResults per page. Defaults to 20, maximum 100.
exclude_10b5NoIf true, exclude pre-scheduled 10b5-1 plan trades — keeps only discretionary transactions.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint. The description adds that the tool is paginated with a max of 100 per page and is on a free plan, providing useful behavioral context beyond annotations.

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: the first states the purpose and filters, the second gives usage guidance. Every sentence adds value, no fluff.

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 8 parameters and no output schema, the description covers the key aspects: what the tool returns (Form 4 rows), pagination limits, and differentiation from similar tools. It is sufficiently complete for an agent to use correctly.

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 parameters. The description briefly summarizes the filterable fields (ticker, transactionCode, date range, exclude_10b5) but does not add significant meaning beyond 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 clearly states the tool retrieves all Form 4 transactions for a specific insider by CIK, and distinguishes it from siblings by noting that get_transactions provides broader filters and get_insider_career_summary returns aggregated data.

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

Usage Guidelines5/5

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

Explicitly advises to use the tool after obtaining an insider's CIK and contrasts it with alternative tools, covering when to use each. Also mentions free plan and pagination limits.

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

get_key_activityA
Read-only

Recent, per-request API activity log for the authenticated key. Returns the most recent HTTP requests made with the authenticated API key, most recent first, including the endpoint path, response status code, duration in milliseconds, and timestamp. Use this to debug integration issues — confirm a specific call reached the API, check for repeated 4xx/5xx responses, or spot slow requests — rather than for usage trends; for aggregate daily counts use GET /v1/keys/usage/history instead. Requires a valid X-Api-Key (401 without one).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of most-recent requests to return. Defaults to 100, maximum 200.

TDQS

A4.7/5.0
Behavior5/5

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

Describes the response structure (endpoint, status, duration, timestamp), auth requirement, and the ordering (most recent first). Annotations indicate readOnly, which aligns; the description adds valuable context beyond annotations.

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 concise, front-loaded sentences: function, usage, auth. No wasted words, well structured for quick comprehension.

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 simple interface (1 param, no output schema), the description is complete: covers purpose, return fields, use cases, auth, and alternatives. No gaps.

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 fully describes the 'limit' parameter with defaults and maximum. The description does not add additional meaning beyond what the schema provides, so baseline score of 3 applies.

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 recent per-request API activity logs for the authenticated key, and distinguishes it from the sibling tool for aggregate usage trends by name.

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

Usage Guidelines5/5

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

Explicitly provides when-to-use scenarios (debugging, checking errors, spotting slow requests) and when-not-to-use (usage trends), with a direct reference to the alternative tool.

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

get_managersA
Read-only

Browse the institutional manager index — each manager with their latest 13F-HR filing date and AUM. Filter by name (partial match — "Berkshire" returns Berkshire Hathaway) or minimum AUM. Pair with get_holdings to see what a given manager owns. Requires Business plan. Paginated, max 100/page.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by manager name, case-insensitive partial/substring match. Example: "Berkshire" matches Berkshire Hathaway.
pageNo1-based page number. Defaults to 1.
min_aumNoMinimum assets-under-management in USD, inclusive, as of the manager's latest filed 13F-HR quarter.
per_pageNoResults per page. Defaults to 20, maximum 100.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnly and openWorld. The description adds value by detailing pagination (max 100/page) and the Business plan requirement, which are behavioral traits not covered by annotations.

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 three sentences, each serving a clear purpose: stating the function, explaining filters and pairing, and noting requirements and limits. No redundant information.

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 browsing tool with good annotations and schema, the description covers essential usage aspects (filters, companion tool, plan requirement, pagination). No output schema exists, but the return value is implicitly clear.

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 baseline is 3. The description reiterates the partial match and minimum AUM filter, but does not add significant new meaning beyond what the 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 clearly states the tool browses the institutional manager index with specific data (latest 13F-HR filing date and AUM). It distinguishes itself from siblings by mentioning pairing with get_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 provides context for use (browsing managers) and suggests pairing with get_holdings. It also notes the Business plan requirement. However, it does not explicitly exclude scenarios where other tools might be better.

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

get_public_statsA
Read-only

Public corpus-wide statistics — no API key required. Returns headline dataset totals: filing count, transaction count, tracked companies, institutional holdings rows, Form 144 and Form 13F-HR filing counts, the earliest filing date in the corpus, the most recent quarter's total 13F-HR reported AUM in USD, and measured ingestion latency (median/p95 seconds from SEC acceptance to our processing, trailing 7 days). Use this for corpus-wide totals (e.g. a marketing/status widget), not for per-company or per-insider data — those live under GET /v1/companies and GET /v1/insiders. For freshness and coverage-quality metrics (is ingestion stalled, is price data stale) use GET /v1/data-quality instead. Takes no parameters. No API key or plan required. Cached for ~12 hours.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint. The description adds valuable context: no API key required, cached for ~12 hours, and lists the specific fields returned. Does not contradict annotations.

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 front-loaded with purpose and key feature (no API key). It lists the returned fields but could be slightly more concise by grouping related items. Still, every sentence earns its place.

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 zero parameters, no output schema, and clear annotations, the description provides complete context: what it returns, use cases, limitations, caching, and alternatives. No gaps.

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?

No parameters exist, so baseline is 4. Description does not need to add parameter information.

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 it returns public corpus-wide statistics and distinguishes itself from sibling tools like get_company_overview and get_data_quality by specifying where to find per-company or per-insider data.

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

Usage Guidelines5/5

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

Provides explicit guidance: use for corpus-wide totals (e.g., marketing widget), not for per-company or per-insider data, and suggests alternative endpoints. Also recommends get_data_quality for freshness metrics.

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

get_recent_filingsA
Read-only

Live feed of the newest SEC Form 4 filings, sorted most-recent-first, optionally filtered to one ticker. New filings typically appear within ~60 seconds of SEC publication. Use this to check "what just happened" rather than get_transactions (built for filtered/historical search across date ranges and codes). Returns per-filing accession number, filed/period-of-report dates, company + insider identity, and transaction count; pass the accession number to get_filing for full detail. Free plan. Paginated, max 100/page.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number. Defaults to 1.
tickerNoFilter to one stock ticker, case-insensitive, e.g. NVDA. Omit for the unfiltered market-wide feed.
per_pageNoResults per page. Defaults to 20, maximum 100.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations (readOnlyHint, openWorldHint) already indicate read-only and open-world behavior. Description adds specific behavioral info: new filings appear within ~60 seconds, returns specific fields like accession number, dates, identities, and transaction count. No contradiction with annotations.

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 dense sentences with all key information front-loaded: purpose, sorting, filtering, timing, alternative tool, output summary, and constraints. No wasted words.

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?

No output schema, but description lists returned fields (accession number, dates, identities, transaction count) and mentions subsequent use of get_filing for full detail. Covers timing, filtering, pagination, and sibling comparison. Complete for a simple paginated read 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 covers all 3 parameters with descriptions, so baseline is 3. Description adds extra value by explaining the purpose of the ticker filter, noting pagination and max per_page limit, and describing output fields that imply what parameters control. Slight improvement over schema alone.

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?

Clearly states it's a live feed of newest SEC Form 4 filings, sorted most-recent-first, with optional ticker filter. Distinguishes from sibling get_transactions by specifying its use case for checking current activity rather than historical search.

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

Usage Guidelines5/5

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

Explicitly tells when to use this tool ('what just happened') vs. get_transactions (filtered/historical). Also mentions free plan, pagination, and max 100 per page, giving clear operational context.

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

get_sentimentA
Read-only

Monthly insider-sentiment score for a ticker (MSPR-style, -100 to +100; positive = net buying conviction), one point per month, defaulting to roughly the last 12 months. Automatically excludes 10b5-1 plan trades so the score reflects discretionary conviction, not pre-scheduled dispositions. Use get_transactions or get_signals for the trade-level detail behind a given month. Requires Business plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthsNoNumber of trailing months of sentiment to return, ending with the most recent. Minimum 1, maximum 60. Omit to use the backend default (~12).
tickerYesStock ticker symbol, case-insensitive, e.g. AAPL.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations (readOnlyHint, openWorldHint) are minimal; the description adds critical behavior: automatic exclusion of 10b5-1 plan trades, explaining that the score reflects discretionary conviction. This is beyond the annotations.

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 concise sentences, front-loaded with the core purpose. Every sentence adds value: purpose, behavioral note, alternative usage, requirement. No redundancy.

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 no output schema, the description adequately explains the return value (one point per month, range -100 to +100). Combined with the schema and minimal annotations, the description is sufficient for a simple read-only tool.

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%; both parameters have clear descriptions. The tool description adds only minor nuance (e.g., case-insensitive for ticker, default months), not significantly beyond what the schema 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 clearly specifies the verb (get), resource (insider-sentiment score), and scope (by ticker, monthly, with range -100 to +100). It distinguishes from sibling tools like get_transactions and get_signals by noting they provide trade-level detail.

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

Usage Guidelines5/5

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

Explicitly states when to use alternatives: 'Use get_transactions or get_signals for the trade-level detail behind a given month.' Also notes the Business plan requirement, setting usage prerequisites.

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

get_signalsA
Read-only

Cluster buy/sell signals — multiple insiders at the same company trading in the same direction within a short window, a stronger conviction signal than any single trade. Excludes 10b5-1 plan trades automatically by construction. Returns signal type, detection date, buyer/seller counts, total $ value, and the underlying transactions; pair with the generated explain_signal tool to see exactly why a given signal fired. Use get_transactions instead for raw, unaggregated trade search. Requires Business plan (a 402 upgrade_required response is returned otherwise). Paginated, max 50/page.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number. Defaults to 1.
tickerNoFilter to a specific company ticker, case-insensitive, e.g. NVDA. Omit for a market-wide scan across all companies.
per_pageNoResults per page. Defaults to 20, maximum 50.
cluster_buyNoIf true, return only ClusterBuy signals (multiple insiders buying together). Omit both cluster_buy and cluster_sell to return signals of either type.
cluster_sellNoIf true, return only ClusterSell signals (multiple insiders selling together). Omit both cluster_buy and cluster_sell to return signals of either type.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint and openWorldHint. The description adds critical behavioral context: exclusion of 10b5-1 plans, output composition, Business plan requirement (402 error), and pagination details. No contradictions with annotations.

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 a single paragraph with front-loaded purpose. Every sentence adds value, but it is slightly dense. Could be slightly more concise, but overall efficient.

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 has 5 parameters, no required ones, no output schema, the description fully explains the output structure (signal type, detection date, counts, total value, underlying transactions), pairing with explain_signal, and Business plan requirement. Complete for a read-only list tool.

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%, so parameters are well-documented. The description does not add new parameter meaning beyond the schema. Baseline 3 is appropriate as the schema carries the semantic burden.

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 it returns 'Cluster buy/sell signals' and explains the concept of multiple insiders trading same direction. It distinguishes from get_transactions and pairs with explain_signal, making the purpose specific and differentiated from siblings.

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

Usage Guidelines5/5

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

The description explicitly tells when to use this tool (for cluster signals), explains what it excludes (10b5-1 trades), and recommends get_transactions for raw trades. It also mentions Business plan requirement and pagination, providing comprehensive usage guidance.

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

get_status_historyA
Read-only

Measured uptime history for the public status page — trailing 90-day daily breakdown. Returns a daily breakdown of measured API uptime over a trailing 90-day window, computed from an internal heartbeat probe that runs every 5 minutes and performs the same DB-connectivity check as GET /health/ready. Each day in the days array reports the number of 5-minute slots expected to have elapsed (288 for a complete past day, pro-rated for the feature's first day and for today's partial day), how many of those slots recorded a healthy heartbeat, and the resulting uptime percentage for that day — plus an overall percentage (overallPct) across the whole window. start is the earliest date included: either the date of the very first heartbeat ever recorded, or 89 days before today once more than 90 days of history exist. Days before that are never returned. Use this to render an uptime history / status bar; for live corpus freshness use GET /v1/data-quality instead. Takes no parameters. Cached for ~5 minutes; no API key or plan required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

The annotations already declare readOnlyHint=true and openWorldHint=true, and the description builds on them with substantial behavioral detail: the 5-minute heartbeat cadence, DB-connectivity nature, pro-rating of partial days, 5-minute caching, and no API key or plan requirement. It also explains the semantics of start date and overallPct, which is far beyond what annotations alone provide. There is no contradiction between description and annotations.

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 long but every sentence carries useful information: response shape, date window semantics, computation method, intended usage, alternative tool, caching, and auth requirements. It is front-loaded with the core purpose and avoids filler or redundant phrasing.

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?

There is no output schema, so the description correctly carries the full burden of explaining the return value: the days array, per-day slot counts, uptime percentages, overallPct, and start date behavior. It also covers parameters, caching, and auth requirements. An agent has enough information to call the tool correctly and interpret its response without external context.

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?

The tool has zero parameters, so there is nothing meaningful to add beyond the empty input schema. The description explicitly states 'Takes no parameters,' which removes any assumption that a timeframe or entity filter might be required. Given the zero-parameter baseline, this is appropriately handled.

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: 'Measured uptime history for the public status page — trailing 90-day daily breakdown.' It clearly distinguishes what the tool returns from other data endpoints, and later explicitly contrasts it with live freshness data from GET /v1/data-quality. This is enough for an agent to understand the tool's distinct purpose.

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

Usage Guidelines5/5

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

The description is explicit about when to use the tool: 'Use this to render an uptime history / status bar; for live corpus freshness use GET /v1/data-quality instead.' It gives a positive use case, a negative use case, and names the alternative endpoint. No agent would need to infer usage context.

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

get_transactionsA
Read-only

Search SEC Form 4 insider transactions with rich filters: ticker, insider CIK, transaction code/category, date range, a dollar floor (min_value), institutional-ownership trend, and (Pro+) upper trade-size bounds plus post-trade return screening (1d/1w/1m/3m/6m, returns as fractions e.g. 0.05 = +5%). Returns transaction-level rows — shares, price, total value, transaction code, 10b5-1 flag, insider role flags. Use this for filtered or historical search across many companies/insiders; use get_recent_filings for an unfiltered live feed instead, or get_insider_transactions/get_company_insiders when you already have a specific insider or company. Free plan, including min_value; max_value/min_shares/max_shares/min_return_*/max_return_*/has_returns require Pro. Paginated, max 100/page, and paging depth is plan-limited (Free 20 pages, Starter 100, Pro+ unlimited) — for a bulk pull use the REST endpoint GET /v1/transactions/export (Business) instead of paging.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd date, inclusive, format YYYY-MM-DD (e.g. 2026-12-31). Filters on transactionDate.
cikNoCompany CIK number — SEC's numeric filer identifier, e.g. 0000320193. Leading zeros optional.
codeNoSingle SEC transaction code to filter to. P=open-market purchase, S=open-market sale, A=grant/award, M=option exercise, F=tax withholding on vesting, D=disposition to issuer, G=gift, C=conversion of derivative, J=other. Use `codes` instead to match more than one.
fromNoStart date, inclusive, format YYYY-MM-DD (e.g. 2026-01-01). Filters on transactionDate.
pageNo1-based page number. Defaults to 1. Paging depth is plan-limited: Free reaches page 20, Starter page 100, Pro and above unlimited; beyond that the call returns 402 with the upgrade path. If you need the full history rather than a page of it, the REST endpoint GET /v1/transactions/export (Business plan) streams the entire filtered set as CSV in one request.
codesNoComma-separated list of SEC transaction codes to include, e.g. "P,S" (see `code` for the letter meanings). Multi-code superset of `code`.
tickerNoStock ticker symbol, case-insensitive, e.g. AAPL or aapl.
categoryNoInclude only one category of transactions. open_market = P/S (the signal most users want); grants = award/comp noise; derivatives = option exercises etc.
per_pageNoResults per page. Defaults to 20, maximum 100.
max_valueNoMaximum trade value in USD (shares × price), inclusive. Requires Pro plan or higher — the whole call is rejected with 403 on Free/Starter, not silently ignored. Use min_value alone to screen by size on a free key.
min_valueNoMinimum trade value in USD (shares × price), inclusive. Available on every plan.
max_sharesNoMaximum number of shares, inclusive. Requires Pro plan or higher — the whole call is rejected with 403 on Free/Starter, not silently ignored.
min_sharesNoMinimum number of shares, inclusive. Requires Pro plan or higher — the whole call is rejected with 403 on Free/Starter, not silently ignored.
has_returnsNoIf true, only return transactions with at least one computed post-trade return horizon (any of 1d/1w/1m/3m/6m). Requires Pro plan or higher — omitted or ignored on Free.
insider_cikNoInsider CIK number — SEC's numeric filer identifier, e.g. 0001214128. Leading zeros optional.
significantNoIf true, preset = open-market trades only, no 10b5-1 plan trades, no derivatives. The "just show me real discretionary buys and sells" filter. Explicit params override it.
exclude_10b5NoIf true, exclude pre-scheduled 10b5-1 plan trades. Recommended for signal analysis — filters out automatic, non-discretionary trades.
exclude_codesNoComma-separated list of SEC transaction codes to exclude, e.g. "A,M,F,G" to drop grants, option exercises, tax withholding and gifts.
max_return_1dNoMaximum 1-day post-trade return as a fraction (e.g. -0.1 = -10%), inclusive. Requires Pro plan or higher — omitted or ignored on Free.
max_return_1mNoMaximum 1-month post-trade return as a fraction, inclusive. Requires Pro plan or higher — omitted or ignored on Free.
max_return_1wNoMaximum 1-week post-trade return as a fraction, inclusive. Requires Pro plan or higher — omitted or ignored on Free.
max_return_3mNoMaximum 3-month post-trade return as a fraction, inclusive. Requires Pro plan or higher — omitted or ignored on Free.
max_return_6mNoMaximum 6-month post-trade return as a fraction, inclusive. Requires Pro plan or higher — omitted or ignored on Free.
min_return_1dNoMinimum 1-day post-trade return, as a FRACTION not a percentage (0.05 = +5%), inclusive. Rows with no computed 1-day return are excluded. Requires Pro plan or higher — omitted or ignored on Free.
min_return_1mNoMinimum 1-month post-trade return as a fraction (0.05 = +5%), inclusive. Requires Pro plan or higher — omitted or ignored on Free.
min_return_1wNoMinimum 1-week post-trade return as a fraction (0.05 = +5%), inclusive. Requires Pro plan or higher — omitted or ignored on Free.
min_return_3mNoMinimum 3-month post-trade return as a fraction (0.05 = +5%), inclusive. Requires Pro plan or higher — omitted or ignored on Free.
min_return_6mNoMinimum 6-month post-trade return as a fraction (0.05 = +5%), inclusive. Requires Pro plan or higher — omitted or ignored on Free.
exclude_categoryNoExclude an entire category of transactions, e.g. exclude_category=derivatives drops all option-related rows.
exclude_derivativeNoIf true, drop derivative-security rows — the cleanest single "no options" switch.
inst_ownership_trendNoFilter by the trailing quarter-over-quarter trend in institutional (13F) ownership of the underlying company. No effect if institutional-ownership enrichment is disabled server-side; rows where the trend was suppressed for insufficient 13F coverage still match "stable".

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark readOnlyHint and openWorldHint, and the description adds substantial behavioral detail: plan gating with 403 rejection semantics, pagination depth limits per plan, return-horizon fraction convention, 10b5-1 filtering behavior, and the shape of returned rows. It also notes that inst_ownership_trend may have no effect if enrichment is disabled, which is exactly the kind of edge-case transparency agents need.

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 information-rich, with no filler, but it is a single long paragraph that would benefit from structural separation for readability. Given the tool's 31-parameter complexity, the length is justified, and front-loading the purpose and alternatives helps the agent fast.

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 complex, 31-parameter tool with no output schema, the description covers all essential contextual needs: purpose, alternatives, output row contents, pagination behavior, plan restrictions, parameter semantics, and bulk-export fallback. The agent has enough to decide when to call it and how to interpret the result shape.

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 description coverage is 100%, so the input schema already documents all 31 parameters. The description still adds meaningful value beyond the schema by clarifying plan requirements for min_value vs max_value, explaining that max_value rejection fails loudly rather than silently, and summarizing the 'significant' preset behavior and the distinction between code/codes/exclude_codes.

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: 'Search SEC Form 4 insider transactions with rich filters', then enumerates the supported dimensions. It also explicitly separates itself from get_recent_filings, get_insider_transactions, and get_company_insiders, so an agent can confidently distinguish this tool from siblings.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool ('filtered or historical search across many companies/insiders') and names direct alternatives with their use cases: get_recent_filings for an unfiltered live feed, get_insider_transactions/get_company_insiders when a specific insider/company is already known. It also routes bulk pulls to the REST export endpoint.

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

get_usage_historyA
Read-only

Daily request counts for the authenticated key over a trailing window. Returns a daily time series of request counts for the authenticated API key over the trailing N days — one data point per calendar day (UTC). Use this to plot usage trends or check rate-limit headroom over time. For a single current-day snapshot (today's count, plan limit, reset time) use GET /v1/keys/usage instead; for a raw request-by-request log use GET /v1/keys/usage/activity. Requires a valid X-Api-Key (401 without one).

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of trailing days to include, ending today (UTC). Defaults to 30, maximum 90.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint. The description adds specific context: requires valid X-Api-Key (401 otherwise), data is per calendar day UTC, and window is trailing. No contradictions.

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 sentences, no wasted words. Front-loaded with core purpose, then usage guidance. Every sentence serves a clear function.

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 single-parameter tool with no output schema, the description covers purpose, usage guidelines, auth requirement, and return format (daily time series). Could be slightly improved by explicitly stating the output structure (e.g., array of {date, count}).

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%, so the schema already documents the single parameter 'days' with its default and maximum. The description adds little extra beyond mentioning 'trailing N days' and 'one data point per calendar day'—the latter relates to output, not parameter 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 description clearly states the tool returns 'daily request counts for the authenticated key over a trailing window' as a time series, and distinguishes itself from siblings by naming specific alternatives for different use cases (single snapshot or raw log).

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

Usage Guidelines5/5

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

Explicitly says when to use this tool ('plot usage trends or check rate-limit headroom over time') and when not to, referencing exact alternative endpoints. Also notes authentication requirement.

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

get_webhook_eventsA
Read-only

Replay webhook delivery events since a given timestamp (default: last 24h). Returns up to 500 delivery attempts across all of the authenticated key's subscriptions since since (default: last 24 hours), most recent first — delivery id, subscription id, event type, attempt count, delivered-at/next-retry-at timestamps, last HTTP status code from the receiving endpoint, whether the delivery is dead (exhausted all retries), and the event payload. Use this to reconcile missed webhook deliveries (e.g. after an outage on your receiving endpoint) rather than relying solely on push delivery. since cannot be more than 30 days in the past. Requires a valid X-Api-Key (401 without one). payload is null and payloadRedacted is true for any event type above your current plan (congress.trade.filed requires Starter, signal.convergence requires Pro) — delivery history outlives the plan that created it, so payloads are checked against the plan you are on now, not the plan you had when you subscribed.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoInclusive lower bound for delivery timestamps, ISO-8601 datetime. Defaults to 24 hours ago. Cannot be more than 30 days in the past (400 INVALID_RANGE).

TDQS

A4.6/5.0
Behavior5/5

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

The annotations already indicate read-only and open-world behavior, but the description adds substantial behavioral detail: 500-attempt cap, newest-first ordering, default and maximum range for since, 401 auth behavior, and plan-based payload redaction with payloadRedacted flag. This gives the agent accurate expectations beyond the annotations.

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 front-loaded with the core purpose and return shape. It is slightly redundant in stating the default 24-hour window twice, but every other detail serves a clear purpose, especially given the absence of an output schema.

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 one-parameter tool with no output schema, the description is remarkably complete: it states result limit, ordering, timestamps, status code, dead flag, payload behavior, auth requirement, and error conditions. Very little is left for the agent to guess.

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 meaning beyond the schema by explaining how since interacts with the 24-hour default and 30-day maximum, and why old timestamps may still return redacted payloads based on the current plan.

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 specifies the verb and resource clearly: it replays and returns webhook delivery events. It goes beyond a vague label by explaining what is returned — delivery id, subscription id, event type, timestamps, status code, dead state, and payload — making the tool's purpose unmistakable.

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 an explicit use case: reconcile missed webhook deliveries after an outage, rather than depending on push delivery. However, it does not name a sibling tool as an alternative or state when not to use it, so there is clear context but no formal exclusion.

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

health_ingestionA
Read-only

Ingestion-death detector — Form 4 freshness, parse-queue health, price-feed freshness. Returns live (uncached) ingestion health: Form 4 processing freshness (stale after 90 minutes during the weekday 06:00-22:00 US Eastern EDGAR activity window, 14 hours outside it), parse-queue health (stale when >50 jobs are pending AND the oldest has waited >45 minutes), and daily price-feed freshness (degraded, never stale, when price bars are >5 days behind). Overall status is "healthy", "degraded" (price feed only), or "stale" (Form 4 or queue). Returns HTTP 503 when stale, 200 otherwise — safe to point an external uptime monitor at directly. No API key or plan required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint=true and openWorldHint=true annotations, the description reveals key live behaviors: the result is uncached, the exact staleness thresholds for each component, the overall status values, and the HTTP 503/200 response semantics. That is strong behavioral transparency.

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?

Though the description is dense, every clause earns its place: thresholds, status logic, HTTP behavior, and authentication requirements are all covered without fluff. The leading 'Ingestion-death detector' immediately orientates the agent.

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 zero-parameter, no-output-schema health utility, the description provides all the context an agent needs to invoke it and interpret the result: what is measured, when it is considered stale, what overall statuses occur, and what HTTP status is returned. Nothing crucial is missing.

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?

The tool takes zero parameters and schema coverage is 100%, so there are no parameter semantics to document. The baseline for a parameterless tool is appropriate here, and the description correctly focuses on behavior instead of parameters.

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 names a precise resource ('Form 4 freshness, parse-queue health, price-feed freshness') and an actionable verb ('detector'/'Returns live ingestion health'). It clearly differentiates this tool from the broader sibling set focused on filings, insiders, or usage by centering on ingestion pipeline health.

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 explicit context on when to use the tool: it can be pointed at directly by an external uptime monitor, and it requires no API key or plan. It does not enumerate alternatives or say 'use X instead of Y', but the use case is clear enough.

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

list_companiesA
Read-only

List companies with a public ticker, sorted by name or total filings. Returns a single page of companies that have a tracked public ticker — for browsing or building a company picker, not for searching by name or CIK (there is no full-text search here; use GET /v1/companies/{ticker} to fetch one company by its exact ticker). Each entry includes the company's CIK, name, ticker, exchange, total filing count, and distinct insider count. There is no page parameter — this endpoint always returns the top limit companies by the chosen sort order. Not plan-gated.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort order: "name" (alphabetical, default) or "totalfilings" (most SEC filings first). Case-insensitive; unrecognized values fall back to "name".
limitNoMaximum number of companies to return. Defaults to 50, maximum 50.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already indicate readOnly and openWorld. Description adds that it returns a single page, always top limit, sort order behavior (case-insensitive, fallback), and no page parameter. No contradictions.

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?

Single paragraph with logical flow: purpose, usage constraints, entry details, sort behavior. Efficient but could be slightly more 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?

Covers purpose, use cases, entry fields, sort behavior, limits, plan access. No output schema but details what each entry includes, making it complete for agent understanding.

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

Parameters5/5

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

Schema coverage is 100% but description adds meaning: explains sort options (name/totalfilings), default, case-insensitivity, fallback; clarifies limit defaults and max; explains no page parameter.

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?

Description clearly states the tool lists companies with public tickers, sorted by name or total filings, for browsing or building a company picker. It distinguishes from sibling tool by directing to use GET /v1/companies/{ticker} for exact ticker search.

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

Usage Guidelines5/5

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

Explicitly states when to use (browsing/picker) and when not (searching by name/CIK), provides alternative endpoint, explains no page parameter and default sort behavior. 'Not plan-gated' adds clarity.

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

list_congress_politiciansA
Read-only

Ranked rollup of politicians by congressional trade activity (Pro plan+). Returns a paginated list of politicians who have at least one non-superseded congressional trade, each with total/buy/sell counts (sells include both Sale and PartialSale; Exchange trades count only toward total) and their most recent trade's disclosure date. Ordered by total trade count descending, ties broken by most recently disclosed. Use this to discover active traders; for one politician's full profile (including their most-traded tickers and recent trades) use GET /v1/congress/politicians/{idOrSlug}. Requires Pro plan or higher (402 PLAN_REQUIRED on Free/Starter). Query runs live — no caching.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number. Defaults to 1.
per_pageNoPoliticians per page. Defaults to 100, maximum 500.

TDQS

A4.7/5.0
Behavior5/5

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

The description goes far beyond the readOnlyHint and openWorldHint annotations, disclosing non-superseded trade filtering, exactly how trade types count (e.g., Sale and PartialSale count as sells; Exchange only toward total), ordering behavior, pagination, live query behavior, and the 402 PLAN_REQUIRED failure mode. This is exceptionally 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 dense but every sentence earns a place: result scope, counts semantics, ordering, use case, alternative endpoint, plan requirement, and caching behavior. It front-loads the core purpose and avoids 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?

There is no output schema, so the description does the work of explaining what each result includes: total/buy/sell counts, sell semantics, and most recent disclosure date. The ordering, pagination, live-query behavior, plan requirement, and full-profile alternative complete the context an agent needs to invoke the tool correctly.

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 both page and per_page are already described with defaults and maximums. The description's mention of 'paginated list' reinforces the parameter purpose but adds minimal semantic detail beyond the schema. 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 opens with a specific verb and resource: 'Ranked rollup of politicians by congressional trade activity.' It clearly differentiates this from siblings like list_congress_trades and get_congress_politician by describing the aggregated politician-level nature and trading counts.

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

Usage Guidelines5/5

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

Explicitly states when to use the tool: 'Use this to discover active traders.' It also provides a direct alternative for full profiles with a specific endpoint, making routing between this and get_congress_politician clear. The plan requirement is also stated, which is valuable usage guidance.

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

list_congress_tradesA
Read-only

Query congressional STOCK Act trades (Free+, plan-clamped disclosure window). Returns a paginated JSON list of congressional periodic-transaction-report trades, most recently DISCLOSED first, with non-superseded rows only (amended-away rows never appear). COVERAGE — HOUSE ONLY TODAY: every trade in this dataset comes from the U.S. House Clerk's PTR index. Senate eFD (efdsearch.senate.gov) returns 403 to datacenter traffic, so no Senate filings are ingested yet. chamber=Senate remains a valid filter but matches nothing and returns the response header X-Coverage-Note: chamber-not-covered, so an empty result is never ambiguous. Scanning by chamber should treat that header as "not covered", not as "no trades". PLAN-CLAMPED WINDOW: this endpoint is open to every plan, but how far back you can see is clamped on disclosureDate — Free sees only trades disclosed in the last 30 days, Starter the last 366 days, Pro/Business/Enterprise unlimited history. Passing an older disclosure_date_from than your plan allows does not extend the window — the floor always wins. Filters: ticker, politician (bioguideId, exact), party (free-text, case-insensitive exact match — not a fixed enum), chamber (House|Senate — see the coverage note above), state (2-letter code), transaction_type (purchase|sale|partial_sale|exchange), min_amount (range-aware — matches AmountLow >= value, never a fabricated midpoint), transaction_date_from/to, disclosure_date_from/to. Every row always carries BOTH amountLow and amountHigh (STOCK Act discloses ranges, never exact figures) and disclosureLagDays = (disclosureDate - transactionDate) — the STOCK Act allows up to 45 days of lag, so "real-time" here means minutes-after-disclosure, not minutes-after-trade. For per-politician or per-ticker rollups use GET /v1/congress/politicians, /v1/congress/politicians/{idOrSlug}, or /v1/congress/tickers/{ticker} (all Pro+). Query runs live against the database — no caching.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number. Defaults to 1.
partyNoParty as disclosed by the source, case-insensitive exact match (e.g. "D", "R", "Democratic"). Free-text — not a fixed enum, so this matches whatever string the source reported.
stateNoTwo-letter US state/territory code, case-insensitive exact match (e.g. "CA").
tickerNoTicker symbol, case-insensitive exact match (e.g. "AAPL").
chamberNo"House" or "Senate", case-insensitive. COVERAGE: this dataset currently holds House PTRs only — Senate eFD blocks datacenter traffic, so chamber=Senate is a valid filter over data we do not yet have and returns an empty array with the response header X-Coverage-Note: chamber-not-covered.
per_pageNoTrades per page. Defaults to 100, maximum 500.
min_amountNoMinimum disclosed amount, range-aware: matches trades whose AmountLow >= this value. Never matched against a fabricated midpoint — see the amountLow/amountHigh honesty rule.
politicianNoPolitician's bioguide ID, exact match (e.g. "P000197").
transaction_typeNo"purchase", "sale", "partial_sale", or "exchange", case-insensitive.
disclosure_date_toNoInclusive end of the disclosure-date window, format YYYY-MM-DD.
transaction_date_toNoInclusive end of the transaction-date window, format YYYY-MM-DD.
disclosure_date_fromNoInclusive start of the disclosure-date window, format YYYY-MM-DD. Subject to the plan-clamped floor below — a Free/Starter caller cannot page back further than their plan allows even by passing an older date here.
transaction_date_fromNoInclusive start of the transaction-date window, format YYYY-MM-DD.

TDQS

A4.8/5.0
Behavior5/5

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

The annotations (readOnlyHint, openWorldHint) are augmented by detailed behavioral context: House-only coverage, Senate 403 behavior, amended-away rows excluded, plan-clamped windows, no caching, and the X-Coverage-Note header. This goes far beyond the annotations and materially changes how an agent should interpret empty or partial results.

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 information-dense; every sentence earns its place given the complexity of the coverage rules, plan clamps, and filter semantics. It is front-loaded with the core purpose, though the all-caps section labels make it a bit visually noisy rather than elegantly structured.

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 13-parameter list endpoint with no output schema, the description covers the output shape (paginated JSON, ordering, amountLow/amountHigh, disclosureLagDays), the pagination defaults live in the schema, and the major edge cases (Senate coverage, plan clamps, amended rows, live query behavior) are explicitly disclosed. An agent can decide whether to call this endpoint and how to interpret ambiguous results without guessing.

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?

The input schema already has 100% parameter coverage with individual descriptions, so the baseline is 3. The tool description adds meaningful behavior beyond the schema: it explains that plan-level clamps constrain disclosure_date_from, that min_amount is range-aware against AmountLow rather than a midpoint, and that every row carries amountLow/high plus disclosureLagDays.

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 — 'Query congressional STOCK Act trades' — and clarifies exact scope and ordering: paginated, most recently disclosed first, non-superseded rows only. It clearly differentiates itself from sibling rollup endpoints by stating that per-politician or per-ticker rollups belong on /v1/congress/politicians and /v1/congress/tickers/{ticker}.

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

Usage Guidelines5/5

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

It explicitly names when to use the endpoint, such as for listing congressional periodic-transaction-report trades, and routes rollup-style queries to alternative endpoints. It also warns that chamber=Senate returns empty results with a special header due to coverage limitations, and explains plan-based date clamps so callers know not to expect results beyond their entitlement.

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

list_filingsA
Read-only

List Form 4 filings with optional ticker, CIK and date filters. Returns a paginated list of Form 4 filings, newest filed first. Filter by ticker, cik, and a from/to filed-date window. Each entry carries the accession number, company ticker/name, period of report, filed date, amendment type (Original/Amendment), and the count of non-superseded transactions in that filing. Use this for a company's filing HISTORY; use GET /v1/filings/recent for a live newest-first feed (it has no page parameter), and GET /v1/transactions when you want the individual trades rather than the filings that contain them. limit is accepted as an alias for per_page. Not plan-gated.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoInclusive end of the filed-date window, format YYYY-MM-DD.
cikNoCompany CIK (SEC identifier), e.g. "0000320193". Leading zeros optional.
fromNoInclusive start of the filed-date window, format YYYY-MM-DD.
pageNo1-based page number. Defaults to 1.
limitNoAlias for per_page. Accepted because every caller who hit this path before it existed sent `limit`.
tickerNoCompany ticker symbol, case-insensitive (e.g. "AAPL").
per_pageNoFilings per page. Defaults to 20, maximum 100. `limit` is accepted as an alias; if both are given, per_page wins.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only assert readOnlyHint=true and openWorldHint=true, so the description carries the behavioral burden — and it delivers: pagination (per_page default/max thrown in schema, but the description frames newest-first ordering), the semantics of an entry (accession number, amendment type, non-superseded transaction count), inclusive date-window behavior, alias precedence (per_page wins), and the plan-gating note. All of this is context annotations alone could not supply, and nothing contradicts the read-only/open-world hints.

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 verb and primary use case in the first clause, then flows from result semantics to entry fields to alternatives to parameter trivia. Every sentence carries distinctive information — the only minor redundancy is that filters are mentioned twice (first and second sentence), but this is low-cost re-emphasis, not waste.

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?

With no output schema, the description correctly fills the return-value gap by enumerating what every entry carries (accession number, ticker/name, period of report, filed date, amendment type, non-superseded transaction count). Pagination, ordering, filter behavior, alias semantics, and sibling routing are all covered; nothing an agent needs to call this read-only list tool correctly is missing.

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; the schema already documents every parameter with defaults (per_page=20, page=1, to=100), formats (YYYY-MM-DD), examples (CIK string with leading zeros), and alias precedence. The description adds value on top by grouping several params into a cohesive semantic idea: the filters ticker, CIK, and 'a from/to filed-date window', which is small but real framing benefit beyond 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 names a specific verb-resource pair ('List Form 4 filings') and immediately scopes it: optional ticker/CIK/date filters, paginated, newest-first, with per-entry fields enumerated. It explicitly distinguishes itself from get_recent_filings and get_transactions by pointing at their unique behaviors (no page parameter vs. individual trades), so an agent can disambiguate without opening sibling schemas.

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

Usage Guidelines5/5

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

Gives explicit selection logic: 'Use this for a company's filing HISTORY', then names the alternatives with the condition that selects each — GET /v1/filings/recent for a live feed (explicitly noting it lacks a page parameter) and GET /v1/transactions when individual trades are needed. Also discloses that it is 'Not plan-gated', which is relevant access/cost context an agent can act on.

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

list_webhooksA
Read-only

List webhook subscriptions owned by the authenticated API key. Returns every webhook subscription (active and deactivated) created under the authenticated API key: subscription id, target URL, subscribed event types, creation date, active flag, and the isReadOnly flag. Does NOT return the signing secret again (it's shown once, at creation, by POST /v1/webhooks) — regenerate by deleting and recreating the subscription if it's lost. Requires a valid X-Api-Key (401 without one).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations indicate readOnlyHint: true and openWorldHint: true. The description adds valuable context: does not return the signing secret, requires valid X-Api-Key, and implies the tool is safe and open. No contradiction.

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 concise, front-loads the main purpose, and uses only necessary sentences. No fluff or redundancy.

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 no output schema and no parameters, the description covers all essential aspects: what is returned, what is not, auth requirements, and a hint for secret recovery. Complete for the tool's complexity.

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?

No parameters exist, schema coverage is 100%. The description compensates by describing the output fields and important constraints (e.g., not returning the secret). Baseline for 0 params is 4.

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 action ('list webhook subscriptions'), the scope ('owned by the authenticated API key'), and details the returned fields. It distinguishes itself from other tools by specifying it returns both active and deactivated subscriptions.

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 description provides some context (e.g., not returning the signing secret, auth requirement) but does not explicitly state when to use this tool versus alternatives like 'get_webhook_events' or when not to use it.

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

research_companyA
Read-only

Bundled insider-research context for one ticker in a single call — company profile, recent insider transactions (10b5-1 flagged), cluster buy/sell signals, monthly sentiment score, and a computed net buy/sell direction summary. Use this FIRST for any company insider-research question; it replaces 4 separate calls (get_company_overview, get_transactions, get_signals, get_sentiment) and degrades gracefully — if signals/sentiment require a plan you don't have, they come back null with an explanatory _unavailable note instead of failing the whole call. Company/transaction data works on Free; signals/sentiment sections require Business. Fetches all sections concurrently. Research and decision-support only, not investment advice.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol to research, case-insensitive, e.g. AAPL. Normalized to uppercase internally.
recent_limitNoMaximum number of recent insider transactions to include in the bundled result. Minimum 1, defaults to 10, maximum 100.

TDQS

A4.6/5.0
Behavior5/5

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

Discloses graceful degradation with null and _unavailable notes, concurrency (fetches all sections concurrently), and plan-based availability (Free vs Business), which go beyond the readOnlyHint and openWorldHint annotations.

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 moderately sized but front-loaded with the main purpose, and each sentence adds value; however, it includes a disclaimer that could be separate, preventing a perfect score.

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 complex tool with no output schema, the description thoroughly explains the bundled components, plan behavior, concurrency, and degradation, providing sufficient context for an agent.

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%, so baseline is 3. Description does not add significant new information about parameter meaning beyond the schema, though it contextualizes recent_limit within the bundled result.

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 bundles company profile, insider transactions, signals, sentiment, and direction summary into one call, and explicitly distinguishes it from four sibling tools it replaces.

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

Usage Guidelines5/5

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

Explicitly advises to use this tool FIRST for any insider-research question, replaces separate calls, and explains graceful degradation and plan requirements for when to use alternatives.

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

search_insidersA
Read-only

Search insiders (officers, directors, 10% owners) by name. Searches insiders by name and returns a paginated list of matches with each insider's CIK, title, director/officer/10%-owner flags, and total filing count. Use this to resolve a person's name to their CIK before fetching their transaction history, career summary, or scorecard — the CIK returned here feeds directly into GET /v1/insiders/{cik}/transactions, /summary, and /scorecard. Omitting the name filter returns insiders in alphabetical order rather than performing a search. Not plan-gated — available on the Free tier.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoCase-insensitive substring match against the insider's full name (e.g. "Musk", "cook"). Must be at least 2 characters — shorter values return a 400 QUERY_TOO_SHORT error. Omit to list all insiders alphabetically.
pageNo1-based page number. Defaults to 1.
per_pageNoNumber of insiders per page. Defaults to 20, maximum 500.

TDQS

A4.5/5.0
Behavior4/5

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

Disclosed pagination, case-insensitive substring matching, minimum length requirement, and 400 error for short queries. Also notes free tier availability. Annotations already indicate readOnlyHint and openWorldHint, but description adds concrete details beyond that.

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, each with clear purpose. First sentence defines action, second explains output and downstream use, third covers default behavior, fourth notes pricing. No waste.

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?

No output schema, but description explains return fields (CIK, title, flags, filing count). Covers error case (short query) and pricing. Complete enough given the tool's simplicity and sibling context.

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?

All parameters fully described in schema (100% coverage). Description adds key details: case-insensitive substring, minimum 2 characters, page defaults, per_page max 500. This adds practical usage constraints beyond 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?

Clearly states the tool searches insiders by name and returns CIK, title, and flags. Distinguishes from sibling tools like get_company_insiders by explicitly mentioning CIK resolution for downstream endpoints.

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?

Explicitly tells when to use: 'resolve a person's name to their CIK before fetching transaction history, career summary, or scorecard'. Also notes behavior when name is omitted. Does not explicitly mention when not to use, but context with sibling tools implies it.

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

verify_setupA
Read-only

Diagnostic check: confirms FORM4API_KEY is present and valid, the backend is reachable, and reports your current plan — returns a pass/fail/warn per check plus concrete next steps (where to get a key, how to upgrade) instead of a raw error. Run this first whenever another tool fails or returns a 401/402, to isolate whether the problem is configuration, plan, or a backend outage. No API key or parameters required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint. The description adds that the tool returns 'pass/fail/warn per check plus concrete next steps' instead of raw errors, and that it can isolate configuration vs. plan vs. backend issues.

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 sentences: first states purpose and return format, second tells when to use, third reassures no parameters. No wasted words, front-loaded.

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 zero-parameter, read-only diagnostic tool with no output schema, the description fully explains the return type (pass/fail/warn + next steps) and usage context. Nothing missing.

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?

No parameters in schema, and description confirms 'No API key or parameters required'. This adds clarity that nothing is needed, scoring baseline 4 for zero-param tool.

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?

Clearly states it performs a diagnostic check for API key validity, backend reachability, and plan status. It distinguishes itself from siblings like check_usage or get_public_stats by focusing on setup verification.

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

Usage Guidelines5/5

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

Explicitly tells when to use: 'Run this first whenever another tool fails or returns a 401/402'. Also notes that no API key or parameters are required, guiding the agent to use it as a first step.

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. Dates show when Glama detected each change.

  1. 10 tool updatesv1.9.6
    • Addedget_congress_politician
    • Addedget_congress_ticker_rollup
    • Addedget_convergence_signals
    • Addedget_insider_directory
    • Addedget_status_history
    • Changedget_transactions17 fields changed
      • addedInput schema / properties / has_returns
        Added value: +{
        +  "description": "If true, only return transactions with at least one computed post-trade return horizon (any of 1d/1w/1m/3m/6m). Requires Pro plan or higher — omitted or ignored on Free.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / inst_ownership_trend
        Added value: +{
        +  "description": "Filter by the trailing quarter-over-quarter trend in institutional (13F) ownership of the underlying company. No effect if institutional-ownership enrichment is disabled server-side; rows where the trend was suppressed for insufficient 13F coverage still match \"stable\".",
        +  "enum": [
        +    "increasing",
        +    "decreasing",
        +    "stable"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / max_return_1d
        Added value: +{
        +  "description": "Maximum 1-day post-trade return as a fraction (e.g. -0.1 = -10%), inclusive. Requires Pro plan or higher — omitted or ignored on Free.",
        +  "type": "number"
        +}
      • addedInput schema / properties / max_return_1m
        Added value: +{
        +  "description": "Maximum 1-month post-trade return as a fraction, inclusive. Requires Pro plan or higher — omitted or ignored on Free.",
        +  "type": "number"
        +}
      • addedInput schema / properties / max_return_1w
        Added value: +{
        +  "description": "Maximum 1-week post-trade return as a fraction, inclusive. Requires Pro plan or higher — omitted or ignored on Free.",
        +  "type": "number"
        +}
      • addedInput schema / properties / max_return_3m
        Added value: +{
        +  "description": "Maximum 3-month post-trade return as a fraction, inclusive. Requires Pro plan or higher — omitted or ignored on Free.",
        +  "type": "number"
        +}
      • addedInput schema / properties / max_return_6m
        Added value: +{
        +  "description": "Maximum 6-month post-trade return as a fraction, inclusive. Requires Pro plan or higher — omitted or ignored on Free.",
        +  "type": "number"
        +}
      • changedInput schema / properties / max_shares / description
        Previous value: -"Maximum number of shares, inclusive. Requires Pro plan or higher — omitted or ignored on Free."New value: +"Maximum number of shares, inclusive. Requires Pro plan or higher — the whole call is rejected with 403 on Free/Starter, not silently ignored."
      • changedInput schema / properties / max_value / description
        Previous value: -"Maximum trade value in USD (shares × price), inclusive. Requires Pro plan or higher — omitted or ignored on Free."New value: +"Maximum trade value in USD (shares × price), inclusive. Requires Pro plan or higher — the whole call is rejected with 403 on Free/Starter, not silently ignored. Use min_value alone to screen by size on a free key."
      • addedInput schema / properties / min_return_1d
        Added value: +{
        +  "description": "Minimum 1-day post-trade return, as a FRACTION not a percentage (0.05 = +5%), inclusive. Rows with no computed 1-day return are excluded. Requires Pro plan or higher — omitted or ignored on Free.",
        +  "type": "number"
        +}
      • addedInput schema / properties / min_return_1m
        Added value: +{
        +  "description": "Minimum 1-month post-trade return as a fraction (0.05 = +5%), inclusive. Requires Pro plan or higher — omitted or ignored on Free.",
        +  "type": "number"
        +}
      • addedInput schema / properties / min_return_1w
        Added value: +{
        +  "description": "Minimum 1-week post-trade return as a fraction (0.05 = +5%), inclusive. Requires Pro plan or higher — omitted or ignored on Free.",
        +  "type": "number"
        +}
      • addedInput schema / properties / min_return_3m
        Added value: +{
        +  "description": "Minimum 3-month post-trade return as a fraction (0.05 = +5%), inclusive. Requires Pro plan or higher — omitted or ignored on Free.",
        +  "type": "number"
        +}
      • addedInput schema / properties / min_return_6m
        Added value: +{
        +  "description": "Minimum 6-month post-trade return as a fraction (0.05 = +5%), inclusive. Requires Pro plan or higher — omitted or ignored on Free.",
        +  "type": "number"
        +}
      • changedInput schema / properties / min_shares / description
        Previous value: -"Minimum number of shares, inclusive. Requires Pro plan or higher — omitted or ignored on Free."New value: +"Minimum number of shares, inclusive. Requires Pro plan or higher — the whole call is rejected with 403 on Free/Starter, not silently ignored."
      • changedInput schema / properties / min_value / description
        Previous value: -"Minimum trade value in USD (shares × price), inclusive. Requires Pro plan or higher — omitted or ignored on Free."New value: +"Minimum trade value in USD (shares × price), inclusive. Available on every plan."
      • changedInput schema / properties / page / description
        Previous value: -"1-based page number. Defaults to 1."New value: +"1-based page number. Defaults to 1. Paging depth is plan-limited: Free reaches page 20, Starter page 100, Pro and above unlimited; beyond that the call returns 402 with the upgrade path. If you need the full history rather than a page of it, the REST endpoint GET /v1/transactions/export (Business plan) streams the entire filtered set as CSV in one request."
    • Addedhealth_ingestion
    • Addedlist_congress_politicians
    • Addedlist_congress_trades
    • Addedlist_filings
  2. 18 tool updates
    • Changedexplain_signal2 fields changed
      • addedInput schema / properties / date / description
        Added value: +"Exact signal date to explain, format YYYY-MM-DD. Omit to explain the company's most recent signal. Returns 404 SIGNAL_NOT_FOUND if no signal exists for the given (or most recent) date."
      • addedInput schema / properties / ticker / description
        Added value: +"Company ticker symbol, case-insensitive (e.g. \"AAPL\")."
    • Changedget_company_insiders3 fields changed
      • changedInput schema / properties / page / description
        Previous value: -"Page number"New value: +"1-based page number. Defaults to 1."
      • changedInput schema / properties / per_page / description
        Previous value: -"Results per page (max 100)"New value: +"Results per page. Defaults to 20, maximum 100."
      • changedInput schema / properties / ticker / description
        Previous value: -"Stock ticker symbol"New value: +"Stock ticker symbol, case-insensitive, e.g. MSFT."
    • Changedget_company_overview1 field changed
      • changedInput schema / properties / ticker / description
        Previous value: -"Stock ticker symbol, e.g. MSFT"New value: +"Stock ticker symbol, case-insensitive, e.g. MSFT."
    • Changedget_filing1 field changed
      • changedInput schema / properties / accession / description
        Previous value: -"Accession number, e.g. 0000320193-26-000001"New value: +"SEC accession number in NNNNNNNNNN-YY-NNNNNN format (10-digit filer CIK, 2-digit year, 6-digit sequence), e.g. 0000320193-26-000001. Copy this from a get_recent_filings or get_transactions result."
    • Changedget_form1447 fields changed
      • changedInput schema / properties / exclude_10b5 / description
        Previous value: -"If true, exclude pre-scheduled 10b5-1 plan filings. Recommended for signal analysis — discretionary sales only."New value: +"If true, exclude pre-scheduled 10b5-1 plan filings. Recommended for signal analysis — discretionary sale-intent notices only."
      • changedInput schema / properties / from / description
        Previous value: -"Start filing date in ISO 8601 format, e.g. 2026-01-01"New value: +"Start filing date, inclusive, format YYYY-MM-DD (e.g. 2026-01-01)."
      • changedInput schema / properties / insider_name / description
        Previous value: -"Filter by insider name (partial match)"New value: +"Filter by insider name, case-insensitive partial/substring match, e.g. \"cook\"."
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination"New value: +"1-based page number. Defaults to 1."
      • changedInput schema / properties / per_page / description
        Previous value: -"Results per page (max 100)"New value: +"Results per page. Defaults to 20, maximum 100."
      • changedInput schema / properties / ticker / description
        Previous value: -"Stock ticker symbol, e.g. AAPL"New value: +"Stock ticker symbol, case-insensitive, e.g. AAPL."
      • changedInput schema / properties / to / description
        Previous value: -"End filing date in ISO 8601 format, e.g. 2026-12-31"New value: +"End filing date, inclusive, format YYYY-MM-DD (e.g. 2026-12-31)."
    • Changedget_holdings7 fields changed
      • changedInput schema / properties / cusip / description
        Previous value: -"CUSIP identifier of the security"New value: +"CUSIP identifier of the security — the standard 9-character alphanumeric security identifier (8 chars + 1 check digit), e.g. 037833100."
      • changedInput schema / properties / manager_cik / description
        Previous value: -"CIK of the institutional manager"New value: +"CIK of the institutional manager (13F-HR filer) — SEC's numeric filer identifier. Leading zeros optional."
      • changedInput schema / properties / min_value / description
        Previous value: -"Minimum position value in USD"New value: +"Minimum reported position value in USD, inclusive, as of the 13F-HR filing."
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination"New value: +"1-based page number. Defaults to 1."
      • changedInput schema / properties / per_page / description
        Previous value: -"Results per page (max 100)"New value: +"Results per page. Defaults to 20, maximum 100."
      • changedInput schema / properties / quarter / description
        Previous value: -"Quarter in YYYY-Qn format, e.g. 2026-Q1"New value: +"Quarter in YYYY-Qn format, e.g. 2026-Q1. Omit for the latest available quarter."
      • changedInput schema / properties / ticker / description
        Previous value: -"Stock ticker the position is in (e.g. AAPL). Resolves via CUSIP → ticker mapping for issuers without direct ticker rows."New value: +"Stock ticker the position is in, case-insensitive (e.g. AAPL). Resolves via CUSIP → ticker mapping for issuers without direct ticker rows."
    • Changedget_insider_career_summary1 field changed
      • changedInput schema / properties / cik / description
        Previous value: -"Insider CIK number. From SEC EDGAR. Example: 1214156 for Tim Cook."New value: +"Insider CIK number — SEC's numeric filer identifier. Leading zeros optional. Example: 1214156 for Tim Cook. Resolve a name to a CIK first with search_insiders if you don't already have it. Note: response return fields are stored as fractions (0.05 = +5%), not percentages."
    • Changedget_insider_leaderboard4 fields changed
      • addedInput schema / properties / horizon / description
        Added value: +"\"3m\" or \"6m\" — the post-trade return horizon to score and rank by. Defaults to \"3m\"."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of insiders to return. Defaults to 25, maximum 100."
      • addedInput schema / properties / min_trades / description
        Added value: +"Minimum number of scored buys an insider must have to be ranked. Defaults to 5; values below 5 are silently raised to 5 (the scorecard sample-sufficiency floor)."
      • addedInput schema / properties / order / description
        Added value: +"\"hit_rate\" (% of scored buys with a positive return) or \"avg_return\" (mean scored return). Defaults to \"hit_rate\"."
    • Changedget_insider_profile1 field changed
      • changedInput schema / properties / cik / description
        Previous value: -"Insider CIK number, e.g. 0001214128"New value: +"Insider CIK number — SEC's numeric filer identifier, e.g. 0001214128. Leading zeros optional. Resolve a name to a CIK first with search_insiders if you don't already have it."
    • Changedget_insider_scorecard1 field changed
      • addedInput schema / properties / cik / description
        Added value: +"Insider's SEC CIK, exact match."
    • Changedget_insider_transactions8 fields changed
      • changedInput schema / properties / cik / description
        Previous value: -"Insider CIK number"New value: +"Insider CIK number — SEC's numeric filer identifier, e.g. 0001214128. Leading zeros optional."
      • changedInput schema / properties / code / description
        Previous value: -"Filter by SEC transaction code"New value: +"Single SEC transaction code to filter to. P=open-market purchase, S=open-market sale, A=grant/award, M=option exercise, F=tax withholding on vesting, D=disposition to issuer, G=gift, C=conversion of derivative, J=other."
      • changedInput schema / properties / exclude_10b5 / description
        Previous value: -"Exclude pre-scheduled 10b5-1 plan trades"New value: +"If true, exclude pre-scheduled 10b5-1 plan trades — keeps only discretionary transactions."
      • changedInput schema / properties / from / description
        Previous value: -"Start date ISO 8601"New value: +"Start date, inclusive, format YYYY-MM-DD (e.g. 2026-01-01). Filters on transactionDate."
      • changedInput schema / properties / page / description
        Previous value: -"Page number"New value: +"1-based page number. Defaults to 1."
      • changedInput schema / properties / per_page / description
        Previous value: -"Results per page (max 100)"New value: +"Results per page. Defaults to 20, maximum 100."
      • changedInput schema / properties / ticker / description
        Previous value: -"Filter to a specific company ticker"New value: +"Filter to a specific company ticker, case-insensitive, e.g. AAPL."
      • changedInput schema / properties / to / description
        Previous value: -"End date ISO 8601"New value: +"End date, inclusive, format YYYY-MM-DD (e.g. 2026-12-31). Filters on transactionDate."
    • Changedget_managers4 fields changed
      • changedInput schema / properties / min_aum / description
        Previous value: -"Minimum AUM in USD at the latest filed quarter"New value: +"Minimum assets-under-management in USD, inclusive, as of the manager's latest filed 13F-HR quarter."
      • changedInput schema / properties / name / description
        Previous value: -"Filter by manager name (partial, case-insensitive). Example: \"Berkshire\" matches Berkshire Hathaway."New value: +"Filter by manager name, case-insensitive partial/substring match. Example: \"Berkshire\" matches Berkshire Hathaway."
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination"New value: +"1-based page number. Defaults to 1."
      • changedInput schema / properties / per_page / description
        Previous value: -"Results per page (max 100)"New value: +"Results per page. Defaults to 20, maximum 100."
    • Changedget_recent_filings3 fields changed
      • changedInput schema / properties / page / description
        Previous value: -"Page number"New value: +"1-based page number. Defaults to 1."
      • changedInput schema / properties / per_page / description
        Previous value: -"Results per page (max 100)"New value: +"Results per page. Defaults to 20, maximum 100."
      • changedInput schema / properties / ticker / description
        Previous value: -"Filter by stock ticker, e.g. NVDA"New value: +"Filter to one stock ticker, case-insensitive, e.g. NVDA. Omit for the unfiltered market-wide feed."
    • Changedget_sentiment2 fields changed
      • changedInput schema / properties / months / description
        Previous value: -"How many past months of sentiment to return. Defaults to backend default (~12)."New value: +"Number of trailing months of sentiment to return, ending with the most recent. Minimum 1, maximum 60. Omit to use the backend default (~12)."
      • changedInput schema / properties / ticker / description
        Previous value: -"Stock ticker symbol, e.g. AAPL"New value: +"Stock ticker symbol, case-insensitive, e.g. AAPL."
    • Changedget_signals5 fields changed
      • changedInput schema / properties / cluster_buy / description
        Previous value: -"Only return cluster buy signals"New value: +"If true, return only ClusterBuy signals (multiple insiders buying together). Omit both cluster_buy and cluster_sell to return signals of either type."
      • changedInput schema / properties / cluster_sell / description
        Previous value: -"Only return cluster sell signals"New value: +"If true, return only ClusterSell signals (multiple insiders selling together). Omit both cluster_buy and cluster_sell to return signals of either type."
      • changedInput schema / properties / page / description
        Previous value: -"Page number"New value: +"1-based page number. Defaults to 1."
      • changedInput schema / properties / per_page / description
        Previous value: -"Results per page (max 50)"New value: +"Results per page. Defaults to 20, maximum 50."
      • changedInput schema / properties / ticker / description
        Previous value: -"Filter to a specific company ticker"New value: +"Filter to a specific company ticker, case-insensitive, e.g. NVDA. Omit for a market-wide scan across all companies."
    • Changedget_transactions13 fields changed
      • changedInput schema / properties / cik / description
        Previous value: -"Company CIK number"New value: +"Company CIK number — SEC's numeric filer identifier, e.g. 0000320193. Leading zeros optional."
      • changedInput schema / properties / code / description
        Previous value: -"SEC transaction code. P=purchase, S=sale, A=award, M=option exercise, F=tax withholding, D=disposition"New value: +"Single SEC transaction code to filter to. P=open-market purchase, S=open-market sale, A=grant/award, M=option exercise, F=tax withholding on vesting, D=disposition to issuer, G=gift, C=conversion of derivative, J=other. Use `codes` instead to match more than one."
      • changedInput schema / properties / codes / description
        Previous value: -"Comma-separated list of SEC transaction codes to include, e.g. \"P,S\". Multi-code superset of `code`."New value: +"Comma-separated list of SEC transaction codes to include, e.g. \"P,S\" (see `code` for the letter meanings). Multi-code superset of `code`."
      • changedInput schema / properties / from / description
        Previous value: -"Start date in ISO 8601 format, e.g. 2026-01-01"New value: +"Start date, inclusive, format YYYY-MM-DD (e.g. 2026-01-01). Filters on transactionDate."
      • changedInput schema / properties / insider_cik / description
        Previous value: -"Insider CIK number"New value: +"Insider CIK number — SEC's numeric filer identifier, e.g. 0001214128. Leading zeros optional."
      • changedInput schema / properties / max_shares / description
        Previous value: -"Maximum number of shares. Pro plan or higher."New value: +"Maximum number of shares, inclusive. Requires Pro plan or higher — omitted or ignored on Free."
      • changedInput schema / properties / max_value / description
        Previous value: -"Maximum trade value in USD (shares × price). Pro plan or higher."New value: +"Maximum trade value in USD (shares × price), inclusive. Requires Pro plan or higher — omitted or ignored on Free."
      • changedInput schema / properties / min_shares / description
        Previous value: -"Minimum number of shares. Pro plan or higher."New value: +"Minimum number of shares, inclusive. Requires Pro plan or higher — omitted or ignored on Free."
      • changedInput schema / properties / min_value / description
        Previous value: -"Minimum trade value in USD (shares × price). Pro plan or higher."New value: +"Minimum trade value in USD (shares × price), inclusive. Requires Pro plan or higher — omitted or ignored on Free."
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination"New value: +"1-based page number. Defaults to 1."
      • changedInput schema / properties / per_page / description
        Previous value: -"Results per page (max 100)"New value: +"Results per page. Defaults to 20, maximum 100."
      • changedInput schema / properties / ticker / description
        Previous value: -"Stock ticker symbol, e.g. AAPL"New value: +"Stock ticker symbol, case-insensitive, e.g. AAPL or aapl."
      • changedInput schema / properties / to / description
        Previous value: -"End date in ISO 8601 format, e.g. 2026-12-31"New value: +"End date, inclusive, format YYYY-MM-DD (e.g. 2026-12-31). Filters on transactionDate."
    • Changedget_webhook_events1 field changed
      • addedInput schema / properties / since / description
        Added value: +"Inclusive lower bound for delivery timestamps, ISO-8601 datetime. Defaults to 24 hours ago. Cannot be more than 30 days in the past (400 INVALID_RANGE)."
    • Changedresearch_company2 fields changed
      • changedInput schema / properties / recent_limit / description
        Previous value: -"How many recent insider transactions to include (default 10, max 100)"New value: +"Maximum number of recent insider transactions to include in the bundled result. Minimum 1, defaults to 10, maximum 100."
      • changedInput schema / properties / ticker / description
        Previous value: -"Stock ticker symbol to research, e.g. AAPL"New value: +"Stock ticker symbol to research, case-insensitive, e.g. AAPL. Normalized to uppercase internally."
  3. 4 tool updatesv1.9.2
    • Changedget_key_activity1 field changed
      • addedInput schema / properties / limit / description
        Added value: +"Number of most-recent requests to return. Defaults to 100, maximum 200."
    • Changedget_usage_history1 field changed
      • addedInput schema / properties / days / description
        Added value: +"Number of trailing days to include, ending today (UTC). Defaults to 30, maximum 90."
    • Changedlist_companies2 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of companies to return. Defaults to 50, maximum 50."
      • addedInput schema / properties / sort / description
        Added value: +"Sort order: \"name\" (alphabetical, default) or \"totalfilings\" (most SEC filings first). Case-insensitive; unrecognized values fall back to \"name\"."
    • Changedsearch_insiders3 fields changed
      • addedInput schema / properties / name / description
        Added value: +"Case-insensitive substring match against the insider's full name (e.g. \"Musk\", \"cook\"). Must be at least 2 characters — shorter values return a 400 QUERY_TOO_SHORT error. Omit to list all insiders alphabetically."
      • addedInput schema / properties / page / description
        Added value: +"1-based page number. Defaults to 1."
      • addedInput schema / properties / per_page / description
        Added value: +"Number of insiders per page. Defaults to 20, maximum 500."
  4. 27 tool updatesv1.0.0
    • First observedcheck_usage
    • First observedexplain_signal
    • First observedget_company_insiders
    • First observedget_company_overview
    • First observedget_data_quality
    • First observedget_filing
    • First observedget_form144
    • First observedget_holdings
    • First observedget_insider_career_summary
    • First observedget_insider_leaderboard
    • First observedget_insider_profile
    • First observedget_insider_scorecard
    • First observedget_insider_transactions
    • First observedget_key_activity
    • First observedget_managers
    • First observedget_public_stats
    • First observedget_recent_filings
    • First observedget_sentiment
    • First observedget_signals
    • First observedget_transactions
    • First observedget_usage_history
    • First observedget_webhook_events
    • First observedlist_companies
    • First observedlist_webhooks
    • First observedresearch_company
    • First observedsearch_insiders
    • First observedverify_setup

TDQS

A4.3/5.0
Disambiguation5/5

Each tool targets a distinct aspect of insider trading data (e.g., company overview, insider transactions, signals, sentiment). Descriptions explicitly compare related tools, making boundaries clear. No two tools serve the same purpose.

Naming Consistency4/5

Tool names follow a verb_noun pattern with snake_case (e.g., get_company_overview, list_companies). The set uses a mix of 'get', 'list', 'search', 'check', and 'research', which is slightly inconsistent but still predictable and descriptive.

Tool Count3/5

27 tools is on the high side for an MCP server, but each addresses a specific need (e.g., signals, sentiment, webhooks, usage). The scope is broad, and while some tools could be merged, the set remains manageable.

Completeness4/5

The server covers core insider data retrieval thoroughly (companies, insiders, transactions, signals, sentiment, filings, webhook events). Notable gaps include the absence of a create/delete webhook tool and lack of data export, but these are minor.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides actionable financial intelligence tools for AI agents including insider buying signals, earnings IV plays, market pulse, stock analysis, and options strategies via free public data sources.
    6
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Real-time financial news for AI agents and trading bots — AI-enriched stories with per-ticker analysis, a 1–10 relevance score, SEC Form-4 insider transactions, plus trending and "actionable-now" feeds. Free tier, OAuth, no API key to paste.
    11
    2
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Provides derived financial intelligence for AI agents, including insider activity analysis, earnings surprises, institutional moves, stock screening with a proprietary composite value score, and macro indicators.
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables risk analysis of US public companies by analyzing 8-K filings and insider activity using live SEC EDGAR data.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/theodor90/form4api-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server