Skip to main content
Glama
signal8ai

Signal8 MCP Server

Official

@signal8ai/mcp

MCP (Model Context Protocol) server for Signal8 -- AI-extracted SEC filing intelligence data.

Gives AI agents like Claude, Cursor, and other MCP-compatible tools direct access to:

  • Company fundamentals (quotes, financials, earnings, float, executives, peers, news)

  • Dilution risk scoring (0-100 Dilution Pressure Score with 5-dimension assessment)

  • SEC filing extractions (warrants, convertibles, shelf registrations, and 10 more types)

  • Instrument lifecycle tracking (warrants, convertibles, ATMs with XBRL reconciliation)

  • Intelligence (counterparties, counsel, insiders, institutions, ROFR triggers, cluster buys)

  • Cross-company intelligence (top AUM institutions, cross-company counsel & insider patterns)

  • Compliance monitoring (Nasdaq/NYSE deficiency detection, listing classification)

  • Company screening (dilution-aware filters with 30+ fields)

  • ETF analysis (holdings, sectors, countries, performance, comparables)

Installation

npm install -g @signal8ai/mcp
# or use npx (no install needed)
npx @signal8ai/mcp

Related MCP server: secapi-mcp

Setup

1. Get your API key

Sign up at signal8.ai/mcp and create a key at signal8.ai/settings/api-keys to get your API key.

2. Configure your MCP client

Claude Desktop

Add to your Claude Desktop config file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "signal8": {
      "command": "npx",
      "args": ["-y", "@signal8ai/mcp"],
      "env": {
        "SIGNAL8_API_KEY": "sk_live_your_key_here"
      }
    }
  }
}

Cursor

Add to .cursor/mcp.json in your project root:

{
  "mcpServers": {
    "signal8": {
      "command": "npx",
      "args": ["-y", "@signal8ai/mcp"],
      "env": {
        "SIGNAL8_API_KEY": "sk_live_your_key_here"
      }
    }
  }
}

Other MCP Clients

Set the SIGNAL8_API_KEY environment variable and run:

SIGNAL8_API_KEY=sk_live_your_key_here npx @signal8ai/mcp

Available Tools (86)

The server exposes 86 live tools at runtime. The reference tables below are a representative catalog grouped by domain; several documented tools and whole categories (e.g. Extractions and Dilution) are currently disabled and are not registered live, so individual section counts below may exceed what is actually exposed.

Companies (3 tools)

Tool

Description

Credits

search_companies

Search companies by name or ticker

1

get_company_profile

Full company profile (description, market cap, sector)

1

get_company_bundle

Consolidated data bundle in one call

25

Company Data (13 tools)

Tool

Description

Credits

get_quote

Real-time stock quote (price, change, volume)

1

get_market_metrics

Volume averages, volatility, SMAs, trend direction

3

get_short_interest

Short interest data and days-to-cover

3

get_float

Float composition, shares outstanding, ownership %

3

get_financials

Income statement, balance sheet, cash flow

5

get_earnings

Earnings history with EPS surprises

3

get_executives

Executive team roster and compensation

1

get_peers

Peer/comparable companies

1

get_transcripts

Earnings call transcripts

3

get_news

Latest company news headlines

1

get_analyst_consensus

Analyst ratings and price targets

3

get_material_events

Material corporate events (8-K filings)

3

get_clinical_trials

Clinical trial pipeline (biotech/pharma)

3

Market — Cross-Ticker (6 tools)

Tool

Description

Credits

get_quotes_batch

Batch real-time quotes for up to 200 tickers (POST)

max(1, ceil(N/10))

get_quotes_universe

Quotes for an entire index universe (sp500/ndx/dji)

5

get_index_snapshot

Bulk ticker snapshots (price, day change, % change)

1

get_sector_etf_snapshot

Snapshot of the 11 SPDR sector ETFs with sector labels

2

get_top_movers

Top gainers / losers / most-active by volume (with optional session window)

2

get_market_breadth

Advance/decline, % above SMA50/200, 52-week high/low counts

2

Calendar (5 tools)

Tool

Description

Credits

get_earnings_calendar

Upcoming/recent earnings releases between two dates

3

get_economic_calendar

Macro/economic events (CPI, FOMC, jobs, GDP) by date and country

3

get_filing_calendar

10-K / 10-Q SEC filing-deadline calendar by universe

5

get_lockup_expirations

Upcoming IPO/secondary lockup expirations

5

get_recent_material_filings

Recent material 8-K filings by index universe and item codes

5

Extractions (4 tools)

Tool

Description

Credits

get_extractions

AI-extracted SEC filing data (13 types)

5

get_filing_extractions

Extractions for a specific SEC filing

5

get_extraction_dashboard

Cross-company extraction analytics

50

get_extraction_by_type

Filter extractions by type (warrants, convertibles, etc.)

5

Dilution (5 tools)

Tool

Description

Credits

get_dilution_risk

Dilution Pressure Score (0-100) with 5-dimension assessment

5

get_dilution_performance

Post-dilution stock performance at +1d/+7d/+30d/+90d

10

get_instruments

Active warrants, convertibles, ATMs, shelf registrations

5

get_instrument_detail

Deep dive on a single instrument

5

get_baby_shelf

IB6 baby shelf remaining capacity

10

Intelligence — Per-Company (12 tools)

Tool

Description

Credits

get_counterparties

Entity-resolved counterparty relationships

10

get_counsel

Legal counsel engagements with role taxonomy

10

get_insiders

Insider trading discovery and patterns

10

get_ownership

Unified ownership (Form 4 + 13F + 13D/G)

10

get_rofr_triggers

ROFR exercise trigger detection

10

get_institutions

Institutional holders from 13F filings

10

get_institution_detail

Detailed info for a specific institution (by CIK)

10

get_institution_holdings

Full portfolio holdings for an institution

10

get_banks

Investment bank relationships from SEC filings

10

get_legal_counsels

Legal counsel relationships with partner names

10

get_insider_transactions

Detailed Form 4 transaction history

5

get_insider_cluster_buys

Cluster buying pattern detection (3+ insiders in 14 days)

10

Intelligence — Cross-Company (3 tools)

Tool

Description

Credits

get_institution_top_aum

Top institutional holders by AUM across all companies

25

get_counsel_cross_company

Law firm engagements across multiple companies

25

get_insider_cross_company

Insider trading patterns across multiple companies

25

Compliance (4 tools)

Tool

Description

Credits

get_compliance

Full compliance evaluation

25

get_deficiencies

Listing deficiency detection

10

get_compliance_alerts

Active compliance alerts

5

get_listing_classification

Exchange listing classification

10

Screener (2 tools)

Tool

Description

Credits

get_screener_fields

Discover available screening filters

1

screen_companies

Dilution-aware company screener

25

Events & ATM (2 tools)

Tool

Description

Credits

get_events

Unified corporate events

5

get_atm_activity

ATM program monitoring

5

ETF (1 tool)

Tool

Description

Credits

get_etf_bundle

Aggregated ETF data (profile, holdings, sectors, performance)

25

Market Intelligence — Tool Reference

Cross-ticker market and calendar tools that operate over the entire universe rather than a single company. The single-ticker get_quote tool is included here for completeness; the rest were added in the Market Intelligence rollout.


get_quote

Real-time quote for a single ticker (price, change, volume, day range).

Inputs:

Name

Type

Required

Description

ticker

string

yes

Ticker symbol (e.g. AAPL)

Sample output (regular trading hours, 9:30am–4:00pm ET):

{
  "data": {
    "ticker": "AAPL",
    "currentPrice": 178.42,
    "change": 2.15,
    "changePercent": 1.22,
    "high": 179.10,
    "low": 176.80,
    "open": 177.05,
    "previousClose": 176.27,
    "preMarketPrice": null,
    "preMarketChangePercent": null,
    "afterHoursPrice": null,
    "afterHoursChangePercent": null,
    "timestamp": 1714492800
  }
}

Sample output (extended hours — pre-market or after-hours):

{
  "data": {
    "ticker": "AAPL",
    "currentPrice": 178.42,
    "change": 2.15,
    "changePercent": 1.22,
    "high": 179.10,
    "low": 176.80,
    "open": 177.05,
    "previousClose": 176.27,
    "preMarketPrice": 179.05,
    "preMarketChangePercent": 0.35,
    "afterHoursPrice": 178.90,
    "afterHoursChangePercent": 0.27,
    "timestamp": 1714492800
  }
}

Extended-hours windows (US equities, ET): pre-market 4:00am–9:30am, after-hours 4:00pm–8:00pm. Outside those windows preMarketPrice, preMarketChangePercent, afterHoursPrice, and afterHoursChangePercent are null. In practice only one pair is populated at a time depending on the current window — the second example shows both populated for illustration.

Use case: "What is AAPL trading at right now?"


get_quotes_batch

Fetch real-time quotes for up to 200 tickers in one call. Backed by POST /api/v1/public/market/quotes. Tickers absent from the upstream feed map to null.

Inputs:

Name

Type

Required

Description

tickers

string[]

yes

1–200 ticker symbols

Sample output:

{
  "data": {
    "count": 3,
    "quotes": {
      "AAPL": { "ticker": "AAPL", "currentPrice": 178.42, "changePercent": 1.22 },
      "MSFT": { "ticker": "MSFT", "currentPrice": 412.10, "changePercent": 0.41 },
      "NVDA": null
    }
  }
}

Use case: "Pull live quotes for my entire 50-ticker watchlist in one call."


get_quotes_universe

Quotes for all constituents of a known index universe (S&P 500, Nasdaq 100, or Dow 30).

Inputs:

Name

Type

Required

Description

universe

enum

yes

One of sp500, ndx, dji

Sample output:

{
  "data": {
    "universe": "dji",
    "count": 30,
    "quotes": {
      "AAPL": { "currentPrice": 178.42, "changePercent": 1.22 },
      "MSFT": { "currentPrice": 412.10, "changePercent": 0.41 }
    }
  }
}

Use case: "Give me a live snapshot of every Dow 30 component."


get_index_snapshot

Bulk daily snapshot (OHLC, volume, % change) for an explicit ticker list (max 50) or the full tracked universe when omitted.

Inputs: none required (optional tickers query when called via REST)

Sample output:

{
  "data": {
    "count": 2,
    "snapshots": [
      { "ticker": "SPY", "close": 512.34, "changePercent": 0.42, "volume": 78321000 },
      { "ticker": "QQQ", "close": 438.21, "changePercent": 0.55, "volume": 41902000 }
    ]
  }
}

Use case: "Show me a one-shot snapshot of where the index ETFs closed."


get_sector_etf_snapshot

Snapshot of the 11 SPDR sector ETFs (XLK, XLF, XLV, XLY, XLP, XLE, XLI, XLB, XLRE, XLU, XLC) with a sector label per row. Useful for sector-rotation views.

Inputs: none

Sample output:

{
  "data": {
    "count": 11,
    "sectors": [
      { "ticker": "XLK", "sector": "Technology", "close": 218.40, "changePercent": 0.85 },
      { "ticker": "XLF", "sector": "Financials", "close": 41.23, "changePercent": -0.12 }
    ]
  }
}

Use case: "Which sectors are leading and lagging today?"


get_top_movers

Top market movers by direction (gainers, losers, or most-active by volume), computed from ticker_snapshots. Excludes warrants/units/ETFs/funds.

Inputs:

Name

Type

Required

Description

direction

enum

yes

gainers, losers, or active

limit

integer

no

1–100 (backend default applied when omitted)

session

enum

no

premarket (4:00–9:30 AM ET), regular (default; close-to-close), or afterhours (4:00–8:00 PM ET). Use premarket/afterhours when posting outside RTH so rankings reflect the live window.

Sample output:

{
  "data": {
    "direction": "gainers",
    "session": "regular",
    "count": 2,
    "movers": [
      { "rank": 1, "ticker": "XYZ", "name": "Acme Corp", "price": 12.34, "changePercent": 42.1, "volume": 12000000, "marketCap": 350000000, "isETF": false },
      { "rank": 2, "ticker": "ABC", "name": "ABC Inc", "price": 5.62, "changePercent": 31.8, "volume": 8400000, "marketCap": 120000000, "isETF": false }
    ]
  }
}

Use case: "What are today's top 10 gainers?"


get_market_breadth

Market breadth aggregates (advance/decline counts and ratio, % of constituents trading above their 50DMA / 200DMA, and counts of new 52-week highs/lows) for a chosen universe. Point-in-time only — no historical breadth.

Inputs:

Name

Type

Required

Description

universe

enum

no

sp500 (default), ndx, or all

Sample output:

{
  "data": {
    "universe": "sp500",
    "asOf": "2026-04-30T20:00:00.000Z",
    "advancers": 312,
    "decliners": 175,
    "unchanged": 16,
    "advanceDeclineRatio": 1.7828571428571428,
    "pctAbove50DMA": 0.642,
    "pctAbove200DMA": 0.561,
    "new52wHighs": 18,
    "new52wLows": 4
  }
}

Use case: "How many S&P 500 names are above their 200DMA right now?" or "Add a one-line market-state header to today's commentary tweet."


get_earnings_calendar

Forward-looking and recent earnings releases between two dates. Optionally filter to a list of tickers.

Inputs:

Name

Type

Required

Description

from

string (YYYY-MM-DD)

yes

Window start

to

string (YYYY-MM-DD)

yes

Window end

tickers

string[]

no

Optional ticker filter

Sample output:

{
  "data": {
    "events": [
      { "ticker": "AAPL", "date": "2026-05-02", "time": "AMC", "epsEstimate": 1.50, "revenueEstimate": 90100000000 }
    ],
    "total": 1,
    "limit": 50,
    "offset": 0
  }
}

Use case: "Which mega-caps report earnings next week?"


get_economic_calendar

Macroeconomic events (CPI, FOMC, NFP, GDP, etc.) between two dates, filtered by country and impact level.

Inputs:

Name

Type

Required

Description

from

string (YYYY-MM-DD)

yes

Window start

to

string (YYYY-MM-DD)

yes

Window end

country

string (ISO-2)

no

Defaults to US

Sample output:

{
  "data": {
    "events": [
      { "date": "2026-05-07", "country": "US", "event": "FOMC Rate Decision", "impact": "High", "actual": null, "forecast": "5.25%", "previous": "5.25%" }
    ],
    "total": 1
  }
}

Use case: "What high-impact US events land this week?"


get_filing_calendar

Forward-looking 10-K / 10-Q SEC filing-deadline calendar by index universe. Deadlines computed from each company's last-reported period end + filer-status offset.

Inputs:

Name

Type

Required

Description

from

string (YYYY-MM-DD)

no

Default today

to

string (YYYY-MM-DD)

no

Default today + 45d

universe

enum

no

sp500, ndx, dji, or all (default)

formTypes

string[]

no

Subset of ["10-K", "10-Q"]

Sample output:

{
  "data": {
    "rows": [
      {
        "ticker": "AAPL", "companyName": "Apple Inc.",
        "formType": "10-Q", "periodEnd": "2026-03-29",
        "deadline": "2026-05-13", "daysUntilDeadline": 13,
        "filerStatus": "large_accelerated"
      }
    ],
    "count": 1,
    "window": { "from": "2026-04-30", "to": "2026-06-14" },
    "universe": "sp500",
    "formTypes": ["10-K", "10-Q"]
  }
}

Use case: "Which S&P 500 names have a 10-Q deadline in the next two weeks?"


get_lockup_expirations

Upcoming IPO/secondary lockup expirations within a date window. Derived from underwriting-terms extractions (S-1 / F-1 / 424B*) — coverage is partial; check meta.coveragePercent.

Inputs:

Name

Type

Required

Description

from

string (YYYY-MM-DD)

no

Default today

to

string (YYYY-MM-DD)

no

Default today + 90d

universe

enum

no

sp500, ndx, dji, or all (default)

Sample output:

{
  "data": {
    "rows": [
      {
        "ticker": "NEWCO", "companyName": "NewCo Inc.",
        "lockupEndDate": "2026-05-21", "daysUntilExpiry": 21,
        "originalFilingType": "S-1", "sharesUnlocking": 24500000,
        "sourceFilingUrl": "https://sec.gov/..."
      }
    ],
    "meta": {
      "coveragePercent": 38.4,
      "totalCandidates": 412,
      "parsedCount": 158,
      "windowStart": "2026-04-30",
      "windowEnd": "2026-07-29",
      "universe": "all"
    }
  }
}

Use case: "Any IPO lockup expirations coming up in the next 30 days?"


get_recent_material_filings

Recent 8-K filings flagged as materially significant within a named index universe, optionally filtered by item codes (e.g. 1.01 material agreement, 5.02 leadership change). Lookback fixed at 7 days.

Inputs:

Name

Type

Required

Description

universe

enum

yes

sp500, ndx, or dji

items

string[]

no

8-K item codes (e.g. ["1.01", "2.01"])

limit

integer

no

1–200 (default 50)

Sample output:

{
  "data": {
    "universe": "sp500",
    "items": ["1.01", "5.02"],
    "count": 1,
    "filings": [
      {
        "ticker": "AAPL", "companyName": "Apple Inc.",
        "filingDate": "2026-04-29T20:15:00Z", "formType": "8-K",
        "items": ["1.01"], "filingUrl": "https://sec.gov/...",
        "summary": "Material definitive agreement entered into..."
      }
    ]
  }
}

Use case: "Any S&P 500 leadership-change 8-Ks filed this week?"


Resources

Resource

URI

Description

Company Profile

signal8://companies/{ticker}/profile

Enriched company profile by ticker

Extraction Types

signal8://extraction-types

List of all 13 SEC filing extraction types

Prompts (4)

Prompt

Arguments

Description

analyze_dilution_risk

ticker (string)

6-step dilution risk analysis workflow

company_due_diligence

ticker (string)

10-step comprehensive due diligence research

screening_workflow

sector?, marketCapMax? (string)

5-step discover-screen-analyze workflow

institutional_analysis

ticker (string)

6-step institutional ownership & smart money analysis

Hosted Endpoint

For web-based MCP clients, use the hosted Streamable HTTP endpoint:

POST https://mcp.signal8.ai/mcp
Authorization: Bearer sk_live_your_key_here
Content-Type: application/json

This Streamable HTTP endpoint works today with MCP clients that support custom bearer-token headers (e.g. Claude Code CLI's --transport http connector, Cursor, and VS Code's MCP support). OAuth-based discovery for the Claude.ai Desktop/web custom connector is coming soon — until then, use the local stdio config (npx) shown above, or pass the Authorization header directly where your client allows it.

Environment Variables

Variable

Required

Description

SIGNAL8_API_KEY

Yes

Your Signal8 API key (starts with sk_live_ or sk_test_)

SIGNAL8_API_URL

No

API base URL (default: https://api.signal8.ai/api/v1/public)

Pricing

Each tool call consumes credits based on the endpoint it accesses. See credit costs in the tools table above. Get your free tier (100 credits/day) at signal8.ai.

Programmatic Usage

import { createMcpServer, Signal8ApiClient } from '@signal8ai/mcp';

const client = new Signal8ApiClient({
  baseUrl: 'https://api.signal8.ai/api/v1/public',
  apiKey: 'sk_live_xxx',
});

const server = createMcpServer(client);
// Connect to any MCP transport...

License

MIT -- see the LICENSE file. Copyright (c) 2025-2026 Signal8 AI, Inc.

Use of the hosted Signal8 API and data is additionally governed by the Signal8 Terms of Service.

Available Tools

101 tools
get_accumulation_snapshotGet Accumulation SnapshotA
Read-only
Inspect

Get intraday accumulation/distribution metrics for the current or most recent trading session. Returns session VWAP, volume above/below VWAP, estimated buy vs sell volume (tick rule), volume by time period (morning/midday/afternoon), and comparison to average volume. Use for assessing real-time buying/selling pressure.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description adds behavioral context by specifying the time scope (current/most recent session) and the metrics returned, which enhances transparency without 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?

Description is concise (two sentences), front-loaded with purpose, and includes all necessary information without extraneous text.

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 single parameter and the presence of an output schema, the description sufficiently explains the return metrics. It is complete for a simple data retrieval 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% with a single parameter 'ticker' well-described. Description does not add additional semantics beyond the schema, so baseline score 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?

Description clearly states it retrieves intraday accumulation/distribution metrics for the current or most recent trading session, listing specific metrics like VWAP, volume above/below VWAP, etc. It is distinct from sibling tools which focus on other data types.

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?

Provides a usage context ('Use for assessing real-time buying/selling pressure') but lacks explicit when-not-to-use or alternative tools. Implied usage is reasonable but no exclusions or comparisons.

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

get_analyst_consensusGet Analyst ConsensusA
Read-only
Inspect

Get analyst ratings consensus for a company including average target price, number of analysts, buy/hold/sell breakdown, and consensus recommendation. Use when evaluating Wall Street sentiment or price targets.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior4/5

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

Description matches readOnlyHint annotation (no contradiction). It adds value by specifying the data fields returned, beyond what annotations provide.

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: first states purpose and data, second gives usage guidance. No waste, front-loaded with essential information.

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

Completeness5/5

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

Given the tool's simplicity (one required parameter, has output schema), the description covers purpose, returned data, and usage guidance completely.

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 parameter details. The schema already describes 'ticker' well. Description does not provide extra parameter-level 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 gets analyst consensus for a company, listing specific data points (average target price, number of analysts, buy/hold/sell breakdown, consensus recommendation). It distinguishes itself from sibling tools like get_price_target and get_analyst_estimates.

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 says 'Use when evaluating Wall Street sentiment or price targets.' Provides clear context, though no explicit exclusions or alternative tools are mentioned.

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

get_analyst_coverageGet Analyst CoverageA
Read-only
Inspect

Get aggregated analyst coverage for a ticker — consolidated view of grades, targets, and coverage breadth across covering firms.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the description's role is limited. It adds that the tool provides grades, targets, and coverage breadth, but lacks details on data recency, pagination, or number of firms. It 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.

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the action ('Get aggregated analyst coverage') and concisely explains the output. No superfluous 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 the tool's low complexity (one required parameter, annotations provided, output schema exists), the description sufficiently explains the tool's purpose and output. It does not need to detail return values since the output schema covers that.

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?

There is only one parameter (ticker) with schema description coverage at 100% (it describes the ticker symbol format). The description does not add additional semantic meaning beyond the schema, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's function: 'Get aggregated analyst coverage for a ticker — consolidated view of grades, targets, and coverage breadth across covering firms.' It uses a specific verb and resource, and distinguishes itself from siblings like get_analyst_consensus, get_analyst_estimates, and get_analyst_grades by highlighting aggregation and breadth.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. The description implies an aggregated view but does not specify situations where this is preferred over individual analyst tools. No 'when not to use' or mention of prerequisites.

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

get_analyst_estimatesGet Analyst EstimatesA
Read-only
Inspect

Get forward analyst estimates for a company including EPS, revenue, EBITDA, and net income (low/high/avg) with analyst counts. Supports annual and quarterly periods. Use when analyzing forward earnings expectations or revenue forecasts.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of estimate periods to return (1-40). Defaults to 8.
periodNoEstimate period: "annual" (default) or "quarter".
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the description doesn't need to cover safety. It adds the behavioral context of returning forward estimates with specific metrics. No contradictory or missing behavioral details, but doesn't discuss rate limits or performance.

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 key details, immediately followed by usage guidance. No wasted words or redundant information. Perfectly concise for an AI agent.

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 output schema exists (not shown but implied), the description adequately covers the return content and period options. It doesn't mention pagination or error handling, but for a straightforward financial data tool, it is sufficiently complete.

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 description adds meaning beyond the schema by explaining that estimates include low/high/avg and analyst counts. Schema coverage is 100%, so baseline is 3; the description enriches it further with context about the returned data fields.

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

Purpose4/5

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

The description clearly states 'Get forward analyst estimates for a company' and lists specific metrics (EPS, revenue, EBITDA, net income) with low/high/avg and analyst counts. It distinguishes from sibling tools like get_analyst_consensus by implying it provides detailed estimates rather than a single consensus figure, though not explicit.

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 includes a direct usage suggestion: 'Use when analyzing forward earnings expectations or revenue forecasts.' This gives clear context. However, it does not mention when not to use it or provide alternatives, which would be helpful given many sibling tools.

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

get_analyst_gradesGet Analyst GradesA
Read-only
Inspect

Get recent analyst grade actions (upgrades, downgrades, initiations) for a ticker, including the grading firm and previous/new grade.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 10, max: 50)
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, indicating a safe read. The description adds that it returns 'recent' actions, providing temporal context. No contradictions, and the added context is valuable but could specify ordering or depth of recency.

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 a single sentence of 14 words that efficiently conveys purpose and output scope with no unnecessary details.

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

Completeness5/5

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

For a simple retrieval tool with an output schema (context indicates present), the description covers the key aspects: what actions, for which ticker, and what fields are returned. It is sufficiently complete without needing to explain return values in prose.

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 adequately described in the schema. The description adds minimal parameter-specific meaning beyond mentioning 'for a ticker' and the types of grades in the output.

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 gets recent analyst grade actions (upgrades, downgrades, initiations) for a ticker and lists included fields (firm, previous/new grade). It distinguishes from siblings like get_analyst_consensus and get_analyst_estimates by specifying actions.

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 implies use for retrieving ticker-specific analyst grade changes but does not explicitly state when to use this tool vs alternatives (e.g., get_price_target, get_analyst_consensus) or provide exclusions.

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

get_baby_shelf_capacityGet Baby-Shelf (S-3 I.B.6) Raisable CapacityA
Read-only
Inspect

Get the SEC Form S-3 General Instruction I.B.6 "baby shelf" capacity (10 credits): how much the issuer may raise off an effective shelf right now, given the one-third-of-public-float cap that applies below a $75M non-affiliate float, less the trailing-twelve-month takedowns already used. Returns the public float basis, the cap, takedowns counted and the remaining raisable amount. 🔴 constraintApplies: false means the cap does NOT bind (float at or above $75M, so primary offerings are unlimited under I.B.1) — it is NOT "no capacity" and NOT a favourable finding. 🔴 A suppressed response means the figure is WITHHELD (for example an issuer that has been delisted to OTC and cannot run an S-3 primary at all) — report it as not stateable, NEVER as $0 raisable, which is a claim. A null remaining capacity is likewise not measured, not zero. ALWAYS RETURNS 200 — read available and reason, never the HTTP status. Coverage is partial: not_covered means THIS COMPANY HAS NOT BEEN ANALYSED YET, which is different from it having no dilution and different from an outage (an outage is a 5xx). Never report a company as having no dilution on the strength of an unavailable response. NULL, absent or withheld means NOT MEASURED — it NEVER means "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a MEASURED zero and defeats a null check, so decide from the accompanying availability/withheld/reason field, never from the value itself. If a figure is absent, say it was not measured; do not describe the company as having none of that instrument. Figures are as of meta.asOfDate, from filings read through meta.filingsThrough — a stale as-of date means the answer predates anything filed since, not that nothing has happened. Share counts are rebased onto a single split basis; a row that cannot be rebased is omitted and counted rather than published on a mixed basis. Included in Signal8 Pro — without it the call returns 403 with code FEATURE_NOT_AVAILABLE and requiredTier: "pro". That is a subscription-tier upgrade, not an add-on purchase; there is no separate add-on to buy.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "MNTS", "VNRX")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior5/5

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

The description goes far beyond the readOnlyHint annotation. It discloses critical behavioral traits: always returns 200 regardless of success, must read internal fields not HTTP status, partial coverage and what not_covered means, null/absent meaning not measured, 0 being measured, as-of date semantics, share rebasing, and the 403 feature-tier behavior. This is exactly the kind of side-effect/interpretive info an agent needs, and it is consistent 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.

Conciseness3/5

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

The description is very long and contains some redundancy, e.g., 'NULL, absent or withheld means NOT MEASURED' is repeated several times with slightly different phrasings. It is front-loaded with the purpose, but the many caveats, while valuable, could be tightened. It is not minimal, though every major sentence adds unique guidance.

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 regulatory calculation tool with many edge cases, the description is exceptionally complete. It covers interpretation of every non-obvious response state (constraintApplies false, suppressed, not_covered, null, 0, stale as-of, rebasing, 403) and explicitly warns against common misreporting. The output schema exists, so return-structure details are not needed here.

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 schema already fully documents the single 'ticker' parameter (100% coverage). The description does not add any additional meaning about the parameter itself, so the baseline of 3 applies. It doesn't hurt or help 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 verb ('Get') and resource ('SEC Form S-3 General Instruction I.B.6 baby shelf capacity') and explains exactly what the tool computes (raisable amount under the one-third cap, given public float and takedowns). It also lists the returned fields. This clearly distinguishes it from the many sibling get_* tools by naming a unique regulatory 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 provides clear context on when the cap applies or not (float below/above $75M), how to interpret suppressed/null/not_covered outcomes, and when the tool returns 403. It does not explicitly mention alternative tools or say 'use this instead of X', but the subject matter is so specific that implicit usage is strong. Since there is no explicit exclusion of siblings, it stays at 4 rather than 5.

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

get_cash_historyGet 10-Year Cash HistoryA
Read-only
Inspect

Get up to 10 years of quarterly cash position history from SEC XBRL filings (data.sec.gov company-facts). Returns an array of {periodEnd, usd, formType, isAnnual} sorted chronologically. Deduped by period with annual filings preferred over quarterly. Not feature-gated — works for any company with SEC filings.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses deduplication logic (annual preferred over quarterly) and chronological sorting. It also mentions the return structure, providing rich behavioral context.

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 deliver core functionality, return format, dedup logic, and feature-gating. 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 the output schema exists, the description appropriately provides a high-level overview of the output structure. It covers source, range, dedup, and access constraints, making it complete for a simple one-parameter tool.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value by stating the ticker must correspond to a company with SEC filings, which conditions the parameter's validity. This goes beyond the schema's generic ticker 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 it retrieves up to 10 years of quarterly cash position history from SEC XBRL filings, specifying data source, time range, frequency, and output format. It uniquely identifies the tool's purpose among siblings like get_cash_position and get_cash_runway_calendar.

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 explicitly states it's not feature-gated and works for any company with SEC filings, providing clear context for when to use it. While it doesn't name exclusions or alternatives, the unique purpose differentiates it from sibling tools.

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

get_cash_positionGet AI Cash PositionA
Read-only
Inspect

Get the Signal8 cash position model for a company, derived from the dilution snapshot pipeline: anchor cash and anchor date, monthly burn, post-anchor capital raises (with SEC filing citations), known outflows, estimated current cash and runway months. Use when analyzing a company's current cash situation, runway, or capital raise activity. ALWAYS RETURNS 200 — read available and reason, never the HTTP status: coverage is partial, so available: false with reason snapshot_not_generated means THIS COMPANY HAS NOT BEEN ANALYSED YET, which is different from it having no cash data and different from an outage (an outage is a 5xx). Never report a company as having no cash or no runway on the strength of an unavailable response. The scenarios envelope is preserved for compatibility but only scenarios.closed is populated: pending and announced are null with reason scenario_not_modelled because the extraction records only REALIZED cash-raising events and never models speculative raises. Do not infer them from shelf or ATM capacity. Included in Signal8 Pro (403 FEATURE_NOT_AVAILABLE, requiredTier "pro", without it). That is a tier upgrade, not an add-on purchase — the add-on is no longer sold.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.5/5.0
Behavior5/5

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

The description goes far beyond the readOnlyHint annotation by disclosing that the endpoint always returns HTTP 200, that `available:false` with reason `snapshot_not_generated` means 'not analysed yet' rather than no cash data or outage, and that only `scenarios.closed` is populated. It also calls out the 403 FEATURE_NOT_AVAILABLE tier behavior. This is rich, non-obvious behavioral context that an agent needs to interpret responses correctly. No contradiction with readOnlyHint=true.

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 opening sentence front-loads the core purpose, and every subsequent sentence carries a distinct operational warning or model-scope caveat. It is longer than average, but the length is justified by the unusual always-200 and partial-coverage semantics.

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

Completeness5/5

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

For a tool with a single parameter and an output schema, the description still covers the non-obvious pieces the schema cannot convey: response meaning, failure modes, scenario-envelope limitations, and licensing behavior. Nothing an agent needs to invoke or interpret this tool correctly is missing.

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

Parameters3/5

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

The schema already fully documents the only parameter (`ticker`, 100% coverage), so the baseline of 3 applies; the description does not need to add parameter semantics and adds none that are material.

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?

States a specific verb ('Get'), a specific resource ('Signal8 cash position model'), and enumerates its components (anchor cash, monthly burn, raises, runway months), so an agent can immediately tell what data it returns. The 'current cash situation / runway / capital raise activity' phrasing distinguishes it from cash-history and runway-calendar siblings, even without naming them.

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 states the trigger condition: 'Use when analyzing a company's current cash situation, runway, or capital raise activity.' It does not name alternative tools or give when-not-to-use guidance beyond the coverage caveat, so it stops short of full routing guidance.

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

get_cash_runway_calendarGet Cash Runway Depletion CalendarA
Read-only
Inspect

Find companies projected to run out of cash within a date window. Similar to lockup expiration calendars but for cash depletion events. Returns companies sorted by urgency (lowest runway first). Runway is an estimate based on current burn rate — actual depletion depends on future capital raises and operational changes. Default window is today to 90 days out.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd date (YYYY-MM-DD, default: today + 90 days)
fromNoStart date (YYYY-MM-DD, default: today)
limitNoMaximum results to return (default: 25, max: 100)
offsetNoOffset for pagination (default: 0)
industryNoFilter by company industry (exact match, e.g. "Biotechnology")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, but the description adds valuable context that the runway is an estimate based on current burn rate and depends on future events, going beyond the annotation.

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 extremely concise with no wasted words. Core function is front-loaded, followed by defaults and caveats.

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 moderate complexity, full schema coverage, and the existence of an output schema, the description provides sufficient context about purpose, sorting, defaults, and the estimate nature of the runway.

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 the description does not add per-parameter details beyond the schema. Baseline score of 3 is appropriate as the schema already documents parameters well.

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 finds companies projected to run out of cash within a date window. It distinguishes itself from sibling tools by comparing to lockup expiration calendars and specifying it's for cash depletion events.

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 context for when to use (finding companies running out of cash) and mentions default window, but lacks explicit when-not-to-use or alternatives among siblings.

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

get_clinical_trialsGet Clinical TrialsA
Read-only
Inspect

Get clinical trial data for a biotech/pharma company including trial phase, status, conditions, and interventions. Use when analyzing a biotech company's pipeline or upcoming catalyst events.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of clinical trials to return (1-50). Defaults to 10.
tickerYesStock ticker symbol (e.g., "MRNA", "PFE")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, so the safety profile is clear. The description adds no further behavioral details such as pagination, data freshness, or limitations. Since annotations already cover the key behavior, the description provides minimal added value beyond the structured field.

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 long, front-loaded with the key purpose, and contains no redundant or extraneous words. Every part contributes to understanding the tool's role.

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 presence of an output schema (not shown but indicated) and a simple parameter set, the description provides sufficient context for using the tool. It could mention that it returns a list of trials with specific fields, but overall it is adequate for a straightforward retrieval tool. The sibling search_clinical_trials might require more differentiation, but the current description still offers good completeness.

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%, with both parameters (ticker, limit) documented. The tool description mentions output fields (trial phase, status) but not parameters. It adds little additional meaning beyond what the schema already provides for the parameters, justifying the baseline score of 3.

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

Purpose4/5

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

The description clearly states the verb (Get), resource (clinical trial data), and context (for a biotech/pharma company), listing included data fields like trial phase and conditions. However, it does not explicitly differentiate from the sibling tool search_clinical_trials, which likely performs a similar but search-oriented function.

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 a use context ('when analyzing a biotech company's pipeline or upcoming catalyst events'), but does not give when-not-to-use guidance or contrast with the sibling search_clinical_trials. The usage scenario is implied but not explicit about alternatives.

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

get_company_profileGet Company ProfileA
Read-only
Inspect

Get an enriched company profile by ticker symbol. Returns CIK, exchange, sector, industry, market cap, employee count, description, and other fundamental data. This is a lightweight lookup (1 credit) -- use this when you only need basic company info rather than the full bundle. Always includes halted/haltCode/haltedAt trading-halt status (false/null when trading normally); a halted-but-listed ticker reports delisted:false.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., AAPL, TSLA)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior4/5

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

The description adds behavioral details beyond the readOnlyHint annotation: it explains the tool returns trading-halt status fields (halted/haltCode/haltedAt) and clarifies the behavior when trading normally (false/null). It also states this is a 1-credit operation, providing cost context.

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, efficient and front-loaded. Every sentence adds value: first sentence states purpose and outputs, second sentence provides usage guidance and behavioral note.

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 is a simple lookup with one parameter and an output schema exists, the description covers all essential aspects: what it does, when to use, what it includes, and a special behavioral note about trading halt status.

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 schema covers the single parameter ticker with a clear example. The description does not add deeper semantic meaning to the parameter but reinforces its purpose. With 100% schema coverage, baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states it retrieves an enriched company profile using a ticker symbol and lists specific returned fields (CIK, exchange, sector, etc.). It also distinguishes from a 'full bundle' tool, helping the agent understand its scope.

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 advises using this for basic company info rather than the full bundle, and notes it is a lightweight lookup (1 credit). It does not explicitly name a sibling tool for the full bundle but provides clear guidance on when to use this tool.

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

get_complianceGet Compliance EvaluationA
Read-only
Inspect

Get full compliance rules evaluation for a company. Runs Nasdaq/NYSE deficiency detection, bid price tracking, and delinquent filing detection. Returns a comprehensive compliance picture combining SEC filing data, market data, and exchange rules. This is the most thorough compliance check available (25 credits).

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., AAPL, TSLA)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.5/5.0
Behavior5/5

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

The description adds behavioral context beyond annotations: it discloses the 25-credit cost, the comprehensive nature (combining SEC, market, and exchange data), and the fact it runs multiple compliance checks. This enriches the readOnlyHint annotation without 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 two sentences front-loaded with the core purpose, followed by details on what it covers and a cost note. Every sentence adds value with 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?

Given the presence of an output schema (so return values are documented elsewhere) and 100% schema coverage for the single parameter, the description is complete. It explains what the tool does, its scope, and cost, providing sufficient context for an AI 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?

The input schema has 100% coverage with one parameter 'ticker' described as 'Stock ticker symbol.' The description adds no additional meaning beyond the schema, so 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 clearly states the tool's purpose: 'Get full compliance rules evaluation for a company.' It specifies what it runs (Nasdaq/NYSE deficiency detection, bid price tracking, delinquent filing detection) and what it combines (SEC filing data, market data, exchange rules), making it distinct from siblings like get_insider_transactions or get_filing_document.

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

Usage Guidelines4/5

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

The description implies usage as the most thorough compliance check, with a cost of 25 credits. It provides context about the scope but does not explicitly state when to use vs. alternatives or when not to use it. A brief mention of when to prefer this over lighter tools would improve it.

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

get_dilution_coverageGet Dilution Coverage StatusA
Read-only
Inspect

Cheap pre-check (1 credit) for whether Signal8 holds a dilution analysis for a company: coverage status (verified / stale / not_covered), extraction state (never_extracted / running / failed / timeout / complete), last attempt and last success timestamps, the coverage tier, and whether the ticker is out of scope. CALL THIS FIRST before the expensive dilution tools — it answers "is there anything to fetch" for a fraction of the cost. ALWAYS RETURNS 200 — read available and reason, never the HTTP status. Coverage is partial: not_covered means THIS COMPANY HAS NOT BEEN ANALYSED YET, which is different from it having no dilution and different from an outage (an outage is a 5xx). Never report a company as having no dilution on the strength of an unavailable response. An outOfScope ticker is a statement about the PRODUCT (dilution analysis covers small-cap issuers only) and says NOTHING about that company's dilution — do not report a large-cap as having no dilution because it is out of scope. A stale status means the analysis is real but predates recent filings. NULL, absent or withheld means NOT MEASURED — it NEVER means "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a MEASURED zero and defeats a null check, so decide from the accompanying availability/withheld/reason field, never from the value itself. If a figure is absent, say it was not measured; do not describe the company as having none of that instrument. Included in Signal8 Pro — without it the call returns 403 with code FEATURE_NOT_AVAILABLE and requiredTier: "pro". That is a subscription-tier upgrade, not an add-on purchase; there is no separate add-on to buy.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "MNTS", "VNRX")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.6/5.0
Behavior5/5

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

The description carries a heavy burden beyond the readOnlyHint annotation, and it delivers: it discloses that the call ALWAYS returns 200 and requires reading `available` and `reason` rather than HTTP status, that not_covered means not analyzed (not no dilution or outage), that null/absent/withheld means NOT MEASURED (never zero), and that outOfScope is about product coverage not the company. It also explains the 403 for non-Pro users. These are critical behavioral nuances that annotations alone do not provide.

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 each sentence adds substantive information about interpretation, error handling, or tier requirements. It front-loads the purpose and usage, then details semantic pitfalls. While a more structured format (e.g., bullet points) would improve scannability, the length is justified by the complexity of the tool's semantics and there is no redundancy or filler.

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

Completeness5/5

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

For a tool with high semantic complexity (distinguishing not_covered from no dilution, null vs measured zero, outage vs unavailable, outOfScope meaning, tier requirements), the description covers all essential operational pitfalls. It also relies on the existing output schema for return-value details, so no gap remains. An agent can call this tool correctly and interpret its response without additional context.

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 schema covers the single parameter (ticker) with a clear description and 100% coverage, so the baseline is 3. The tool description adds no additional parameter-level detail beyond the schema, but none is needed for a simple ticker string. It does not compensate for any schema gaps because there are none.

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 purpose: a cheap pre-check for whether Signal8 holds a dilution analysis for a company, and enumerates exactly what it returns (coverage status, extraction state, timestamps, tier, out-of-scope flag). It explicitly differentiates from the expensive dilution tools by instructing to call this first, so an agent can distinguish it from siblings like get_dilution_history or get_dilution_snapshot without opening their schemas.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: 'CALL THIS FIRST before the expensive dilution tools' and explains it answers 'is there anything to fetch' at a fraction of the cost. It also provides exclusion criteria for interpretation (e.g., not_covered vs outage, null vs 0) and mentions the Pro-tier requirement, making it clear when this tool is applicable versus alternatives.

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

get_dilution_historyGet Shares-Outstanding and Cash HistoryA
Read-only
Inspect

Get the historical shares-outstanding and cash series (10 credits) from SEC XBRL filings, with offering and material-cash-event overlays so an issuance or a raise can be lined up against the share count and cash balance around it. Use for share count growth over time and for the cash trajectory between financings. 🔴 THE HISTORICAL SHARE COUNTS ARE AS FILED — each point is on the split basis in force when it was reported and is NOT rebased to today, so a reverse split shows as a step and points either side of one are not directly comparable. Do not compute a growth rate across a split boundary from these raw points. A gap in the series means no filing supplied that period, not that the share count was unchanged. ALWAYS RETURNS 200 — read available and reason, never the HTTP status. Coverage is partial: not_covered means THIS COMPANY HAS NOT BEEN ANALYSED YET, which is different from it having no dilution and different from an outage (an outage is a 5xx). Never report a company as having no dilution on the strength of an unavailable response. NULL, absent or withheld means NOT MEASURED — it NEVER means "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a MEASURED zero and defeats a null check, so decide from the accompanying availability/withheld/reason field, never from the value itself. If a figure is absent, say it was not measured; do not describe the company as having none of that instrument. Figures are as of meta.asOfDate, from filings read through meta.filingsThrough — a stale as-of date means the answer predates anything filed since, not that nothing has happened. Share counts are rebased onto a single split basis; a row that cannot be rebased is omitted and counted rather than published on a mixed basis. Included in Signal8 Pro — without it the call returns 403 with code FEATURE_NOT_AVAILABLE and requiredTier: "pro". That is a subscription-tier upgrade, not an add-on purchase; there is no separate add-on to buy.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "MNTS", "VNRX")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4/5.0
Behavior4/5

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

With only readOnlyHint=true in annotations, the description adds a great deal of behavior: 200-always responses, split-basis caveats, series gaps, coverage semantics, NULL/zero meaning, as-of dates, and tier requirements. However, the split-basis statements are internally inconsistent ('as filed ... NOT rebased' vs 'rebased onto a single split basis'), which prevents a 5.

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

Conciseness3/5

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

The description is front-loaded with purpose, but the warning section is long and repeats the same NULL/not-measured idea multiple times. The content is mostly useful, but it is not concise.

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 deceptively complex tool, the description covers sourcing, overlays, error handling, null semantics, coverage vs outage, tier gating, and rebasing. The internal split-basis contradiction and the lack of an explicit response-format note are the remaining gaps, though an output schema exists.

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 schema already describes ticker with 100% coverage, so the description is not required to add parameter detail. It adds no new meaning beyond the schema for the single 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?

The description names a specific verb ('Get') and resource ('historical shares-outstanding and cash series') and clarifies the data source and overlays. This clearly differentiates it from sibling tools like get_cash_history and get_split_history.

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 explicitly says to use it for share-count growth over time and cash trajectory between financings, and includes strong cautions about split boundaries and unavailable coverage. It does not explicitly name when-not-to-use alternatives, 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_dilution_instrumentsGet Dilution Instrument Rows by FamilyA
Read-only
Inspect

Get ONE instrument family's rows (10 credits) with per-field SEC citations — each figure carries the accession number, filing date and the verbatim quoted sentence it was read from, so every number can be traced to a filing. Families: warrants, convertibles, preferred, shelfs, atms, elocs, s1_offerings, equity_plans, exchangeables, recent_offerings. One family per call — request the families you actually need rather than sweeping all ten. 🔴 ROW-LEVEL WITHHOLDING: withheldRows / withheldRowCount mean specific rows could NOT be verified and were blanked, so every family total in the response is a LOWER BOUND, not a complete figure. Say so — presenting a holed total as complete understates a named issuer's dilution. An empty rows array on a covered company is a measured "none found in the filings read"; an unavailable response is not. ALWAYS RETURNS 200 — read available and reason, never the HTTP status. Coverage is partial: not_covered means THIS COMPANY HAS NOT BEEN ANALYSED YET, which is different from it having no dilution and different from an outage (an outage is a 5xx). Never report a company as having no dilution on the strength of an unavailable response. NULL, absent or withheld means NOT MEASURED — it NEVER means "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a MEASURED zero and defeats a null check, so decide from the accompanying availability/withheld/reason field, never from the value itself. If a figure is absent, say it was not measured; do not describe the company as having none of that instrument. Figures are as of meta.asOfDate, from filings read through meta.filingsThrough — a stale as-of date means the answer predates anything filed since, not that nothing has happened. Share counts are rebased onto a single split basis; a row that cannot be rebased is omitted and counted rather than published on a mixed basis. Included in Signal8 Pro — without it the call returns 403 with code FEATURE_NOT_AVAILABLE and requiredTier: "pro". That is a subscription-tier upgrade, not an add-on purchase; there is no separate add-on to buy.

ParametersJSON Schema
NameRequiredDescriptionDefault
familyYesInstrument family to return. One of: warrants, convertibles, preferred, shelfs, atms, elocs, s1_offerings, equity_plans, exchangeables, recent_offerings.
tickerYesStock ticker symbol (e.g., "MNTS", "VNRX")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=true; the description carries the full burden and exceeds it. It discloses credit cost, always-200 behavior, row-level withholding semantics, not_covered vs outage, null/zero interpretation, as-of date caveats, split rebasing, and tier-gated 403 behavior. This is far beyond annotation coverage and enables correct handling of ambiguous responses.

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?

Long but dense: every paragraph covers a distinct critical behavior (withholding, availability, null semantics, as-of, tier). Front-loaded with the core purpose and family list before caveats. Slight redundancy between 'Never report a company as having no dilution...' and the NULL/absent/withheld sentence, but overall well organized and justified by the tool's interpretation-sensitive response.

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?

Exceptionally complete for a read-only tool with 2 params and an output schema. The description covers credit cost, per-field traceability, withholding/lower-bound semantics, availability/reason fields, coverage vs outage, NULL interpretation, as-of date, split rebasing, and tier gating. An agent has everything needed to call the tool and interpret ambiguous responses 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%: both family and ticker are already described in the input schema, so baseline is 3. Description adds marginal meaning by noting 'one family per call' and reinforcing the family list, but does not materially enrich parameter semantics 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?

States a specific verb and resource: 'Get ONE instrument family's rows' with per-field SEC citations, and enumerates all ten families. This clearly distinguishes it from sibling dilution tools like get_dilution_snapshot or get_dilution_history, which focus on different aspects of dilution data.

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 clear context for use: 'One family per call — request the families you actually need rather than sweeping all ten.' It also explains the tier requirement (Signal8 Pro, 403 otherwise). However, it does not explicitly name alternatives or state when not to use this tool versus a sibling dilution tool.

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

get_dilution_performanceGet Post-Offering Price PerformanceA
Read-only
Inspect

Get post-offering price performance (10 credits): for each recorded offering, how the stock traded after it priced or closed. Use when assessing how the market has absorbed this issuer's past financings. 🔴 THIS IS HISTORY, NOT A FORECAST — it describes what happened after prior offerings and must never be phrased as an expectation, a price target or a prediction about a named company. An empty or unavailable series means no offering performance was measured, NOT that offerings had no effect and NOT that there were no offerings. ALWAYS RETURNS 200 — read available and reason, never the HTTP status. Coverage is partial: not_covered means THIS COMPANY HAS NOT BEEN ANALYSED YET, which is different from it having no dilution and different from an outage (an outage is a 5xx). Never report a company as having no dilution on the strength of an unavailable response. NULL, absent or withheld means NOT MEASURED — it NEVER means "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a MEASURED zero and defeats a null check, so decide from the accompanying availability/withheld/reason field, never from the value itself. If a figure is absent, say it was not measured; do not describe the company as having none of that instrument. Figures are as of meta.asOfDate, from filings read through meta.filingsThrough — a stale as-of date means the answer predates anything filed since, not that nothing has happened. Share counts are rebased onto a single split basis; a row that cannot be rebased is omitted and counted rather than published on a mixed basis. Included in Signal8 Pro — without it the call returns 403 with code FEATURE_NOT_AVAILABLE and requiredTier: "pro". That is a subscription-tier upgrade, not an add-on purchase; there is no separate add-on to buy.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "MNTS", "VNRX")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses extensive behavioral nuances: the tool always returns 200 and requires reading `available` and `reason`; coverage is partial (`not_covered` vs no dilution vs outage); NULL/absent values mean 'not measured' never zero; numeric 0 is a measured zero; data is as-of a date with stale-date caveats; share counts are rebased with omitted rows; and a Pro-tier requirement returning 403. This goes far beyond the annotation and gives the agent critical interpretation guidance.

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

Conciseness2/5

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

The description is highly verbose and repetitive. For example, the warning 'NULL, absent or withheld means NOT MEASURED' appears in different phrasings multiple times, and the 'not_covered' explanation is also repeated. While the content is structured (purpose → usage → warnings), it does not earn every sentence's place; many warnings could be consolidated. The front-loading of the purpose is good, but the overall length is disproportionate for a single-parameter read-only tool.

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 data's interpretive complexity (null vs zero, coverage distinctions, HTTP status behavior, staleness, share rebasing) and the presence of an output schema, the description covers every edge case an agent needs to avoid misreporting. It even addresses subscription-tier requirements and error codes. Nothing essential is missing for correct invocation and interpretation.

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 only parameter is `ticker`, which is fully described in the schema ('Stock ticker symbol (e.g., "MNTS", "VNRX")'). The description adds no additional meaning about the parameter itself—no format validation, no examples beyond the schema, no mention of case sensitivity or exchange. Since schema coverage is 100%, the baseline of 3 applies, and the description does not elevate it.

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-resource pair ('Get post-offering price performance') and explicitly states the data scope: 'for each recorded offering, how the stock traded after it priced or closed.' It also adds a clear use-case sentence. This distinguishes it from siblings like get_dilution_history or get_dilution_coverage, which focus on dilution amounts/coverage rather than post-offering price action.

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 a clear usage context: 'Use when assessing how the market has absorbed this issuer's past financings.' This tells the agent when to invoke the tool. However, it does not explicitly mention when not to use it or name alternative tools (e.g., get_dilution_risk for risk assessment), so it lacks the explicit exclusions/alternatives that would earn a 5.

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

get_dilution_riskGet Dilution Pressure Score and Risk LevelsA
Read-only
Inspect

Get the dilution pressure score (5 credits): a 0-100 score with its seven-component breakdown (shelf capacity, ATM/equity-line capacity, warrants in the money, convertible proximity, cash burn urgency, historical dilution, toxic financing), plus four risk levels — overall, offering ability, overhead supply, cash need. 🔴 THE SCORE IS MEANINGLESS WITHOUT scoreMaxMeasured AND scoreWithheldReason: components whose inputs could not be measured are DROPPED FROM THE DENOMINATOR, so a score of 58 may be 58 out of 85, not out of 100. Always report it as score/scoreMaxMeasured and name the excluded components from scoreUnmeasuredComponents; NEVER rescale it to /100, and never treat a low numerator as a low-risk finding. A non-null scoreWithheldReason (e.g. unmeasured_score_components, unquantified_live_instruments, no_dilution_snapshot) means there is NO score — not a score of zero. 🔴 WHEN levelsAreLowerBound IS TRUE THE LEVELS ARE FLOORS, NOT MEASUREMENTS: a "medium" then means AT LEAST medium, because instruments that could not be quantified were excluded from the sum. State it as a lower bound; presenting a floor as a measurement understates the risk of a named issuer. ALWAYS RETURNS 200 — read available and reason, never the HTTP status. Coverage is partial: not_covered means THIS COMPANY HAS NOT BEEN ANALYSED YET, which is different from it having no dilution and different from an outage (an outage is a 5xx). Never report a company as having no dilution on the strength of an unavailable response. NULL, absent or withheld means NOT MEASURED — it NEVER means "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a MEASURED zero and defeats a null check, so decide from the accompanying availability/withheld/reason field, never from the value itself. If a figure is absent, say it was not measured; do not describe the company as having none of that instrument. Figures are as of meta.asOfDate, from filings read through meta.filingsThrough — a stale as-of date means the answer predates anything filed since, not that nothing has happened. Share counts are rebased onto a single split basis; a row that cannot be rebased is omitted and counted rather than published on a mixed basis. Included in Signal8 Pro — without it the call returns 403 with code FEATURE_NOT_AVAILABLE and requiredTier: "pro". That is a subscription-tier upgrade, not an add-on purchase; there is no separate add-on to buy.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "MNTS", "VNRX")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.2/5.0
Behavior5/5

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

The description goes far beyond the readOnlyHint annotation, explaining critical behaviors: the score denominator can shrink, levels are lower bounds, HTTP 200 is always returned, coverage gaps are not zero-risk, and null semantics. This is exceptional transparency for correct agent interpretation.

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 densely packed with critical warnings, front-loaded with the core output and key caveats. The emoji markers aid visual scanning, though a slightly tighter rewrite could reduce redundancy while keeping all necessary warnings.

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 complexity of the metric and the existence of an output schema, the description covers every ambiguity an agent might face: denominator handling, lower bounds, coverage gaps, null semantics, as-of dates, share rebasing, and tier gates. It is fully self-sufficient for correct use.

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 schema already fully describes the single required parameter with 100% coverage. The description adds no additional parameter-level details (e.g., ticker format is given in the schema), so the baseline of 3 applies without extra compensation needed.

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

Purpose5/5

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

The description states a specific verb ('Get') and resource ('dilution pressure score') with a 0-100 score, a seven-component breakdown, and four risk levels. This clearly differentiates it from siblings like get_dilution_snapshot or get_dilution_history by naming the exact metric produced.

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 implies usage by defining the tool's output and includes a prerequisite (Signal8 Pro tier). However, it does not explicitly compare with sibling tools or state when to prefer this over get_dilution_snapshot or get_dilution_instruments, so guidance on alternatives is missing.

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

get_dilution_snapshotGet Dilution Snapshot SummaryA
Read-only
Inspect

Get the dilution snapshot header (25 credits — the most expensive tool here): summary totals (potential new shares and their percentage of shares outstanding, per-family share totals), the cash position (anchor cash, monthly burn, estimated current cash, runway months), the float block, and meta provenance. DOES NOT INCLUDE INSTRUMENT ROWS — call get_dilution_instruments per family for those, and call get_dilution_coverage first to avoid paying 25 credits for an uncovered ticker. 🔴 FLOAT: when floatWithheldReason is non-null the tradeable float was NOT MEASURED and must not be stated as a number. tradeableFloatCeiling is an UPPER BOUND ("at most X"), NOT a float — never feed it to a market capitalisation, a percent-of-float, a short-interest ratio or a comparison; render it with a ≤ and say it is a bound. 🔴 RUNWAY: a runway figure beside goingConcern: true is a contradiction the issuer's own auditors have flagged — report both, never the runway alone. ALWAYS RETURNS 200 — read available and reason, never the HTTP status. Coverage is partial: not_covered means THIS COMPANY HAS NOT BEEN ANALYSED YET, which is different from it having no dilution and different from an outage (an outage is a 5xx). Never report a company as having no dilution on the strength of an unavailable response. NULL, absent or withheld means NOT MEASURED — it NEVER means "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a MEASURED zero and defeats a null check, so decide from the accompanying availability/withheld/reason field, never from the value itself. If a figure is absent, say it was not measured; do not describe the company as having none of that instrument. Figures are as of meta.asOfDate, from filings read through meta.filingsThrough — a stale as-of date means the answer predates anything filed since, not that nothing has happened. Share counts are rebased onto a single split basis; a row that cannot be rebased is omitted and counted rather than published on a mixed basis. Included in Signal8 Pro — without it the call returns 403 with code FEATURE_NOT_AVAILABLE and requiredTier: "pro". That is a subscription-tier upgrade, not an add-on purchase; there is no separate add-on to buy.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "MNTS", "VNRX")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.4/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description discloses critical behavioral traits: 25-credit cost, always-check-available/reason semantics, null-versus-zero meaning, rebasing of share counts, and the float/runway interpretive traps. However, it says 'ALWAYS RETURNS 200' and then later says the call returns 403 without Pro, which is an internal inconsistency that slightly undermines the 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 long but well organized, front-loading the purpose and cost and then grouping key warnings by topic with clear markers. Some redundancy exists, such as the repeated add-on purchase clarification, but every major caveat earns its place for a costly tool with many traps.

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 having an output schema, the description goes beyond it by covering authorization, cost, coverage semantics, missing-data interpretation, as-of date staleness, split rebasing, and the float/runway misuse risks. For a tool with this many edge cases, the definition is effectively 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?

The input schema has one required parameter, ticker, with a complete description of what it is. The tool description adds contextual warnings about covered vs. uncovered tickers but no additional parameter syntax or formatting details, so it stays at the baseline expected for full schema 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 names a specific verb and resource: it gets the dilution snapshot header/summary, and it explicitly says what is excluded (instrument rows), which cleanly separates it from get_dilution_instruments and get_dilution_coverage. The scope, contents, and caveats are all clear.

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 gives explicit routing guidance: call get_dilution_coverage first to avoid paying 25 credits for an uncovered ticker, and call get_dilution_instruments per family because instrument rows are not included. It also explains the 403/Pro-tier condition and covers the not_covered vs. outage distinction, so an agent knows when to use this tool and when not to.

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

get_donor_aggregatesGet Donor AggregatesA
Read-only
Inspect

Get market-wide campaign-finance rollups across ALL tracked politicians for a cycle: total raised, top 10 individual donors, top 10 PACs, party/chamber/cycle splits, and a most-funded politician leaderboard. Use for "who are the biggest donors in 2024?" or "which party raised more?" type questions. For a single politician, use get_politician_donor_summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
cycleNoElection cycle as 4-digit year (e.g. "2024"). Defaults to most recent cycle.
partyNoFilter by party: 'D', 'R', or 'I'
chamberNoFilter by chamber: 'senate' or 'house'

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true. Description adds context about aggregate nature and included breakdowns. No contradictions, but could mention data recency or scope ('ALL tracked politicians') more precisely.

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: first specifies purpose and outputs, second provides usage guidance and sibling differentiation. No extraneous information.

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 read-only nature, optional parameters with defaults, and clear output description, the definition fully equips an agent to select and invoke this 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 coverage is 100% with clear parameter descriptions. The tool description adds minimal extra semantic value beyond what schema already provides (e.g., default cycle behavior). 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 clearly states it retrieves market-wide campaign-finance rollups across all tracked politicians for a cycle, listing specific outputs (total raised, top donors, splits, leaderboard). It explicitly distinguishes from sibling tool get_politician_donor_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?

Provides explicit use cases ('who are the biggest donors in 2024?') and contrasts with alternative for single politician ('For a single politician, use get_politician_donor_summary').

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

get_earningsGet Earnings HistoryA
Read-only
Inspect

Get historical earnings data for a company including EPS actual vs estimate, revenue actual vs estimate, and surprise percentages. Use when analyzing earnings beats/misses or upcoming earnings expectations.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of earnings periods to return (1-40). Defaults to 8.
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, so description need not reiterate. Description adds output specifics but no additional behavioral traits like pagination or rate limits. Adequate for a read-only tool.

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

Conciseness5/5

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

Two concise sentences, front-loaded with purpose. No wasted 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?

Tool is simple with 2 parameters and an output schema. Description adequately covers purpose and output content. Could mention data range or default limit, but sufficient.

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% with both parameters documented. Description does not add parameter-level meaning beyond what schema provides. Baseline score applies.

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

Purpose4/5

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

Description clearly states it gets historical earnings data with specific fields (EPS, revenue, surprise percentages). However, it does not explicitly differentiate from sibling tools like get_analyst_estimates or get_earnings_calendar.

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 states when to use: analyzing earnings beats/misses or upcoming expectations. Lacks when-not-to-use or alternative suggestions, but the provided context is adequate.

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

get_earnings_calendarGet Earnings CalendarA
Read-only
Inspect

Get upcoming and recent earnings releases between two dates. Optionally restrict to a list of tickers. Returns ticker, date, time (BMO/AMC), EPS estimate, and revenue estimate when available. Supports market cap filtering to focus on large-cap or small-cap earnings only.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesEnd date inclusive (YYYY-MM-DD)
fromYesStart date inclusive (YYYY-MM-DD)
tickersNoOptional ticker filter, e.g. ["AAPL","NVDA"]
maxMarketCapNoMaximum market cap in USD (e.g., 2000000000 for under $2B)
minMarketCapNoMinimum market cap in USD (e.g., 10000000000 for $10B+)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true, and the description adds behavioral context by listing the returned fields and filter capabilities. It does not conflict with annotations, and the added detail (market cap filtering, specific data fields) is valuable for safe usage.

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, front-loaded with the main action, and every sentence adds value. 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 the presence of an output schema, the description sufficiently covers the tool's capabilities: date range, ticker filter, market cap filter, and returned fields. No critical information is missing for a read-only data retrieval 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?

With 100% schema coverage, the description adds meaning beyond the schema by explaining the purpose of date range parameters and how market cap filtering works (e.g., 'focus on large-cap or small-cap earnings only'). This enhances understanding of parameter usage.

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 upcoming and recent earnings releases between two dates, with optional ticker and market cap filters. It specifies the returned fields (ticker, date, time, EPS estimate, revenue estimate), making the purpose distinct from sibling tools like get_earnings or get_economic_calendar.

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 clear context on when to use (earnings calendar between dates, with optional filters) but does not explicitly mention when not to use or suggest alternatives. It lacks exclusionary guidance compared to siblings.

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

get_economic_calendarGet Economic CalendarA
Read-only
Inspect

Get scheduled macro/economic events (CPI, FOMC, jobs reports, GDP, etc.) between two dates. Optionally filter to a single country (ISO-3166 alpha-2, e.g. "US"). Defaults to US when omitted.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesEnd date inclusive (YYYY-MM-DD)
fromYesStart date inclusive (YYYY-MM-DD)
countryNoOptional ISO-3166 alpha-2 country code (e.g. "US", "GB", "JP")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds that events are scheduled and date ranges are inclusive, but does not disclose additional behavioral traits such as rate limits or pagination. Given the annotation coverage, the description adds minimal extra value.

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 extremely concise: two sentences with no redundant words. The first sentence captures the core purpose and the second adds optional filter and default. Perfectly front-loaded and 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?

With an output schema present, the description does not need to explain return values. It covers the essential aspects: date range, country filter with default, and examples of event types. For a tool with 3 parameters (2 required) and an output schema, the description provides complete contextual guidance.

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% with detailed parameter descriptions. The tool description adds the default country behavior ('Defaults to US when omitted'), which is extra semantic information beyond the schema. This aids the agent in correctly invoking the 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?

The description clearly identifies the tool as retrieving scheduled macro/economic events with a specific verb 'Get' and a resource clearly defined. It lists example events (CPI, FOMC, etc.) and specifies date range and optional country filter, making it easy to distinguish from sibling tools that handle different data types.

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 context: when to use it (to get economic events between dates) and includes a default behavior (countries default to US). However, it does not explicitly exclude alternatives or contrast with similar tools like get_earnings_calendar, leaving some ambiguity for edge cases.

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

get_etf_bundleGet ETF BundleA
Read-only
Inspect

Get aggregated ETF data in a single call. Combines multiple data sources (profile, holdings, sector weightings, country exposure, performance, news, analyst coverage, and comparables) into one response. Each data type is cached independently. Specify which types to include or omit to get above-the-fold defaults (profile, stock-summary, holdings, sectors).

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesETF ticker symbol (e.g., SPY, QQQ, IWM)
includeNoComma-separated list of data types to include. Available: profile,holdings,sectors,countries,stock-summary,performance,news,analyst,comparables. Default (when omitted): profile,stock-summary,holdings,sectors

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. Description adds independent caching per data type and the bundling behavior, providing useful 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?

Four sentences, each with a purpose: purpose, data sources, caching, usage guidance. No redundancy, 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?

Output schema exists, so return values are documented. Description covers data types, caching, and usage. Lacks mention of prerequisites or rate limits, but sufficient for a read-only bundle 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 both parameters with descriptions (100% coverage). The description adds context about include defaults and comma-separated format, but doesn't add entirely new meaning 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?

The description clearly states it aggregates multiple ETF data sources into one call, explicitly listing the types (profile, holdings, etc.) and distinguishing it from individual siblings like get_company_profile.

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?

Describes when to use (for aggregated data) and how to customize with include/omit, but does not explicitly state when not to use or mention alternatives like individual getters.

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

get_executivesGet Company ExecutivesA
Read-only
Inspect

Get key executives and officers of a company including name, title, compensation, and tenure. Use when researching company leadership or management quality.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4/5.0
Behavior3/5

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

The annotations already mark readOnlyHint=true, so the description's statement is consistent. However, no additional behavioral traits (e.g., pagination, permission needs) are disclosed beyond the annotation.

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 usage; every word is necessary and no filler.

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 simple input schema and presence of an output schema, the description is sufficient. It hints at output fields (name, title, compensation, tenure) which compensates for not detailing the return structure.

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', with a clear description. The tool description adds no extra meaning 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 uses a specific verb 'Get' and resource 'key executives and officers'; it clearly identifies the data fields (name, title, compensation, tenure) and distinguishes from siblings like get_insiders by focusing on top executives.

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 explicitly states when to use (researching company leadership or management quality) but does not mention alternatives or when not to use, leaving the agent to infer from the sibling list.

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

get_exhibit_contentGet Exhibit ContentA
Read-only
Inspect

Get the full text/HTML content of a single exhibit from an SEC filing. Returns the exhibit text along with exhibit_type, description, company_name, accession_number, and form_type. Use the maxLength parameter to truncate large exhibits. Find exhibit IDs using get_filing_exhibits first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExhibit ID (numeric). Find via get_filing_exhibits.
maxLengthNoTruncate content to this many characters. Response includes a "truncated" boolean.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description adds value by explaining truncation behavior and the truncated boolean in the response. 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 concise sentences: purpose, return fields, usage hint. No filler, 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?

With an output schema present, the description covers input, usage, and behavior fully. No missing information for an AI agent to use the tool correctly.

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 clear descriptions. The description adds context about maxLength truncation and the truncated response field, going 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?

The description clearly states it gets the full text/HTML content of a single exhibit from an SEC filing, with a specific verb and resource. It distinguishes from siblings by referencing get_filing_exhibits for finding IDs.

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 explicitly instructs to use get_filing_exhibits first to find exhibit IDs and mentions the maxLength parameter for truncation. While it doesn't list when not to use, the guidance is clear and actionable.

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

get_filing_calendarGet SEC Filing CalendarA
Read-only
Inspect

Get the forward-looking 10-K / 10-Q SEC filing-deadline calendar within a date window. Optionally restrict to a universe (sp500/ndx/dji/all) and/or a list of form types (default both 10-K and 10-Q).

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd date inclusive (YYYY-MM-DD, default today + 45d)
fromNoStart date inclusive (YYYY-MM-DD, default today)
universeNoOptional index-universe filter (default "all")
formTypesNoOptional SEC form types subset, e.g. ["10-Q"]

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, consistent with the read nature. The description adds behavioral context: it returns a forward-looking calendar, default date ranges, and default form types. 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?

Two sentences that are direct and contain no extraneous information. Every word 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 the presence of an output schema, full parameter coverage, and read-only nature, the description is complete. It covers purpose, optional filters, and default behavior, leaving no critical 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?

Schema coverage is 100% with parameter descriptions. The description adds meaning beyond schema by clarifying it is forward-looking and specifying default behavior (both 10-K and 10-Q). This helps the agent understand default values without inspecting schema defaults.

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 retrieves a forward-looking SEC filing deadline calendar specifically for 10-K and 10-Q forms. It uses a specific verb ('get') and resource ('filing calendar'), distinguishing it from sibling tools like get_earnings_calendar or get_economic_calendar.

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

Usage Guidelines4/5

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

The description explains optional filters (universe and formTypes) and default behavior (both 10-K and 10-Q). It implicitly guides when to use this tool (when needing 10-K/10-Q deadlines) but does not explicitly state when not to use it or mention alternatives.

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

get_filing_documentGet Filing DocumentA
Read-only
Inspect

Get the full raw text/HTML content of an SEC filing by its internal filing ID. Returns the complete filing document which can be very large (10-K filings can be 1MB+). Use the maxLength parameter to truncate content for previews. The response includes company_name, form_type, filing_date, cik, and accession_number alongside the content. Find filing IDs using search_sec_filings first.

ParametersJSON Schema
NameRequiredDescriptionDefault
filingIdYesInternal filing ID (numeric). Find via search_sec_filings.
maxLengthNoTruncate content to this many characters. Useful for previewing large filings. Response includes a "truncated" boolean when truncation is applied.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.7/5.0
Behavior5/5

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

Discloses that filings can be very large (10-K up to 1MB+) and explains truncation behavior via maxLength, including the truncated boolean in the response. This provides behavioral benefits beyond the readOnlyHint annotation, which already indicates no side effects.

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. The first sentence states the core purpose, followed by size warning, preview guidance, and response fields. 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 the output schema exists, the description sufficiently covers return fields and behavior. With only 2 parameters and clear annotations, the description is complete for an AI agent to invoke correctly.

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 both parameters (filingId, maxLength) with basic descriptions. The tool description adds value by clarifying filingId is numeric and must come from search_sec_filings, and that maxLength triggers a truncated boolean in the response. It enriches the schema but could be more explicit about expected formats.

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 raw text/HTML content of an SEC filing by its internal filing ID, specifying the verb (Get), resource (filing document), and key context (returns company_name, form_type, etc.). This distinguishes it from sibling tools like search_sec_filings or get_exhibit_content.

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 advises to find filing IDs using search_sec_filings first and mentions maxLength for previews. While not listing alternatives or when-not-to-use, this guidance is clear and contextually sufficient given the sibling tools.

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

get_filing_exhibitsGet Filing ExhibitsA
Read-only
Inspect

List all exhibits (individual documents) within an SEC filing. Returns exhibit metadata including exhibit type, description, and content size. Use this to identify which exhibits to read with get_exhibit_content. Excludes XML/XBRL exhibits.

ParametersJSON Schema
NameRequiredDescriptionDefault
filingIdYesInternal filing ID (numeric). Find via search_sec_filings.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already mark this as read-only. The description adds behavioral context by stating it excludes XML/XBRL exhibits and returns metadata (not full content), which clarifies the tool's scope beyond what annotations provide.

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 long, front-loaded with the primary action, and every sentence adds value: listing purpose, return content, and usage guidance. 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?

Given the tool is a simple listing operation with read-only annotations, an output schema (not detailed but present), and clear parameter description in schema, the tool description provides all necessary context: what it does, what it returns, how to use it next, and what it excludes.

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 for the only parameter (filingId), referencing sibling tool search_sec_filings. The tool description does not add new meaning beyond the schema; it mentions 'within an SEC filing' but does not elaborate on the parameter itself. 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 clearly states the tool lists exhibits within an SEC filing, returns metadata (type, description, size), and explicitly excludes XML/XBRL exhibits. It distinguishes itself from get_exhibit_content by positioning this tool as a discovery step.

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 explicitly tells the agent to use this tool to identify which exhibits to read with get_exhibit_content, providing clear usage context. It also notes that XML/XBRL exhibits are excluded, hinting at alternatives. However, it does not address when not to use this in favor of other sibling tools like get_filing_document.

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

get_financialsGet Financial StatementsA
Read-only
Inspect

Get income statement, balance sheet, and cash flow data for a company. Supports annual, quarterly, and trailing-twelve-month views. Use when analyzing revenue, profitability, debt, or cash position.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFinancial period type: "annual", "quarter", or "ttm" (trailing twelve months). Defaults to annual.
limitNoMaximum number of periods to return (1-40). Defaults to 8.
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, so the description does not contradict. However, beyond stating the data types and periods, it offers no additional behavioral context (e.g., data source, update frequency, pagination), so it adds minimal value 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?

Two efficient sentences with no wasted words. The first sentence states the action and resource, the second specifies use cases, making it easy to scan.

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 presence of an output schema (mentioned in context signals) and the clear description of the financial statements and period types, the description is complete for an agent to understand what the tool returns and when to use it.

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 baseline is 3. The description echoes the type parameter's enum values but adds no new meaning for 'ticker' or 'limit' beyond what is in the schema. It does not explain default behavior or 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?

The description clearly states it retrieves income statement, balance sheet, and cash flow data, with explicit period options (annual, quarterly, TTM). This distinguishes it from sibling tools like get_earnings or get_cash_history, providing a specific verb-resource pair.

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 says 'Use when analyzing revenue, profitability, debt, or cash position,' giving clear context for when to invoke the tool. However, it does not mention when not to use it or suggest alternative tools for related but distinct data (e.g., cash history), missing an opportunity for explicit exclusion guidance.

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

get_floatGet Float DataA
Read-only
Inspect

Get float data for a company: floatShares, floatDefinition, as-of date, and — when the headline float is WITHHELD — the bounds and labelled stand-ins that replace it. Use when analyzing share supply. CARDINAL RULE: null / absent / withheld means NOT MEASURED — never "no float", never "no restricted shares", never zero. A numeric 0 is a MEASURED zero and passes a null check, so decide from the reason/marker field ("floatWithheldReason", "restrictedBlockCount", "provenance", "direction"), never from the value alone. IMPORTANT: check "floatDefinition" to know which float you are reading — "tradeable" (shares outstanding minus affiliates minus restricted/unregistered blocks: what can actually reach the tape; used on filing-derived dilution-snapshot tickers), "non_affiliate" (the SEC I.B.6 figure, which INCLUDES restricted shares held by non-affiliates — not what a trader means by float), "non_affiliate_estimate" (approximated from ownership filings), or "free_float" (vendor methodology). TODAY "floatDefinition" and "source" are only present on dilution-snapshot results: a vendor-sourced float arrives with neither (just floatShares, asOfDate, floatEstimated) because vendors are not named — read an ABSENT floatDefinition as "not a filing-derived tradeable float" and do not assume it is tradeable. On snapshot tickers "nonAffiliateFloatShares" carries the SEC I.B.6 figure separately — it is the ONLY correct input to baby-shelf / I.B.6 shelf-capacity math; never use the tradeable float there, and never present the non-affiliate figure as tradeable supply. floatShares:null with "floatWithheldReason" set ("restricted_blocks_unnetted" | "stated_figure_impossible" | "affiliate_basis_stale" | "affiliate_figure_declined" | "affiliate_unreconciled" | "share_count_unavailable" | "split_post_dates_basis") means the figure was deliberately WITHHELD, not unavailable — do not substitute a vendor float of your own. A withheld result may carry up to four stand-ins, each labelled IN the object; NONE is a float and NONE may be fed to a market cap, a percent-of-float, a short-interest ratio, a screen, a sort or a comparison: (1) "tradeableFloatCeiling" is an UPPER BOUND — the tradeable float is AT MOST this; render it with "<=" and nothing else (null = no bound stateable, never 0). (2) "affiliateBasis.floatLowerBound" / "floatUpperBound" are a RANGE the float lies in — "between X and Y"; each end is null independently when not measurable, so state the ends that exist as inequalities. This object also appears on PUBLISHED floats with both ends equal to floatShares — it is a bound only when floatShares is null. (3) "floatEstimate" is a BADGED ESTIMATE {shares, basis, direction, confidence}: "basis" is the itemised working (quote it), "direction" says which way it errs ("overstates" = the true float is at most shares; "understates" = at least; "unknown"), "confidence" describes the estimate, not a float. Today it is populated only on affiliate_basis_stale and null is the ordinary outcome. An estimate never becomes floatShares — present shares WITH basis and direction, never alone. Unrelated to the boolean "floatEstimated", which flags a published floatShares back-derived from a USD public-float disclosure. (4) "vendorFallback" is a third-party free-float figure {floatShares, provenance:"vendor", floatDefinition:"free_float", asOfDate, splitAdjusted} offered beside the withhold — NOT our number, NOT on the tradeable definition, already refused when our filings refute it. Present it as the vendor free float as of its own date, never in the "Float" slot. "restrictedShares":null means NOT MEASURED (a block exists whose size the filings do not state), NEVER zero; "restrictedBlockCount":0 is an answer, not an absence. "affiliateBasisStale" (with basisSpanDays/affiliateAnchorDate) labels a float whose affiliate table is materially older than its share count — the number itself is unchanged. "tradeableBasis":"convention_conservative" means the filings did not answer and a published convention resolved it — see "tradeableConvention" and do not present the figure as exact.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=true, so the description carries the burden and exceeds it dramatically. It discloses the cardinal null semantics, the meaning of 'floatWithheldReason', the distinction between measured zero and absence, the four stand-in objects and how each may or may not be used, and the caveat about floatDefinition/source presence. This is rich behavioral and interpretive context beyond what annotations provide.

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 and dense, but the length is largely earned given the number of nuanced null/withhold/stand-in cases that materially change how the result must be interpreted. It is front-loaded with the main purpose and cardinal rule, and uses numbered lists and clear labels. It loses one point because a few warnings repeat the 'never treat null as zero' idea across multiple forms, making it less concise than it could be.

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 data-retrieval tool with one parameter, an output schema, and read-only annotation, the description covers essentially every decision an agent needs to make before and after invoking the tool: which float definition is being read, when the float is withheld, what the stand-ins mean, and how to present them. No important call-time or interpretation behavior is left unstated.

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 only parameter, 'ticker', is fully described in the schema with example symbols, so schema coverage is 100%. The description adds no additional ticker-specific format, validation, or behavior details, which is acceptable given the schema already handles it. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Get float data for a company') and enumerates the core fields returned (floatShares, floatDefinition, as-of date, stand-ins). It is unmistakably about float data, but it does not explicitly contrast itself with sibling get_float_history or other float-related tools, so it falls short of full sibling differentiation.

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?

Gives a clear usage context: 'Use when analyzing share supply.' It does not provide when-not-to-use guidance or name alternative tools, but the context is specific enough for an agent to select this tool over obviously unrelated ones. No misleading guidance is present.

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

get_float_historyGet Float HistoryA
Read-only
Inspect

Get the POINT-IN-TIME float history for a company — one sample per trade date (float shares, shares outstanding, and the source the float came from). Use to answer "what was the float on date X" or to see float expand across a dilution event, which the latest-only get_float cannot show. IMPORTANT: this series is FORWARD-ONLY — it began accumulating in mid-2026 and is NOT backfilled, so early/absent history is expected and an empty rows array is a normal result, not an error or a delisted company. Each row carries "source" ("polygon" | "computed" | "sec_10k" | "fmp") because float quality varies by provider — weigh rows accordingly rather than treating all sources as equal. Charged per your API tier.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLookback window in trade dates. Default 90, clamped to 1-730.
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.9/5.0
Behavior5/5

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

Description adds critical behavior beyond readOnlyHint: forward-only accumulation starting mid-2026, no backfill, empty rows as normal, source reliability variance, and API tier charging. Predicts expected data patterns and prevents misinterpretation.

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?

Single paragraph, front-loaded with purpose, then usage, then caveats, then cost. Every sentence provides unique value; no redundancy or 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?

Given historical complexity and presence of output schema, description covers all essential aspects: return fields, usage context, data gaps, source quality, and cost. No missing critical information for agent to decide and use tool correctly.

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 clear parameter descriptions. The description adds context about the lookback window (implicitly tied to 'days') and the point-in-time nature, but does not significantly enhance parameter understanding beyond schema. Still above baseline due to schema covering parameters well.

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 point-in-time float history per trade date, with specific fields (float shares, shares outstanding, source). It distinguishes itself from sibling get_float by highlighting that it shows history across time, not just latest.

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 (for historical float queries, dilution events) and when not (latest-only queries serve get_float better). Also advises weighing rows by source quality, guiding proper interpretation.

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

get_historical_pricesGet Historical Stock PricesA
Read-only
Inspect

Get historical OHLCV price candles for a stock. Supports daily, weekly, and monthly resolutions. Use period shorthand (1M, 3M, 6M, 1Y, 5Y, ALL) or explicit from/to UNIX timestamps. Default is 1 year of daily candles. Use this to compute price returns, chart price history, or analyze volume trends over time.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd date as UNIX timestamp (overrides period)
fromNoStart date as UNIX timestamp (overrides period)
periodNoLookback period shorthand (default: "1Y"). Ignored if from/to are provided.
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")
resolutionNoCandle resolution: "D" (daily, default), "W" (weekly), "M" (monthly)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

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. Description adds behavioral context: returns candle format, supports multiple resolutions, default period of 1 year. Adds value beyond annotations without 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?

Two succinct sentences. First sentence states main purpose and resolution options. Second sentence covers period flexibility and use cases. No wasted words. Front-loaded with key info.

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?

Output schema exists, no need to explain returns. Description covers purpose, usage, parameter behavior, and example use cases. Complete for a data retrieval tool with good annotations.

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 has 100% parameter descriptions. Description adds significant extra meaning: explains period shorthand values, default behavior (1Y daily), that from/to override period, resolution default. This goes well 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?

Clearly states verb 'Get' and resource 'historical OHLCV price candles for a stock'. Lists supported resolutions and specific use cases (compute returns, chart, analyze volume). Distinguishes from siblings like get_intraday_bars and get_quote by specifying resolution and period options.

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 clear context for when to use: computing returns, charting, volume analysis. Explains period vs from/to timestamp usage. Doesn't explicitly exclude alternatives but given sibling count, context is sufficient.

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

get_insider_cluster_buysGet Insider Cluster BuysA
Read-only
Inspect

Detect cluster buying patterns for a company. Identifies periods where 3+ distinct insiders purchased shares within a 14-day window -- a strong bullish signal that often precedes positive corporate announcements or price appreciation.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., AAPL, TSLA)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

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 the description elaborates on the analysis performed: identifies clusters with specific criteria (3+ insiders, 14-day window) and interprets the signal as bullish. No contradictions; adds valuable behavioral detail 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: first states the core function, second details the criteria and implication. Every sentence adds value; no wasted words. Front-loaded with the main action.

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 single parameter and existence of an output schema, the description fully covers the tool's purpose, criteria, and significance. 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?

The single parameter 'ticker' is fully described in the schema with an example. The description does not add any additional semantic meaning or constraints beyond what the schema provides. Baseline 3 due to 100% schema 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?

Description clearly states the tool detects cluster buying patterns for a company, specifying the trigger condition (3+ distinct insiders within 14 days) and its significance as a bullish signal. This distinctively separates it from sibling tools like get_insider_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 context on when to use (to identify bullish insider clusters) but does not explicitly state when not to use or suggest alternatives. It implies use for predictive signals, which is clear enough among many insider tools.

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

get_insider_cross_companyGet Cross-Company Insider TradingA
Read-only
Inspect

Discover insider trading patterns across multiple companies. Unlike get_insiders which shows insider activity for a single ticker, this tool searches the entire universe to find insiders active across multiple companies, cluster buying patterns, and large transactions. Filter by insider name, transaction type, or date range. Useful for detecting coordinated insider activity, cross-company insider networks, and market-wide buying/selling trends.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 10, max: 100)
offsetNoOffset for pagination (default: 0)
endDateNoEnd date for transaction range in ISO format (e.g., "2025-12-31")
startDateNoStart date for transaction range in ISO format (e.g., "2025-01-01")
insiderNameNoFilter by insider name (partial match, e.g., "Musk" or "Cohen")
transactionTypeNoFilter by transaction type: "P" (purchase), "S" (sale), "A" (grant/award), "M" (conversion)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior4/5

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

Adds context beyond readOnlyHint: describes searching entire universe, detecting networks and clusters. 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 concise sentences, front-loaded with purpose and differentiation, 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?

Given output schema exists and all parameters described, the description adequately explains the tool's unique value, use cases, and scope. No need to elaborate on return values.

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. Description mentions filtering by name, type, date range which aligns with schema but does not add new meaning beyond what 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?

Clearly states the verb 'discover' and resource 'insider trading patterns across multiple companies'. Distinctly differentiates from sibling get_insiders which focuses on a single ticker.

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

Usage Guidelines4/5

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

Explicitly contrasts with sibling get_insiders, guiding when to use this tool (cross-company) vs single-ticker. Mentions filtering options but lacks explicit 'when not to use' scenarios.

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

get_insider_positionsGet Insider PositionsA
Read-only
Inspect

Get current open insider positions for a CIK (either an insider or an issuer). If an issuer (company) CIK is supplied, returns all insiders' positions for that company. If an insider (reporting-person) CIK is supplied, returns that insider's open positions across all issuers they have filed Form 4 for. The response includes a lookupMode field ("issuer" or "insider") indicating which interpretation matched. Derived from Form 4 filings.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesSEC CIK number of the insider OR the issuer (company). Tried as issuer first, then falls back to insider.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true, and the description adds that data is derived from Form 4 filings, includes a lookupMode field, and explains the fallback logic (issuer first, then insider). This adds meaningful context beyond the annotation.

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 concise sentences. The first sentence is the main purpose, followed by two sentences that add necessary nuance. 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?

Given the tool's dual behavior and the presence of an output schema (not detailed), the description adequately explains both use cases, the lookupMode field, and the data source. It is complete for an agent to understand the tool's functionality.

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 covers the cik parameter with a description, but the tool description adds the dual interpretation logic (issuer vs. insider) and the fallback behavior, providing significant additional 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 retrieves current open insider positions for a CIK, distinguishing between issuer and insider interpretations. It uses a specific verb 'Get' and identifies the resource as 'insider positions', differentiating it from siblings like get_insider_positions_by_ticker.

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

Usage Guidelines4/5

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

The description explains when to use each CIK type (issuer vs. insider) and implies that for ticker-based lookups, other tools like get_insider_positions_by_ticker should be used. While not explicit about alternatives, it provides clear context for the two primary use cases.

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

get_insider_positions_by_tickerGet Insider Positions by TickerA
Read-only
Inspect

Get per-insider lifetime position aggregates for a given ticker — which insiders hold positions in the stock and their aggregate cost/value. Derived from Form 4 filings.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.1/5.0
Behavior4/5

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

Adds context beyond readOnlyHint: explains it returns lifetime aggregates of cost/value and source (Form 4). 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?

Two sentences, front-loaded with core purpose, second sentence adds source. 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 output schema exists and the tool has only one parameter, the description sufficiently explains purpose, source, and output nature. No missing critical info.

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% with a clear description for 'ticker'. Description repeats 'given ticker' but adds no extra meaning. 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?

Clearly states it gets 'per-insider lifetime position aggregates' for a given ticker, differentiating from sibling tools like get_insider_positions and get_insider_transactions. Verb and resource are specific.

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?

Implies usage for aggregate insider positions per ticker, but no explicit when-not-to-use or alternative tools mentioned. Context from 'Derived from Form 4' helps, but guidance is minimal.

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

get_insidersGet Insider Trading IntelligenceA
Read-only
Inspect

Get insider trading discovery data for a company. Includes cluster buying detection, entity-centric insider model, and Form 4 cross-referencing. Shows insider transactions with buying/selling patterns that may signal upcoming corporate actions. Each insider includes a transactionBreakdown by SEC code (P=Purchase, S=Sale, F=Tax withholding, M=Exercise, G=Gift, A=Award), netSharesSold12m (code S only, excludes tax withholding), and isPrimarilyTaxWithholding flag to distinguish routine RSU vesting from discretionary selling. Supports pagination with limit/offset.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 20, max: 100)
offsetNoOffset for pagination (default: 0)
tickerYesStock ticker symbol (e.g., AAPL, TSLA)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description adds valuable behavioral context: explains transaction breakdown by SEC code, fields like netSharesSold12m and isPrimarilyTaxWithholding, and pagination support. 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?

The description is a single, well-structured paragraph that front-loads the purpose and efficiently conveys all necessary details without unnecessary repetition. 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?

Given the complexity of insider data, the description covers key aspects (cluster buying, transaction breakdown, flags, pagination) and leverages the output schema. It feels complete for an AI agent to understand what data to expect.

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 the description merely reiterates the parameters (ticker, limit, offset) without adding significant new information beyond what the schema already provides. 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 clearly states 'Get insider trading discovery data for a company' and lists specific features like cluster buying detection, entity-centric insider model, and Form 4 cross-referencing, distinguishing it from sibling tools such as get_insider_transactions which focus on raw transactions.

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 implies usage for comprehensive insider analysis but does not explicitly state when to use this tool versus alternatives like get_insider_transactions or get_insider_positions. There is no direct guidance or exclusions.

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

get_insider_transactionsGet Insider TransactionsA
Read-only
Inspect

Get detailed insider transaction history for a company from Form 4 filings. Returns individual buy/sell transactions with insider name, title, shares, price, and transaction codes. Supports pagination for companies with extensive insider activity. Filter by year/month to narrow results, or use transactionCode to find only purchases (P), sales (S), etc. Useful for identifying "first insider buy since X" patterns.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoFilter by transaction year (e.g., 2025)
limitNoMaximum results to return (default: 20, max: 100)
monthNoFilter by transaction month (1-12, requires year)
offsetNoOffset for pagination (default: 0)
tickerYesStock ticker symbol (e.g., AAPL, TSLA)
transactionCodeNoFilter by SEC transaction code: P=Purchase, S=Sale, A=Grant/Award, M=Exercise/Conversion, F=Tax withholding, G=Gift, C=Conversion, W=Will, D=Disposition to issuer, etc.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations include readOnlyHint: true, and description aligns with read-only behavior by stating 'Returns individual buy/sell transactions.' Discloses pagination and filtering behavior beyond annotations. 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?

Two concise sentences with key information front-loaded. Every sentence adds value, no wasted words. Structure is efficient and easy to parse.

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 6 parameters, output schema present, and no nested objects, the description fully covers the tool's capabilities: pagination, filtering by year/month/transactionCode, and the use case. Nothing essential 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% with descriptions, but description adds value by explaining transactionCode with examples (P=Purchase, S=Sale, etc.) and clarifying that month requires year. This enhances understanding 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?

Description clearly states 'Get detailed insider transaction history for a company from Form 4 filings' with specific verb and resource. It also lists what is returned (insider name, title, shares, price, transaction codes), distinguishing it from sibling tools like get_insider_positions or get_insider_cluster_buys.

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 explicit guidance on when to use: 'Supports pagination for companies with extensive insider activity' and 'Filter by year/month... use transactionCode to find only purchases...' Includes a use case: 'Useful for identifying first insider buy since X patterns.' Does not explicitly state when not to use, but context from sibling tools makes it clear.

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

get_institution_activityGet Institution ActivityA
Read-only
Inspect

Get an institution's position changes over recent 13F periods by CIK. Reads the number of trailing periods to include.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesSEC CIK number of the institution
periodsNoNumber of trailing quarters to include (default: 4, max: 12)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A3.8/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds 'Reads the number of trailing periods to include,' which clarifies parameter behavior but does not disclose additional traits like data source frequency or response format. With annotations present, the description provides adequate but minimal extra context.

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 concise sentences: the first states the core purpose with specific verbs and resources, and the second adds a brief parameter note. No unnecessary words, front-loaded with key info. This is an exemplary efficient description.

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 tool's simplicity (2 parameters, output schema exists), the description covers the essential purpose and parameter roles. It mentions '13F periods' for context. It could note the required CIK, but the schema already does that. For a read-only tool with rich schema, it is nearly 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%, so the schema already describes both parameters (cik as SEC CIK, periods with min/max). The description adds only that periods 'include' trailing periods, which is a slight restatement. It does not add significant meaning beyond the schema, resulting in a baseline score.

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 gets an institution's position changes over recent 13F periods by CIK, specifying the resource (position changes) and the constraint (13F periods). This distinguishes it from siblings like get_institution_holdings (snapshot) and get_institution_position_changes (likely without period specificity).

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 implies usage when historical position changes over multiple quarters are needed, but it does not explicitly state when to use this tool over alternatives (e.g., get_institution_holdings for current holdings) or provide exclusions. Usage context is inferred but not guided.

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

get_institution_derivativesGet Institution DerivativesA
Read-only
Inspect

Get an institution's reported PUT/CALL derivative positions by CIK (13F options), with pagination and sorting.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesSEC CIK number of the institution
limitNoMaximum results to return (default: 20)
offsetNoOffset for pagination (default: 0)
periodNoFiling period to filter (e.g., "2025-Q1")
sortByNoColumn to sort by
sortOrderNoSort direction

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations provide readOnlyHint=true, which matches. Description adds pagination/sorting behavior but no additional safety notes, recency, or other constraints. Fair for a read tool.

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

Conciseness5/5

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

Single sentence, no extra words. All key elements present: verb, resource, identifier, features. 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?

Given 6 parameters, output schema, and annotations, the description adequately covers core purpose. Lacks error handling or edge cases, but sufficient for a retrieval tool with rich 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 parameters are fully defined. Description mentions 'pagination' (implied by limit/offset) and 'sorting' but adds no semantics 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?

Clearly states verb 'Get', resource 'PUT/CALL derivative positions', identifier 'by CIK (13F options)', and features 'pagination and sorting'. Distinguishes from siblings like get_institution_holdings by focusing on derivatives.

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

Usage Guidelines2/5

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

No explicit when-to-use or when-not-to-use. Lacks comparisons to sibling tools or exclusions. Agent must infer that this is for options data from the context.

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

get_institution_detailGet Institution DetailA
Read-only
Inspect

Get detailed information about a specific institutional investor by their SEC CIK number. Returns the institution name, total AUM, number of holdings, and filing history. Use get_institutions first to find the CIK for an institution.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesSEC CIK number of the institution (e.g., "0001067983" for Berkshire Hathaway)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

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 the description aligns by stating it 'gets' information. The description adds value by detailing the output content (name, AUM, holdings, filing history), which goes beyond the annotation. No behavioral 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?

The description is two sentences with no fluff. The purpose is front-loaded, and each sentence serves a distinct function: stating the action and providing usage guidance. Perfectly concise.

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 tool has an output schema (not shown but flagged by context signals), the description need not enumerate return fields in detail. It still lists key output fields and explains the prerequisite. For a one-parameter lookup tool, this is mostly complete, though it could mention error handling for invalid CIKs.

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 describes the 'cik' parameter with a format example, and schema coverage is 100%. The description adds extra context ('Use get_institutions first to find the CIK'), which helps the agent understand how to obtain the parameter value. This adds meaning beyond the 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?

The description clearly states the tool's purpose: 'Get detailed information about a specific institutional investor by their SEC CIK number.' It specifies the verb ('get'), the resource ('detailed information about a specific institutional investor'), and the method ('by their SEC CIK number'). It also lists the returned fields (name, AUM, holdings, filing history), distinguishing it from siblings like get_institutions.

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 explicit when-to-use guidance: 'Use get_institutions first to find the CIK for an institution.' This helps the agent understand the prerequisite. However, it does not contrast with other institutional detail tools like get_institution_activity, but the context is sufficient for correct usage.

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

get_institution_filingsGet Institution FilingsA
Read-only
Inspect

Get the list of 13F filings for an institution by CIK, with pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesSEC CIK number of the institution
limitNoMaximum results to return (default: 20, max: 50)
offsetNoOffset for pagination (default: 0)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, so the agent knows it is a safe read operation. The description adds that it returns a list of filings with pagination. No contradictions or missing behavioral context that is not already 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 a single sentence front-loading the core purpose and key features. No extraneous text.

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 tool's simplicity and the presence of annotations, input schema with 100% coverage, and an output schema, the description is sufficiently complete. It does not mention that 13F filings are quarterly, but that is not critical for selection.

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% with adequate descriptions for all parameters. The description adds minimal value beyond that by mentioning pagination. 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 clearly states the verb 'Get', the resource 'list of 13F filings', the key parameter 'by CIK', and the feature 'with pagination'. It distinguishes itself from siblings like get_institution_holdings or get_institution_activity by specifying it is for filings.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus its many siblings (e.g., get_institution_holdings, get_institution_activity). The agent would have no context to choose this tool over alternatives.

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

get_institution_holdingsGet Institution HoldingsA
Read-only
Inspect

Get the full portfolio holdings for a specific institution by CIK. Returns all positions from their latest 13F filing with shares, value, and portfolio weight. Supports pagination for institutions with large portfolios.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesSEC CIK number of the institution
limitNoMaximum results to return (default: 20, max: 100)
offsetNoOffset for pagination (default: 0)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true, and the description aligns with that by stating it returns holdings details. It adds behavioral context beyond annotations by noting pagination support and the specific data returned (shares, value, weight).

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, no wasted words, and front-loaded with the key action and inputs. It is concise and well-structured.

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 an output schema present, the description does not need to detail return structures. It covers the core functionality, pagination, and what data is returned, making it sufficient for the 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?

Schema coverage is 100%, so the description does not need to re-explain parameters. It adds context about pagination and the nature of the returned data (latest 13F filing), but does not significantly enhance understanding beyond the schema definitions.

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 the full portfolio holdings for a specific institution by CIK, returning positions from the latest 13F filing with shares, value, and portfolio weight. It differentiates from sibling tools like get_institution_activity or get_institution_detail by focusing on portfolio 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 clear context for when to use the tool (e.g., when needing complete portfolio data for an institution by CIK). It does not explicitly state when not to use it or mention alternatives, but the use case is well-defined.

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

get_institution_portfolio_analyticsGet Institution Portfolio AnalyticsA
Read-only
Inspect

Get sector allocation and top holdings analytics for an institution's portfolio by CIK.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesSEC CIK number of the institution

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds context about the output (sector allocation, top holdings) but does not elaborate on other behavioral traits like data freshness, pagination, or limits. It is consistent with annotations, but no additional behavioral details are provided.

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 a single concise sentence that front-loads the key action and resource. No extraneous words or 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?

Given the presence of an output schema (as indicated by context signals), the description adequately covers the tool's purpose. It is a simple lookup with one parameter, so the description is sufficient. However, a slightly more detailed description of the analytics (e.g., typical fields returned) would be helpful but not necessary.

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 the description mentions 'by CIK', but the schema already defines the 'cik' parameter with a description. The description adds no meaningful semantic value beyond the schema, so baseline 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 retrieves sector allocation and top holdings analytics for an institution's portfolio, identified by CIK. It uses a specific verb ('Get') and resource ('sector allocation and top holdings analytics'), distinguishing it from similar sibling tools like get_institution_holdings.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. There are many sibling tools related to institutions (e.g., get_institution_holdings, get_institution_position_changes), but no scenarios, prerequisites, or exclusions are mentioned.

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

get_institution_position_changesGet Institution Position ChangesA
Read-only
Inspect

Diff two quarterly 13F snapshots for an institution. Compares the latest filing against the prior quarter and returns per-position changes: new positions, increased, decreased, and exited. Sorted by |changePercent| descending so the biggest moves surface first. Much more efficient than calling get_institution_holdings twice and diffing client-side — the server computes everything in a single SQL query.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesSEC CIK number of the institution (e.g., "0001067983" for Berkshire Hathaway)
limitNoMaximum results to return (default: 50, max: 100)
offsetNoOffset for pagination (default: 0)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, so description adds value by explaining the server-side computation and sorting behavior (by |changePercent| descending). No contradictions. Minor omission: no mention of what happens if no prior filing exists.

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: first defines purpose, second explains efficiency and sorting. Every sentence adds value; no fluff. Front-loaded with action verb.

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 that an output schema exists, the description sufficiently covers purpose, efficiency, and sorting. However, it could mention handling of missing prior filings or date boundaries. Still strong for a read-only tool with good annotations.

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 baseline is 3. The description adds context but does not elaborate on parameters beyond the example in cik description. It mentions sorting but not parameter constraints (limit/offset). Adequate but not exceptional.

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 uses a specific verb ('Diff') and clearly identifies the resource (two quarterly 13F snapshots for an institution) and the output (per-position changes: new, increased, decreased, exited). It distinguishes this tool from siblings like get_institution_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 explicitly states when to use: for comparing latest filing to prior quarter. It also provides an alternative ('get_institution_holdings twice and diffing client-side') and explains why this tool is better (efficiency). Lacks explicit 'when not to use' but still clear.

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

get_institutionsGet Institutional HoldersA
Read-only
Inspect

Get institutional holders (13F filers) for a company. Returns institutions that hold positions in this stock based on SEC 13F filings, including shares held, portfolio weight, and filing dates. Useful for understanding institutional ownership concentration.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 20, max: 100)
offsetNoOffset for pagination (default: 0)
tickerYesStock ticker symbol (e.g., AAPL, TSLA)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description correctly adds context about the data source (SEC 13F filings) and returned fields (shares held, portfolio weight, filing dates). No contradictions noted.

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

Conciseness5/5

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

Two sentences with no extraneous text. Purpose, data source, and output fields are front-loaded, making it efficient for an agent to parse.

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

Completeness4/5

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

The description covers the tool's purpose, data source, and key output fields. Given the presence of an output schema (not shown but referenced in context), it does not need to detail return values. Ample context for a read-only data retrieval 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% with full descriptions for each parameter. The description adds value by listing the output fields (shares held, etc.) but does not elaborate on parameter semantics beyond what the schema provides. Baseline 3 maintained.

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 verb 'get', the resource 'institutional holders (13F filers)', and the scope 'for a company'. It distinguishes from sibling tools that focus on specific institutions (e.g., get_institution_detail) by specifying company-level query.

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 implies usage for understanding institutional ownership concentration but does not explicitly state when to use this tool vs alternatives, nor does it mention when not to use it. No alternative tool names are referenced.

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

get_institutions_leaderboardsGet Institution LeaderboardsA
Read-only
Inspect

Two market-wide institution leaderboards in one call: topByAum (largest holders by assets under management, name-deduped) and mostActive (highest 13F position-change volume). No CIK required. For the full paginated AUM list use get_institution_top_aum.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results per section (default: 10, max: 50)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior4/5

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

The description adds context beyond the readOnlyHint annotation by specifying that the tool returns two leaderboards with deduplication and volume metrics. It does not contradict the annotation and discloses the scope of the call.

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: the first defines the tool's purpose and output, the second provides an alternative. It is front-loaded and concise with 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?

Given the tool's simplicity (one optional parameter, no nested objects, output schema exists), the description fully covers the necessary context: what the tool returns, that it's market-wide, and the alternative for paginated results.

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

Parameters3/5

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

The input schema has 100% coverage on the single 'limit' parameter, describing it fully. The description does not mention the parameter, but the schema already provides the necessary semantics. Hence, baseline score 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 explicitly states it returns two specific leaderboards: 'topByAum' (largest holders by AUM, name-deduped) and 'mostActive' (highest 13F position-change volume). The verb 'get' and resource 'institution leaderboards' are clear, and the distinction from the sibling 'get_institution_top_aum' is provided.

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 notes that no CIK is required, simplifying use, and directs to 'get_institution_top_aum' for a full paginated AUM list, offering clear guidance on when to use an alternative. It lacks explicit 'when not to use' but provides sufficient context.

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

get_institution_top_aumGet Top Institutions by AUMA
Read-only
Inspect

Discover top institutional holders across the entire company universe ranked by assets under management (AUM). Unlike get_ownership which shows institutions for a single company, this tool searches across all companies to find the largest institutional players. Optionally set a minimum AUM. Useful for identifying smart money flows and major institutional positioning trends.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 25, max: 100)
minAumNoMinimum AUM in USD to filter institutions (e.g., 1000000000 for $1B+)
offsetNoOffset for pagination (default: 0)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so no additional safety disclosure needed. Description adds behavioral context: searches across all companies, ranks by AUM, optionally filters by minimum AUM. Does not mention pagination or return format, but output schema exists (not shown) to cover that.

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?

Two sentences, well-structured. The first sentence fronts the core purpose and scope. The second sentence adds differentiation and optional feature. Very little redundancy, though could be slightly more concise.

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 simple tool with 3 optional parameters, readOnlyHint annotations, and output schema present, the description adequately covers key aspects (purpose, scope, differentiation, optional filter). Satisfies completeness for this level of complexity.

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% (all three parameters documented). The description adds a brief mention of minimum AUM but no additional semantic value beyond what the schema already provides. Baseline score of 3 is appropriate.

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

Purpose5/5

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

Clearly states 'Discover top institutional holders across the entire company universe ranked by assets under management (AUM)' with a specific verb and resource. Explicitly distinguishes from sibling tool get_ownership by noting the scope difference (across all companies vs. single company).

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 explicit context for when to use this tool compared to get_ownership (single company vs. all companies). Mentions optional parameter (minimum AUM) and practical use case ('identifying smart money flows'). Lacks explicit when-not-to-use statements but sufficiently guides selection.

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

get_intraday_barsGet Intraday Price BarsA
Read-only
Inspect

Get intraday OHLCV candles at 1, 5, 15, 30, or 60-minute resolution. Use for intraday price action analysis, volume patterns, and short-term technical analysis. Returns open, high, low, close, and volume for each bar. Set extended=true (1-minute resolution only) to include premarket (04:00–09:30 ET) and after-hours (16:00–20:00 ET) bars.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesEnd time as UNIX timestamp
fromYesStart time as UNIX timestamp
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")
extendedNoInclude extended-hours bars (premarket 04:00–09:30 ET and after-hours 16:00–20:00 ET). Only supported with resolution "1".
resolutionYesBar resolution in minutes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. The description adds behavioral details: extended-hours inclusion with resolution constraints, which is valuable beyond the schema. 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 well-structured sentences with no fluff. Key information is front-loaded: what it returns, resolutions, usage, and extended-hours details. 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?

With annotations covering safety (readOnly) and output schema presumably detailing return fields, the description covers usage context, resolution options, and extended-hours behavior fully.

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% (all parameters described). The description adds nuance: 'Set extended=true (1-minute resolution only) to include premarket...'—this clarifies a constraint not fully captured in 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 it fetches intraday OHLCV candles at specific resolutions (1, 5, 15, 30, 60 min). This distinguishes it from sibling tools like 'get_historical_prices' which likely provide daily or longer-term data.

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 explicitly recommends using this tool for 'intraday price action analysis, volume patterns, and short-term technical analysis'. It does not explicitly mention when not to use or alternatives, but the context is clear given sibling tools.

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

get_legislative_calendarGet Legislative CalendarA
Read-only
Inspect

Forward-looking legislative catalyst calendar: upcoming House/Senate floor votes (bills and Senate cloture motions) filtered to items that can move tickers. Each item includes the predicted vote window (start/end/granularity/confidence/provenance), marketRelevance (low/medium/high), significance (1-5), affected sectors with direction + mechanism, verified affected tickers with evidence quotes, pass outlook, considerationProcedure (suspension-calendar bills pass ~98% of the time), a conflictBadge when the sponsor traded a verified affected ticker, and tweet/plain summaries. An EMPTY calendar is a normal state — it means nothing market-relevant is scheduled in the window, not an error. Defaults: from=today, to=+14 days, minRelevance=low. IMPORTANT: affectedTickers contains VERIFIED rows only — every ticker carries a verbatim evidenceQuote substring-verified against the actual bill text (no hallucinated tickers). sponsorTradeFacts are restatements of public STOCK Act disclosures with verbatim amount brackets and BOTH transactionDate AND disclosureDate — always cite both dates together (disclosures lag trades by up to 45 days), and never present a fact as evidence of wrongdoing. Vote windows are predictions: check window.provenance for trust level ('uc_explicit' is exact; 'rule_xxii_computed' is a medium-confidence estimate) and window.granularity for how precise the window is (exact time vs day vs week).

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoLatest vote-window date inclusive (YYYY-MM-DD, default: today + 14 days)
fromNoEarliest vote-window date inclusive (YYYY-MM-DD, default: today)
limitNoMaximum results to return (default: 25, max: 100)
offsetNoPagination offset (default: 0)
minRelevanceNoMinimum market relevance: 'low' (default), 'medium', 'high', or 'none' (explicit opt-in to the full audit trail incl. non-market items — rarely useful)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true. The description adds significant behavioral context: empty calendar is normal, vote windows are predictions with provenance/granularity, affectedTickers are verified verbatim, and sponsorTradeFacts require citing both dates with no suggestion of wrongdoing.

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 well-structured with front-loaded core purpose and subsequent details. Every sentence provides useful information, though it could be slightly more concise without losing 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 the complexity (5 parameters, output schema exists), the description covers behavior, edge cases, warnings, and interpretation thoroughly. It is complete for an AI agent to use correctly.

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 3. The description adds value by stating defaults for from/to and minRelevance, and explains the 'none' option for minRelevance as 'explicit opt-in to the full audit trail'.

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 'Forward-looking legislative catalyst calendar' of upcoming House/Senate floor votes filtered to market-relevant items. This specific verb-resource combination distinguishes it from sibling tools like get_economic_calendar or get_earnings_calendar.

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

Usage Guidelines4/5

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

The description explains defaults (from=today, to=+14 days, minRelevance=low) and how to interpret an empty result (normal state, not error). It does not explicitly state when to use this vs. alternatives like get_policy_events, but the context is clear enough for an AI agent.

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

get_market_breadthGet Market BreadthA
Read-only
Inspect

Get market breadth aggregates (advance/decline counts and ratio, percent of constituents above their 50DMA and 200DMA, and counts of new 52-week highs/lows) for a chosen universe (sp500, ndx, or all). Use to add market-state context to commentary, tweets, or daily summaries.

ParametersJSON Schema
NameRequiredDescriptionDefault
universeNoUniverse to aggregate over: sp500, ndx, or all (default sp500)sp500

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so read-only nature is known. The description adds detail on output metrics but no additional behavioral traits beyond what annotations imply.

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?

Extremely concise: two sentences front-load the purpose and use case with 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?

Tool is simple (one optional parameter with enum) and the description fully explains output and usage. Output schema exists, so return value details are covered.

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%; the description merely reiterates the universe parameter without adding new meaning beyond the schema's enum values and default.

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

Purpose4/5

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

The description clearly identifies the verb 'Get' and resource 'market breadth aggregates', listing specific metrics. However, it does not explicitly differentiate from sibling tools like get_market_metrics, so it lacks sibling distinction.

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 usage context: 'add market-state context to commentary, tweets, or daily summaries.' It does not, however, state when not to use or name alternatives.

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

get_market_metricsGet Market MetricsA
Read-only
Inspect

Get computed market metrics for a company including volume averages, volatility, SMAs, and trend direction. Use when analyzing trading patterns or technical indicators beyond the basic quote.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description's burden is lower. The description adds behavioral context by listing the computed metrics returned (volume averages, volatility, SMAs, trend direction), which is consistent with the read-only nature. 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?

The description is two sentences, front-loaded with the tool's action and output, and every sentence adds value. No redundant or missing information.

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 a single required parameter (with clear schema), an output schema (not shown but flagged true), and clear sibling differentiation, the description is complete. It covers purpose, usage context, and expected outputs.

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% (the ticker parameter has a description). The tool description does not add additional meaning beyond what the schema provides for the parameter, so 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 clearly states it 'Get[s] computed market metrics for a company' and lists specific metrics (volume averages, volatility, SMAs, trend direction). It distinguishes itself from the sibling tool get_quote by noting it goes 'beyond the basic quote', making its specific purpose unambiguous.

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 when to use: 'Use when analyzing trading patterns or technical indicators beyond the basic quote.' This implies alternatives (like get_quote for basic quotes) and sets clear context, though it does not explicitly list alternatives or when-not-to-use.

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

get_market_newsGet Market News (Top Stories)A
Read-only
Inspect

Get the latest market-wide news across ALL tickers, most recent first. Every item is significance-classified at ingest (critical | major | standard); the default filter of critical,major is the "top stories" view. Use for "what is happening in the market right now" — for news about one company, use get_news with a ticker instead. Requires the /news/latest public endpoint (added 2026-07-29; 404 until that backend deploy).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum items to return (1-50). Defaults to 10.
significanceNoCSV of levels to include, e.g. "critical,major" (default) or "critical,major,standard".

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. Description adds that items are significance-classified at ingest, default filter is critical,major, and notes the endpoint requirement. 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?

Three sentences, front-loaded with the main action. Minor redundancy ('most recent first' and 'default filter of critical,major') but overall well-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?

Given the presence of an output schema and readOnlyHint annotation, the description completes the picture with usage context, parameter defaults, and a backend dependency caveat.

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 100% of parameters with descriptions. Description adds default values (10 for limit, 'critical,major' for significance) and clarifies the CSV format for significance.

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 specifically states the tool gets market-wide news across all tickers, most recent first, and distinguishes it from get_news which is for a single company. The verb 'get' and resource 'market news' are clear.

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 to use for 'what is happening in the market right now' and to use get_news for company-specific news. Also warns about a potential 404 until a backend deploy.

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

get_newsGet Company NewsA
Read-only
Inspect

Get recent news articles and press releases for a company. Use when researching recent developments, catalysts, or sentiment drivers. Set pressReleasesOnly to return only official company press releases.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of articles to return (1-20). Defaults to 10.
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")
pressReleasesOnlyNoWhen true, return only official company press releases (exclude third-party news).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, and the description adds context on the scope of returned data (news articles and press releases). No contradictions, and the behavior is clear for a read-only tool.

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

Conciseness5/5

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

Two sentences, each serving a distinct purpose: stating the tool's function and providing usage guidance. 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 the simple nature of the tool (3 parameters, 1 required, output schema present), the description adequately covers when and how to use it, making it complete for effective agent invocation.

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

Parameters3/5

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

Schema description coverage is 100%, and the description merely reiterates the pressReleasesOnly parameter's effect without adding new information. Baseline score of 3 is appropriate as no additional semantic value is provided.

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 retrieves recent news articles and press releases for a company, using a specific verb and resource. With no other news-related sibling tools, it is well-differentiated.

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 states use case: 'Use when researching recent developments, catalysts, or sentiment drivers.' Provides guidance on the pressReleasesOnly parameter but does not include when-not-to-use or alternative tools.

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

get_ownershipGet Comprehensive OwnershipA
Read-only
Inspect

Get unified ownership breakdown for a company combining Form 4 insider holdings, 13F institutional holdings, and 13D/13G activist positions. All entities are resolved across the three SEC form types into a single view with counterparty resolution. The allHolders array is paginated via limit/offset (default 100). Aggregate stats (institutional/insider/beneficial/retail totals and percentages) are always included in full.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum holders to return in allHolders (default: 100, max: 100)
offsetNoOffset for pagination (default: 0)
tickerYesStock ticker symbol (e.g., AAPL, TSLA)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, indicating no side effects. The description adds behavioral details: pagination via limit/offset (default 100), and that aggregate stats are always included. This goes beyond the annotation to inform the agent about output structure and pagination behavior.

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

Conciseness5/5

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

The description is two sentences with no redundancy. The first sentence establishes the core purpose, and the second provides essential pagination and output details. Every sentence adds value, making it both efficient and informative.

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 existence of an output schema and the complexity of aggregating multiple SEC form types, the description covers key aspects: data sources, counterparty resolution, pagination behavior, and aggregate stats. It is complete enough for an agent to use correctly without additional 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%, but the description adds context: it explains that limit and offset control pagination for the allHolders array, with default 100 and max 100 for limit. This clarifies the parameters' purpose beyond the schema's type and constraints.

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 unified ownership breakdown combining Form 4, 13F, and 13D/13G holdings. It specifies the resource ('ownership breakdown for a company') and scope ('comprehensive'), effectively differentiating it from siblings that focus on individual form types.

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

Usage Guidelines4/5

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

The description implies use for a consolidated view of ownership data but does not explicitly state when to use this tool versus alternative siblings like get_institution_holdings. It provides clear context for its role as an aggregator, but lacks explicit 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_policy_eventsGet Policy EventsA
Read-only
Inspect

List mirrored executive orders (policy events) from the Federal Register feed. Filter by signing-date range, affected sector, or free-text title query. Each event includes its Federal Register document number (externalId), title, signing date (eventDate), normalized affected sectors, full-text URL, and flaggedTradeCount — the number of official trades that occurred in an affected sector near the signing date. IMPORTANT: matches are sector-level co-occurrence — the official traded a stock in a sector the executive order affects, within a window of its signing date. Sector matches are broad and many trades will coincide with policy activity by chance; a match is a starting point for research, not evidence of foreknowledge. The matchBasis field describes match strength only ('sector' = broad sector match), never culpability, and matchCount shows how many EOs matched in the window (a noise indicator).

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree-text search over event titles
toNoLatest signing date inclusive (YYYY-MM-DD)
fromNoEarliest signing date inclusive (YYYY-MM-DD)
limitNoMaximum results to return (default: 25, max: 100)
offsetNoPagination offset (default: 0)
sectorNoFilter by canonical affected sector (one of the 11 canonical sector strings, e.g. "Healthcare", "Financial Services", "Energy")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description adds crucial behavioral context: matches are sector-level co-occurrence, not evidence of foreknowledge, and the matchBasis field only indicates match strength. This transparency helps the agent interpret results correctly.

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 the main action and filters, then provides important caveats. It is slightly lengthy but every sentence is meaningful. Could be streamlined but still effective.

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 parameter count (6), full schema description, and presence of output schema, the description covers all necessary context including result interpretation. It is complete 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.

Parameters5/5

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

The input schema has 100% description coverage, but the description adds meaning by explaining the purpose of filters and detailing output fields (externalId, title, eventDate, flaggedTradeCount, matchBasis, etc.) and their interpretation.

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 lists mirrored executive orders from the Federal Register feed with specific filters (signing-date range, sector, title query). It distinguishes itself from sibling tools by focusing on policy events, which are unique among the listed siblings.

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

Usage Guidelines4/5

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

The description provides clear context on when to use the tool (to list and filter policy events) and explains the meaning of match results. It does not explicitly state when not to use or offer alternatives, but the tool's purpose is well-defined.

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

get_policy_trade_leaderboardGet Policy-Trade LeaderboardA
Read-only
Inspect

Rank politicians (Congress + executive branch) by trades that occurred near executive-order signings in sectors the orders affect. Each row includes the politician, flaggedTradeCount, totalEstimatedUsd, topSector, and an exampleEvent. Use for "who trades most around policy activity" style questions. Defaults to the same "traded 1-14 days before signing" lens as get_policy_trade_overlap; same-day trades are always excluded. IMPORTANT: matches are sector-level co-occurrence — the official traded a stock in a sector the executive order affects, within a window of its signing date. Sector matches are broad and many trades will coincide with policy activity by chance; a match is a starting point for research, not evidence of foreknowledge. The matchBasis field describes match strength only ('sector' = broad sector match), never culpability, and matchCount shows how many EOs matched in the window (a noise indicator).

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoRanking order: 'usd' (default — estimated USD value) or 'count' (flagged-trade count)
limitNoMaximum results to return (default: 50, max: 100)
offsetNoPagination offset (default: 0)
windowNoMatch window in days around the EO signing date (default: 14, max: 30)
directionNoWhich side of the signing date to include: 'before' (default), 'after', or 'both'

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, but the description goes beyond by detailing sector-level matching, window defaults, direction options, and crucial caveats about matches being co-occurrence, not evidence. This adds significant behavioral context.

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

Conciseness3/5

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

The description is somewhat verbose (over 100 words) and includes detailed caveats. While front-loaded with the main purpose, it could be more concise without losing essential warnings.

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 5 optional parameters and an existing output schema, the description covers return fields (flaggedTradeCount, totalEstimatedUsd, etc.), match logic, and important limitations. It is complete for an AI agent to understand tool behavior.

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 baseline is 3. The description adds minor context (defaults, exclusion of same-day trades) but does not significantly enhance parameter understanding 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 clearly states the tool ranks politicians by trades near executive-order signings, using a specific verb ('rank') and resource ('politicians'). It distinguishes from the sibling get_policy_trade_overlap by noting the default lens and same-day exclusion.

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 explicitly says 'Use for <U+2018>who trades most around policy activity<U+2019> style questions.' It references a sibling tool but does not provide explicit when-not-to-use or alternatives. The context is clear but lacks exclusions.

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

get_policy_trade_overlapGet Policy-Trade OverlapA
Read-only
Inspect

For a single politician, list trades that occurred within a window of days before or after the signing of an executive order affecting the traded sector. Each row contains the trade, the nearestEvent, daysDelta (negative = traded N days before EO signing, positive = traded N days after), matchBasis, and matchCount, plus a summary (totalFlags, totalEstimatedUsd, topSector). Defaults to trades 1-14 days BEFORE signing; same-day trades are always excluded (intraday ordering is unknowable). Unlike get_donor_trade_overlap, executive-branch (exec-) slugs return REAL data here: both congressional and executive trade sources feed the overlap computation. IMPORTANT: matches are sector-level co-occurrence — the official traded a stock in a sector the executive order affects, within a window of its signing date. Sector matches are broad and many trades will coincide with policy activity by chance; a match is a starting point for research, not evidence of foreknowledge. The matchBasis field describes match strength only ('sector' = broad sector match), never culpability, and matchCount shows how many EOs matched in the window (a noise indicator).

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPolitician URL slug — congressional ("sen-nancy-pelosi", "rep-...") or executive branch ("exec-...")
limitNoMaximum results to return (default: 50, max: 100)
offsetNoPagination offset (default: 0)
windowNoMatch window in days around the EO signing date (default: 14, max: 30)
directionNoWhich side of the signing date to include: 'before' (default), 'after', or 'both'

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, and the description consistently describes a read-only operation. It exceeds annotation value by detailing exclusions (same-day trades), default direction, and match interpretation (sector-level, not culpability). 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?

Description is well-organized with a clear lead sentence followed by details on output, defaults, caveats, and comparison. It is slightly long but each sentence adds value given the tool's complexity. Could be tightened slightly without losing clarity.

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

Completeness5/5

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

Given the tool's complexity (5 parameters, sector-level matching nuance), the description covers defaults, exclusions, match interpretation, and distinction from a sibling. Output schema exists, so return value details are offloaded. The warning about false positives completes the picture for appropriate use.

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 significant meaning: explains slug formats (congressional vs exec), defaults for window and direction, and clarifies that same-day trades are excluded. It also elaborates on output fields like matchBasis and matchCount beyond schema hints.

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 lists trades for a single politician within a window around executive order signing, with specific verb 'list' and resource 'trades'. It distinctly separates from sibling get_donor_trade_overlap by noting executive-branch slug behavior.

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 clear context: it's for a single politician, defaults to 1-14 days before, and warns that matches are sector-level and not evidence. It could be improved by explicitly stating when not to use or listing alternatives, but the sibling context and differentiation from get_donor_trade_overlap offer adequate guidance.

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

get_political_sector_rotationGet Political Sector RotationA
Read-only
Inspect

Which market SECTORS politicians have been trading in over a trailing window. Aggregates congressional + executive trades by sector and returns, per sector: trade count, total dollar volume, number of distinct politicians, and the top tickers. Use it to see where political trading activity is concentrating (e.g. "politicians piled into Energy this month"). Sort by count or dollar volume.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoTop-N sectors to return (default: 15, max: 30)
sortByNoRank sectors by trade count or summed dollar volume (default: count)
chamberNoOptional chamber filter (default: all chambers merged)
windowDaysNoLookback window in days (default: 30, max: 90)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.7/5.0
Behavior5/5

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

The description fully discloses the read-only nature (consistent with annotations) and explains the aggregation behavior and output fields. It adds value beyond the readOnlyHint by detailing what data is returned and how it is grouped, ensuring 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?

The description is two sentences plus an illustrative example, all front-loaded and directly relevant. Every sentence adds value, with no redundancy or 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?

Given the presence of an output schema and thorough parameter descriptions in the schema, the description provides sufficient context about the tool's purpose and output. It covers all necessary aspects for an agent to select and use it correctly.

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 description adds meaning by mentioning sorting by count/volume and the lookback window, and it implies the aggregation scope, which aids parameter understanding. It goes slightly 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 clearly states the tool aggregates trades by sector, listing specific return fields (trade count, dollar volume, distinct politicians, top tickers). It uses a specific verb 'get' and resource 'political sector rotation', distinguishing it from sibling tools that focus on individual politicians or trades.

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 an example usage ('politicians piled into Energy this month') and suggests sorting by count or volume, giving clear context. However, it does not explicitly state when not to use it or compare with alternatives like get_politician_transactions or get_policy_trade_leaderboard, so it lacks full exclusion guidance.

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

get_politician_activityGet Politician ActivityA
Read-only
Inspect

Get activity metrics for a politician broken down by period (30d, 90d, 1y, all-time). Includes buy/sell counts and values per period, most traded tickers (top 10), and transaction type breakdown. Useful for analyzing trading patterns over time.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPolitician URL slug (e.g., "sen-nancy-pelosi")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, indicating safe read operations. The description adds value by detailing the output structure (periods, counts, values, top tickers, type breakdown) without contradicting annotations. No behavioral quirks or auth needs are omitted.

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 efficiently communicate the tool's purpose, data content, and usage context. No extraneous information, and the most critical details are 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?

Given that an output schema exists, the description does not need to detail return values. It covers all necessary aspects for a read tool: what data is returned and its purpose. The presence of annotations and schema makes this 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% with a single parameter (slug) adequately described. The description does not add new information about the parameter itself; it explains output features (periods) which are not parameters. Baseline 3 is appropriate as the schema already handles parameter meaning.

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

Purpose5/5

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

The description clearly states it retrieves activity metrics for a politician with specific breakdowns by time period, mentioning key data points like buy/sell counts, top tickers, and transaction types. It effectively distinguishes from siblings by emphasizing aggregated periodic data over individual transactions or profit/loss.

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 notes the tool is useful for analyzing trading patterns over time, implying usage for aggregated periodic data, but it does not explicitly state when to avoid it or suggest alternatives. With many sibling tools, direct guidance would improve selection.

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

get_politician_committeesGet Politician CommitteesA
Read-only
Inspect

Get committee assignments for a politician including committee name, chamber, role (Chair, Ranking Member, etc.), and subcommittee memberships. Use to correlate trading activity with committee oversight areas. Requires a politician slug (e.g. "sen-nancy-pelosi") -- use get_politicians first to find the slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPolitician URL slug (e.g., "sen-nancy-pelosi", "rep-nancy-pelosi")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true, so the description's burden is lower. It adds the type of data returned but does not discuss potential limits, data freshness, or authorization details. Acceptable but not 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?

Two sentences: first defines output, second gives usage guidance and prerequisite. No wasted 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 the simplicity (one parameter, output schema exists) and sibling tools, the description provides enough context to use the tool effectively. Could mention if assignments are current or historical, but not required.

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 100% of parameters with descriptions. Description adds concrete examples (e.g., 'sen-nancy-pelosi') and links the slug to the prerequisite tool. This exceeds the baseline.

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 retrieves committee assignments for a politician, listing explicit fields (committee name, chamber, role, subcommittees). This distinguishes it from sibling tools like get_politician_detail or get_politician_roles.

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?

Description advises to use for correlating trading activity with oversight, and clearly states the prerequisite: use get_politicians first to obtain the slug. It does not explicitly mention when not to use, but the context is sufficient.

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

get_politician_detailGet Politician DetailA
Read-only
Inspect

Get the full profile for a politician including party, state, chamber, trade statistics, filing delay metrics, most traded sector, and their 10 most recent transactions. Use get_politicians first to find the slug (e.g. "sen-nancy-pelosi").

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPolitician URL slug (e.g., "sen-nancy-pelosi", "sen-tommy-tuberville")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, and the description's 'get' verb confirms a safe read operation. The description adds value by detailing the specific data fields returned, giving the agent a clear picture of what to expect beyond the annotation's binary safety signal.

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, each earning its place: the first defines purpose and output, the second provides usage guidance. There is no redundant repetition of schema or annotations.

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 single parameter, 100% schema coverage, and presence of an output schema, the description adequately covers all necessary context. It tells the agent what the tool does, what data it returns, and how to obtain the required input.

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?

With 100% schema coverage, the schema already documents the slug parameter well. The description adds value by explaining that the slug should be obtained from get_politicians and provides an example ('sen-nancy-pelosi'), which is helpful for correct invocation.

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 explicitly lists the return fields (party, state, chamber, trade statistics, filing delay metrics, most traded sector, and 10 most recent transactions), clearly distinguishing it from many sibling politician tools that focus on narrower aspects like activity, donors, 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 a clear prerequisite: 'Use get_politicians first to find the slug.' This guides the agent on parameter acquisition. However, it does not explicitly state when not to use this tool or suggest alternatives for different needs, which would elevate it to a 5.

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

get_politician_donorsGet Politician DonorsA
Read-only
Inspect

Get the paginated list of campaign donors (individuals and PACs) for a single politician across one election cycle. Returns donor name, amount, type, employer/occupation (individuals), and committee details (PACs). Use this when a user asks "who donated to " or wants the full donor list. For a quick top-10 + cycle totals overview, use get_politician_donor_summary instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPolitician URL slug (e.g., "sen-nancy-pelosi")
typeNoFilter by donor type: 'individual', 'pac', or 'all' (default: 'all')
cycleNoElection cycle as 4-digit year (e.g. "2024"). Defaults to most recent cycle.
limitNoMaximum results to return (default: 50, max: 100)
offsetNoPagination offset (default: 0)
sortByNoSort field: 'amount' (default), 'date', or 'name'
minAmountNoMinimum contribution amount in USD (filters out small donors)
sortOrderNoSort direction (default: 'desc')

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

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 description aligns (no write actions). The description adds context about pagination and the specific data fields returned (donor name, amount, type, etc.), which is helpful but not excessive.

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: first defines the tool's core action and output, second provides clear usage guidance with sibling comparison. No fluff.

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 output schema existence and 8 parameters, the description captures the primary use case and differentiates from a sibling. It doesn't cover all edge cases or defaults, but those are addressed in the schema. Reasonably complete.

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 summarizing output fields (e.g., employer/occupation for individuals, committee details for PACs) that are not in the schema, and implies filtering capabilities. This enriches understanding beyond the parameter 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 it retrieves paginated campaign donors for a single politician, specifying the resource and verb. It distinguishes from get_politician_donor_summary by noting that this tool provides a full list rather than a 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 tells when to use this tool (when user asks for full donor list) and when to use the alternative (quick top-10 summary). Names the sibling tool get_politician_donor_summary.

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

get_politician_donor_summaryGet Politician Donor SummaryA
Read-only
Inspect

Get a bundled donor summary for a single politician: cycle totals (raised, spent, cash-on-hand, debts), donor count, top 10 individual donors, and top 10 PAC donors — all in one response. This is the right tool for "who funds " or "biggest donors to " style questions. For the full paginated list, use get_politician_donors.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPolitician URL slug (e.g., "sen-nancy-pelosi")
cycleNoElection cycle as 4-digit year (e.g. "2024"). Defaults to most recent cycle.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true, and description adds detail on the summary contents (cycle totals, donor count, top donors). No contradictions. It does not discuss rate limits or data freshness, but adequately covers behavior.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, then usage guidelines. Every sentence adds value. No wordiness.

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 presence of an output schema, the description sufficiently explains the summary's content and use case. It could add more on aggregation logic, but not necessary for agent selection and invocation.

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

Parameters3/5

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

Schema has 100% description coverage, so the schema already documents both parameters. The description implies slug use but adds minimal extra beyond schema. It hints at cycle defaulting to most recent, but that's already in 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 clearly states it returns a bundled donor summary for a single politician, listing specific data points (cycle totals, donor count, top donors). It distinguishes from the sibling tool get_politician_donors for a full paginated list.

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 using this tool for 'who funds <politician>' or 'biggest donors to <politician>' questions, and directs to get_politician_donors for a full paginated list. Provides when-not and alternative.

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

get_politician_late_filersGet Politician Late FilersA
Read-only
Inspect

Get STOCK Act late filing violations -- trades where the disclosure was filed more than 45 days after the transaction (a legal violation). Sorted by filing delay descending. Useful for identifying politicians with poor disclosure compliance.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLookback period in days (default: 180, max: 730)
limitNoMaximum results to return (default: 10, max: 50)
offsetNoPagination offset (default: 0)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true, and description adds that results are sorted by filing delay descending. No contradictions; description complements annotations with sorting and legal violation context.

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 concise sentences, front-loaded with key information: subject, criteria, sorting, and use case. No unnecessary 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?

Given the tool's simplicity and the presence of an output schema, the description provides sufficient context: purpose, filtering criterion, sorting, and practical use. 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%, so parameters are already well-described. The description does not add additional meaning beyond the schema, meeting the baseline.

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 identifies the tool as retrieving STOCK Act late filing violations, with specific criteria (disclosure >45 days after transaction) and sorting by filing delay. Distinguishes from siblings like get_politician_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?

States the tool is useful for identifying politicians with poor disclosure compliance. While not explicitly excluding alternatives, the specific focus on late filings provides clear context.

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

get_politician_pnlGet Politician P&LA
Read-only
Inspect

Get estimated realized + unrealized profit & loss for a politician. Methodology: each disclosed trade amount range is converted to an estimated share count using the stock's historical market price on the transaction date, then FIFO-matched on SHARES (realized = (sellPrice − buyPrice) × matched shares); open positions are marked to the current price for unrealized P&L. Works for Congress (sen-/rep-) AND executive branch (exec-) officials. Response includes a totals object (estimatedRealizedPnl, estimatedUnrealizedPnl, winRate, realizedTrades, tickersTraded) and a byTicker[] breakdown (estimatedShares, avgCostBasis, currentPrice, realizedPnl, unrealizedPnl, unrealizedPnlPercent) — byTicker open positions double as the estimated holdings. All figures are ESTIMATES (±25-40% from disclosure bracket width). Use get_politicians first to find the slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPolitician URL slug — congressional ("sen-nancy-pelosi", "rep-...") or executive ("exec-trump-donald-j")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true; description adds detailed methodology (FIFO, share count estimation), accuracy caveat (±25-40%), response structure (totals, byTicker), and notes that byTicker doubles as holdings. 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?

Five information-dense sentences, front-loaded with purpose, no redundant or empty phrases. Every sentence serves a clear function.

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 a single parameter, existing output schema (not shown), and rich context about methodology, accuracy, and prerequisite, the description fully covers what an agent needs to use 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 coverage is 100% with a good description. The tool description restates the slug format and adds examples, but does not significantly expand on the schema's own 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 it retrieves estimated realized and unrealized P&L for a politician, distinguishing it from sibling tools like get_politician_transactions or get_politician_activity by focusing on profit/loss calculation.

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 states prerequisite 'Use get_politicians first to find the slug' and specifies it works for Congress and executive branch officials. Does not explicitly exclude alternatives, but context makes sibling purposes clear.

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

get_politician_recent_tradesGet Recent Politician TradesA
Read-only
Inspect

Get recent STOCK Act trades across all politicians. Each trade includes the senator info, ticker, transaction type, amount, and filing delay. Filter by direction (buy/sell) and lookback period. Useful for monitoring current congressional trading activity.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLookback period in days (default: 30, max: 365)
limitNoMaximum results to return (default: 50, max: 100)
offsetNoPagination offset (default: 0)
directionNoFilter by direction: 'buy' or 'sell'

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is known. The description adds that results include filing delay, which is useful context, but it doesn't disclose any additional behavioral traits beyond what annotations provide. 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 two sentences long, well front-loaded with the core purpose, and lists key output fields without any 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?

Given the output schema exists, the description does not need to detail return values. It already lists the important fields. The tool has 4 parameters, all documented in schema, and the description provides sufficient context for a simple filtered-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 description coverage is 100%, so parameters are already well-documented. The description mentions filtering by direction and lookback period, which adds some context but does not provide significant new 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 verb 'get', the resource 'recent STOCK Act trades', and the scope 'across all politicians'. It also lists key output fields (senator info, ticker, transaction type, amount, filing delay), distinguishing it from other politician tools like get_politician_activity or get_politician_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 says 'Useful for monitoring current congressional trading activity', which provides clear context for when to use. However, it does not explicitly mention when not to use it or point to alternatives, though the sibling list includes many other politician tools.

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

get_politician_rolesGet Politician RolesA
Read-only
Inspect

Get committee leadership roles (Chair, Ranking Member, etc.) for a politician. Use get_politicians first to find the slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPolitician URL slug (e.g., "sen-nancy-pelosi")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already mark as readOnlyHint=true, so agent knows it's safe. Description adds detail about output (leadership roles) and prerequisite workflow, which goes 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 concise sentences: first states purpose with examples, second gives prerequisite. No extraneous information. Front-loaded and 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?

Tool is simple with one parameter and output schema exists. Description covers what the tool does, what it returns (implicitly via purpose), and how to use it. Complete for its complexity.

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 additional meaning beyond the schema's parameter description (slug format/example already in 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 it retrieves committee leadership roles (Chair, Ranking Member) for a politician. Provides specific examples of roles and distinguishes from siblings by specifying the output type.

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 advises to use get_politicians first to find the slug, giving clear prerequisite context. Does not include explicit when-not-to-use or alternatives, but the guidance is sufficient for a simple tool.

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

get_politiciansGet PoliticiansA
Read-only
Inspect

List and search congressional politicians who have STOCK Act trading disclosures. Filter by party (D/R/I), state, or search by name. Returns paginated results with trade counts, last trade date, and net buy/sell direction over the trailing 12 months.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 10, max: 100)
partyNoFilter by party: 'D' (Democrat), 'R' (Republican), 'I' (Independent)
stateNoFilter by US state (2-letter code, e.g. "CA", "TX")
offsetNoPagination offset (default: 0)
searchNoSearch by politician name (partial match)
sortByNoSort field (default: 'last_trade')
sortOrderNoSort direction (default: 'desc')

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, indicating a safe read operation. The description adds behavioral context: pagination ('returns paginated results'), the specific data returned (trade counts, last trade date, net direction), and the 12-month trailing period. This goes beyond 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.

Conciseness5/5

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

Two sentences with no wasted words. The first sentence states the purpose and scope, the second describes available filters and outputs. Front-loaded and 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 7 optional parameters, no required parameters, an output schema (so return values are documented), and a clear description covering filters and output fields, the description is complete enough for an agent to correctly select and invoke the tool.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds meaning by explaining the output fields (trade counts, last trade date, net direction) which clarify the purpose of sortBy options like 'last_trade' and 'total_trades'. It also mentions the trailing 12-month period, providing context 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's purpose: 'List and search congressional politicians who have STOCK Act trading disclosures.' It specifies available filters (party, state, name) and what the results contain (pagination, trade counts, last trade date, net direction). This is specific and distinguishes it from sibling tools like get_politician_detail or get_politician_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 implies usage for listing/searching politicians with trading disclosures, but does not explicitly state when to use this tool versus alternatives like get_politician_detail (for a single politician) or get_politician_transactions (for trades). It provides clear context but lacks explicit '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_politicians_most_activeGet Most Active PoliticiansA
Read-only
Inspect

Discover the most active congressional traders ranked by trade count within a lookback period. Returns each politician with trade count, tickers traded, buy/sell values, and top tickers. Useful for identifying the most prolific political traders.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 10, max: 50)
periodNoLookback period (default: '90d')

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true. The description adds the returned fields (trade count, tickers, values, top tickers) but no additional behavioral traits like speed or aggregation behavior.

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

Conciseness5/5

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

Three sentences efficiently convey purpose, return data, and use case. No wasted words and front-loaded with the core action.

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

Completeness4/5

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

The description covers purpose, ranking metric, and returned fields. With an output schema present, it is mostly complete, though it could explicitly mention that results are ranked and limited.

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% with descriptions for both parameters. The description does not add extra meaning beyond what the schema provides, so baseline of 3 applies.

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

Purpose4/5

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

The description clearly states the tool discovers most active congressional traders ranked by trade count, specifying the resource and action. However, it does not explicitly differentiate from sibling tools like get_politician_activity or get_politician_recent_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 phrase 'Useful for identifying the most prolific political traders' implies usage context but does not provide when-not-to-use or mention alternatives among siblings.

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

get_politicians_pnl_leaderboardGet Politicians P&L LeaderboardA
Read-only
Inspect

Rank politicians (Congress + executive branch) by estimated trading P&L across the universe. Sort by total P&L, win rate, or traded volume. P&L uses price-adjusted share estimation: disclosed amount ranges → estimated shares via historical price → FIFO on shares → open positions marked to current price. Figures are ESTIMATES (±25-40% from disclosure bracket width).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 25, max: 100)
offsetNoPagination offset (default: 0)
sortByNoSort field (default: 'pnl')

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. The description adds valuable behavioral context: details on the estimation methodology (price-adjusted shares, FIFO, mark-to-market) and the uncertainty range (±25-40%). This goes beyond what annotations provide.

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 two sentences plus a list of methodology details. It is concise and front-loaded with the main purpose. No unnecessary words, but some may find the methodology details slightly verbose.

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 presence of an output schema (return values are covered), the description adequately explains the tool's purpose, sorting, and estimation method. It could benefit from usage guidance, but overall it is complete for a leaderboard tool.

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

Parameters4/5

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

Schema coverage is 100%, so parameters are documented. The description reinforces the meaning of sortBy (pnl, winRate, volume) and explains how limit/offset work in context. This adds value beyond the schema for parameter understanding.

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

Purpose5/5

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

The description clearly states it ranks politicians by estimated trading P&L, specifies sorting options, and explains the estimation methodology. It distinguishes from sibling tools like get_politician_pnl by focusing on a leaderboard view.

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 does not explicitly state when to use this tool versus alternatives like get_politician_pnl or get_politician_activity. Usage is implied (for ranking), but no guidance on context or exclusions is provided.

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

get_politician_transactionsGet Politician TransactionsA
Read-only
Inspect

Get paginated trade history for a specific politician. Returns individual STOCK Act disclosures with ticker, transaction type, amount range, filing delay, and late filing flag. Includes a summary with total buys/sells and net value.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPolitician URL slug (e.g., "sen-nancy-pelosi")
typeNoFilter by transaction type: 'Purchase' or 'Sale'
limitNoMaximum results to return (default: 50, max: 100)
offsetNoPagination offset (default: 0)
sortByNoSort field (default: 'date')
sortOrderNoSort direction (default: 'desc')

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. The description adds behavioral context: paginated returns, STOCK Act disclosures, summary with buys/sells. No contradictions. Could mention rate limits or data freshness, but adequate.

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: first states purpose, second details output. No unnecessary words, front-loaded, 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?

Has output schema, so return values are documented. Description covers key output fields and pagination. Could mention error handling or data freshness, but overall sufficient for a straightforward read 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%, so baseline is 3. The description hints at pagination (offset/limit) but does not add significant meaning beyond the schema. However, it mentions the output fields which indirectly relate to 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 clearly states it gets paginated trade history for a specific politician, with details on returned fields and a summary. It distinguishes itself from siblings like get_politician_recent_trades by focusing on full paginated history.

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 implies usage for detailed trade history but does not explicitly state when to use this vs. alternatives or provide exclusions. Given many sibling politician tools, more guidance would be helpful.

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

get_politician_votesGet Politician VotesA
Read-only
Inspect

Get voting records for a politician by slug. Returns congressional votes with bill info, position (Yea/Nay/Not Voting), and result. Useful for assessing alignment between a politician's votes and their trading positions. Requires Bioguide ID resolution.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesPolitician URL slug (e.g., "sen-nancy-pelosi")
limitNoMaximum results to return (default: 10, max: 100)
offsetNoPagination offset (default: 0)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, and description adds value by noting 'Requires Bioguide ID resolution,' a behavioral prerequisite not captured in structured fields. 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?

Two sentences: first states purpose and output, second adds context and prerequisite. No redundancy, front-loaded, every word 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?

With output schema existing, description does not need to detail return values. It covers purpose, use case, prerequisite, and parameter hinting (slug). Fully sufficient for agent decision-making.

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 already documented. Description only adds 'by slug' for the required parameter, which is already clear from schema. No additional meaning for limit/offset 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?

The description clearly states the tool retrieves voting records for a politician by slug, specifying the returned data includes congressional votes, bill info, position, and result. This distinguishes it from sibling tools like get_politician_detail or get_politician_recent_trades.

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 explicit use case: assessing alignment between votes and trading positions. Does not explicitly mention when not to use or alternatives, but the context is clear enough for an agent to decide.

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

get_post_earnings_moversGet Post-Earnings MoversA
Read-only
Inspect

Get stocks that moved significantly after earnings reports on a given date. Returns pre-computed price changes with earnings surprise data in a single call — no need to chain get_earnings_calendar + get_historical_prices + get_quote per ticker. Includes preEarningsClose, currentPrice, changePct, EPS/revenue actuals vs estimates, and surprise percentages. Filter by minimum absolute % change threshold.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesEarnings date to check (YYYY-MM-DD)
limitNoMaximum results to return (default 25, max 100)
minChangePctNoMinimum absolute % price change to include (default 5). Set to 0 for all.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description adds significant behavioral context: returns pre-computed price changes with earnings surprise data, lists fields, and emphasizes it's a single call. 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?

The description is 4 sentences with no unnecessary words. It is front-loaded with the core purpose and efficiently adds details about data fields and usage guidance.

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 parameters are well-defined in the schema, annotations indicate read-only, and an output schema exists, the description is complete. It covers purpose, usage, and data returned without 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 description coverage is 100%, so baseline is 3. The description adds context like 'Filter by minimum absolute % change threshold' for minChangePct, but does not add new meaning beyond what the schema already provides. Adequate.

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' and resource 'stocks that moved significantly after earnings reports on a given date'. It distinguishes from sibling tools like get_earnings_calendar and get_historical_prices by noting it's a pre-computed composite, making the purpose unique.

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 explicitly says 'no need to chain...', guiding the agent to use this tool instead of multiple calls. It also explains filtering by minChangePct. However, it does not specify when not to use it (e.g., if raw data is needed), 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_premarket_scan_historyGet Premarket Scan HistoryA
Read-only
Inspect

Historical MARKET-WIDE premarket scan for a single PAST trade date. For the requested ET date, returns every ticker with that day's premarket (default) session volume and its relative volume (RVOL) vs the trailing 30-day same-session baseline — the SAME RVOL math as get_rvol_history, but across the whole market for one date instead of one ticker across many dates. Filter by RVOL, market cap, price, and float to backtest screens like "sub-$500M tickers with premarket RVOL > 5 on 2026-07-20" in one call. Rows are ranked by RVOL descending. A future or non-trading date returns an empty list with an explanatory reason (not an error). Every row also reports "baselineState" (why its RVOL is or is not null), "advRatio" (volume ÷ trailing 30-session average FULL-DAY volume) and "advDays"; set includeNoHistory=true to surface high-volume tickers that have no computable RVOL at all, such as first-session new listings. Each row ALSO publishes the RVOL denominator itself as "baselineVolume" (shares) plus a "baselineThin" flag (true when that denominator is under 200 shares): a 90x RVOL off a 1-share baseline is arithmetically correct and analytically worthless. That is almost entirely an asOfTime-basis effect (0.1% of full-session rows vs ~38% at the 04:30 cutoff, falling to ~9% by 09:15) and it skews to LIQUID LARGE CAPS that simply do not trade early, NOT to microcaps. Screen it out with minBaselineVolume and/or minSessionVolume. The response "meta" also reports asOfApplied / asOfIgnored / asOfIgnoredReason, so a time-of-day request that could not be honoured is visible instead of quietly returning full-session numbers. A price / market-cap / float filter can only be applied to a ticker company_screener_data holds a value for, so a just-renamed or just-listed symbol cannot be rated against it. Those rows are NEVER silently dropped: "meta.unscreened" always reports their count, the filter families involved and the tickers, and includeUnscreened=true returns them in "rows" tagged with "unscreenedFilters". Treat that tag as NOT MEASURED — the value is unknown, not out of range. Charged per your API tier.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesREQUIRED past ET trade date to scan (YYYY-MM-DD). Future/non-trade dates return an empty list.
limitNoMax rows to return (1–200, default 50). Rows are ranked by RVOL desc.
offsetNoPagination offset (default 0).
minRvolNoMinimum RVOL (day session volume ÷ trailing 30-day baseline). Drops rows whose baseline is not yet warm.
sessionNoSession bucket to scan (default premarket). "all" = full extended day.
asOfTimeNoOptional TRUE time-of-day premarket basis. Any HH:MM ET premarket time; snapped to the nearest 15-minute grid cutoff (04:00–09:15, ties resolve to the earlier cutoff). When set, RVOL is cumulative premarket volume known BY that cutoff ÷ the trailing baselineDays (default 30) average of the SAME cutoff — a real time-of-day comparison, not the full 04:00–09:30 session. Each returned row carries a "basis" field: "asof-0700" (the snapped cutoff actually used) when a precomputed row exists, else "full-session" (automatic per-row fallback — the as-of series is forward-looking and may be sparse). Only applies to a premarket scan. Omit for full-session premarket volume. CHECK "meta.asOfApplied" (the SNAPPED cutoff actually used, or null) and "meta.asOfIgnored" / "meta.asOfIgnoredReason" ("date-not-covered" — the as-of grid has not been computed for this date, so the numbers are full-session; "non-premarket-session" — asOfTime only applies to a premarket scan; "unparseable"). Coverage is a set with HOLES that grows as the backfill runs, so do NOT assume any cutover date — read the meta per request. An unhonoured asOfTime is never an error, so this is the only reliable check. ALSO NOTE: this basis is where near-zero RVOL baselines come from — pair it with minBaselineVolume (see "baselineThin").
maxFloatNoMaximum public float (shares).
maxPriceNoMaximum latest price in USD.
minFloatNoMinimum public float (shares).
minPriceNoMinimum latest price in USD.
baselineDaysNoRolling RVOL baseline window, in trading rows (same-session days). Default 30; values outside 20-250 are clamped. This is the DENOMINATOR window: every RVOL in the response is that period's volume divided by the average of the trailing N same-session (or same-cutoff) days, excluding the day itself. A SHORTER window tracks recent regime changes faster and is noisier; a LONGER one is smoother and slower to react. The warm-up lookback scales with it automatically, so a wide window is never under-filled into an inflated ratio; the minimum-warm-days gate (20 prior sessions) does NOT scale down, so at the 30-row default a ticker needs 20 of its last 30 sessions populated before rvol is non-null. Omit for the standard 30-day baseline; pass 90 for the pre-2026-09 window.
maxMarketCapNoMaximum market cap in USD (e.g. 500000000 for sub-$500M).
minMarketCapNoMinimum market cap in USD (market_cap_computed = price × shares outstanding).
includeNoHistoryNoAlso return the cohort minRvol structurally hides: tickers with NO computable RVOL. Two kinds, told apart by each row's "baselineState" — "no-history" (a new listing with no prior trading history at all, so RVOL is meaningless rather than merely missing; e.g. a stock that printed 20M shares on its first-ever session) and "no-cutoff-history" (an established ticker that simply never traded at this cutoff before — a genuine wake-up). Both come back with rvol=null and are ALWAYS ranked BELOW every real-RVOL row, ordered among themselves by "advRatio". Use "advRatio" (volume ÷ trailing 30-session average FULL-DAY volume, null when no full-day denominator exists) and "advDays" (its sample size) to size them — it is NOT an RVOL and is not comparable to one. Inert unless minRvol is set. Default false.
minSessionVolumeNoMinimum RVOL NUMERATOR in shares — the scanned session's own volume. Answers "did enough actually trade to be worth acting on?", where minBaselineVolume answers "is the comparison meaningful at all?". USE BOTH IF YOU MEAN BOTH: neither subsumes the other (a 1,000-share floor here cuts thin-baseline rows from ~26% to ~3%, yet a name with an 860-share baseline and 11.8M shares traded passes this and fails a baseline floor).
includeUnscreenedNoAlso return rows that could not be RATED against the price / market-cap / float bounds above, because company_screener_data holds no value for them — typically a symbol renamed or listed within the last day (the source is an FMP screener that lags a rename by ~a day). Each such row carries "unscreenedFilters" naming the families that could not be applied, and the matching value field is null. READ THAT AS NOT MEASURED — never as "matched" or "did not match". Default false, in which case those rows are excluded from "rows" but are STILL reported in meta.unscreened (count / columns / tickers), so they are never silently dropped. Inert unless a price, market-cap or float filter is supplied.
minBaselineVolumeNoMinimum RVOL DENOMINATOR in shares. Drops rows whose "baselineVolume" is below it, plus every row that has no baseline at all. This is the direct fix for a huge RVOL computed against a near-zero baseline (e.g. 102 shares ÷ a 1.2-share baseline = 87x on a $10B company that just does not trade at 04:30). Try 200 to match the "baselineThin" flag, or higher for a stricter screen. Does NOT change any RVOL — it only removes rows. Note it also excludes the includeNoHistory cohort, which by definition has no denominator.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.8/5.0
Behavior5/5

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

The readOnlyHint annotation already signals safety, and the description adds substantially more: future or non-trading dates return an empty list with a reason rather than an error, unscreened rows are never silently dropped, asOfTime requests that cannot be honored are exposed via meta fields, and baselineThin is explained as a real analytical trap rather than a number. 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 long, but the tool is complex with 17 parameters and many edge cases, so the density is mostly earned. It is front-loaded with the core purpose and then organized around operational caveats. The statistical color about asOfTime basis effects is helpful but slightly over-elaborate, costing one point.

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?

The description covers empty-date behavior, response meta fields, unscreened-row semantics, baseline calculations, and charging implications. Although an output schema exists, the description still explains the meaning of baselineState, advRatio, baselineVolume, and unscreenedFilters in a way that is necessary for correct interpretation. Nothing needed to invoke the 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 individual parameters are already documented in the schema. The description adds genuine cross-parameter value: minBaselineVolume and minSessionVolume are complementary rather than redundant, includeNoHistory is inert unless minRvol is set, and asOfTime is linked to the baselineThin effect. This goes beyond simply restating property 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 identifies a specific action and resource: a historical market-wide premarket scan for a single past trade date, returning tickers with session volume and RVOL versus a trailing 30-day baseline. It also explicitly differentiates itself from get_rvol_history by contrasting whole-market/one-date versus one-ticker/many-dates.

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?

Use cases are explicit, including a concrete backtest example like sub-$500M tickers with premarket RVOL > 5 on a given date. It names the key alternative get_rvol_history and gives the exact condition for choosing between them, and it clarifies date-handling behavior for future or non-trading dates.

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

get_premarket_scannerGet Premarket ScannerA
Read-only
Inspect

Get the live premarket scanner board — the top premarket gainers and losers by absolute gap %, each row enriched with rvol, marketCap, floatShares, short interest, dilution, and news/catalyst flags. Off-hours it falls back to the last session. Use for premarket small-cap runner discovery. Set includePennyStocks=true to include sub-$1 names (separate cache slot). During the 04:00–09:30 ET premarket window rows also carry two LIVE volume metrics off the same live cumulative-volume numerator — they are DIFFERENT quantities and must not be substituted for each other or for "rvol": "liveRvol" = live cumulative premarket volume ÷ the trailing 30-session average cumulative volume AT THE SAME TIME OF MORNING (answers "is it busy for 08:00?"), with "liveRvolAsOf" giving the 15-minute ET grid cutoff that baseline came from — compare it to meta.asOf (when the live volume was sampled) to judge the small numerator/denominator time skew; and "premarketPaceRatio" = the same live volume ÷ the trailing 30-session average FULL premarket session (answers "what fraction of a typical entire premarket has it already done?", >1.0 = it already beat a normal premarket before the open). Both are null outside the premarket window or until the baseline is warm — never a fabricated ratio. Set universe="lowfloat" for the separate LOW-FLOAT board (float under 10M shares, no top-100 slice) instead of the default movers-derived board; that board is served from the aggregator snapshot and returns an empty rows array with a meta.reason when no snapshot is currently published (a normal off-hours state, not an error). Charged per your API tier.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort key for the low-float board: "gap" (default) or "rvol". Ignored for universe="default", which is always gap-ranked.
universeNoWhich board to return. "default" (the default) is the movers-derived top-100 board. "lowfloat" is the low-float board (float < 10M shares, no top-100 slice).
includePennyStocksNoInclude sub-$1 (penny) stocks in the results. Default false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses many important behaviors: off-hours fallback to the last session, the distinct liveRvol vs premarketPaceRatio semantics and their time-skew caveat, null values outside the premarket window until baseline is warm, and the low-float board returning empty rows with meta.reason as a normal state. It even warns the two live metrics are DIFFERENT quantities and must not be substituted for each other or for rvol.

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 densely packed and well structured: purpose first, then usage, then parameter-specific guidance, then the nuanced live-volume metrics, then the low-float board behavior. Every sentence carries operational information an agent needs to avoid misusing the tool, especially the distinction between liveRvol and premarketPaceRatio. No filler or tautology.

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

Completeness5/5

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

Given the tool's complexity, the description is complete: it explains the board's contents, fallback behavior, parameter effects, cache behavior, empty-result semantics, output fields like liveRvolAsOf and meta.asOf, and pricing implications. The existence of an output schema covers return structures, and the description still provides the key interpretive context needed to call the tool correctly.

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 already covers all three parameters at 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema: includePennyStocks uses a separate cache slot, universe='lowfloat' is served from the aggregator snapshot and may return empty rows with meta.reason, and sort is ignored for universe='default'. This gives the agent a richer understanding of parameter behavior than the 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?

The description states a specific verb and resource: 'Get the live premarket scanner board — the top premarket gainers and losers by absolute gap %'. It also details what each row contains (rvol, marketCap, short interest, etc.), making the tool's function unmistakable. The word 'live' and the board-oriented framing distinguish it from sibling tools like get_premarket_scan_history.

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 explicitly says 'Use for premarket small-cap runner discovery' and explains when special settings apply, such as includePennyStocks for sub-$1 names and universe='lowfloat' for the low-float board. It also notes the off-hours fallback behavior and that an empty low-float board is a normal state, giving clear operating context. It does not explicitly name alternatives or when-not-to-use cases, but the usage guidance is strong.

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

get_price_targetGet Price TargetA
Read-only
Inspect

Get analyst price target data for a ticker. By default returns the consensus / split-adjusted average price target. Set list=true to return the full per-analyst list of individual price targets instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
listNofalse/omitted = consensus price target; true = per-analyst price-target list
limitNoMaximum results when list=true (default: 50, max: 100). Ignored for consensus.
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.8/5.0
Behavior5/5

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

The description complements the readOnlyHint annotation by detailing the output: consensus or per-analyst list, split-adjusted data, and behavior of the 'list' and 'limit' parameters. 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?

Two concise sentences that front-load the purpose and immediately explain the key behavioral toggle. No extraneous 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?

For a tool with three parameters and an output schema, the description covers all necessary aspects: purpose, default vs alternative mode, parameter roles, and edge cases (limit ignored for consensus). Fully adequate.

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?

All parameters have schema descriptions, and the description adds meaningful context: explains 'list' mode distinction, default limit for list, and that 'limit' is ignored for consensus. Goes beyond the 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?

The description clearly states the tool retrieves analyst price target data for a given ticker, specifying it returns consensus or a per-analyst list. This distinguishes it from sibling tools that handle other analyst data (e.g., earnings, estimates, grades).

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

Usage Guidelines4/5

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

The description explains the default behavior (consensus) and how to get individual targets via 'list=true'. It provides clear parameter guidance but does not explicitly mention when not to use this tool or suggest alternatives among siblings.

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

get_quoteGet Stock QuoteA
Read-only
Inspect

Get the current stock quote for a company including price, volume, change, market cap, and other real-time market data. Use this when a user asks about a stock's current price or trading activity. Always includes halted/haltCode/haltReason/haltedAt/resumptionAt trading-halt fields (false/null when trading normally); a halted ticker returns the last-known quote instead of an error, or currentPrice:null + halted:true when nothing is recoverable.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.4/5.0
Behavior5/5

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

The description discloses important behavioral traits beyond annotations, such as the inclusion of trading-halt fields and the fallback behavior for halted tickers (returning last-known quote or currentPrice:null + halted:true). This exceeds the readOnlyHint annotation.

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 four sentences with the main purpose front-loaded. It efficiently covers key behaviors without unnecessary repetition. Could be slightly more streamlined but is well-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?

Given the single required parameter and the presence of an output schema, the description fully covers what the tool does, including edge cases (halted tickers). No additional behavioral context is needed.

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 the description does not add significant meaning beyond the schema's description of the 'ticker' parameter. The baseline of 3 is appropriate as the parameter is well-defined in 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 it gets a current stock quote with specific data fields (price, volume, change, market cap). The verb 'Get' and resource 'stock quote' are specific, and the inclusion of trading-halt fields distinguishes it from other financial tools in the sibling list.

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 usage guidance: 'Use this when a user asks about a stock's current price or trading activity.' It does not explicitly say when not to use it, but the sibling context provides differentiation.

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

get_recent_congressional_votesGet Recent Congressional VotesA
Read-only
Inspect

Get recent congressional roll-call votes across all members, sourced from GovTrack (both chambers as available — currently Senate-heavy). Each vote includes member, bill info, position, and result.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 50, max: 100)
offsetNoPagination offset (default: 0)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true. The description adds valuable behavioral context: data source (GovTrack), current Senate-heavy bias, and what each vote includes. 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?

Two sentences, efficient and front-loaded with key info. 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?

Tool has simple parameters, output schema exists, annotations present. Description covers purpose, data source, content, and current limitations, making it 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?

Input schema has 100% coverage with descriptions for limit and offset. The description does not add new parameter meaning beyond schema, so baseline 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 retrieves recent congressional roll-call votes, specifying data source (GovTrack), chambers, and content. It distinguishes from siblings like get_politician_votes and get_legislative_calendar.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as get_politician_votes or get_legislative_calendar. The description does not provide usage context or exclusions.

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

get_recently_sponsored_billsGet Recently Sponsored Bills (Cross-Politician)A
Read-only
Inspect

Get the most recently introduced bills across all congressional sponsors. Each bill includes the sponsor block (bioguideId, fullName, party, state, politicianSlug) so persona agents can link directly to the sponsor detail page. politicianSlug is null when the sponsor is no longer in the active roster (typically ex-members). Requires CONGRESS_API_KEY on the backend.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum bills to return (default: 10, max: 50)
offsetNoPagination offset (default: 0)
congressNoCongress number to filter (default: 119 for current session)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.1/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description discloses that politicianSlug is null for ex-members and that an API key is required, adding behavioral 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 relatively concise but the first sentence is somewhat dense, mixing purpose and data structure. Could be slightly more streamlined.

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 output schema exists and the description covers prerequisites, null behavior, and basic purpose, it is sufficiently complete for a 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 coverage is 100%, so the description adds little beyond the schema. It repeats default values, which is acceptable but not additive.

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 retrieves the most recently introduced bills across all congressional sponsors, which is specific and distinct from sibling tools.

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

Usage Guidelines4/5

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

It mentions the prerequisite of CONGRESS_API_KEY, providing some guidance, but does not explicitly compare to alternatives or state when not to use.

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

get_recent_material_filingsGet Recent Material FilingsA
Read-only
Inspect

Recent material 8-K filings (last 7 days) for the constituents of an index universe. By default returns the high-signal 8-K item codes (material agreements, M&A, executive changes, restructurings, etc.); pass items to filter to specific 8-K item codes. Choose the universe with universe.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsNoOptional 8-K item codes (e.g. ["1.01","2.01"])
limitNoOptional max rows (1–100, default 50)
universeNoIndex universe to scan (sp500, ndx, or dji).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true. The description adds behavioral details: time window (7 days), default high-signal item codes, and filtering options. It could mention default universe behavior but overall adds value.

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, then parameter usage. Every sentence earns its place with zero waste.

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 time window, content type, default filtering, and parameter options. Output schema exists so return format is covered. Minor gap: default universe if not specified is not mentioned.

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 adds minimal context beyond schema: 'pass items to filter' and 'choose the universe'. It doesn't provide additional constraints or examples.

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 retrieves recent material 8-K filings (last 7 days) for index universe constituents, distinguishing it from sibling filing tools like get_filing_calendar which cover broader filing types.

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

Usage Guidelines4/5

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

The description explains when to use (to get high-signal 8-K filings for an index) and how to customize via items and universe. It lacks explicit when-not-to-use guidance, but the context is clear among siblings.

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

get_recent_uplistingsGet Recent UplistingsA
Read-only
Inspect

Get OTC-to-exchange uplistings that FINRA recorded on a given US market day, for companies under a market-cap ceiling. Each row carries the old OTC symbol, the resolved new exchange symbol (or null), a confirmed flag, the destination venue (NASDAQ / NYSE / NYSE American / ARCA), company name, effective date, market cap and float in SHARES. 🔴 THIS IS A SAME-DAY READ AND THERE IS NO FORWARD-LOOKING VERSION. FINRA records an uplisting at roughly 01:45 ET ON the day it becomes effective, and the source table has no scheduled/announced column at all. So there is nothing to publish the night before, and dayOffset exists for catch-up reads of past days, NOT for forecasting — a positive offset returns nothing. Never frame these as upcoming, tomorrow, or expected; they have already happened. 🔴 newSymbol: null IS A FIRST-CLASS PUBLISHED STATE, NOT A MISSING FIELD. FINRA's row names only the OLD OTC symbol; the new ticker is resolved by company-name match against Nasdaq SymDir and sometimes cannot be resolved. A guessed or wrong ticker would name a company that did not uplist, so an unresolved row is published naming the OLD symbol and saying the new one was not resolved. DO NOT infer, guess, look up, or fill in a null newSymbol, and do not drop the row. confirmed: false means the symbol resolution is PROVISIONAL — render it as provisional, keep it out of any headline, and do not assert the new ticker as fact. Only confirmed: true is a confirmed resolution. 🔴 capUnknownCount IS A WITHHOLDING COUNT, NOT A ZERO — rows that cleared every other filter but have NO measured market cap, so they cannot be asserted to sit under the stated ceiling. It does not mean those companies have no cap. Disclose the count if you publish a cap-bracketed framing. AN EMPTY uplistings ARRAY IS THE NORMAL, EXPECTED RESULT ON MOST DAYS — uplistings run roughly 6.6 per month across ALL market caps, so the large majority of days genuinely have none. It is NOT an error, NOT an outage, and NOT evidence that uplisting activity has stopped. Publish nothing rather than publishing an empty-list framing.

ParametersJSON Schema
NameRequiredDescriptionDefault
dayOffsetNoDay offset from the US market day (default 0 = today). Negative values read past days. A positive value returns nothing — there is no forward-looking uplisting data.
maxMarketCapNoExclusive market-cap ceiling in USD (default 300000000). Rows with NO measured market cap are excluded and counted in capUnknownCount, never assumed to be under the ceiling.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only state readOnlyHint=true. The description adds substantial behavioral context: FINRA records around 01:45 ET, there is no scheduled/announced column, newSymbol:null is a first-class published state that must not be guessed, confirmed:false is provisional, capUnknownCount is a withholding count, and an empty array is normal. These go well beyond the annotation and prevent serious misinterpretation.

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 and heavily emphasized, but every section targets a real operational pitfall, and the structure front-loads the core purpose before the warnings. Some redundancy with the schema and internal repetition exist, but the density is justified by the number of edge cases an agent could get wrong.

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 output schema exists and annotations are minimal, the description fully compensates by explaining the dangerous output states: null newSymbol, provisional confirmed:false, capUnknownCount as a withholding count, and the expected empty-array case. It covers the operational ambiguities an agent needs to correctly interpret and publish results.

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

Parameters3/5

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

Schema description coverage is 100%, and the description mostly restates what the schema already communicates about dayOffset and maxMarketCap (positive offset returns nothing, rows without measured market cap are counted in capUnknownCount). It does add emphasis about not using dayOffset for forecasting, but this is not net-new semantic 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 opens with a specific verb and resource: 'Get OTC-to-exchange uplistings that FINRA recorded on a given US market day, for companies under a market-cap ceiling.' It clearly identifies the data source, the scope, and the filtering dimension, and it differentiates the tool from the many get_* siblings by its unique subject matter (uplistings) and same-day read nature.

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 this is a same-day read, that no forward-looking version exists, and that dayOffset is for catch-up reads only, with positive offsets returning nothing. It also instructs the agent never to frame results as upcoming or expected and to treat an empty array as a normal outcome rather than an error. This is 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_rvol_historyGet RVOL HistoryA
Read-only
Inspect

Get the per-day relative-volume (RVOL) time series for a ticker, bucketed by trading session (premarket 04:00–09:30 ET, regular 09:30–16:00, afterhours 16:00–20:00, or all four). Each day's RVOL compares that session's volume to a trailing same-session baseline (30 trading days by default — configurable via "baselineDays"), so premarket volume is judged against premarket history (not a stale full-day figure). Use for spotting unusual premarket / session volume surges over the last N days. Each point also carries "baselineState" — "ready" (rvol is populated), "warming" (baseline not yet warm), "no-cutoff-history" (established ticker that never traded at this session/cutoff before) or "no-history" (new listing, no prior trading history at all) — so a null rvol is explained rather than silent. Points additionally carry "advRatio" (that day's volume ÷ the trailing 30-session average FULL-DAY volume, null when no full-day denominator exists) and "advDays" (its sample size), which give a magnitude to points RVOL cannot rate. advRatio is NOT an RVOL — it compares a partial session to a whole day, so it is typically well under 1 and must not be compared to rvol. Charged per your API tier.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of trailing calendar days of history (1–90, default 30).
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")
sessionNoRestrict to one session bucket; omit to return all four sessions.
asOfTimeNoOptional TRUE time-of-day premarket basis. Any HH:MM ET premarket time; snapped to the nearest 15-minute grid cutoff (04:00–09:15, ties resolve to the earlier cutoff). When set, the series is the PREMARKET as-of RVOL: cumulative volume known BY that cutoff ÷ the trailing baselineDays (default 30) average of the SAME cutoff (not the full 04:00–09:30 session). Forces the premarket session — any "session" argument is ignored. Each point carries a "basis" field: the snapped cutoff actually used ("asof-0700"), or "full-session" for dates with no precomputed as-of row. Omit for the standard full-session series.
baselineDaysNoRolling RVOL baseline window, in trading rows (same-session days). Default 30; values outside 20-250 are clamped. This is the DENOMINATOR window: every RVOL in the response is that period's volume divided by the average of the trailing N same-session (or same-cutoff) days, excluding the day itself. A SHORTER window tracks recent regime changes faster and is noisier; a LONGER one is smoother and slower to react. The warm-up lookback scales with it automatically, so a wide window is never under-filled into an inflated ratio; the minimum-warm-days gate (20 prior sessions) does NOT scale down, so at the 30-row default a ticker needs 20 of its last 30 sessions populated before rvol is non-null. Omit for the standard 30-day baseline; pass 90 for the pre-2026-09 window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark it read-only, but the description adds substantial behavioral detail: how RVOL is computed, the baselineState values that explain nulls, the warning that advRatio is NOT an RVOL and must not be compared to rvol, the asOfTime cutoff snapping and its effect on session, and the baselineDays warm-up behavior. This far exceeds the annotation and gives an agent complete understanding of what the output means and how calls behave.

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

Conciseness4/5

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

The description is long but every sentence adds functional value. It front-loads the core purpose, then explains state fields and parameter nuances. There is minimal redundancy; the only slight criticism is that it could be tightened, but given the tool's complexity, the length is justified.

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?

The description fully explains all parameters, the output's state fields, the meaning of advRatio, and the asOfTime edge cases. With a rich output schema also present, an agent has everything needed to call the tool correctly and interpret results without guessing. No gaps identified.

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%, so the baseline is 3, but the description adds significant extra meaning for every parameter. For asOfTime it explains the snapping grid, the 'basis' field, and that it forces premarket. For baselineDays it explains clamping, the denominator window, warm-up scaling, and the minimum-warm-days gate. For session it clarifies that asOfTime overrides it. The description compensates richly 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?

The description clearly states the tool returns a per-day relative-volume (RVOL) time series for a ticker, bucketed by trading session. It uses a specific verb and resource, and explicitly lists the session buckets and the key purpose ('spotting unusual premarket / session volume surges'). It distinguishes this tool from generic price or volume tools by the RVOL and session-bucketing 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 a clear use case ('Use for spotting unusual premarket / session volume surges over the last N days.') and explains the rolling baseline and session-specific comparison. It does not explicitly name alternatives or say when not to use it, but for this niche tool the guidance is strong enough for an agent to decide when it is appropriate.

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

get_senate_trades_by_tickerGet Senate Trades by TickerA
Read-only
Inspect

Reverse lookup — find which politicians recently traded a given TICKER. Returns recent STOCK Act disclosures for that symbol with politician info, transaction type, and amount.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 50, max: 100)
offsetNoPagination offset (default: 0)
tickerYesStock ticker symbol (e.g., "AAPL", "NVDA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint: true. The description adds behavioral context by stating it returns 'recent STOCK Act disclosures' with specific fields, which is helpful beyond the annotation. 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?

Two sentences with zero waste. First sentence is the core action, second explains output. Front-loaded and 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?

With output schema present and annotations covering read-only, the description is complete. It explains the purpose, what it returns, and the key parameter. 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% with all parameters described. The description mentions 'given TICKER' matching the ticker parameter, but adds no additional semantics beyond what the schema provides. Baseline 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 'Reverse lookup — find which politicians recently traded a given TICKER' with a specific verb and resource. It distinguishes from siblings like get_politician_recent_trades by being parameterized by ticker rather than politician.

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 context ('Reverse lookup') implying use when you have a ticker and want politicians, but does not explicitly mention alternatives or when not to use. It is sufficient for an agent to infer the typical use case.

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

get_short_interestGet Short InterestA
Read-only
Inspect

Get short interest data for a company including short volume, short ratio, days to cover, and short percent of float. Use when analyzing bearish sentiment or potential short squeeze setups.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true, so the description's job is to add behavioral context. It lists the returned data fields but does not disclose potential limitations like rate limits, data recency, or pagination. For a simple read tool, this is adequate but not 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?

The description consists of two sentences that are concise and front-loaded. It immediately states the core action and then provides usage context, with no unnecessary 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?

Given the output schema exists (though not shown), the description adequately explains what data is returned. For a single-parameter tool with clear annotations, the description is sufficiently complete to guide 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?

The input schema already fully describes the only parameter (ticker) with 100% coverage. The description does not add any additional meaning or constraints beyond what is in the schema, so the 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 retrieves short interest data and lists specific data points (short volume, short ratio, days to cover, short percent of float). This distinguishes it from sibling tools like get_float or get_analyst_consensus.

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 explicitly advises use when analyzing bearish sentiment or short squeeze setups, providing clear context. It does not specify when not to use it or mention alternative tools, but the guidance is sufficient for a focused tool.

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

get_split_historyGet Stock Split HistoryA
Read-only
Inspect

Get stock split history for a company including forward and reverse splits with dates, ratios, type classification, and cumulative 2-year reverse split ratio. Relevant for NASDAQ/NYSE minimum bid-price compliance (1:250 cumulative reverse-split cap). IMPORTANT: cumulativeReverseSplitRatio2yr is null when it CANNOT BE STATED, which is NOT the same as no reverse splits — read cumulativeWithheldReason to tell them apart. unconfirmed_splits_in_window means at least one in-window reverse split is evidenced by only one source, so no cumulative is defensible: the confirmed splits alone would understate it, and understating a cumulative can put an issuer that breaches the 1:250 cap under it. Each row also carries confirmed; a confirmed: false split appears only in the announcement calendar, which retains every announcement and retracts none, so it is usually an amended or superseded announcement and occasionally a real split the effected-splits ledger missed. Both are returned. ratioDisplay and type are likewise null for a ratio whose exact factor cannot be determined.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., AAPL, TSLA)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.4/5.0
Behavior5/5

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

The description goes far beyond the readOnlyHint annotation by disclosing important null semantics, the distinction between null and no reverse splits, the handling of unconfirmed splits, and the retention of superseded announcements. This is rich behavioral context that an agent needs to interpret results correctly.

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 the core purpose and then provides substantial caveats that are necessary for correct interpretation. It is dense but not padded; however, the heavy block of caveats could be structured more clearly for an agent to parse quickly.

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 single-parameter, read-only tool with an output schema available, the description is complete enough. It covers the returned split types, null conditions, annotation-calendar behavior, and the compliance context, so an agent has sufficient guidance 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 fully describes the only parameter, ticker, with 100% coverage, so the description does not need to add parameter-level detail. The baseline of 3 is appropriate because the description adds no extra semantics for the input parameter itself, though this is acceptable given the schema completeness.

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 stock split history for a company,' and enumerates concrete contents (dates, ratios, type classification, cumulative ratio). It is inherently distinct from sibling tools like get_upcoming_reverse_splits, which target future events rather than historical records.

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 context for when this tool is relevant: NASDAQ/NYSE minimum bid-price compliance and the 1:250 cumulative reverse-split cap. It does not explicitly name alternatives or state when not to use it, but the 'history' framing plus sibling names makes the intended use reasonably obvious.

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

get_stock_price_changeGet Stock Price ChangeA
Read-only
Inspect

Get percentage price changes for a stock across multiple timeframes: 1D, 5D, 1M, 3M, 6M, YTD, 1Y, 3Y, 5Y, 10Y, and MAX. Use this for quick "how much is it up/down" answers without fetching full candle data.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.5/5.0
Behavior4/5

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

Description details the behavior: returns percentage changes for 11 timeframes. Annotations provide readOnlyHint=true, which is consistent. The description adds specific timeframe info 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 concise sentences with no filler. Front-loaded with primary purpose, then usage guidance.

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

Completeness5/5

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

For a simple tool with one parameter, output schema exists, annotations are provided, and the description covers purpose, usage, and behavior completely. 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 description coverage is 100% for the single parameter 'ticker'. The description does not add additional semantic information beyond the schema, but the schema is sufficient.

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 verb+resource: 'Get percentage price changes for a stock across multiple timeframes.' It lists specific timeframes, distinguishing it from similar tools like get_historical_prices or get_quote.

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 guidance: 'Use this for quick "how much is it up/down" answers without fetching full candle data.' This tells when to use and implies alternatives (fetching full candle data via other tools).

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

get_top_moversGet Top Market MoversA
Read-only
Inspect

Top stock movers — gainers (largest % up), losers (largest % down), or active (highest volume). Optional session window (premarket / regular / afterhours; regular default; not supported for active). Optional date (YYYY-MM-DD) returns a PAST trade date's gainers/losers on a historical daily close-to-close basis (computed from split-adjusted daily bars, NOT intraday) — session is rejected when date is set, date is not supported for direction=active, and a non-trade date (weekend/holiday) returns an empty list (not an error). Penny-stock artifacts are filtered by default — set includePennyStocks to include sub-$1 movers.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoOptional past trade date (YYYY-MM-DD). When set, returns that day's top gainers/losers computed on a historical daily close-to-close basis from split-adjusted daily bars (NOT intraday, NOT session-specific). Rejected with 400 when combined with a non-regular session or with direction="active"; a future or malformed date is also 400. A weekend/holiday date returns an empty list, not an error.
limitNoOptional max rows (1–100). Backend default applied when omitted.
sessionNoSession window: premarket (4:00–9:30 AM ET), regular (RTH close-to-close, default), afterhours (4:00–8:00 PM ET). Live-only — rejected (400) when combined with date.regular
directionYesMover direction: gainers, losers, or active (volume)
includePennyStocksNoLoosen penny-stock artifact guards. Default false enforces prev_close >= $1 and a $1M dollar-volume floor. Set true to allow sub-$1 movers (prev_close >= $0.10, no dollar-volume floor). The ABS(change_pct) <= 500 cap applies in both modes.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.4/5.0
Behavior5/5

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

The description thoroughly discloses behaviors beyond the readOnlyHint annotation: historical returns are close-to-close and not intraday, non-trade dates yield empty lists, penny-stock filtering thresholds, and rejection combinations. 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.

Conciseness3/5

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

The description is comprehensive but somewhat lengthy and dense. It front-loads the main purpose but includes many conditional details that could be streamlined. A more concise structure would improve readability.

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?

An output schema exists, so return values are likely documented there. The description covers most behavioral aspects and edge cases, leaving few gaps. It provides sufficient context for an AI agent to understand usage.

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 baseline is 3. The description adds value by explaining nuances like default session, date restrictions, and the penny-stock filtering logic, going 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 identifies the tool's purpose: returning top stock movers categorized by gainers, losers, or active (volume). It specifies the resource (top movers) and the action (get), distinguishing it from sibling tools that cover other market data.

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

Usage Guidelines4/5

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

The description explains when to use optional parameters (session, date, includePennyStocks) and the constraints of each. However, it does not explicitly compare to sibling tools or state when to prefer this tool over alternatives.

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

get_trading_haltsGet Active Trading HaltsA
Read-only
Inspect

List currently-active trading halts across NASDAQ/NYSE/AMEX (from the consolidated Nasdaq Trader halt feed). Each halt includes ticker, market, haltCode (T1/T2/T12/LUDP/H10/...), human-readable reason, haltedAt, and the scheduled resumptionAt when one is set. An EMPTY list is a normal state (no active halts right now), not an error. Halts are tradeable catalysts — use this to discover halted names, then get_quote for the frozen last price.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses behavior beyond the readOnlyHint annotation: it lists what fields are returned (ticker, market, haltCode, human-readable reason, haltedAt, scheduled resumptionAt), and clarifies that an empty list is a normal state, not an error.

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: purpose and scope, field details, and usage hint. Every sentence provides value without redundancy. Front-loaded with the core action and scope.

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 and the presence of an output schema (implied), the description covers all needed info: what is returned, the normal state, and a usage tip integrating with a sibling tool. 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?

The input schema has zero parameters, so the baseline is 4. The description adds implicit meaning: it returns all active halts with no filtering, which is clear from context.

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

Purpose5/5

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

The description specifies the action 'List', resource 'currently-active trading halts', and the exchanges 'NASDAQ/NYSE/AMEX', directly from the 'consolidated Nasdaq Trader halt feed'. It distinguishes from siblings by mentioning 'use this to discover halted names, then get_quote for the frozen last price'.

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 explicitly advises when to use this tool: 'Halts are tradeable catalysts — use this to discover halted names, then get_quote for the frozen last price.' It provides a follow-up action but does not explicitly state 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.

get_upcoming_reverse_splitsGet Upcoming Reverse SplitsA
Read-only
Inspect

Get reverse stock splits SCHEDULED to take effect within a day-offset window of the current US market day, for companies under a market-cap ceiling. Offsets are days from today on the US market calendar: fromOffset=1, toOffset=1 is tomorrow; fromOffset=1, toOffset=7 is the week ahead. Each row carries the ticker, company name, the exact vendor integers (splitFrom/splitTo), a pre-rendered ratio ("1-for-20"), the effective date, market cap, float in SHARES, and price. WHAT THIS IS: rows are splits scheduled AS OF NOW — not a guarantee that every split effective in the window is already known. The underlying stock_splits table has NO created_at column, so there is no way to measure when a row first appeared, and a split announced later will simply be missing. Describe results as "scheduled as of now", NEVER as "all of" or "every" reverse split. A scheduled split can also be postponed or cancelled after it is announced. 🔴 capUnknownCount IS A WITHHOLDING COUNT, NOT A ZERO. It counts rows that passed every other filter and were DELIBERATELY EXCLUDED because Signal8 has no measured market cap for them — typically real OTC microcaps. It does NOT mean those companies have no dilution, no split, or no cap; it means the cap was not measured, so they cannot be asserted to sit under the stated ceiling. If you publish a "under $Xm" framing and capUnknownCount is above zero, say that N further companies were withheld for unmeasured market cap — do not present the list as complete and do not describe the withheld rows at all. Funds, ETFs and sub-1.5x fractional ratio adjustments are already removed server-side; do not re-filter or re-derive the ratio. AN EMPTY splits ARRAY IS A NORMAL, COMMON RESULT — most single weekdays have no sub-cap reverse split scheduled at all. It is NOT an error, NOT a failure, and NOT evidence that reverse-split activity has stopped. Publish nothing rather than publishing an empty-list framing.

ParametersJSON Schema
NameRequiredDescriptionDefault
toOffsetNoWindow end, inclusive, as a day offset from the US market day (default 1). Use 7 with fromOffset 1 for the week ahead.
fromOffsetNoWindow start as a day offset from the US market day (default 1 = tomorrow). Must be <= toOffset; an inverted window is rejected rather than silently returning an empty list.
maxMarketCapNoExclusive market-cap ceiling in USD (default 300000000). Rows with NO measured market cap are excluded and counted in capUnknownCount, never assumed to be under the ceiling.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.6/5.0
Behavior5/5

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

Even though readOnlyHint=true is annotated, the description adds substantial behavioral context: the source table has 'NO created_at', rows are not a guarantee, capUnknownCount is a 'WITHHOLDING COUNT, NOT A ZERO', and an empty array is a 'NORMAL, COMMON RESULT'. This goes far 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 front-loaded with a clear one-sentence purpose and uses headings/caps to organize warnings. It is long, but most length is justified by the tool's tricky semantics; a few points are restated for emphasis, 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?

With an output schema present, return-value details need not be re-explained. The description covers edge cases thoroughly: scheduling uncertainty, capUnknownCount meaning, server-side filtering, empty-array normality, and required output phrasing. Nothing an agent needs to invoke and interpret the 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 description adds value beyond the schema by explaining offset semantics with examples like 'fromOffset=1, toOffset=1 is tomorrow' and clarifying how capUnknownCount relates to maxMarketCap exclusions.

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?

States a specific verb and resource: 'Get reverse stock splits SCHEDULED to take effect within a day-offset window... under a market-cap ceiling.' The scope is unambiguous and the focus on scheduled reverse splits distinguishes it from historical or dilution-related siblings.

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

Usage Guidelines4/5

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

Provides strong usage context and explicit guardrails, such as 'Describe results as "scheduled as of now", NEVER as "all of" or "every"' and 'do not re-filter or re-derive the ratio.' It does not name an alternative tool, but the when/how guidance is clear.

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

get_volume_profileGet Volume ProfileA
Read-only
Inspect

Get volume distribution across price levels for a single trading day. Returns price buckets with volume, Point of Control (highest volume level), and Value Area (price range containing 70% of volume). Use for identifying support/resistance and high-volume price nodes.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesTrading day (YYYY-MM-DD)
tickerYesStock ticker symbol (e.g., "AAPL", "TSLA")
bucketSizeNoPrice bucket width in dollars (default $1.00)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description correctly adds context about what data is returned (price buckets, PoC, Value Area). It does not disclose any rate limits or constraints, but the read-only nature is clear.

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 essential. The first sentence states the core function, the second lists key outputs, and the third gives a use case. No redundant or unnecessary 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?

Despite not showing the output schema, the description sufficiently covers the tool's purpose and returns. For a read-only data retrieval tool with full parameter documentation, this is 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%, so parameters are already documented in the input schema. The description reinforces the bucketSize parameter by mentioning 'Price bucket width in dollars' but does not add significant new semantic meaning 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 explicitly states the verb (Get), resource (volume distribution across price levels), and scope (single trading day). It mentions key computed values (Point of Control, Value Area), which helps distinguish it from sibling tools like get_historical_prices or get_intraday_bars that provide raw price data.

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 usage context ('Use for identifying support/resistance and high-volume price nodes'). However, it does not explicitly state when not to use it or mention alternative tools for different timeframes or aggregation levels.

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

lookup_accession_numberLookup Accession NumberA
Read-only
Inspect

Look up a filing or exhibit by its SEC accession number. Supports both dashed format (e.g., "0001193125-22-010026") and compact 18-digit format. Returns filing metadata including company name, form type, filing date, and exhibit count. If the filing is in the local database, returns full metadata; if only found on SEC EDGAR, returns basic metadata with an isInDatabase: false flag.

ParametersJSON Schema
NameRequiredDescriptionDefault
accessionNumberYesSEC accession number in dashed (e.g., "0001193125-22-010026") or compact 18-digit format

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.5/5.0
Behavior4/5

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

The description adds behavioral context beyond the readOnlyHint annotation, detailing that the tool may return metadata from the local database or SEC EDGAR, including an isInDatabase flag. This aligns with and enhances the annotation.

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 with three focused sentences. Key information (purpose, format, expected outputs) is front-loaded, and every sentence adds value without 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 the presence of an output schema, the description does not need to detail return values. It thoroughly covers the tool's behavior, including how results differ based on data source, and provides clear metadata fields. Perfectly adequate for a single-parameter 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?

The schema covers the parameter description fully (100% coverage). The description adds meaningful context about the parameter, specifying both supported formats and the purpose of the accession number.

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 filings or exhibits by SEC accession number, using specific verbs and resource identification. It distinguishes itself from sibling search tools by focusing on direct lookup via a unique identifier.

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 explicitly explains when to use the tool (to look up a filing by accession number) and implies when not to use it (e.g., for general searching, use sibling tools). It provides format support details but does not name alternatives directly.

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

screen_companiesScreen CompaniesA
Read-only
Inspect

Screen companies by price range, volume, cash runway, float, shares outstanding, market cap, industry, listing exchange (NASDAQ/NYSE/AMEX), and float data source. Sort results by any sortable column. Returns matching companies with key metrics and pagination. Each row carries live trading-halt status (halted/haltCode/haltedAt; false/null when trading normally); pass excludeHalted=true to drop currently-halted tickers from the results.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results per page (default: 25, max: 100)
offsetNoOffset for pagination (default: 0)
sortByNoColumn to sort results by (default: volume)
countryNoCompany universe by issuer domicile: "US" (default), "CA" (Canadian companies via their US-OTC/US cross-listings), or "all"
exchangeNoFilter by listing exchange (exact match): NASDAQ, NYSE, or AMEX
industryNoFilter by company industry (exact match, e.g. "Biotechnology", "Software")
maxFloatNoMaximum computed public float (shares)
maxPriceNoMaximum latest price in USD
minFloatNoMinimum computed public float (shares)
minPriceNoMinimum latest price in USD
maxVolumeNoMaximum daily trading volume
minVolumeNoMinimum daily trading volume
sortOrderNoSort direction (default: desc)
floatSourceNoFilter by float data source
excludeHaltedNoWhen true, exclude tickers with a currently-active trading halt (regulatory or volatility) from the results. Default false — halted rows are included and carry halted/haltCode/haltedAt fields.
maxCashRunwayNoMaximum estimated months of cash remaining
minCashRunwayNoMinimum estimated months of cash remaining
maxMarketCapComputedNoMaximum market cap in USD (price * shares outstanding)
maxSharesOutstandingNoMaximum shares outstanding from SEC EDGAR
minMarketCapComputedNoMinimum market cap in USD (price * shares outstanding)
minSharesOutstandingNoMinimum shares outstanding from SEC EDGAR

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.4/5.0
Behavior4/5

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

The description adds behavioral context beyond the readOnlyHint annotation, such as the presence of trading-halt fields in results and the option to exclude halted tickers. It also mentions default pagination and sorting. 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 concise, with two main sentences covering purpose and details, plus a third for halt behavior. It front-loads the core function and uses an efficient structure.

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 high schema coverage and presence of an output schema, the description adequately covers the use case. It explains pagination, sorting, and halt filtering, which are critical for using the tool effectively. No major 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?

Schema coverage is 100%, so parameters are individually documented. The description adds value by summarizing the screening dimensions and highlighting the halt behavior, which is not evident from parameter descriptions alone. It groups related parameters conceptually.

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 screens companies by multiple criteria (price, volume, cash runway, etc.) and returns matching companies with key metrics and pagination. It distinguishes itself from sibling tools (e.g., get_company_profile, search_companies) by being a multi-filter screener.

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

Usage Guidelines4/5

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

The description explains when to use the tool (to filter companies by various financial and trading attributes) and provides details about controlling halt status and pagination. It does not explicitly state when not to use it or list alternatives, but the context is clear and the feature set is well-defined.

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

screen_must_raiseScreen Companies That Must Raise CapitalA
Read-only
Inspect

Find companies with imminent capital raise needs based on estimated cash runway. Defaults to companies with less than 6 months of cash remaining, sorted by urgency (lowest runway first). Useful for identifying distressed companies, imminent dilution situations, or potential financing catalysts. Runway is estimated from current burn rate.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 25, max: 100)
offsetNoOffset for pagination (default: 0)
industryNoFilter by company industry (exact match, e.g. "Biotechnology", "Software")
maxMonthsNoMaximum months of cash runway to filter by (default: 6)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true, and the description is consistent, describing a read-only screening operation. It adds details about default runway threshold (6 months), sorting by urgency, and estimation from burn rate, which go 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 with front-loaded purpose, then usage, then estimation method. No fluff, 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?

Description covers screening criteria, defaults, use cases, and estimation method. Pagination (limit/offset) is standard and not explained, but output schema exists, reducing need for return value details.

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 has 100% description coverage, so parameters are already documented. The description adds minor context (default maxMonths=6, sorting behavior) but does not significantly enhance understanding 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 finds companies with imminent capital raise needs based on estimated cash runway, with specific defaults and sorting. It distinguishes from sibling 'get_' tools that retrieve specific data points rather than screening.

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 use cases (distressed companies, dilution, catalysts) but does not explicitly state when not to use this tool or mention alternative tools. The context is clear but lacks exclusions.

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

screen_sec_filingsScreen SEC FilingsA
Read-only
Inspect

Screen SEC filings across all companies with company-level filters (sector, industry, market cap, exchange) combined with filing-level filters (form type, date range). Returns filings enriched with company metadata: ticker, sector, industry, exchange, market cap, and price. Use this to answer questions like "find all S-1 filings from biotech companies under $500M market cap" or "show me recent 8-K filings from Technology sector companies". This is the most powerful filing DISCOVERY tool for filings — use search_sec_filings only when you already know the specific CIK. This tool returns FILINGS, not a company universe: to enumerate or COUNT companies by market cap / price / float (e.g. "find all companies under $300M market cap"), use screen_companies instead — it supports minMarketCapComputed / maxMarketCapComputed and returns a real total COUNT.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-indexed, default: 1)
dateToNoEnd date filter (YYYY-MM-DD)
sectorNoFilter by sector (e.g., "Healthcare", "Technology", "Financial Services", "Energy")
sortByNoSort results by field (default: filing_date). Ties are broken by filing id, so a given page is stable and reproducible for a fixed corpus.
dateFromNoStart date filter (YYYY-MM-DD)
exchangeNoFilter by exchange (e.g., "NASDAQ", "NYSE", "AMEX")
industryNoFilter by industry (e.g., "Biotechnology", "Software - Application", "Oil & Gas E&P")
pageSizeNoResults per page (default: 25, max: 100)
formTypesNoComma-separated form types (e.g., "S-1", "10-K,10-Q", "8-K", "S-3,424B5")
sortOrderNoSort direction (default: desc). Note that paging is offset-based over a corpus that is continuously ingesting new filings, so when walking many pages of a broad date range, newly-arrived filings can shift rows between pages; page on a closed dateFrom/dateTo window if you need an exhaustive, non-overlapping traversal.
maxMarketCapNoMaximum market cap in USD (e.g., 500000000 for $500M)
minMarketCapNoMinimum market cap in USD (e.g., 1000000000 for $1B)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=true, and the description adds meaningful behavioral context: it returns filings enriched with company metadata, is described as the most powerful filing discovery tool, and explicitly warns that it returns FILINGS rather than a company universe. The schema also transparently documents the continuous-ingestion paging caveat, which helps an agent avoid non-exhaustive traversal.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then gives examples, then explicitly distinguishes sibling tools. Every sentence earns its place, and the length is justified by the number of routing and usage decisions an agent must make.

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 12 optional parameters, an existing output schema, and read-only annotations, the description covers filtering, enrichment, example use cases, sibling routing, and an important paging caveat. An agent has everything needed to invoke the tool correctly and avoid misusing it.

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 baseline is 3, but the description adds value by grouping parameters into company-level filters vs. filing-level filters and tying them to example queries. It also clarifies the market-cap distinction when recommending screen_companies. This is above baseline but still depends heavily on the schema for individual parameter details.

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 'Screen SEC filings across all companies...' and immediately specifies the verb, resource, and filter dimensions. It also explicitly contrasts itself with search_sec_filings and screen_companies, so an agent can disambiguate without opening either schema.

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 provides concrete use-case examples ('find all S-1 filings from biotech companies under $500M market cap') and gives explicit when-not-to-use guidance: use search_sec_filings when the CIK is already known, and use screen_companies when the goal is to enumerate or count companies by market cap. This is explicit routing with no ambiguity left to inference.

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

screen_sec_filings_performanceScreen SEC Filings PerformanceA
Read-only
Inspect

Analyze stock price performance after SEC filings. Returns individual filing records with pre-computed price returns at +1 day, +3 days, +7 days, and +30 days after the filing date, plus aggregate statistics (average, median, % negative, best, worst) across all matching filings. Combine company-level filters (sector, industry, market cap, exchange) with filing filters (form type, date range). Use this to answer questions like "how do biotech stocks perform after S-1 filings?" or "what is the average 7-day return after 8-K filings from companies under $500M market cap?".

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-indexed, default: 1)
dateToNoEnd date filter (YYYY-MM-DD)
sectorNoFilter by sector (e.g., "Healthcare", "Technology", "Financial Services")
sortByNoSort results by field (default: filing_date)
dateFromNoStart date filter (YYYY-MM-DD)
exchangeNoFilter by exchange (e.g., "NASDAQ", "NYSE", "AMEX")
industryNoFilter by industry (e.g., "Biotechnology", "Software - Application")
pageSizeNoResults per page (default: 25, max: 100)
formTypesNoComma-separated form types (e.g., "S-1", "10-K,10-Q", "8-K", "S-3,424B5")
sortOrderNoSort direction (default: desc)
maxMarketCapNoMaximum market cap in USD
minMarketCapNoMinimum market cap in USD

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, so no safety concern. Description adds that returns individual records with computed returns and aggregate stats. No contradictions. It could mention pagination behavior, but overall adequate.

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?

Description is a single paragraph but well-structured: purpose, outputs, filters, examples. Efficient, though could be slightly more concise. No wasted sentences.

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 output schema present, description covers purpose, returns, filters, and use cases comprehensively. For a complex tool with 12 parameters, this is complete and actionable.

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% with descriptions for all 12 parameters. Description adds context on filter combination and example values but does not significantly deepen understanding 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?

Description clearly states the tool analyzes stock price performance after SEC filings, returning pre-computed returns and aggregate statistics. It distinguishes from sibling tools like get_filing_calendar or screen_sec_filings by focusing on performance analysis rather than just listing filings.

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 explicit example questions ('how do biotech stocks perform after S-1 filings?') and describes how to combine company and filing filters. However, it does not explicitly state when not to use this tool or point to alternatives like screen_sec_filings for pure filing listing.

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

search_clinical_trialsSearch Clinical TrialsA
Read-only
Inspect

Search clinical trials market-wide (cross-company). Distinct from get_clinical_trials, which is scoped to a single ticker. Filter by phase, indication, sponsor, status, and date window; sort and paginate the results.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoEnd date (YYYY-MM-DD)
fromNoStart date (YYYY-MM-DD)
sortNoSort field
limitNoMaximum results to return (1-100, default: 50)
orderNoSort direction
phaseNoTrial phase filter (e.g., "Phase 3")
offsetNoOffset for pagination (default: 0)
statusNoTrial status filter
sponsorNoSponsor name filter
dateFieldNoDate field to filter/sort on
indicationNoCondition / indication filter

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true. Description adds useful behavioral details: filtering capabilities (phase, indication, sponsor, status, date window), sorting, pagination, and cross-company scope. 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?

Two sentences with front-loaded key differentiator. Every sentence adds value: purpose and sibling distinction, then capabilities. 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?

Given 11 parameters and output schema exists, description adequately covers key capabilities (filters, sort, pagination, scope). Return values are handled by output schema. Completeness is high.

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% with descriptions for all 11 parameters. Description reiterates filter categories and mentions sort/pagination but adds minimal new meaning beyond 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?

Description clearly states verb (Search), resource (clinical trials), and scope (market-wide cross-company). Explicitly distinguishes from sibling tool get_clinical_trials which is ticker-scoped.

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 explicit context for when to use (market-wide search) and when not (use get_clinical_trials for single ticker). Lists filter options but lacks explicit when-not-to-use beyond sibling distinction.

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

search_companiesSearch CompaniesA
Read-only
Inspect

Search for companies by name or ticker symbol in the Signal8 database. Returns matching companies with their ticker, name, CIK, and exchange. Use this as the first step to find a company before calling other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default: 10, max: 50)
queryYesSearch query - company name or ticker symbol (e.g., "Tesla", "TSLA")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, so the description does not need to reassert safety. The description adds minor behavioral context by noting the return fields, but does not disclose pagination behavior or error handling. Given the presence of annotations, this is adequate but not 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?

The description is two sentences, front-loaded with the primary purpose, and every word adds value. No redundancy or filler.

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

Completeness5/5

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

For a simple search tool with 2 parameters and an output schema, the description is complete. It covers the purpose, input, output, and usage context. The output schema handles return value documentation, so no additional explanation is needed.

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 covers 100% of parameters with descriptions. The description mentions 'name or ticker symbol' which aligns with the schema's query description, but adds no additional meaning beyond what the schema already provides. 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 clearly states the verb 'Search', the resource 'companies', and the input methods (name or ticker symbol). It also specifies the return fields (ticker, name, CIK, exchange) and positions the tool as a first step, distinguishing it from the many get_* sibling tools that require a company identifier.

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 explicitly says 'Use this as the first step to find a company before calling other tools,' providing clear when-to-use guidance. While it does not list explicit exclusions, the context of siblings implies that when a company identifier is already known, this tool may be skipped. This is sufficient for a simple lookup tool.

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

search_filing_textSearch Filing TextA
Read-only
Inspect

Full-text substring search across all SEC filing exhibit content. Returns matching snippets with context around each match. Powerful for finding specific clauses like "change of control", "anti-dilution", "right of first refusal", or any specific language across filings. Optionally filter by company (CIK), filing, accession number, or form type.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikNoFilter to a specific company by CIK number
limitNoMax results (default: 20, max: 100)
patternYesSearch pattern (minimum 2 characters). Substring match, case-insensitive.
filingIdNoFilter to a specific filing by internal ID
formTypeNoFilter by form type (e.g., "10-K", "S-1")
snippetLengthNoCharacters of context around each match (default: 200)
accessionNumberNoFilter to a specific filing by SEC accession number

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.2/5.0
Behavior4/5

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

The description notes it's a substring, case-insensitive search returning snippets with context. The readOnlyHint annotation is consistent, and no contradictions exist. It could mention performance characteristics (e.g., large result sets) but is adequate.

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 (3 sentences), front-loaded with the main function, and includes practical examples and optional filter summary. 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 the presence of an output schema, the description does not need to detail return values. It covers the search scope, filters, and basic behavior. Missing details about pattern length limits (min 2 chars) but schema covers that. Overall sufficient for a read-only search 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 baseline is 3. The description repeats schema info for parameters (e.g., pattern is case-insensitive, optional filters) but does not add significant new semantics. Examples of search clauses provide context but don't go beyond what the schema defines.

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 performs full-text substring search across SEC filing exhibit content and returns matching snippets. It distinguishes from siblings like search_sec_filings (metadata search) and get_exhibit_content (retrieve specific content) by focusing on text search within exhibits.

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 concrete examples of use cases (e.g., finding 'change of control' clauses) and lists optional filters. While it doesn't explicitly say when not to use alternatives, the context and examples make the intended use clear.

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

search_institutionsSearch Institutions by NameA
Read-only
Inspect

Search institutional investors (13F filers) by name. Returns matching institutions with CIK, name, AUM, holdings count, and latest filing period. Use this to find a specific fund or investment manager when you know part of their name (e.g., "Vanguard", "BlackRock", "Citadel"). Results are ranked by AUM descending.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesSearch term (min 2 characters, e.g., "Vanguard", "BlackRock")
limitNoMaximum results to return (default: 25, max: 100)
offsetNoOffset for pagination (default: 0)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.2/5.0
Behavior4/5

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

Describes ranking by AUM descending and return content. Annotations already declare readOnlyHint=true, so description adds 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 concise sentences; first defines action and returns, second provides usage guidance. No wasted 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?

With output schema present, description appropriately focuses on key fields and usage. Parameters fully described in schema. Could mention pagination, but not required.

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 3 parameters with descriptions. Description adds example values but no new constraints. 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?

Clearly states the action 'Search' and the resource 'institutional investors (13F filers)'. Lists returned fields and distinguishes from sibling tools like 'get_institutions' by focusing on name-based search.

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 advises when to use ('to find a specific fund or investment manager when you know part of their name') and provides examples. Could be improved by noting when not to use, but alternatives are implied by sibling tool names.

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

search_sec_filingsSearch SEC FilingsA
Read-only
Inspect

Search and list SEC filings with filtering by company (CIK), form type, and date range. Returns paginated results with filing metadata including form type, filing date, company name, and accession number. Use this to find filings before reading their content with get_filing_document or get_filing_exhibits.

ParametersJSON Schema
NameRequiredDescriptionDefault
ciksNoComma-separated CIK numbers to filter by (e.g., "0000320193,0001018724")
pageNoPage number (1-indexed, default: 1)
dateToNoEnd date filter (YYYY-MM-DD)
dateFromNoStart date filter (YYYY-MM-DD)
pageSizeNoResults per page (default: 25, max: 100)
formTypesNoComma-separated form types (e.g., "10-K,10-Q,8-K,S-1,S-3,424B5")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true. The description adds behavioral details beyond annotations: it returns paginated results with metadata (form type, filing date, etc.). It does not disclose potential rate limits or quotas, but for a read-only search tool this is acceptable.

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 short, front-loaded sentences: purpose, return format, usage guidance. Every sentence adds value with no redundancy or 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 the presence of an output schema (documenting return values), the description sufficiently covers purpose, filtering, pagination, and relationship to sibling tools. No gaps for a straightforward search 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%, so the input schema already fully documents each parameter. The description only summarizes filters ('CIK, form type, date range') without adding meaning beyond what's in the schema. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the resource ('SEC filings') and actions ('Search and list', 'filtering by company, form type, date range'). It distinguishes from siblings by explicitly guiding usage before get_filing_document or get_filing_exhibits, making its purpose unique among related tools.

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 provides explicit when-to-use guidance ('Use this to find filings before reading their content') and names two alternative tools (get_filing_document, get_filing_exhibits). This clearly differentiates when to invoke this tool versus others.

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

Tool Schema Changelog

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

  1. 17 tool updatesv0.1.2
    • Addedget_baby_shelf_capacity
    • Addedget_dilution_coverage
    • Addedget_dilution_history
    • Addedget_dilution_instruments
    • Addedget_dilution_performance
    • Addedget_dilution_risk
    • Addedget_dilution_snapshot
    • Addedget_float_history
    • Addedget_market_news
    • Addedget_premarket_scan_history
    • Addedget_premarket_scanner
    • Addedget_recent_uplistings
    • Addedget_rvol_history
    • Changedget_top_movers2 fields changed
      • addedInput schema / properties / date
        Added value: +{
        +  "description": "Optional past trade date (YYYY-MM-DD). When set, returns that day's top gainers/losers computed on a historical daily close-to-close basis from split-adjusted daily bars (NOT intraday, NOT session-specific). Rejected with 400 when combined with a non-regular session or with direction=\"active\"; a future or malformed date is also 400. A weekend/holiday date returns an empty list, not an error.",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / session / description
        Previous value: -"Session window: premarket (4:00–9:30 AM ET), regular (RTH close-to-close, default), afterhours (4:00–8:00 PM ET)."New value: +"Session window: premarket (4:00–9:30 AM ET), regular (RTH close-to-close, default), afterhours (4:00–8:00 PM ET). Live-only — rejected (400) when combined with date."
    • Addedget_upcoming_reverse_splits
    • Changedscreen_companies1 field changed
      • addedInput schema / properties / exchange
        Added value: +{
        +  "description": "Filter by listing exchange (exact match): NASDAQ, NYSE, or AMEX",
        +  "type": "string"
        +}
    • Changedscreen_sec_filings2 fields changed
      • changedInput schema / properties / sortBy / description
        Previous value: -"Sort results by field (default: filing_date)"New value: +"Sort results by field (default: filing_date). Ties are broken by filing id, so a given page is stable and reproducible for a fixed corpus."
      • changedInput schema / properties / sortOrder / description
        Previous value: -"Sort direction (default: desc)"New value: +"Sort direction (default: desc). Note that paging is offset-based over a corpus that is continuously ingesting new filings, so when walking many pages of a broad date range, newly-arrived filings can shift rows between pages; page on a closed dateFrom/dateTo window if you need an exhaustive, non-overlapping traversal."
  2. 6 tool updatesv0.1.1
    • Changedget_filing_calendar3 fields changed
      • removedInput schema / properties / to / $ref
        Removed value: -"#/properties/from"
      • addedInput schema / properties / to / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • addedInput schema / properties / to / type
        Added value: +"string"
    • Changedget_intraday_bars1 field changed
      • addedInput schema / properties / extended
        Added value: +{
        +  "description": "Include extended-hours bars (premarket 04:00–09:30 ET and after-hours 16:00–20:00 ET). Only supported with resolution \"1\".",
        +  "type": "boolean"
        +}
    • Changedget_legislative_calendar3 fields changed
      • removedInput schema / properties / to / $ref
        Removed value: -"#/properties/from"
      • addedInput schema / properties / to / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • addedInput schema / properties / to / type
        Added value: +"string"
    • Changedget_policy_events3 fields changed
      • removedInput schema / properties / to / $ref
        Removed value: -"#/properties/from"
      • addedInput schema / properties / to / pattern
        Added value: +"^\\d{4}-\\d{2}-\\d{2}$"
      • addedInput schema / properties / to / type
        Added value: +"string"
    • Addedget_trading_halts
    • Changedscreen_companies2 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "description": "Company universe by issuer domicile: \"US\" (default), \"CA\" (Canadian companies via their US-OTC/US cross-listings), or \"all\"",
        +  "enum": [
        +    "US",
        +    "CA",
        +    "all"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / excludeHalted
        Added value: +{
        +  "description": "When true, exclude tickers with a currently-active trading halt (regulatory or volatility) from the results. Default false — halted rows are included and carry halted/haltCode/haltedAt fields.",
        +  "type": "boolean"
        +}
  3. 86 tool updatesv0.1.0
    • First observedget_accumulation_snapshot
    • First observedget_analyst_consensus
    • First observedget_analyst_coverage
    • First observedget_analyst_estimates
    • First observedget_analyst_grades
    • First observedget_cash_history
    • First observedget_cash_position
    • First observedget_cash_runway_calendar
    • First observedget_clinical_trials
    • First observedget_company_profile
    • First observedget_compliance
    • First observedget_donor_aggregates
    • First observedget_earnings
    • First observedget_earnings_calendar
    • First observedget_economic_calendar
    • First observedget_etf_bundle
    • First observedget_executives
    • First observedget_exhibit_content
    • First observedget_filing_calendar
    • First observedget_filing_document
    • First observedget_filing_exhibits
    • First observedget_financials
    • First observedget_float
    • First observedget_historical_prices
    • First observedget_insider_cluster_buys
    • First observedget_insider_cross_company
    • First observedget_insider_positions
    • First observedget_insider_positions_by_ticker
    • First observedget_insider_transactions
    • First observedget_insiders
    • First observedget_institution_activity
    • First observedget_institution_derivatives
    • First observedget_institution_detail
    • First observedget_institution_filings
    • First observedget_institution_holdings
    • First observedget_institution_portfolio_analytics
    • First observedget_institution_position_changes
    • First observedget_institution_top_aum
    • First observedget_institutions
    • First observedget_institutions_leaderboards
    • First observedget_intraday_bars
    • First observedget_legislative_calendar
    • First observedget_market_breadth
    • First observedget_market_metrics
    • First observedget_news
    • First observedget_ownership
    • First observedget_policy_events
    • First observedget_policy_trade_leaderboard
    • First observedget_policy_trade_overlap
    • First observedget_political_sector_rotation
    • First observedget_politician_activity
    • First observedget_politician_committees
    • First observedget_politician_detail
    • First observedget_politician_donor_summary
    • First observedget_politician_donors
    • First observedget_politician_late_filers
    • First observedget_politician_pnl
    • First observedget_politician_recent_trades
    • First observedget_politician_roles
    • First observedget_politician_transactions
    • First observedget_politician_votes
    • First observedget_politicians
    • First observedget_politicians_most_active
    • First observedget_politicians_pnl_leaderboard
    • First observedget_post_earnings_movers
    • First observedget_price_target
    • First observedget_quote
    • First observedget_recent_congressional_votes
    • First observedget_recent_material_filings
    • First observedget_recently_sponsored_bills
    • First observedget_senate_trades_by_ticker
    • First observedget_short_interest
    • First observedget_split_history
    • First observedget_stock_price_change
    • First observedget_top_movers
    • First observedget_volume_profile
    • First observedlookup_accession_number
    • First observedscreen_companies
    • First observedscreen_must_raise
    • First observedscreen_sec_filings
    • First observedscreen_sec_filings_performance
    • First observedsearch_clinical_trials
    • First observedsearch_companies
    • First observedsearch_filing_text
    • First observedsearch_institutions
    • First observedsearch_sec_filings

TDQS

A3.9/5.0

Scored across 101 tools

Disambiguation4/5

Descriptions are exceptionally detailed and explicitly cross-reference to prevent confusion (e.g., search_clinical_trials is flagged as distinct from get_clinical_trials, and get_politician_donor_summary vs get_politician_donors). However, with 101 tools packed into tight clusters (10+ institution tools, 15+ politician tools, 10+ dilution tools), even stellar descriptions cannot fully eliminate misselection risk at this scale.

Naming Consistency5/5

Uses a highly consistent snake_case verb_noun pattern throughout: get_ for fetch-by-known-key, search_ for find-by-query, screen_ for cross-universe filtering. The three verbs are semantically meaningful and applied uniformly (e.g., get_insiders, get_quote, search_sec_filings, screen_companies).

Tool Count1/5

101 tools is extreme — far beyond the 25+ threshold that already warrants a low score. The surface dwarfs any single server's practical scope and would overwhelm agent context windows and tool-selection accuracy, even though each tool may individually justify its existence.

Completeness5/5

Coverage is extraordinarily deep: company fundamentals, insider trading, institutional holdings, politician trading/donors, SEC filings (search/read/exhibit/full-text), dilution analysis, analyst data, market breadth, and compliance. There are no dead ends — get_dilution_coverage even pre-checks before expensive calls, and get_post_earnings_movers collapses multi-step chains into one call.

Maintenance

ActivityNo data
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers