Skip to main content
Glama

Equibles

CI CodeQL codecov License: AGPL-3.0 .NET Docker Self-Hosted MCP

Equibles is a self-hosted, open-source financial data MCP server — an open-source alternative to a Bloomberg Terminal, built for AI agents rather than humans. It scrapes, stores, and serves SEC filings and XBRL financials, 13F institutional holdings, insider and congressional trades, FINRA/SEC short data, FRED economic indicators, CFTC and CBOE positioning, fund filings, government contracts, and daily stock prices, and exposes them over the Model Context Protocol, so Claude, ChatGPT, Cursor, or any agent can query them directly. Its stock universe covers US listings plus verified listings on the major European exchanges. Runs on your own hardware with Docker, for free, forever.

This is the open-source core of Equibles. Equibles Cloud runs this exact core and adds more tools on top: earnings call transcripts and audio, real-time quotes, options chains with Greeks, LLM-extracted KPIs and guidance, buybacks, IPO filings, executive changes, valuation multiples, index composition, portfolio tracking, and a US-market screener. It also lists Chinese and Hong Kong shares beside the European ones. Same protocol, same tool names, nothing to run — see what's included.

Don't want to run anything? Point your AI assistant at https://mcp.equibles.com/mcp and get a free API key at equibles.com/mcp — 100 requests/day, no card. Per-client setup guides live at daniel3303/stock-market-mcp-server.

See docs/ for the user guide and technical documentation.

What's Included

Everything marked Self-hosted is scraped, stored, and served by this repo — 70 MCP tools, no account, no key. Equibles Cloud runs this exact core over the same protocol with the same tool names, and adds more tools on top.

Domain

Data Source

Self-hosted

Equibles Cloud

Description

SEC Filings

SEC EDGAR

✅

✅

Annual, quarterly and current reports (10-K, 10-Q, 8-K, 20-F, 6-K, 40-F), proxies (DEF 14A, DEFA14A, PRE 14A), registration statements (S-1, S-3, S-3ASR, S-4, F-1, F-3, F-3ASR, F-4), tender offers (SC TO, SC 14D9) and late-filing notices (NT 10-K, NT 10-Q, NT 20-F), with full-text search

Financial Statements

SEC XBRL

✅

✅

Parsed income statement, balance sheet, and cash flow facts per fiscal period

Holdings

SEC 13F-HR

✅

✅

Institutional ownership — who owns what, how much, and trend over time

Fund Filings

SEC NPORT / N-CEN / Form D

✅

✅

Fund portfolio holdings, registered-fund operations (service providers, fund types, advisers by CRD), and exempt offerings (private placements)

Investment Advisers

SEC Form ADV

✅

✅

SEC-registered and exempt reporting advisers — assets under management, main office, employee count, fee structure

Insider Trading

SEC Forms 3/4/5/144

✅

✅

Director, officer, and 10% owner transactions, annual ownership statements, and proposed (Form 144) sales

Congressional Trading

House/Senate disclosures

✅

✅

Securities transactions by members of Congress, including the filed stock, option, bond, or other instrument

Short Data

SEC / FINRA

✅

✅

Fails-to-deliver (SEC), daily short volume and short interest (FINRA)

Economic Indicators

FRED (Federal Reserve)

✅

✅

Interest rates, inflation, employment, GDP, yield spreads, and more

Stock Prices

Yahoo Finance

✅

✅

Daily OHLCV prices with technical indicators (SMA, RSI, MACD)

European Listings

ESMA/FCA FIRDS + exchange directories

✅

✅

Verified share listings on Euronext (Paris, Amsterdam, Brussels, Dublin, Oslo, Milan, Lisbon), Xetra, Nasdaq Stockholm, Helsinki and Copenhagen (main market and First North), BME, GPW and the London Stock Exchange (main market and AIM), keyed by ISIN and venue, with daily prices in the listing's own currency; every market with a directory adapter runs automatically; the price, dividend, financial-statement and fund-holding MCP tools accept them as MIC:TICKER (XPAR:AIR; see docs/equity-identity.md)

Futures Positioning

CFTC

✅

✅

Commitments of Traders (COT) data for 30+ futures contracts

Market Indicators

CBOE

✅

✅

VIX volatility index (1990+) and put/call ratios by category

Government Contracts

USAspending.gov

✅

✅

Federal contract awards to public companies — amounts, awarding agencies, dates, and NAICS/PSC codes

FDA Catalysts

FDA.gov

✅

✅

Advisory-committee (AdComm) meeting calendar — scheduled FDA panel dates, center, and title that act as regulatory catalysts for biotech/pharma stocks

Earnings Call Transcripts

Company webcasts

—

✅

Full quarterly-call transcripts with speaker attribution, searchable alongside filings

Earnings Call Audio

Company webcasts

—

✅

The recorded call itself, playable and aligned to the transcript

Earnings Briefs, Guidance & Narrative Shift

Earnings calls + releases

—

✅

Verifier-approved quarter summaries, call quotes, derived narrative changes, management guidance revisions, and reported results versus prior company guidance

Live Quotes

Licensed market feed

—

✅

Real-time US equity quotes

Options Chains

Licensed options feed

—

✅

Chains by expiration and strike with bid/ask, volume, open interest, implied volatility, and delta/gamma/theta/vega

Company KPIs

Filings + earnings releases

—

✅

Operating metrics a company reports but XBRL never standardised, plus GAAP-to-non-GAAP bridges

Guidance

Earnings releases + calls

—

✅

Management's forward guidance, its ranges, and how it moved between quarters

Buybacks & ATM

8-K / 10-Q

—

✅

Authorised repurchase programs and at-the-market equity programs, with amounts and dates

IPO Feed

SEC S-1 / F-1

—

✅

New registrations with offer terms, underwriters, risk factors, and pre-IPO financials

Investor Relations

Company IR sites

—

✅

Upcoming events, conference appearances, and IR newsroom releases

Executives

SEC 8-K / DEF 14A

—

✅

Appointments and departures, plus Summary Compensation Table figures

Valuation Multiples

Derived

—

✅

Current and historical P/E, P/S, P/B, EV/EBIT, EV/EBITDA and more, with the periods each was computed from

Screener

Derived

—

✅

Filter every US listing on valuation, margins, growth, ownership, short data, and dividends, and browse European, Chinese and Hong Kong listings by market

Smart Money

Derived

—

✅

Insider sentiment scores, super-investor portfolios, and market-wide congressional activity

Risk Flags

SEC filings

—

✅

Going-concern language and customer-concentration disclosures

Market Context

Derived

—

✅

Correlated stocks, plus market calendar and open/closed status

Index Composition

SEC N-PORT + fund holdings files

—

✅

Constituents and membership-change history for the S&P 500/400/600, Nasdaq-100, Russell 1000/2000, and the Dow, plus rule-based addition and deletion forecasts

Portfolios

Your own account

—

✅

Track holdings and watchlists across stocks and options, with cost basis and realized/unrealized P&L. The only tools on the server that write

Related MCP server: ko.io

Why Some Data Is Cloud-Only

Nothing above is held back from this repo. The cloud-only rows are data whose production needs infrastructure you would not stand up at home:

  • Transcripts and audio — earnings calls are webcasts, not filings. Each one has to be discovered and recorded by a browser fleet, then put through GPU speech-to-text with speaker diarization, every call, every quarter.

  • Live quotes and options chains — licensed real-time feeds, plus an always-on streaming service to fan them out. Neither the licence nor the uptime fits in a container on a laptop.

  • KPIs, guidance, buybacks, IPO terms, executives, risk flags — pulled out of filings, proxies, and earnings releases by LLM extraction lanes with verification passes and a human review queue, which needs sustained inference capacity.

  • Investor-relations events and news — collected from thousands of company IR sites, needing the same stealth browser fleet as the webcasts.

  • Multiples, screener, smart money, market context — derived, and only meaningful over a fully backfilled corpus of the whole market rather than the tickers you happen to have scraped so far.

  • Index composition — assembled from every tracking fund's N-PORT schedule plus each fund's own holdings file fetched daily, which needs the full NPORT corpus and a fetcher that keeps re-learning where those files moved to.

  • Portfolios — not scraped data at all: it is your own, stored against your account. The self-hosted build has no accounts, so there is nothing to store it against.

Beyond the data, the cloud is already backfilled and kept current, and it is managed — no scrapers to babysit. This repo is free forever under AGPL-3.0; the cloud has a free tier at 100 requests/day with no card.

Start on the free tier, and self-host whenever you'd rather own the stack.

Quick Start

The fastest way to get everything running. Requires Docker.

git clone https://github.com/daniel3303/Equibles.git
cd Equibles
cp .env.example .env
# Edit .env and set SEC_CONTACT_EMAIL (required by SEC EDGAR fair access policy)
docker compose up

This starts:

Service

Port

Description

db

5432

ParadeDB (PostgreSQL + pgvector + pg_search)

web

8080

Web portal for browsing data

mcp

8081

MCP server for AI assistants

worker

—

Scrapers (SEC, FINRA, Congress, FRED, Yahoo, CFTC, CBOE, USAspending, FDA, FIRDS, European exchange directories)

Data scraping starts automatically. SEC filings, holdings, insider trades, and congressional trades will begin populating within minutes.

Configuration

All settings can be configured via a .env file in the project root (recommended for Docker) or environment variables.

FINRA Short Data (free API key required):

The FINRA scraper (short volume and short interest) requires a free API key. Without it, the scraper skips gracefully and all other scrapers run normally. Fails-to-deliver data comes from SEC and works without FINRA credentials.

To get a key:

  1. Go to the FINRA API Console and sign in (a Google account works)

  2. Open the API Credentials menu and create a new API Key

  3. Copy the Client ID and Client Secret

  4. Set Finra__ClientId and Finra__ClientSecret in your .env file or environment variables

The older developer.finra.org "Teams & Apps" flow has been retired — use the API Console above.

FRED Economic Data (free API key required):

The FRED scraper requires a free API key from the Federal Reserve Bank of St. Louis. Without it, the scraper skips gracefully and all other scrapers run normally.

To get a key:

  1. Register at fred.stlouisfed.org/docs/api/api_key.html

  2. Copy the 32-character API key

  3. Set Fred__ApiKey in your .env file or environment variables

Ticker Filtering (optional):

By default, all tickers are synced. To limit data syncing to specific stocks, set a single ticker list that applies to all scrapers:

# .env — sync only these tickers (applies to all scrapers)
Worker__TickersToSync__0=AAPL
Worker__TickersToSync__1=MSFT
Worker__TickersToSync__2=GOOGL

When not set, all stocks are synced.

Minimum Sync Date (optional):

By default, all scrapers start from January 2020. Set a more recent date for faster initial sync, or go as far back as 2000-01-01 for more historical data:

# .env — start syncing from 2024 instead of 2020
Worker__MinSyncDate=2024-01-01

Embedding (opt-in):

Setting

Default

Description

Embedding__Enabled

false

Set to true to enable vector embedding generation

Embedding__Provider

Ollama

Ollama (/api/embed) or OpenAI (/v1/embeddings — vLLM, Text-Embeddings-Inference, or OpenAI)

Embedding__BaseUrl

—

Embedding endpoint (e.g., http://localhost:11434)

Embedding__ModelName

—

Model name (e.g., qwen3-embedding:0.6b)

Embedding__ApiKey

—

Bearer token, if the server requires one (e.g. vLLM --api-key)

Embedding__BatchSize

10

Texts per embedding batch

Update notifications (optional):

Setting

Default

Description

CHECK_FOR_UPDATES

true

When true, the web portal checks GitHub Releases and shows a banner when a newer version is available. Set to false to disable.

Authentication (optional):

Setting

Default

Description

AUTH_USERNAME

—

Web portal username (auth disabled if empty)

AUTH_PASSWORD

—

Web portal password (auth disabled if empty)

MCP_API_KEY

—

MCP server API key (auth disabled if empty)

When set, the web portal requires login and the MCP server requires Authorization: Bearer <key> header. When unset, everything is open access (default).

Updating

The web portal checks GitHub Releases on a schedule and shows a banner when a newer version is available (disable with CHECK_FOR_UPDATES=false). To update to the latest release:

Docker Compose:

git pull
docker compose up -d --build --remove-orphans

Include any optional Compose override files in the upgrade command so those services remain enabled.

From source:

git pull
dotnet build Equibles.sln

Database migrations are applied automatically on startup. Review the changelog for notable changes before upgrading.

Web Portal

The web portal at http://localhost:8080 provides a browser-based interface for exploring data:

  • Stocks — Browse and search all tracked companies, view price charts with technical indicators (SMA, EMA, RSI, MACD, Bollinger Bands), golden/death-cross and price-streak badges, performance versus SPY, plus per-stock tabs for institutional holdings, short data, SEC filings, financial statements, insider trading, proposed (Form 144) sales, fund holdings (NPORT), fund operations (N-CEN), exempt offerings (Form D), and congressional trades

  • Institutions — Browse institutional holders (hedge funds, asset managers), view detailed profiles with portfolio breakdowns, industry allocation, quarterly activity, backtesting, and side-by-side comparisons. Filers are scored on risk-adjusted performance (alpha vs. a benchmark) and a Smart Money Index page aggregates the highest-scoring funds into a consensus signal. Includes a holdings screener with filters (filer count, value, float %, location, AUM/position-count, industry) and CSV export

  • Advisers — Browse SEC-registered and exempt reporting investment advisers (/advisers), ranked by assets under management, with per-firm profiles (regulatory AUM, main office, employee count, fee structure)

  • Insider Trading — Dashboard showing the top insider buys, sells, and biggest transactions over the last 90 days

  • Short Activity — Most-shorted leaderboard (/most-shorted, ranked by FINRA short interest) and largest daily short volume (/short-volume), each with a date selector, server-side sort, and pagination

  • Economy — Browse FRED economic indicators grouped by category (interest rates, inflation, employment, GDP, etc.) with charts and statistics

  • Futures — CFTC Commitments of Traders positioning data for 30+ futures contracts (commodities, indices, currencies) with commercial/non-commercial position charts

  • Market — CBOE market indicators: VIX volatility index with OHLC charts, put/call ratios (equity, index, total, VIX, ETP)

  • Search — Global search across stocks, institutions, insiders, and congress members with category filtering and date ranges

  • Status — System health, worker status, data counts, and error log

MCP Server

The MCP server exposes financial data tools for AI assistants (Claude, ChatGPT, etc.):

  • Institutional Holdings — Top holders, ownership history, institution portfolios and summary, sector allocation, quarterly activity, most-held stocks, consensus holdings, fund overlap, market-wide 13F activity, holder flows by kind of filer and sector, institution search

  • Insider Trading — Insider transactions, ownership summary, proposed (Form 144) sales, insider search

  • Congressional Trading — Trades for a ticker, trades by one member, member search

  • SEC Documents — Full-text search, semantic search, document browsing, keyword search within filings

  • Financial Statements — XBRL fact time series per ticker, cross-ticker fact comparison, full income statement / balance sheet / cash flow per fiscal period

  • Fund & Adviser Filings — Fund portfolio holdings (NPORT), registered-fund operations (N-CEN), exempt offerings (Form D), and SEC-registered and exempt reporting investment-adviser lookup and search (Form ADV)

  • Short Data — Daily short volume, market-wide largest daily short volume, bi-monthly short interest, and the latest short-interest snapshot across tickers

  • Economic Indicators — FRED data lookup, latest macro snapshot, indicator search across categories

  • Stock Prices — Daily OHLCV history with adjusted close, latest close across one or more tickers, and on-demand technical indicators (EMA, Stochastic Oscillator, Average True Range, On-Balance Volume, Bollinger Bands)

  • Futures Positioning — COT positioning data, latest snapshot across all contracts, contract search

  • Market Indicators — VIX historical data, put/call ratios by type (equity, index, total, VIX, ETP)

  • Government Contracts — Federal contract awards won by a ticker (awarding agency, amount, period dates) and a ranking of the top public-company contractors by total federal dollars over a date range (USAspending.gov)

  • FDA Catalysts — Scheduled FDA advisory-committee (AdComm) meetings over a date range — the regulatory catalyst dates that move biotech and pharma stocks (FDA.gov)

Output Format (GCF, opt-in)

By default the table tools return markdown tables. Graph Compact Format is used instead when it is smaller, otherwise it falls back to markdown. GCF carries the same cells the markdown table would show, with the column names factored into a single header and the per-cell | padding and separator row dropped.

It reaches the answers rendered through MarkdownTable.Render, which today is the short-volume and short-interest tools, off-exchange volume, fails-to-deliver, congressional trades and member disclosures, the FRED series and calendar tools, CFTC positioning, CBOE ratios, FDA advisory meetings, government contracts, and the institution and adviser search tools. Tools that assemble their answer with MarkdownTable.Start and append rows themselves are not encoded, because those answers continue past the table with truncation notes and footnotes; that includes the price, financial-statement, insider, dividend, 13F-portfolio, fund-filing and filing-search tools. Routing them through the shared renderer is tracked separately.

Ask for it per request, which is what a shared server wants, with either the X-Equibles-Output-Format: gcf header or an ?output_format=gcf query parameter (the query parameter is there for clients whose only configuration is a URL). markdown is accepted the same way, so a caller can opt out of a server that defaults to GCF. An unrecognized value is ignored rather than refused, and the server's own default applies.

Set EQUIBLES_OUTPUT_FORMAT=gcf to make GCF the process-wide default instead. A request that names a format wins over it; one that names nothing gets it.

Per-request selection relies on each tool call arriving as its own HTTP request, which is how the streamable HTTP transport works in both its stateless and session modes: the format is read off that request and applies to it alone. A transport that instead dispatched calls on a connection opened earlier would carry whatever the opening request asked for.

How much it saves depends on the shape of the answer. The table compresses, the prose around it does not, so a small table inside a long preamble saves least and a wide table of many short values saves most. Measured end to end against a deployed server on real answers from three of the covered tools, 30 sessions of daily short volume, 25 congressional trades and 24 monthly observations of a FRED series, the answer text is 7 to 13% shorter in characters.

That is the text your client hands the model, not the HTTP payload. JSON escapes every quotation mark the encoder adds, so the transport bytes can grow on the same answer whose text shrank.

It is deliberately conservative: every cell value is preserved verbatim (the compact-USD, comma-grouped, adaptive-decimal and em-dash formatting is untouched — GCF only changes the framing, not the numbers a model reads), and any row that does not match the header's column shape falls back to the markdown table, so a result is never dropped or garbled. Output is unchanged for a caller that asks for nothing on a server that sets nothing. GCF is MIT-licensed and its encoder is zero-dependency.

Connecting to Claude Desktop

Add this to your Claude Desktop config file (claude_desktop_config.json):

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

{
  "mcpServers": {
    "equibles": {
      "url": "http://localhost:8081/mcp"
    }
  }
}

Restart Claude Desktop and the Equibles tools will be available. You can then ask questions like "Who are the top institutional holders of AAPL?" or "Search Apple's latest 10-K for revenue growth discussion."

Connecting to Claude Code

Add the MCP server to Claude Code:

claude mcp add equibles --transport http http://localhost:8081/mcp

Connecting to ChatGPT Desktop

Add this to your ChatGPT Desktop config file:

macOS: ~/Library/Application Support/com.openai.chat/mcp.json Windows: %APPDATA%\com.openai.chat\mcp.json

{
  "servers": {
    "equibles": {
      "url": "http://localhost:8081/mcp"
    }
  }
}

Restart ChatGPT Desktop and the Equibles tools will be available.

Connecting to OpenClaw

In OpenClaw, add an MCP server with the URL http://localhost:8081/mcp (HTTP transport).

Other MCP Clients

Any MCP-compatible client can connect to http://localhost:8081/mcp (HTTP transport).

Running over stdio

Clients that launch a server as a subprocess can run it over stdin/stdout instead of HTTP:

dotnet build src/Equibles.Mcp.Server
dotnet run --no-build --project src/Equibles.Mcp.Server -- --stdio

Build first: a plain dotnet run restores and prints build output on stdout, which corrupts the protocol stream. The server reads ConnectionStrings:DefaultConnection as usual, so point it at the same database the worker fills. Logs go to stderr. The API key and the per-request output-format header and query parameter do not apply; set EQUIBLES_OUTPUT_FORMAT=gcf in the subprocess environment instead.

Tools

This self-hosted build exposes 70 tools over MCP. The hosted server at https://mcp.equibles.com/mcp runs this same core and adds more on top. Full catalog and client setup: daniel3303/stock-market-mcp-server.

13F institutional holdings

  • GetInstitutionCloneBacktest — backtest cloning a filer's 13F portfolio vs a benchmark

  • GetTopHolders — top institutional holders of a stock (13F-HR), with each holder's type and measured style, filterable by both

  • GetInstitutionalOwnershipHistory — institutional ownership trend across quarters

  • GetAllHolders — every disclosed holder of a stock in one list (13F, 13D/13G, insiders, funds), one row per holder with its other filings and contained disclosures nested, or grouped by ultimate parent

  • GetOwnershipSummary — who owns a stock: institutions, insiders, 13D/G-only blocks and the remaining float as % of shares outstanding, with funds shown but never summed

  • GetBeneficialOwnership — a stock's Schedule 13D and 13G filers, each latest filing with every reporting person

  • GetHolderMix — who holds a stock by holder type, measured style, turnover, horizon, book size, client base, private funds or location, with each bucket's like-for-like change; or registered funds by N-CEN fund type (index funds, index ETFs, active ETFs, active funds) as a share of shares outstanding

  • GetOwnershipSignals — who holds a stock and how across every 13F book: conviction, crowding, ownership of the estimated free float, holder concentration, holding periods, the holders' estimated cost and share held at a loss, and holder-overlap peers

  • GetHolderTargets — shareholder targeting: 13F filers that hold a stock's holder-overlap peers but not the stock, ranked by money in the peers, with style and holder type

  • GetHolderTypeFlows — market-wide money in and out of US equities by kind of 13F filer for a closed quarter, optionally split by sector, with net flow as a share of each bucket's prior book

  • GetInstitutionPortfolio — an institution's 13F portfolio, with how long each position has been held and its estimated cost per share

  • SearchInstitutions — strict-first tokenized name/CIK search with filing date, 13F AUM, position count, and holder type

  • GetTopInstitutionalBuyersSellers — biggest adds/reductions on a stock this quarter

  • GetMarketWide13FActivity — market-wide 13F leaderboards

  • GetMostHeldStocks — stocks by institutional breadth, conviction or crowding

  • GetInstitutionSummary — filer summary (value, concentration, turnover, holder profile, style bands)

  • GetInstitutionStyleHistory — a filer's measured style, turnover and horizon bands quarter by quarter

  • GetInstitutionSectorAllocation — allocation by sector

  • GetInstitutionQuarterlyActivity — initiated/increased/reduced/exited vs prior quarter

  • CompareInstitutionPortfolios — portfolio overlap between two institutions

  • GetInstitutionConsensusHoldings — consensus portfolio of 2–25 institutions

Insider trading

  • GetInsiderTransactions — insider transactions from Forms 4/5

  • GetInsiderOwnership — insider ownership ranked by shares

  • GetForm144ProposedSales — proposed sales from Form 144

  • SearchInsiders — strict-first whole-word filed-name search with verified public-name aliases

SEC filings search

  • SearchDocuments — hybrid keyword+semantic search across all filings, optionally scoped by ticker

  • SearchDocument — search within a single filing

  • ListFilings — browse filings market-wide or for one company, with date/type/8-K item filters

  • ReadDocumentLines — read a line range from a filing

Funds, ETFs & advisers

  • SearchInvestmentAdvisers — strict-first tokenized adviser-name search (Form ADV)

  • GetInvestmentAdviser — ADV profile by CRD

  • GetFundNcenReports — fund ops from N-CEN with exact directory-identifier resolution

  • GetFundsHoldingStock — funds holding a stock

  • GetFormDOfferings — private placements (Form D)

  • GetFailsToDeliver — SEC FTD data

  • SearchFunds — strict-first tokenized fund/registrant/ticker search with verified share-class aliases

  • GetFundProfile — fund profile + NPORT-P holdings with explicit reported-versus-stored coverage counts

Fundamentals (XBRL)

  • GetFinancialStatement — income/balance/cash-flow statement anchored to one period end; quarterly currency flows are reported discrete quarters or exact derived remainders, never YTD totals

  • GetFinancialFact — one concept over time with exact spans and stale-alias coverage warnings

  • CompareFinancialFact — a concept across companies

  • GetRevenueBreakdown — revenue by segment/geography/product plus reported segment operating income and derived margin

Economic data (FRED)

  • GetEconomicIndicator — a FRED series

  • GetLatestEconomicIndicators — latest values by category

  • SearchEconomicIndicators — strict-first tokenized curated-series search with standard macro aliases

  • GetEconomicCalendar — US macro release calendar

Futures (CFTC COT)

  • GetCftcPositioning — COT positioning for a contract

  • GetLatestCftcPositioning — latest COT snapshot

  • SearchCftcMarkets — strict-first tokenized search by name, code, or standard futures symbol

Volatility (CBOE)

  • GetPutCallRatios — put/call ratios

  • GetVixHistory — VIX daily OHLC

FDA calendar

  • GetFdaAdvisoryCommitteeMeetings — scheduled FDA advisory-committee meetings

Congressional trading

  • GetCongressionalTrades — trades for a ticker

  • GetMemberTrades — a member's trades

  • GetMemberNetWorth — member net worth history

  • SearchCongressMembers — strict-first tokenized roster search with verified public-name aliases

Short data (FINRA)

  • GetShortVolume — daily short volume

  • GetShortInterest — bi-monthly short interest

  • GetShortInterestSnapshot — market-wide snapshot

  • GetLargestShortVolume — largest daily short volume

  • GetShortSqueezeScores — composite squeeze scores

  • GetOffExchangeVolume — dark-pool/OTC volume

Stock prices

  • GetStockPrices — daily OHLCV plus the stored auxiliary adjusted close when it differs

  • GetLatestClosingPrices — latest close/change/volume

  • GetDividendHistory — stored declared cash dividends for an exact stock or ETF listing

  • GetStochasticOscillator — stochastic oscillator (%K/%D)

  • GetAverageTrueRange — average true range (ATR)

  • GetOnBalanceVolume — on-balance volume (OBV)

  • GetBollingerBands — Bollinger Bands

Government contracts (USAspending)

  • GetGovernmentContracts — federal contract awards for a company

  • GetTopGovernmentContractors — largest public-company contractors

Vector Embeddings (advanced, opt-in)

Vector embeddings enable semantic search over SEC filings (e.g., "find revenue growth discussion in Apple's 10-K"). This requires downloading the Ollama runtime (~2GB) and the Qwen3-Embedding-0.6B model (~640MB).

docker compose -f docker-compose.yml -f docker-compose.embedding.yml up

This adds Ollama and configures the existing web, MCP, and worker services to use it:

Service

Port

Description

embedding

11434

Ollama server with Qwen3-Embedding-0.6B model

embedding-pull

—

One-shot model download before the worker starts

worker

—

The existing worker, with embedding generation enabled

Without the embedding override, BM25 full-text search via ParadeDB still works out of the box — vector search is purely additive.

Bundled Ollama is the default because it needs no GPU and runs anywhere. For bulk embedding at scale, point Embedding__Provider=OpenAI at a batched server such as vLLM or Text-Embeddings-Inference — they continuously batch on the GPU and are far faster than Ollama for large corpora. See docs/guide/how-to-use-external-embedding-endpoint.md.

Screenshots

Contributing

See CONTRIBUTING.md for development setup, project architecture, and how to extend the platform. Contributors must sign the Contributor License Agreement — this is handled automatically by a bot when you open a pull request.

License

AGPL-3.0

Author

Daniel Oliveira

Website X LinkedIn

Available Tools

65 tools
CompareFinancialFactCompare Financials Across CompaniesA
Read-only

Compare one financial concept across several companies for the same fiscal period — peer comparison. Returns one row per ticker with the latest-restated value; tickers with no data for the period are listed separately. Fiscal year/period follow each company's OWN fiscal calendar (e.g. NVDA's fiscal 2025 ended January 2025), so peer rows can cover very different calendar months — check the Period End column.

NameRequiredDescriptionDefault
conceptYesConcept alias, e.g. 'revenue', 'net-income', 'eps-diluted'. Call with an unknown value to list supported aliases.
tickersYesTicker symbols to compare (max 25); a listing on another exchange is MIC:TICKER (XPAR:AIR).
fiscalYearYesFiscal year, e.g. 2023
fiscalPeriodNoFiscal period: 'FY' (default) or 'Q1'..'Q4'FY

TDQS

A4.5/5.0
Behavior5/5

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

With only readOnlyHint provided, the description carries the rest and does so well: it discloses the return shape (one row per ticker, latest-restated value), the handling of tickers with no data (listed separately), and a critical caveat that fiscal year/period follow each company's own calendar so rows may span different calendar months. This is substantial behavioral context beyond the annotations.

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

Conciseness4/5

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

Three sentences, front-loaded with the core purpose and then the return semantics and the fiscal-calendar caution. Each sentence earns its place, though the NVDA example adds some length beyond the minimum needed.

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

Completeness4/5

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

With no output schema, the description correctly picks up the burden of explaining return values, including row structure and missing-data behavior, and flags the fiscal-calendar trap. It omits pagination/result-size behavior, but for a bounded max-25 comparison this is a minor gap.

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 parameter documentation is already handled (baseline 3). The description adds interpretation the schema does not: it clarifies that fiscalYear/fiscalPeriod resolve against each company's own fiscal calendar and points the agent to the Period End column, which meaningfully aids correct use of those two 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 states a specific verb and resource — 'compare one financial concept across several companies for the same fiscal period' — and labels it as peer comparison. This clearly distinguishes it from the sibling GetFinancialFact (single-company lookup) without needing to open 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 Guidelines4/5

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

It establishes clear context for when to reach for this tool (peer comparison of a single concept across multiple tickers for one period). However, it never explicitly names the single-company alternative or states exclusions, leaving the agent to infer the boundary from the sibling name alone.

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

CompareInstitutionPortfoliosPortfolio Overlap Between InstitutionsA
Read-only

Compare two institutions' 13F portfolios on their latest common report date. Returns Jaccard and dollar-weighted overlap, portfolio totals, and shared or unique positions. Published values normally use report-date closing prices, may fall back to filer values, and can be zero when unavailable. Resolve filer names with SearchInstitutions. For mutual-fund or ETF NPORT portfolios, use GetFundProfile.

NameRequiredDescriptionDefault
maxResultsNoMaximum number of stocks to return (default: 30, clamped to 1-500)
reportDateNoQuarter-end 13F report date in YYYY-MM-DD format (defaults to the latest common quarter; an off-quarter date snaps to the nearest common report on or before it)
institutionName1YesFirst institution name or CIK (a unique partial resolves; ambiguous partials return candidate CIKs)
institutionName2YesSecond institution name or CIK (a unique partial resolves; ambiguous partials return candidate CIKs)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, but the description adds substantial behavioral context: it lists the exact overlap metrics returned, notes that prices normally use report-date closing values but may fall back to filer values and can be zero when unavailable. This data-quality caveat is valuable beyond the annotation, though it doesn't cover auth or rate limits.

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?

Four efficiently front-loaded sentences: purpose, return values, data caveat, and alternatives. Each sentence adds useful information, though the data-quality sentence could be slightly tighter without losing meaning.

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 comparison tool with no output schema, the description adequately explains return values, data caveats, and alternative tools. It does not mention the maxResults limit or pagination behavior, but the schema covers maxResults, and no output schema exists to require additional explanation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters thoroughly. The description adds the name-resolution tip and clarifies the 'common report date' concept, which gives some extra meaning, but the baseline of 3 is appropriate since the schema carries the primary documentation burden.

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

Purpose5/5

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

States a specific verb (Compare), resource (institutions' 13F portfolios), and scope (latest common report date). It also names the return contents and differentiates from sibling tools like GetFundProfile and SearchInstitutions. An agent can immediately tell what this tool does.

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 names alternatives for specific cases: 'Resolve filer names with SearchInstitutions' and 'For mutual-fund or ETF NPORT portfolios, use GetFundProfile.' These are clear when-to-use and when-not-to-use directives that prevent mis-invocation.

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

GetAverageTrueRangeAverage True Range (ATR)A
Read-only

Average True Range (ATR) for a stock. Wilder's volatility measure built from the True Range (max of high-low, |high-prev_close|, |low-prev_close|) and smoothed recursively. Higher ATR means wider daily moves; commonly used for position sizing and stop placement. ATR is denominated in the stock's price units (USD for a US listing, the listing's own quote unit otherwise). The smoothing is warmed up on price history fetched before startDate, so values do not depend on the requested range's left edge.

NameRequiredDescriptionDefault
periodNoSmoothing window (default: 14)
tickerYesStock ticker symbol (e.g., AAPL, MSFT). Class shares use a dash (BRK-B); the dot form (BRK.B) is also accepted. A listing on another exchange is MIC:TICKER (XPAR:AIR).
endDateNoEnd date in YYYY-MM-DD format (defaults to latest available)
startDateNoStart date in YYYY-MM-DD format (defaults to 6 months ago)
maxResultsNoMaximum number of records to return (default: 60, max: 500); the newest rows are kept and listed newest first.

TDQS

A3.7/5.0
Behavior4/5

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

With readOnlyHint=true already covering the safety profile, the description adds real value beyond the annotation: it discloses the unit denomination (USD or the listing's quote unit) and, notably, the warm-up behavior so results don't depend on the range's left edge. This is meaningful context an agent could not get from annotations alone, though it doesn't cover return shape or rate limits.

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?

Four sentences, front-loaded with the definition of ATR, then formula, interpretation, units, and a subtle warm-up caveat. Every sentence contributes; the parenthetical formula is dense but earns its place for an indicator tool.

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 single-indicator computation tool with no output schema, the description supplies computation method, units, and warm-up semantics – enough for an agent to call and interpret it. Return-value format is not described, but a technical-indicator series needs little explanation.

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 all five parameters are already documented in the schema; the baseline is 3. The warm-up sentence adds interpretive meaning relevant to startDate, but the description otherwise adds little parameter detail beyond what the schema already provides.

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 names a specific indicator (ATR), defines it precisely as Wilder's volatility measure, and states what it represents for a stock. An agent can clearly distinguish this from sibling technical indicators like GetBollingerBands or GetStochasticOscillator. It stops short of an explicit sibling comparison, so a 4 rather than a 5.

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?

It gives interpretive context ('higher ATR means wider daily moves') and names use cases ('position sizing and stop placement'), which implies when the tool is relevant. However, it provides no explicit when-to-use/when-not guidance or routing against the numerous sibling indicators, leaving selection to inference.

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

GetBollingerBandsBollinger BandsA
Read-only

Bollinger Bands for a stock. A middle band (simple moving average of close) with upper and lower bands set a number of standard deviations above and below it. Bands widen when volatility rises and contract when it falls; price touching the upper/lower band is a common overbought/oversold cue. Includes %B ((close-lower)/(upper-lower)) and bandwidth ((upper-lower)/middle) columns. The moving-average window is warmed up on price history fetched before startDate, so values do not depend on the requested range's left edge.

NameRequiredDescriptionDefault
periodNoMoving-average window (default: 20)
stdDevNoStandard deviations for the upper/lower bands (default: 2)
tickerYesStock ticker symbol (e.g., AAPL, MSFT). Class shares use a dash (BRK-B); the dot form (BRK.B) is also accepted. A listing on another exchange is MIC:TICKER (XPAR:AIR).
endDateNoEnd date in YYYY-MM-DD format (defaults to latest available)
startDateNoStart date in YYYY-MM-DD format (defaults to 6 months ago)
maxResultsNoMaximum number of records to return (default: 60, max: 500); the newest rows are kept and listed newest first.

TDQS

A3.8/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 additionally discloses that the moving-average window is warmed up on price history before startDate, which prevents an important misinterpretation of values near the left edge of the requested range.

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 contributing distinct information: definition, interpretation, extra columns, and warm-up behavior. It is front-loaded and free of redundant 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?

For an indicator tool with no output schema, the description explains the returned conceptual columns (%B, bandwidth) and the warm-up behavior. It is nearly complete, though it could mention tool-selection context for a fully complete definition.

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 all six parameters are already documented in the schema. The description adds context about the warm-up behavior affecting period/startDate, but does not add syntax or format details beyond the schema 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?

The description names the specific indicator and defines its components (middle band, upper/lower bands, %B, bandwidth). This is concrete enough for an agent to distinguish it from sibling indicator tools such as GetStochasticOscillator or GetAverageTrueRange.

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?

It explains what the indicator means (overbought/oversold cue when price touches a band), but gives no guidance on when to choose this tool over alternatives, no exclusions, and no prerequisites for use.

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

GetCftcPositioningCFTC Futures Positioning (COT)A
Read-only

Get Commitments of Traders (COT) positioning data for a specific futures contract. Shows commercial and non-commercial positions over time. Values are contract counts from the legacy futures-only COT report (positions as of each Tuesday, published Friday). Use SearchCftcMarkets to find available market codes.

NameRequiredDescriptionDefault
endDateNoEnd date in YYYY-MM-DD format (defaults to latest available)
startDateNoStart date in YYYY-MM-DD format (defaults to 1 year ago)
marketCodeYesCFTC market code, common contract name, or standard futures symbol (e.g., 067651, WTI, ES, Gold futures)
maxResultsNoMaximum number of reports to return (default: 52, max: 500). When the range holds more reports the newest are kept; rows are always listed oldest to newest.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true, so safety is covered. The description adds meaningful data semantics beyond that: values are contract counts, sourced from the legacy futures-only COT report, with positions as of Tuesday and published Friday. This reporting-lag context is valuable for interpreting results, though it says nothing about pagination or rate limits.

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 short sentences, each carrying distinct information (what it returns, what the values mean, source/cadence, and where to get market codes). The core purpose is front-loaded and there is 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?

For a read-only tool with full schema coverage and no output schema, the description supplies the interpretive context (units, report source, publication cadence) an agent needs. The main omission is routing versus GetLatestCftcPositioning, which matters given the near-identical sibling name.

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 all four parameters (marketCode, startDate, endDate, maxResults) are already documented, including defaults, formats, and the newest-kept behavior. The description adds nothing parameter-specific, so the 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?

The description states a specific verb and resource: 'Get Commitments of Traders (COT) positioning data for a specific futures contract', and clarifies the value semantics (contract counts, commercial/non-commercial positions). However, it does not distinguish itself from the sibling GetLatestCftcPositioning, which an agent could easily confuse with this historical-range tool.

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?

It gives one concrete prerequisite: 'Use SearchCftcMarkets to find available market codes', which is genuinely helpful. But it offers no guidance on when to choose this tool over GetLatestCftcPositioning or what happens when the requested market is unavailable.

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

GetCongressionalTradesCongressional Trades by StockA
Read-only

Get congressional securities transactions for a specific ticker (newest first, last year by default). Shows which members of Congress reported a purchase or sale, with transaction and filing dates; amounts are disclosed ranges, not exact values, and Asset identifies the filed instrument (such as stock, option, or bond). Use GetMemberTrades for one member's transactions across all tickers.

NameRequiredDescriptionDefault
offsetNoNumber of matching trades to skip before returning rows (default: 0)
tickerYesListed security ticker (e.g., AAPL, VOO, MSFT)
endDateNoEnd date in YYYY-MM-DD format (defaults to today)
startDateNoStart date in YYYY-MM-DD format (defaults to 1 year ago)
maxResultsNoMaximum number of trades to return (default: 50, max: 500, newest first)
transactionTypeNoFilter by transaction type: Purchase or Sale; the synonyms Buy/Sell are accepted (defaults to all)

TDQS

A4.4/5.0
Behavior4/5

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

The readOnlyHint annotation already establishes that this is a safe read. The description adds genuinely useful behavioral context beyond that: results are newest-first, the default window is one year, and amounts are disclosed ranges rather than exact values. Minor gap: nothing about pagination/offset interplay or response size limits.

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, all earning their place: scope, then return-shape caveats, then the alternative-tool routing. Front-loaded with the ticker scope so the agent gets the critical selector first.

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

Completeness4/5

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

With no output schema, the description usefully characterizes the returned fields (members, purchase/sale, transaction and filing dates, disclosed amount ranges, Asset instrument type), which the agent would otherwise have to guess. Slightly light on pagination behavior for a tool with an offset parameter, but otherwise complete.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter (offset, ticker, startDate, endDate, maxResults, transactionType) is already documented in the schema itself. The description only re-states the newest-first ordering and the one-year default, adding no syntax or semantic detail beyond the structured fields.

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) and resource (congressional securities transactions) scoped to a ticker, which immediately distinguishes it from the member-centric sibling. The ticker scope is baked into the first clause so an agent can route without opening the 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?

Explicitly names the alternative tool and the condition that selects it: 'Use GetMemberTrades for one member's transactions across all tickers.' Combined with the ticker-scoped purpose, the when-to-use decision is fully determined.

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

GetDividendHistoryDividend HistoryA
Read-only

Get the stored declared cash dividends of an exact stock or ETF listing, newest first. Each row gives the ex-dividend date and cash amount per share: in USD for a US listing, and in the listing's trading currency for a listing on another exchange (MIC:TICKER). Date filters apply to the ex-dividend date. Future ex-dates can appear after a dividend is declared. Each listing reports its own payments: a share class (BRK-A beside BRK-B) or a fund series sharing its trust's filer (SCHD beside FNDA) never inherits another listing's dividends.

NameRequiredDescriptionDefault
offsetNoNumber of newest matching records to skip for pagination (default: 0).
tickerYesListed stock or ETF ticker (e.g., AAPL, BRK-A, SCHD); a listing on another exchange is MIC:TICKER (XPAR:AIR).
endDateNoOptional latest ex-dividend date in YYYY-MM-DD format.
startDateNoOptional earliest ex-dividend date in YYYY-MM-DD format.
maxResultsNoMaximum number of records to return (default: 20, max: 500).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true; the description adds substantial behavior beyond that: currency varies by listing (USD for US, trading currency for MIC:TICKER), future ex-dates can appear after declaration, and each listing reports its own payments without inheriting from related listings. These are non-obvious traits an agent needs, though return shape and pagination behavior are not described.

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?

Purpose is front-loaded in the first sentence, with supporting constraints following in order of relevance. Four sentences is slightly long, and the final listing-independence sentence is verbose, but each point carries real 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?

With no output schema, the description correctly carries the burden of describing return values (ex-dividend date plus cash amount per share) and their currency basis, and it covers date-filter semantics, ordering, and the future-ex-date caveat. An agent has everything needed to call 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, but the description adds real meaning by clarifying that date filters operate on the ex-dividend date (not payment or declaration date) and restates the currency-per-listing rule that no parameter captures. It does not add further syntax 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?

Opens with a specific verb and resource: 'Get the stored declared cash dividends of an exact stock or ETF listing, newest first.' It clarifies the data domain (declared cash dividends) and scope (a single exact listing), leaving no ambiguity about what is returned.

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 context by stating that date filters apply to the ex-dividend date and that listings must be exact, but it never says when to reach for this tool versus alternatives (e.g., price vs. dividend data). There is no direct sibling for dividends, so this gap is partly structural, but no explicit when/when-not guidance is given.

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

GetEconomicCalendarEconomic Release CalendarA
Read-only

Get the economic release calendar — scheduled (upcoming) and recent publication dates of US macro data releases, with the FRED series each release updates and an importance tier per release (High = the tier-1 scheduled market movers: CPI, PPI, Employment Situation, GDP, PCE, retail sales; Medium = other genuine scheduled prints; Low = daily rate/market levels like SOFR or VIX). FOMC meetings are NOT included — FRED's release feed has no real FOMC meeting dates; use the Federal Reserve's published meeting calendar for those. Defaults to the next 30 days. Use minImportance=high to see only the market movers, and GetEconomicIndicator to fetch a series' data after it prints.

NameRequiredDescriptionDefault
endDateNoEnd date in YYYY-MM-DD format (defaults to 30 days after the start date)
startDateNoStart date in YYYY-MM-DD format (defaults to today, UTC)
maxResultsNoMaximum number of release dates to return (default: 100, max: 500, chronological)
minImportanceNoMinimum importance tier to include: low, medium, or high (defaults to low = everything)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, and the description reinforces this by describing a read-only calendar query. It goes beyond by detailing what is not included (FOMC meetings), explaining importance tiers with examples, and noting default time ranges. 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 concise (4 sentences) and well-structured, starting with the core purpose and then adding relevant details. Every sentence adds value: purpose, exclusions, defaults, and usage tips. 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?

The description covers key aspects: what the tool returns (publication dates, FRED series, importance tiers), what it excludes, and default behavior. However, it does not explicitly describe the output format (e.g., array of objects). Given no output schema, a hint about structure would improve completeness.

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 context by explaining defaults (30-day window, max 100 results) and the practical use of minImportance to filter market movers. While not repeating schema, it enriches meaning with usage 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 'Get the economic release calendar' for US macro data, specifying it includes scheduled and recent publication dates, FRED series, and importance tiers. It distinguishes from sibling GetEconomicIndicator and explicitly excludes FOMC meetings, which are handled by another tool.

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, including defaults (next 30 days), filtering with minImportance (high for market movers), and a clear alternative: use GetEconomicIndicator to fetch actual data after release. It also warns that FOMC meetings are not included, directing to the Fed's calendar.

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

GetEconomicIndicatorEconomic Indicator HistoryA
Read-only

Get time series data for a FRED economic indicator. Returns historical observations for indicators like FEDFUNDS (fed funds rate), CPIAUCSL (CPI inflation), UNRATE (unemployment), GDP, T10Y2Y (yield spread), VIXCLS (VIX), SP500, MORTGAGE30US, M2SL (money supply), and more. Covers the curated ~40-series set Equibles tracks, not the full FRED catalog — use SearchEconomicIndicators to find available series.

NameRequiredDescriptionDefault
endDateNoEnd date in YYYY-MM-DD format (defaults to latest available)
seriesIdYesFRED series ID or standard indicator name (e.g., FEDFUNDS, fed funds rate, core CPI, jobless claims)
startDateNoStart date in YYYY-MM-DD format (defaults to 1 year before the end date)
maxResultsNoMaximum number of observations to return (default: 100, max: 500). When the range holds more, the newest maxResults are kept; rows are always listed in ascending date order.

TDQS

A3.9/5.0
Behavior4/5

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

readOnlyHint already establishes this as a safe read. The description adds meaningful non-obvious context: the curated ~40-series coverage rather than the full FRED catalog, which prevents an agent from assuming arbitrary series IDs work. It does not address error behavior for unknown series IDs.

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?

Purpose is front-loaded, followed by scope and the routing hint to SearchEconomicIndicators. The long inline list of nine example indicators is somewhat list-heavy and partly redundant with the schema, but each element is informative.

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

Completeness4/5

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

With no output schema, the description at least states that it returns historical observations, and the schema fully documents inputs. The exact observation shape (date/value) is not spelled out, a minor gap for a data-returning 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 rich descriptions for all four params (formats, defaults, maxResults ordering). The description's example series IDs largely duplicate the schema's own examples, so it adds little param-level meaning beyond narrowing seriesId to the curated set. 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+resource ('Get time series data for a FRED economic indicator') and clarifies it returns historical observations. It differentiates from SearchEconomicIndicators by name, though it does not explicitly contrast with the nearest sibling GetLatestEconomicIndicators.

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?

Names the alternative (SearchEconomicIndicators) and the condition for using it ('to find available series'), plus a scope constraint that this covers only the curated ~40-series set. No explicit when-not-to-use guidance beyond that, 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.

GetFailsToDeliverFails-to-Deliver DataA
Read-only

Get fails-to-deliver (FTD) data for an exact listed stock or exchange-traded fund from the SEC's twice-monthly FTD files. Quantity is the aggregate net fail-to-deliver position OUTSTANDING on each settlement date — a balance, not that day's new fails, so never sum Quantity across dates. Price is the previous trading day's closing price (SEC file convention, not a settlement price) and Value = Quantity × Price. Within the covered window (the output names the earliest fully covered settlement date), dates absent from the table had no reported fails; earlier dates are only partially covered, so their absence is not evidence of no fails. The SEC publishes each half-month batch with roughly a two-week lag, so the newest rows trail today. High or persistent FTD balances may indicate naked short selling or settlement issues.

NameRequiredDescriptionDefault
tickerYesExact stock or ETF ticker symbol (e.g., AAPL, GME, SPY)
endDateNoEnd date in YYYY-MM-DD format (defaults to latest available)
startDateNoStart date in YYYY-MM-DD format (defaults to 3 months ago)
maxResultsNoMaximum number of records to return — keeps the most recent N settlement dates in the range, displayed oldest to newest (default: 90, max: 500)

TDQS

A4.4/5.0
Behavior5/5

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

Annotations supply only readOnlyHint=true, and the description adds substantial beyond-schema behavior: the balance-vs-flow nature of Quantity, the prior-close convention for Price, the covered-window semantics, publication lag, and what absence of a date does or does not mean. This is exactly the interpretive detail an agent needs for a data-quality-sensitive tool.

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?

Purpose and source are front-loaded, followed by field semantics and coverage caveats, with no filler sentences. It is dense and slightly long, but nearly every clause carries interpretive weight rather than restating the schema.

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

Completeness5/5

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

With no output schema, the description fully carries the burden: it defines the returned fields, their units and conventions, the valid date window, and the lag behavior. An agent can interpret results correctly 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?

Schema description coverage is 100%, so ticker, startDate, endDate, and maxResults are already documented (including the max: 500 bound and the 'most recent N, oldest-to-newest' ordering). The description's detail concerns output fields (Quantity, Price, Value) rather than inputs, so it adds little input-level meaning beyond the schema; 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?

States a specific verb and resource — 'Get fails-to-deliver (FTD) data for an exact listed stock or exchange-traded fund from the SEC's twice-monthly FTD files' — and pins the source and cadence. This clearly separates it from siblings like GetShortInterest or GetShortVolume.

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 clear interpretive context: never sum Quantity across dates, dates absent within the window mean no reported fails, earlier dates are only partially covered, and rows trail today by ~two weeks. It does not, however, name alternative tools (e.g., GetShortInterest) or state when to prefer one over the other, so it stops short of explicit routing.

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

GetFdaAdvisoryCommitteeMeetingsFDA Advisory Committee CalendarA
Read-only

Get scheduled FDA advisory-committee (AdComm) meetings, sourced from the FDA.gov advisory-committee calendar, each with a link to its FDA meeting page. Defaults to meetings in the next 90 days; pass a date range to look further ahead. This is a forward-looking calendar of announced meetings, not a historical archive — coverage starts in late 2025 — and entries are the FDA's own listings, not linked to stock tickers.

NameRequiredDescriptionDefault
endDateNoEnd date in YYYY-MM-DD format (defaults to 90 days after the start)
startDateNoStart date in YYYY-MM-DD format (defaults to today)
maxResultsNoMaximum number of meetings to return (default: 60, soonest first)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true, so the description carries most of the burden and delivers real context: coverage begins in late 2025, entries are the FDA's own listings, they are not mapped to stock tickers, and each includes a link to its FDA meeting page. It could still say more about result behavior such as pagination or sort beyond 'soonest first', which the schema covers.

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

Conciseness5/5

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

Three sentences, front-loaded with the resource and source, then defaults, then limitations. Every sentence carries information an agent needs; 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?

For a simple read-only calendar lookup with a fully described 3-parameter schema and no output schema, the description covers scope, defaults, source, and data limitations (late-2025 coverage, no ticker linkage). The remaining gap is minor: return shape details beyond 'each with a link to its FDA meeting page'.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters, their formats, and defaults. The description restates the 90-day default and the date-range override, adding only slight reinforcement beyond the schema's 'defaults to 90 days after the start'.

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) and resource (scheduled FDA advisory-committee meetings), plus the source (FDA.gov advisory-committee calendar). None of the 60+ siblings cover FDA regulatory events, and the description makes the domain unmistakable.

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 the default window (next 90 days) and the condition for overriding it (pass a date range to look further ahead). It also draws the when-not boundary clearly: a forward-looking calendar, not a historical archive, so an agent knows not to use it for past meetings.

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

GetFinancialFactFinancial Concept LookupA
Read-only

Get a single financial concept (e.g. revenue, net income, diluted EPS, total assets, operating cash flow) over time for a company, sourced from SEC Company Facts (structured XBRL), or from the issuer's regulatory filings for a listing outside the US. Returns a time series using the latest restated value unless asOriginallyReported is set: one row per fiscal period for flows, one row per as-of date for balances and share counts. Each row carries its actual period start/end; fiscal years/quarters follow the company's own fiscal calendar. Warns when the selected alias ends materially before the company's other structured facts, which can indicate an XBRL tag change. Dimensioned disclosures such as customer concentration are outside this consolidated-series tool. For a full statement use GetFinancialStatement; to compare peers use CompareFinancialFact.

NameRequiredDescriptionDefault
formNoOptional SEC form filter, e.g. '10-K' or '10-Q'
tickerYesStock ticker symbol (e.g., AAPL, MSFT); a listing on another exchange is MIC:TICKER (XPAR:AIR).
toDateNoOptional latest period-end date, YYYY-MM-DD
conceptYesConcept alias, e.g. 'revenue', 'net-income', 'eps-diluted', 'total-assets', 'operating-cash-flow'. Call with an unknown value to list supported aliases.
fromDateNoOptional earliest period-end date, YYYY-MM-DD
maxResultsNoMaximum periods to return, newest first (default 40, max 200)
fiscalPeriodNoOptional fiscal-period filter: 'FY' (annual only) or 'Q1'..'Q4'. Note that discrete Q4 rows exist only where the filer reported a discrete fourth quarter (most large filers stopped after ~2021).
asOriginallyReportedNoWhen true, show the earliest canonical periodic filing instead of the latest restatement within that source priority. Default false.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint, so the description carries the behavioral burden and does so well: it discloses the restated-vs-originally-reported default, the row semantics for flows vs balances, the fiscal-calendar behavior, and a warning emitted when an alias ends materially early (tag change). This is rich context beyond the read-only hint.

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?

Front-loaded with what the tool returns and its source, then the restatement and period-row behavior, then routing to siblings. Dense but every sentence earns its place; slightly long, but nothing is wasted.

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

Completeness5/5

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

With no output schema, the description must explain the return shape and it does: one row per fiscal period for flows, one per as-of date for balances, each row carrying actual period start/end, plus the early-alias warning. 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning for asOriginallyReported (earliest canonical filing vs latest restatement) and clarifies period semantics tied to fiscalPeriod and the fiscal calendar. It stops short of adding syntax detail for form/fromDate/toDate beyond what the schema already states.

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+resource (get a single financial concept over time for a company), lists concrete concept examples, and names the data source (SEC Company Facts / issuer filings). It explicitly differentiates from siblings by pointing to GetFinancialStatement for full statements and CompareFinancialFact for peer comparison.

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

Usage Guidelines5/5

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

Gives explicit routing: use GetFinancialStatement for a full statement, CompareFinancialFact for peers, and states the scope boundary that dimensioned disclosures like customer concentration are outside this consolidated-series tool. When and when-not are both covered.

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

GetFinancialStatementFinancial StatementsA
Read-only

Get a company's income statement, balance sheet, or cash-flow statement for a given fiscal year and period, sourced from SEC Company Facts (structured XBRL), or from the issuer's regulatory filings for a listing outside the US. Returns the standard line items (e.g. revenue, net income, total assets, operating cash flow) with the latest-restated value for one exact statement period end. Quarterly flow rows are always discrete quarters: when the filer reports only cumulative year-to-date values in a currency, the quarter is derived by exact subtraction from the preceding cumulative period and marked Derived. Company-specific dimensional facts (e.g. product-segment revenue) are not included — use GetRevenueBreakdown for segment/geographic revenue, and GetFinancialFact or CompareFinancialFact for one line item across periods or across companies.

NameRequiredDescriptionDefault
yearNoFiscal year, e.g. 2023. Defaults to the year of the latest period with line items to show.
periodNoFiscal period: 'FY' (annual) or 'Q1'..'Q4'. Defaults to the latest period with line items to show. Most filers report no discrete Q4 income/cash-flow facts in XBRL (the fourth quarter is embedded in the full-year figure) — use 'FY' for annual figures.
tickerYesStock ticker symbol (e.g., AAPL, MSFT, GME); a listing on another exchange is MIC:TICKER (XPAR:AIR).
statementNoStatement: 'income' (income statement), 'balance' (balance sheet), or 'cashflow' (cash-flow statement); the aliases 'is'/'p&l', 'bs' and 'cf' also work. Defaults to income.income

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare readOnlyHint, so the description carries the main behavioral burden and adds substantial context: SEC XBRL sourcing, latest-restated value selection for one exact period end, and the discrete-quarter derivation rule marked as Derived. It also discloses scope exclusions, which is valuable for avoiding misuse.

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 dense sentences front-load the core purpose and source, followed by return behavior, derivation logic, and exclusions. Every sentence adds distinct routing or behavioral information with no filler.

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

Completeness5/5

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

For a read-only statement tool with no output schema, the description is unusually complete: it explains purpose, data source, return scope, derivation behavior, and explicit alternatives. Combined with the readOnlyHint annotation, nothing material 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?

Schema description coverage is 100%, so the schema already documents ticker, year, period, and statement with formats and defaults. The description adds conceptual context but no new parameter syntax or constraints beyond what the schema provides, 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?

States a specific verb and resource: get a company's income statement, balance sheet, or cash-flow statement for a fiscal year and period. It also names the data source and explicitly differentiates from siblings like GetRevenueBreakdown and GetFinancialFact, so an agent can select it without opening other 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?

Provides explicit when-to-use and when-not-to-use guidance: company-specific dimensional facts are excluded, and it routes segment/geographic revenue to GetRevenueBreakdown and single-line-item comparisons to GetFinancialFact or CompareFinancialFact. It also clarifies the common Q4 reporting pitfall and directs users to FY for annual figures.

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

GetForm144ProposedSalesProposed Insider Sales (Form 144)A
Read-only

Get recent proposed insider sales for a stock from SEC Form 144 notices. Each Form 144 is an affiliate's declaration of intent to sell restricted or control securities, showing the seller, their relationship to the company, the number of shares and aggregate market value to be sold, the proposed sale as a share of the issuer's current shares outstanding, the approximate sale date, the broker, and the filer's remarks (including any stated 10b5-1 plan). Results are the most recent notices first and a note flags when more exist than were returned; use fromDate/toDate to scope a period (heavy 10b5-1 filers can flood the recency window with small daily notices). A proposal may never execute; a completed sale may later appear on Form 4 or 5 only when it is reportable there.

NameRequiredDescriptionDefault
offsetNoNumber of matching notices to skip before returning rows (default: 0)
tickerYesCompany ticker symbol (e.g., AAPL, MSFT)
toDateNoOptional latest filing date to include, ISO format yyyy-MM-dd (e.g., 2025-12-31)
fromDateNoOptional earliest filing date to include, ISO format yyyy-MM-dd (e.g., 2025-01-01)
maxResultsNoMaximum number of notices to return (default: 50, max: 500; values outside 1-500 are clamped)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true, and the description adds real behavioral context: results are ordered most-recent-first, a note flags when more exist than were returned, and it cautions that a proposal may never execute and only appears on Form 4/5 when reportable. It does not spell out offset/pagination mechanics explicitly, but the truncation note covers the key risk.

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?

Front-loads the purpose and packs returned fields, ordering, and caveats into one dense paragraph with little waste. It is on the longer side, but each clause carries actionable information rather than 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?

With no output schema, the description enumerates the returned fields (seller, relationship, shares, aggregate value, percentage of shares outstanding, sale date, broker, remarks/10b5-1) and covers ordering, truncation, and interpretation caveats. An agent has everything needed to call and interpret 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 description coverage is 100%, so the baseline is 3, but the description earns a step up by explaining the purpose of fromDate/toDate (scoping a period to avoid 10b5-1 flooding), which adds decision value beyond the schema's format 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?

States a specific verb and resource ('Get recent proposed insider sales ... from SEC Form 144 notices') and effectively differentiates from the Form 4/5 tools by clarifying these are declarations of intent, not completed sales. An agent can distinguish this from GetInsiderTransactions 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 Guidelines4/5

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

Gives clear context on when to scope with fromDate/toDate and warns that heavy 10b5-1 filers can flood the recency window with small daily notices. It stops short of naming an alternative sibling tool or stating explicit when-not conditions, so it is clear but not fully routing.

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

GetFormDOfferingsExempt Offerings (Form D)A
Read-only

Get recent exempt securities offerings (private placements) for a company from SEC Form D notices. Each Form D reports a Regulation D offering, showing the issuer, the date of first sale, the total offering amount (a dollar figure or "Indefinite"), the amounts sold and remaining, the minimum investment, the number of investors, the claimed exemptions, whether the notice is an amendment (D/A), and its SEC accession number. Ongoing offerings are re-noticed through D/A amendments that RESTATE the same offering — group rows by first-sale date and offering amount and use only the latest notice of each chain, or capital raised will be counted several times over. Use this to track how a company is raising private capital alongside its public filings.

NameRequiredDescriptionDefault
offsetNoNumber of matching notices to skip before returning rows (default: 0)
tickerYesCompany ticker symbol (e.g., AAPL, MSFT)
toDateNoOptional latest filing date to include, ISO format yyyy-MM-dd (e.g., 2024-12-31)
fromDateNoOptional earliest filing date to include, ISO format yyyy-MM-dd (e.g., 2024-01-01)
maxResultsNoMaximum number of notices to return (default: 50, max: 500; values outside 1-500 are clamped)

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, so the description carries the real burden — and it delivers. The warning that ongoing offerings are re-noticed through D/A amendments that RESTATE the same offering, with a dedup rule (group by first-sale date and offering amount, keep only the latest notice), is a genuinely valuable behavioral caveat that prevents double-counting capital raised.

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?

It is a fairly dense block, but it is front-loaded (what it returns first, then the critical D/A caveat, then the use context) and nearly every sentence earns its place. The enumeration of returned fields is long but necessary given no output schema.

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

Completeness5/5

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

With no output schema, the description must describe the return payload — and it enumerates issuer, date of first sale, offering amount (dollar figure or 'Indefinite'), amounts sold and remaining, minimum investment, investor count, exemptions, D/A amendment status, and accession number. Nothing material an agent needs to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% and all five parameters are well documented in the schema (offset, ticker, toDate, fromDate, maxResults with defaults and clamping rules). The description adds no parameter-level syntax or format detail beyond what the schema already provides, so the baseline 3 is correct.

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 recent exempt securities offerings (private placements) for a company from SEC Form D notices' — and lists the exact fields reported. No sibling tool covers Form D offerings, so an agent can immediately tell this is the one tool for private-placement capital raises.

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?

'Use this to track how a company is raising private capital alongside its public filings' gives a clear use context, and the D/A grouping guidance tells the agent how to consume results correctly. It stops short of naming explicit alternatives or when-not-to-use conditions, so it's clear but not fully routing.

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

GetFundNcenReportsFund Operations (Form N-CEN)A
Read-only

Get operational data for a registered investment company from its SEC Form N-CEN annual reports. Accepts an exchange-listed ticker or an exact fund identifier from SearchFunds, including a profile id, SEC series id, stored series ticker, or verified share-class alias. Each N-CEN shows the registrant's classification, Investment Company Act file number, reporting period, first/last-filing flags, latest service providers, and an exact filed-name provider history. N-CEN is filed at registrant level; this dataset currently ingests it through tracked issuer feeds, so a series inside an untracked multi-series trust can resolve correctly but still have no N-CEN report on record. Only registered funds file N-CEN; operating companies return no data.

NameRequiredDescriptionDefault
fundYesFund or ETF ticker, profile id, SEC series id, or verified share-class alias (e.g., MXF, IVV, S000004344, VOO)
maxResultsNoMaximum number of annual reports to return (default: 10, max: 500)

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, it discloses non-obvious behavior an agent cannot infer: N-CEN is filed at registrant level rather than series level, ingestion runs through tracked issuer feeds, and a resolvable series can still yield zero reports. That is exactly the kind of caveat that prevents a false 'no data means not a fund' conclusion.

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?

Four sentences, front-loaded with purpose, then identifiers, then returned content, then coverage caveats — no filler. The coverage-caveat sentence is long and could be tightened, which keeps it just shy of a 5.

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

Completeness5/5

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

There is no output schema, so the description carries the return-value burden and does: registrant classification, Investment Company Act file number, reporting period, first/last-filing flags, latest service providers, and filed-name provider history. Combined with the coverage caveats, an agent has everything needed to call this correctly and interpret empty 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%, so the `fund` and `maxResults` parameters are fully documented in structured form (including accepted identifier forms and the default/max on maxResults). The description restates the identifier types but adds no syntax, resolution-order, or format detail beyond the schema, so the baseline 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?

Opens with a specific verb+resource: retrieve operational data for a registered investment company from SEC Form N-CEN annual reports. The scope is narrow enough (N-CEN only, registered funds only) to distinguish it from the broad sibling GetFundProfile 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 Guidelines4/5

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

Points the agent at SearchFunds as the source of valid identifiers and states the exclusion cases explicitly (non-registered/operating companies return no data; untracked multi-series trusts may resolve but have no report). It never names a concrete alternative tool to call instead for those cases, so it stops short of a full 5.

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

GetFundProfileFund Profile and Top HoldingsA
Read-only

Get a registered fund's profile and largest stored holdings from its latest SEC Form NPORT-P report. Accepts a profile ID, SEC series ID, stored ticker, or verified alias from SearchFunds. Returns registrant, series, assets, reported and stored holding counts, and the largest stored positions. Some multi-series trusts store only tracked-stock positions; reported counts and asset totals still describe the full filing. Use GetFundsHoldingStock for the inverse lookup.

NameRequiredDescriptionDefault
fundYesFund profile id, SEC series id, stored series ticker, or verified share-class alias from SearchFunds (e.g., 'ishares-russell-2000-etf-s000004344', 'S000004344', 'IWM', or 'VOO').
offsetNoNumber of ranked holdings to skip before returning rows (default: 0)
maxResultsNoMaximum number of holdings to return, largest first (default: 20, max: 500)

TDQS

A4.1/5.0
Behavior4/5

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

The readOnlyHint annotation covers the safety profile, and the description adds genuinely new behavior: the NPORT-P provenance, what is returned (registrant, series, assets, reported vs stored counts, largest positions), and a data-quality caveat that some multi-series trusts store only tracked-stock positions while counts and asset totals reflect the full filing. It does not discuss pagination behavior for the offset/maxResults window.

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?

Four tight sentences, front-loaded with purpose, then inputs, then return contents, then the sibling handoff. Every sentence carries information; the only mild redundancy is the restatement of accepted identifier forms already in the schema.

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 three-parameter read tool with no output schema, the description covers source, accepted inputs, returned fields, and the stored-vs-reported caveat that an agent would otherwise get wrong. Pagination semantics are left to the schema, which handles them adequately.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters, including the accepted fund ID forms and the maxResults cap of 500. The description largely restates those accepted identifier types rather than adding format or syntax detail. 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?

States a specific verb and resource ('Get a registered fund's profile and largest stored holdings') plus the exact data source (latest SEC Form NPORT-P report). It explicitly names the sibling it is not — GetFundsHoldingStock is the 'inverse lookup' — so an agent can separate the two 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 Guidelines4/5

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

Names the alternative tool and the condition that selects it ('Use GetFundsHoldingStock for the inverse lookup'), and points at SearchFunds as the source of a valid 'verified alias'. It stops short of stating when-not to use this tool, but the routing to the sibling is explicit and actionable.

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

GetFundsHoldingStockFunds Holding a StockA
Read-only

Get the registered investment companies (mutual funds and ETFs) holding an exact stock or ETF listing, from SEC Form NPORT-P portfolio reports. The listed security's authoritative CUSIP (or, for a listing on another exchange written MIC:TICKER, its ISIN) is matched against the holding rows on each fund series' most recent report (series that stopped filing more than 18 months ago are excluded), so an exited position never shows as current. Returns the fund's registrant and series, the reporting period, the position size, its U.S.-dollar value, its share of the fund's net assets and the payoff profile (Long/Short), largest positions first. Report dates differ per fund series (each files on its own fiscal quarter), so values are as of each row's report date and cross-row totals mix as-of dates.

NameRequiredDescriptionDefault
offsetNoNumber of matching fund positions to skip before returning rows (default: 0)
tickerYesListed security ticker (e.g., AAPL, VOO); a listing on another exchange is MIC:TICKER (XPAR:AIR).
maxResultsNoMaximum number of fund positions to return, largest first (default: 20, clamped to 1-500)
registrantOrSeriesNoOptional registrant or series name filter (case-insensitive contains, e.g. 'Vanguard') — reaches positions beyond the largest 500

TDQS

A4.6/5.0
Behavior5/5

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

With only a readOnlyHint annotation, the description carries real behavioral load: it discloses the 18-month stale-series cutoff so exited positions don't read as current, and warns that per-series report dates differ so cross-row totals mix as-of dates. These are non-obvious caveats an agent could not derive from annotations or schema.

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

Conciseness4/5

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

Purpose and scope are front-loaded, and every sentence adds a distinct fact (source, matching key, staleness cutoff, returned fields, date-mixing caveat). It is dense and slightly run-on, but there is little wasted text.

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 no output schema, the description enumerates the returned fields (registrant/series, reporting period, position size, USD value, net-asset share, Long/Short payoff) and the ordering. Nothing an agent needs to call or interpret the result 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% (baseline 3), but the description adds genuine meaning: ticker resolution is via authoritative CUSIP/ISIN, results are ordered largest-first, and registrantOrSeries is explained as the way to reach positions beyond the largest 500. That last point materially clarifies a parameter the schema only labels generically.

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+resource (funds holding an exact stock/ETF listing) and pins the data source to SEC Form NPORT-P, which cleanly separates it from 13F-based siblings like GetTopHolders or GetMostHeldStocks. An agent knows exactly what population of holders is returned without opening the schema.

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?

Scope is unambiguous (mutual funds/ETFs only, exact CUSIP/ISIN match, stale series excluded), which implicitly routes the agent here vs institutional-holder tools. However, it never explicitly names an alternative tool or a when-not condition, so the routing is inferable rather than stated.

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

GetGovernmentContractsFederal Contracts by CompanyA
Read-only

Get federal government contract awards (from USAspending.gov) won by a specific public company. Shows the award (action) date, recipient named by the government, awarding agency, total value (obligated dollars plus unexercised ceiling — not revenue received), outlays when reported, period-of-performance end date, and description. Coverage: only prime contract awards of $1M or more that resolve to a listed company are included, so sums understate total federal revenue. Useful for gauging a company's reliance on federal spending; use GetTopGovernmentContractors to rank companies market-wide.

NameRequiredDescriptionDefault
agencyNoOptional case-insensitive substring filter on the awarding agency (e.g., 'Defense')
offsetNoNumber of matching awards to skip before returning rows (default: 0)
sortByNoSort order: 'amount' (largest total value first, default) or 'date' (most recent award first)amount
tickerYesStock ticker symbol (e.g., LMT, RTX, BA)
endDateNoEnd date in YYYY-MM-DD format (defaults to today)
startDateNoStart date in YYYY-MM-DD format, filtering on the award action date (defaults to 1 year ago)
maxResultsNoMaximum number of awards to return (default: 50)

TDQS

A4.2/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 covered. The description adds genuinely valuable context beyond that: the $1M prime-award threshold, the listed-company resolution requirement, and the caveat that totals understate federal revenue and that 'total value' includes unexercised ceiling rather than revenue received. However it says nothing about pagination or response shape. With annotations carrying safety, a 3 fits the lower bar for a non-mutating 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.

Conciseness4/5

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

Front-loaded with purpose then caveats, zero filler words, though the middle sentence is a dense list of return fields. Every sentence carries information; slight density cost keeps it off a 5.

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

Completeness5/5

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

With no output schema, the description carries the return-value burden and does so fully: it enumerates each returned field and qualifies the two that are most often misread (total value vs. revenue, outlays when reported). Combined with the explicit coverage limitations, an agent has everything needed to call and interpret 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%, with defaults, formats, and enum-like values ('amount'/'date') all documented inline. The description adds semantic meaning to the returned value field but little per-parameter detail beyond confirming date filtering uses the award action date. 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?

States a specific verb and resource (get federal contract awards from USAspending.gov) scoped to a specific public company, and explicitly names the sibling GetTopGovernmentContractors it is not. An agent can pick between the two without opening a 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?

Gives the use case ('gauging a company's reliance on federal spending') and an explicit alternative with condition ('use GetTopGovernmentContractors to rank companies market-wide'). It also flags the coverage limits that make it inappropriate as a total-revenue measure.

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

GetHolderMix13F Holder MixA
Read-only

Who holds a stock or ETF listing, by kind of 13F filer, quarter by quarter: each bucket's share of 13F common shares, its like-for-like change, and new and exited filers. Split by holder type (regulatory records, never names), measured style, turnover, horizon, 13F book size, client base, private funds or location. Also gives the active holders' like-for-like change, which leaves index-like books out.

NameRequiredDescriptionDefault
tickerYesListed security ticker (e.g., NVDA, VOO)
dimensionNoHow to split the holders: type (holder type, default), style, turnover, horizon, aum (13F book size), client (client base), pf (private funds), country (filer location)type
maxPeriodsNoQuarters to show, newest last (default 4, clamped to 1-12)

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true, and the description adds genuine behavioral context beyond that: results are anonymized aggregates by filer type, and the active-holder change deliberately excludes index-like books. That tells the agent what the numbers mean and what they omit, which annotations cannot convey.

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 output scope is front-loaded, but the two long sentences are dense and run-on, packing dimensions and the index-exclusion caveat together. It is informative yet heavier than needed for three parameters.

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

Completeness4/5

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

With no output schema, the description must explain return values and does so well: bucket share, like-for-like change, and new/exited filer counts, plus the active-holder variant. Only the routing against sibling holder tools is left implicit.

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 dimension parameter already lists its allowed values, so the schema carries the parameter burden. The description restates the dimension options and clarifies they are holder-splits rather than adding new semantics, so the 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 resource (13F holder mix for a stock/ETF) and the concrete outputs: each bucket's share of 13F common shares, like-for-like change, and new/exited filers. The 'regulatory records, never names' clause distinguishes it from name-level siblings like GetTopHolders, though it never names an alternative outright.

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?

Usage is only implied: the 'never names' note suggests this is the aggregate view versus a name-level tool, but there is no explicit when-to-use or when-to-prefer-a-sibling statement despite many overlapping neighbors (GetTopHolders, GetHolderTypeFlows, GetMostHeldStocks).

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

GetHolderTypeFlows13F Holder FlowsA
Read-only

Market-wide 13F money flows for a closed quarter by kind of filer: what each bucket bought and sold, net flow, net flow as % of its prior 13F book, and net buyers vs sellers. Buckets: holder type (regulatory records, never names), measured style, turnover, horizon, book size, client base, private funds or location. Optionally split by sector, with ETFs apart. Trades are priced at quarter-average prices; filers with no 13F the quarter before add no flow.

NameRequiredDescriptionDefault
bucketNoOne bucket token of the dimension (e.g. adv, idx, high) to list that bucket's flow by sector; implies groupBy=sector
groupByNonone (default) or sector: split each bucket's flow by sectornone
dimensionNoHow to split the filers: type (holder type, default), style, turnover, horizon, aum (13F book size), client (client base), pf (private funds), country (filer location)type
reportDateNoClosed quarter-end report date in YYYY-MM-DD format (defaults to the newest computed quarter; a later date reads the newest computed quarter, an earlier off-quarter date the computed quarter before it)

TDQS

A3.8/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description discloses genuine behavioral traits: trades are priced at quarter-average prices, filers with no prior-quarter 13F contribute no flow, and buckets are regulatory records that never name individuals. The last point is an important privacy disclosure not present in any structured field. It stops short of describing pagination or response format.

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 dense but front-loaded sentences: the purpose and output metrics come first, then the dimension list, then the pricing/prior-book caveat. Every sentence carries information; only minor tightening would help.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden and does so by naming the specific metrics returned (net flow, net flow as % of prior book, net buyers vs sellers). It is complete enough to call the tool correctly, though it omits any indication of result size or ranking order.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: it groups the dimension tokens as 'holder type, measured style, turnover, horizon, book size, client base, private funds or location' in plain language, notes that sector splitting is optional, and adds that ETFs are separated out ('with ETFs apart') — a sector-grouping detail absent from the schema.

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 states a specific verb and resource (market-wide 13F money flows for a closed quarter, broken down by kind of filer) and enumerates exactly what is produced (bought/sold, net flow, net flow as % of prior book, net buyers vs sellers). This clearly separates it from generic holder tools, though it does not explicitly name which sibling it supersedes. An agent can tell what it returns without opening the schema.

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 scope is implied ('closed quarter') and the bucket/sector options signal context, but there is no explicit when-to-use/when-not guidance and no named alternative (e.g., GetMarketWide13FActivity or GetHolderMix). The agent must infer selection from the sibling list rather than the text.

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

GetInsiderOwnershipInsider Ownership SummaryA
Read-only

Get a summary of insider ownership for a stock, ranked by total shares held. Shares come from each insider's most recent SEC Form 3/4/5 filing: the filing's closing balance per security and ownership bucket (actual shares only — options and other derivative holdings are excluded), summed into Direct and Indirect columns and restated onto today's split basis, so they can differ from the raw figures in older filings. Indirect can understate an insider holding through several vehicles, because a filing reports one balance per vehicle and only the last is kept. Former insiders may linger with stale dates or zero shares. Returns at most maxResults insiders (default 30). Use this to understand the insider ownership structure of a company; use GetInsiderTransactions for the underlying trades.

NameRequiredDescriptionDefault
offsetNoNumber of ranked insiders to skip before returning rows (default: 0, clamped to 0-100000). For the next page, add the returned row count to the clamped current offset; if the next offset exceeds 100000, narrow the filters instead. Stop when fewer than the effective page size (maxResults clamped to 1-500) are returned, or the response's total has been reached.
tickerYesCompany ticker symbol (e.g., AAPL, MSFT)
maxResultsNoMaximum number of insiders to return (default: 30, max: 500; values outside 1-500 are clamped)

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only include readOnlyHint=true, but the description adds rich behavioral context: data source (SEC Form 3/4/5), computation methodology (closing balance per security, actual shares only, excluded derivatives, restated to today's split basis), caveats about indirect understatement and stale/zero former insiders, and the default maxResults limit. This significantly exceeds 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 front-loaded and well-structured, moving from purpose to methodology to caveats to usage. However, it is somewhat verbose—some sentences (e.g., the detailed explanation of indirect understatement) could be tightened without losing essential meaning.

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?

No output schema exists, so the description should explain return values. It covers the key output aspects (ranked by total shares held, Direct and Indirect columns, maxResults limit) but does not specify other returned fields like insider names or relationships. This is largely adequate for a summary tool, though slightly incomplete.

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 all parameters are already well-documented in the input schema. The description mentions maxResults default 30 but adds no new parameter semantics beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.

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) and resource (insider ownership summary for a stock), and explicitly distinguishes from the sibling GetInsiderTransactions by saying to use that for underlying trades. An agent can immediately understand what this tool does and when to pick it over the alternative.

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

Usage Guidelines5/5

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

Explicitly says 'Use this to understand the insider ownership structure of a company; use GetInsiderTransactions for the underlying trades.' This provides both the intended use case and a clear alternative, leaving no ambiguity about when to select this tool.

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

GetInsiderTransactionsInsider Transactions (Forms 4/5)A
Read-only

Get recent insider trading transactions for a stock from SEC Forms 4 and 5, newest first. Form 3 supplies initial ownership rather than a transaction. The Type column carries the SEC transaction code meaning: 'Buy'/'Sell' are open-market purchases/sales only, while Award, Conversion, Exercise, Tax Payment, Expiration, Gift, Inheritance, Discretionary and Other are compensation or derivative mechanics — not conviction trades. The 10b5-1 column marks trades made under a pre-arranged Rule 10b5-1 plan ('-' = filing predates the 2023 checkbox). Per-row Shares/Price/Value are as filed; Owned After is the post-transaction balance restated onto today's split basis, tracked per security kind and ownership form. Supports optional date-range, transaction-type and insider-name filters to reach history beyond the newest rows. Use this to understand insider buying/selling activity.

NameRequiredDescriptionDefault
offsetNoNumber of matching transactions to skip before returning rows (default: 0)
tickerYesCompany ticker symbol (e.g., AAPL, MSFT)
toDateNoOnly include transactions on or before this date, format yyyy-MM-dd (optional)
fromDateNoOnly include transactions on or after this date, format yyyy-MM-dd (optional)
maxResultsNoMaximum number of transactions to return (default: 50, max: 500; values outside 1-500 are clamped)
insiderNameNoOnly include transactions by insiders whose SEC-filed name contains every word of this value, case-insensitive (e.g. 'Huang') (optional)
transactionTypeNoOnly include one transaction type: Buy, Sell, Award, Conversion, Exercise, TaxPayment, Expiration, Gift, Inheritance, Discretionary or Other (optional)

TDQS

A3.9/5.0
Behavior4/5

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

With readOnlyHint=true already covering safety, the description adds substantial context: Form 3 vs Form 4/5 scope, the meaning of each Type code, the 10b5-1 column ('-' means pre-2023 filing), and that Owned After is restated onto today's split basis. It does not cover auth requirements or rate limits, but for a read tool it discloses a lot 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.

Conciseness4/5

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

It is dense but front-loaded, leading with purpose, then scope exclusions, then column semantics, then filters. Every sentence carries information, though the column-by-column explanation is long enough to sacrifice some scannability.

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

Completeness5/5

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

There is no output schema, so the description must explain return columns, and it does: Type, 10b5-1, Shares/Price/Value, and Owned After. Combined with the fully documented input schema, an agent has everything needed to call and interpret this 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 description coverage is 100%, so the baseline is 3, but the description adds real meaning by explicating the transactionType values ('Buy'/'Sell' are open-market only versus compensation/derivative mechanics) and matching the descriptive filters (date-range, transaction-type, insider-name) to their parameters. The insiderName multi-word matching nuance is left to the schema.

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 states a specific verb and resource ('Get recent insider trading transactions for a stock') and names its source (SEC Forms 4 and 5) and ordering ('newest first'). It also excludes Form 3 by explaining it covers initial ownership, not transactions. It stops short of distinguishing itself from sibling tools like GetInsiderOwnership or SearchInsiders.

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?

Usage context is implied by the trailing 'Use this to understand insider buying/selling activity' and by the filter list, but there is no explicit when-to-use/when-not guidance or named alternative among siblings like GetInsiderOwnership or SearchInsiders. The interpretation guidance is helpful but does not route the agent between tools.

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

GetInstitutionalOwnershipHistoryInstitutional Ownership HistoryA
Read-only

Get the historical trend of aggregate reported 13F exposure for an exact stock or ETF listing across multiple quarters. The legacy Total Shares field sums reported quantities across common-share rows, put/call notional-underlying rows, and any tracked principal-denominated rows, so it is not a pure share-ownership measure. Shows total reported quantity, published position value, and filer count. Share Chg (QoQ) is like-for-like: it compares only filers with an observed 13F in both quarters, and each quarter notes how many filers and shares it excluded (the largest named), so missing filings and filer identity changes are not trades. Values normally use report-date closing prices, may fall back to filer values, and can include zero when unavailable. While the newest quarter's filing window is open, non-ETF primary stocks use a provisional combined view; ETF listings remain exact and as-filed because carry-forward is filer-wide.

NameRequiredDescriptionDefault
tickerYesListed security ticker (e.g., AAPL, VOO)
maxPeriodsNoMaximum number of quarterly periods to return (default: 8, clamped to 1-500)

TDQS

A4.2/5.0
Behavior5/5

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

With readOnlyHint=true already covering safety, the description adds substantial behavioral context: the legacy Total Shares field is not a pure share-ownership measure, QoQ change is like-for-like with exclusions noted, missing filings are not treated as trades, values use report-date closing prices with possible fallbacks and zeros, and the newest quarter uses a provisional combined view for non-ETF primary stocks while ETFs remain exact.

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 purpose is front-loaded in the first sentence, and the dense caveats that follow are relevant and earn their place. The description is long and clause-heavy, but the complexity of the 13F data aggregation justifies most of the detail.

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

Completeness5/5

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

There is no output schema, but the description explains the key returned fields (total reported quantity, published position value, filer count, QoQ share change with exclusions) and the important caveats about provisional data and fallback values. An agent has enough information to call and interpret the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so both the ticker and maxPeriods parameters are already documented in the schema. The description reinforces that ticker should be an exact stock or ETF listing and mentions multiple quarters, but it adds little syntax or format detail 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 states a specific verb and resource: get the historical trend of aggregate reported 13F exposure for an exact stock or ETF listing across multiple quarters. It also names the metrics returned (quantity, position value, filer count), making the tool clearly distinguishable from siblings like GetTopHolders or GetHolderMix.

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 through phrases like 'exact stock or ETF listing' and 'across multiple quarters,' but it does not explicitly say when to use this tool versus alternatives such as GetInstitutionQuarterlyActivity or GetTopInstitutionalBuyersSellers. The detailed caveats are helpful but are not usage routing guidance.

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

GetInstitutionCloneBacktest13F Portfolio Clone BacktestA
Read-only

Backtest how cloning an institutional filer's reported 13F portfolio would have performed against a market benchmark, either over a trailing window (windowYears) or an explicit fromDate/toDate range. Reconstructs the filer's portfolio at each quarterly 13F snapshot, rebalances on the SEC filing lag, and values each exact listed security on raw closing prices. Returns price return (dividends excluded), CAGR, and max drawdown for the clone and benchmark, plus price-return alpha. Returns are unavailable when a held security or benchmark crosses a captured split without a certified price basis; the requested window is not shortened to hide it.

NameRequiredDescriptionDefault
toDateNoOptional window end in YYYY-MM-DD format (defaults to today when only fromDate is given)
fromDateNoOptional window start in YYYY-MM-DD format for an anchored historical backtest (e.g. 2015-01-01); overrides windowYears
benchmarkNoBenchmark ticker to compare against (default: SPY)SPY
institutionYesInstitution name or SEC CIK (e.g., 'Berkshire Hathaway', '1067983', or zero-padded '0001067983'). Unique partials and verified aliases resolve; ambiguous partials return candidate CIKs.
windowYearsNoTrailing window length in years anchored at today (default: 3, clamped to 1-20; ignored when fromDate/toDate are supplied)

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only supply readOnlyHint=true, so the description carries most of the behavioral load and does so well: it discloses the reconstruction methodology, the filing-lag rebalancing, raw-price valuation, that a split without a certified price basis suppresses returns, and that the window is not silently shortened. These are non-obvious operational traits that meaningfully affect 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?

Front-loads the purpose, then layers methodology, outputs, and the failure mode in three dense but coherent sentences. The split-price caveat is slightly tangential but earns its place by setting honest expectations; overall tight with little waste.

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

Completeness5/5

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

With no output schema, the description compensates by enumerating the returned metrics (price return, CAGR, max drawdown, price-return alpha) and naming the conditions under which returns are unavailable. Nothing essential for correct invocation 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?

Schema description coverage is 100%, so the schema already documents defaults and the fromDate-overrides-windowYears precedence. The description's framing of 'either... windowYears or... fromDate/toDate range' adds only marginal interpretive value over that, so the baseline 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?

States a specific verb ('Backtest'), a specific resource (an institutional filer's reported 13F portfolio) and a comparison target (market benchmark). It is clearly distinguishable from siblings like GetInstitutionPortfolio or CompareInstitutionPortfolios, which report holdings rather than simulate performance.

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?

Explains the two operating modes clearly: a trailing window via windowYears or an anchored window via fromDate/toDate, which tells the agent when each parameter set applies. However it never names a sibling alternative or states an explicit when-not-to-use condition.

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

GetInstitutionConsensusHoldingsConsensus Holdings Across InstitutionsA
Read-only

Combine 2-25 institutions' 13F portfolios on their latest common report date. Ranks stocks by holder count, then combined value. Published values normally use report-date closing prices, may fall back to filer values, and can be zero when unavailable. Set minInstitutions to 2 or more for positions shared by multiple filers.

NameRequiredDescriptionDefault
maxResultsNoMaximum number of stocks to return (default: 30, clamped to 1-500)
reportDateNoQuarter-end 13F report date in YYYY-MM-DD format (defaults to the latest common quarter; an off-quarter date snaps to the nearest common report on or before it)
minInstitutionsNoMinimum number of institutions that must hold a stock (default: 1; set 2 or more for shared positions)
institutionNamesYesInstitution names or CIKs (2-25). Unique partial names and verified aliases resolve; ambiguous partials return candidate CIKs.

TDQS

A3.6/5.0
Behavior4/5

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

annotations already declare readOnlyHint=true, so the safety profile is covered, and the description adds genuinely useful behavioral context beyond it: valuation uses report-date closing prices, may fall back to filer values, and can legitimately be zero. The 'latest common report date' selection behavior is also disclosed.

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?

Four tightly-packed sentences: purpose and scope first, then ranking, then a valuation caveat, then a parameter hint. No filler, though the valuation sentence is dense and could be split for readability.

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

Completeness3/5

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

With no output schema, the description must carry more of the return-value burden, and it only hints at output via 'ranks stocks by holder count, then combined value.' It never describes the returned fields or shape, and error behavior for ambiguous partial names is left entirely to the 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 description coverage is 100%, so all four parameters are already documented structurally. The description largely restates schema content (minInstitutions threshold, common report date) rather than adding new parameter semantics, so the 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?

States a specific verb and resource ('Combine 2-25 institutions' 13F portfolios on their latest common report date') plus the ranking logic ('by holder count, then combined value'). This is clearly distinguishable from a plain single-portfolio getter, but no sibling is named to disambiguate it from CompareInstitutionPortfolios or GetMostHeldStocks.

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 line 'Set minInstitutions to 2 or more for positions shared by multiple filers' implies when a parameter is warranted, and the '2-25 institutions' bound implies scope. However there is no explicit when-to-use-vs-alternatives guidance nor any when-not statement, leaving the agent to infer the tool's niche 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.

GetInstitutionPortfolioInstitution Portfolio (13F)A
Read-only

View the tracked stock positions of a specific institutional investor from an SEC 13F-HR filing. Shows the largest positions by published value (default 20, max 500), with share counts, value, percent of tracked 13F value, and position count. Values normally use report-date closing prices, may fall back to filer values, and can be zero when unavailable. Coverage is limited to tracked U.S.-listed common stocks and related put/call positions; use position type before treating options as ownership. Use SearchInstitutions first when the name is ambiguous.

NameRequiredDescriptionDefault
offsetNoNumber of ranked holding rows to skip before returning rows (default: 0, clamped to 0-100000). For the next page, add the returned row count to the clamped current offset; if the next offset exceeds 100000, narrow the filters instead. Stop when fewer than the effective page size (maxResults clamped to 1-500) are returned, or the response's total has been reached.
maxResultsNoMaximum number of holdings to return (default: 20, clamped to 1-500)
reportDateNoQuarter-end 13F report date in YYYY-MM-DD format (defaults to the holder's latest; an off-quarter date snaps to the nearest report on or before it)
institutionNameYesInstitution name or SEC CIK. A unique partial name resolves; an ambiguous partial returns candidate CIKs instead of selecting silently.

TDQS

A4.1/5.0
Behavior4/5

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

With readOnlyHint=true already covering the safety profile, the description adds genuinely useful behavior: values use report-date closing prices, may fall back to filer values, can be zero when unavailable, and coverage is limited to tracked U.S.-listed common stocks plus related put/call positions. It stops short of describing pagination behavior or result ordering beyond 'largest positions by published value'.

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?

Four tightly packed sentences, front-loaded with purpose before the data caveats. Every sentence carries information, though the parenthetical about default/max rows is redundant with the schema and could be dropped.

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

Completeness4/5

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

There is no output schema, so the description usefully enumerates the returned fields and flags data-quality edge cases (zero values, options ambiguity, coverage limits). The one remaining gap is what happens for an institution with no 13F-HR filings or an out-of-range offset, but the definition is otherwise call-ready.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters, including clamping ranges, date snapping, and pagination math. The description only restates the default/max row count (20 / 500), adding essentially nothing beyond the schema — the baseline 3 for full coverage is appropriate.

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

Purpose5/5

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

The description states a precise verb and resource: view tracked stock positions of a specific institutional investor from an SEC 13F-HR filing. It also names the fields returned (share counts, value, percent of tracked 13F value, position count), which cleanly separates it from siblings like GetTopHolders or GetMostHeldStocks that aggregate across 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?

It gives explicit routing advice ('Use SearchInstitutions first when the name is ambiguous') and a caveat for interpreting options data. However, it never distinguishes this tool from close siblings such as CompareInstitutionPortfolios, GetInstitutionSummary, or GetInstitutionalOwnershipHistory, so the agent must infer when this single-holder snapshot is preferred.

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

GetInstitutionQuarterlyActivityInstitution Quarterly ActivityA
Read-only

Get an institution's quarterly position-change activity — Initiated / Increased / Reduced / Exited stocks diffed against the immediately prior quarter. Common shares, put/call positions and principal amounts are separate rows labelled by Type. Returns the buckets as one markdown section per bucket, sorted by absolute Δ market-value desc (Δ Value includes price movement, not just trading). Use bucket to filter to a single bucket. Use this to answer 'what did this fund do this quarter?'

NameRequiredDescriptionDefault
bucketNoFilter to a single bucket: initiated, increased, reduced, exited (omit for all four)
maxResultsNoMaximum number of stocks to return per bucket (default: 20, clamped to 1-500)
reportDateNoQuarter-end 13F report date in YYYY-MM-DD format (defaults to the holder's latest; an off-quarter date snaps to the nearest report on or before it)
institutionNameYesInstitution name or CIK (a unique partial resolves; ambiguous partials return candidate CIKs)

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, so the safety profile is covered. The description adds substantial behavior beyond that: results are markdown sections per bucket, sorted by absolute Δ market-value descending, and Δ Value includes price movement rather than trading alone. It omits return-size/pagination behavior, but the core behavioral caveats are well disclosed.

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 layers on filtering and output-format details. It is dense and mostly efficient, though the final 'Use this to answer...' sentence is somewhat rhetorical rather than strictly necessary.

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

Completeness5/5

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

With no output schema, the description carries the burden of explaining returns and does so: markdown sections per bucket, separate rows by Type, and sorting by absolute Δ market-value. Combined with a fully documented input schema, an agent has enough to call the tool correctly and interpret its output shape.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains all four parameters, including bucket enum-like options, maxResults clamping, and reportDate snapping. The description reinforces the bucket filter but adds little parameter-level syntax or meaning beyond the schema, so the 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?

States a specific verb and resource: getting an institution's quarterly position-change activity, with the four buckets (Initiated/Increased/Reduced/Exited) defined as quarter-over-quarter diffs. It clearly distinguishes itself from portfolio-holding siblings like GetInstitutionPortfolio by focusing on what changed this quarter, not what is held.

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 to use it to answer 'what did this fund do this quarter?' and explains that `bucket` filters to one of the four buckets. It does not name alternative tools such as GetInstitutionPortfolio or CompareInstitutionPortfolios or state when not to use it, so it stops short of full when/when-not guidance.

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

GetInstitutionSectorAllocationInstitution Sector AllocationA
Read-only

Get an institution's 13F portfolio allocation for a given report quarter (defaults to the latest), grouped by fine-grained industry (default) or rolled up by sector via groupBy. Returns a markdown table sorted by % of portfolio descending, with stocks lacking a classification collapsed into a single 'Unclassified' row at the end. Published values normally use report-date closing prices, may fall back to filer values, and can be zero when unavailable. Use SearchInstitutions for an exact CIK; ambiguous partial names return candidates instead of selecting silently.

NameRequiredDescriptionDefault
groupByNoGrouping level: 'industry' (default, fine-grained) or 'sector' (broad rollup)industry
reportDateNoQuarter-end 13F report date in YYYY-MM-DD format (defaults to the holder's latest; an off-quarter date snaps to the nearest report on or before it)
institutionNameYesInstitution name or CIK (a unique partial resolves; ambiguous partials return candidate CIKs)

TDQS

A4.6/5.0
Behavior5/5

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

With only readOnlyHint=true in annotations, the description carries real behavioral weight: it discloses the markdown table return, descending % sort, the collapsed 'Unclassified' row, data provenance (report-date closing prices with fallback to filer values, possibly zero), and the ambiguity handling for partial names. This is far more than the 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?

Three dense sentences with the core purpose and grouping default front-loaded; the caveats about pricing fallback and ambiguous names are placed after the essential facts. Slightly heavy for the tool's simplicity, but no sentence is 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?

No output schema exists, so the description properly explains the return format, ordering, and the Unclassified bucket, and it covers the default/fallback behavior for both optional parameters. Nothing an agent needs to invoke this 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, but the description adds meaning beyond the schema: it clarifies that groupBy toggles fine-grained industry versus broad sector rollup and that a non-resolving name yields candidates 'instead of selecting silently.' The reportDate snapping rule largely duplicates the schema text.

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 an institution's 13F portfolio allocation') plus the grouping axis and output shape, which separates it from sibling allocation tools like GetInstitutionPortfolio, GetHolderMix, and GetTopHolders. An agent can tell what it returns (industry- or sector-level allocation table) without opening the schema.

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 clear context: use it per report quarter with a latest-date default, and route to SearchInstitutions when an exact CIK is needed. It also warns that ambiguous partial names return candidates rather than silently selecting. It stops short of explicitly naming a sibling to use instead for related portfolio views.

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

GetInstitutionStyleHistoryInstitution Style HistoryA
Read-only

Get an institutional 13F filer's portfolio style quarter by quarter, measured from its filed common-share book: style band (index-like, systematic-like, concentrated, diversified active), turnover band, holding-horizon band, and the measurements behind them (equity value, stock count, active share against every 13F filer's combined book, top 10 weight, effective positions, trailing annual turnover, value-weighted holding period). Bands are measurements with stated thresholds, never the firm's own description. Closed quarters only; the newest quarter is measured once its filing window closes.

NameRequiredDescriptionDefault
maxPeriodsNoNumber of measured quarters to return, newest first (default: 8, clamped to 1-40)
institutionNameYesInstitution name or CIK (a unique partial resolves; ambiguous partials return candidate CIKs)

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true, so the description carries most of the load, and it delivers: it discloses that bands are measured against stated thresholds rather than the firm's own description, that active share is computed against every 13F filer's combined book, and that only closed quarters are scored (the newest quarter appears once its filing window closes). It omits return format and pagination details, keeping it from 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.

Conciseness4/5

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

The purpose is front-loaded in the first clause and every sentence earns its place - the enumerated measurements justify their length because no output schema exists. The single sprawling second sentence with a long parenthetical is dense, but not padded.

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

Completeness4/5

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

With no output schema and only a readOnlyHint annotation, the description must describe the return payload itself, and it does by enumerating the bands and backing measurements (equity value, stock count, active share, top 10 weight, effective positions, turnover, holding period). The quarter-closure timing rule further completes the picture; only the ordering/pagination shape of the response is left implicit.

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 both parameters (maxPeriods, institutionName) are already fully documented in the schema, including the default, clamping range, and partial-CIK resolution behavior. The description adds no syntax or format detail beyond what the schema provides, so 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?

The description states a specific verb+resource ('Get an institutional 13F filer's portfolio style quarter by quarter') and enumerates the exact style/turnover/horizon bands and underlying measurements, which sharply distinguishes it from sibling tools like GetInstitutionPortfolio or GetInstitutionSummary. It stops short of explicitly naming a sibling it differs from, so it is clear but not fully differentiated.

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?

Usage is implied by the purpose - an agent would infer this is for time-series style analysis of a single filer - but there is no explicit when-to-use, when-not, or named alternative among the many institution siblings (GetInstitutionPortfolio, GetInstitutionQuarterlyActivity, CompareInstitutionPortfolios). The 'Closed quarters only' note is a data-availability caveat rather than routing guidance.

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

GetInstitutionSummaryInstitution Portfolio SummaryA
Read-only

Get the portfolio summary header for an institutional 13F filer — published tracked 13F value (not total firm AUM), position count, top-10 / top-25 concentration, QoQ turnover, and the latest / prior report dates with the count of quarters tracked in this database, then the holder's profile from regulatory records: entity type and the record that decided it, Form ADV adviser facts (regulatory assets, client base, private funds, LEI), registered funds it advises, and earlier or later CIKs its 13F reports continue under, then its style, turnover and horizon bands measured from its filed book. Values normally use report-date closing prices, may fall back to filer values, and can include zero for unavailable valuations. Resolve exact CIKs with SearchInstitutions; ambiguous partial names return candidates rather than selecting a filer silently.

NameRequiredDescriptionDefault
reportDateNoQuarter-end 13F report date in YYYY-MM-DD format (defaults to the holder's latest; an off-quarter date snaps to the nearest report on or before it)
institutionNameYesInstitution name or CIK (a unique partial resolves; ambiguous partials return candidate CIKs)

TDQS

A4.2/5.0
Behavior5/5

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

With readOnlyHint already declaring the safety profile, the description adds substantial behavioral context: it explains that values normally use report-date closing prices, may fall back to filer values, and can include zero for unavailable valuations. It also discloses that ambiguous partial names return candidates rather than silently selecting a filer, which is important invocation behavior.

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 purpose is front-loaded and most of the length earns its place by enumerating return categories in the absence of an output schema. However, the description is a dense run-on sentence with repeated 'then' clauses, making it harder to scan than it could be. Slight structural improvement would raise this score.

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

Completeness5/5

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

For a read-only tool with no output schema, the description is comprehensive: it covers portfolio summary fields, concentration and turnover metrics, report-date context, profile data from regulatory records, style bands, pricing caveats, and CIK resolution behavior. An agent has enough information to call it correctly and understand what comes back.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters, including reportDate defaulting and off-quarter snapping. The description reinforces CIK/name behavior and date-count context but adds little parameter syntax beyond the schema. Baseline 3 is appropriate when the schema carries parameter semantics.

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

Purpose5/5

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

The description states a specific verb and resource: get the portfolio summary header for an institutional 13F filer. It scopes the result with concrete contents and explicitly clarifies that the value is published tracked 13F value, not total firm AUM. It also distinguishes name resolution via SearchInstitutions from silent filer selection.

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

Usage Guidelines3/5

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

The description gives clear usage guidance for the institutionName parameter, directing ambiguous partials to candidate CIKs and exact CIKs to SearchInstitutions. However, it does not explicitly say when to use this summary tool versus siblings such as GetInstitutionPortfolio, GetInstitutionQuarterlyActivity, or CompareInstitutionPortfolios. Main tool-selection guidance is therefore implied rather than explicit.

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

GetInvestmentAdviserInvestment Adviser Profile (Form ADV)A
Read-only

Get the full Form ADV profile for a single SEC-registered or exempt reporting investment adviser by its Organization CRD number: legal and business names, SEC file number, main office, website, regulatory assets under management (discretionary, non-discretionary and total), employee count, and how the firm is compensated (fee structure); exempt reporting advisers do not report these Item 5 figures. Find CRD numbers with SearchInvestmentAdvisers.

NameRequiredDescriptionDefault
crdYesThe adviser's Organization CRD number (e.g., 231)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, so safety is covered. The description goes beyond them by warning that exempt reporting advisers do not report Item 5 figures (RAUM, employee count, fee structure), which prevents the agent from treating a missing field as an error. It doesn't describe behavior for an invalid or unknown CRD.

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 field list is front-loaded immediately after the resource, and the exempt-adviser caveat and the sibling pointer follow logically. The enumeration of returned fields is long but each element earns its place given there is no output schema.

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

Completeness5/5

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

With no output schema, the description fully enumerates what the call returns and flags the one case where fields will be absent. Nothing an agent needs to call it correctly or interpret a sparse response 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?

Schema description coverage is 100% and the schema already states 'Organization CRD number' with an example, so the schema carries the parameter explanation. The description reinforces that it is the Organization CRD (not an individual CRD) but adds little syntax or format detail beyond that. 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?

States a specific verb ('Get') and resource ('Form ADV profile') and enumerates the exact contents returned: names, CRD, SEC file number, office, website, RAUM breakdown, employee count, fee structure. It also explicitly scopes which entities are covered (SEC-registered or exempt reporting advisers), which separates it from SearchInvestmentAdvisers.

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

Usage Guidelines4/5

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

Explicitly tells the agent to use SearchInvestmentAdvisers to find the CRD number, giving a clear prerequisite and alternative path. It doesn't state when-not-to-use beyond that, but the lookup-then-fetch workflow is fully implied.

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

GetLargestShortVolumeLargest Short Volume by DayA
Read-only

Get the exact listed securities, including ETFs, with the largest daily short sale volume for a single trading day (defaults to the latest available), from FINRA's daily short sale volume files, sorted by short volume descending. Short % is the share of that day's FINRA-facility (off-exchange/TRF) volume sold short — 40-50% is a normal market-making baseline — NOT short interest (the open short position; use GetShortInterest/GetShortInterestSnapshot for positions and GetShortSqueezeScores for operating-stock squeeze candidates; use GetShortVolume for one listed security's daily history). Pass sortBy=shortPercent with a minTotalVolume floor to rank by short intensity instead of raw size.

NameRequiredDescriptionDefault
dateNoTrading day in YYYY-MM-DD format (defaults to the latest available day)
offsetNoNumber of ranked results to skip before returning rows (default: 0, clamped to 0-100000). For the next page, add the returned row count to the clamped current offset; if the next offset exceeds 100000, narrow the filters instead. Stop when fewer than the effective page size (maxResults clamped to 1-500) are returned, or the response's total has been reached.
sortByNoSort key: shortVolume (default) or shortPercent — with shortPercent set a minTotalVolume floor, otherwise illiquid names dominateshortVolume
maxResultsNoMaximum number of results to return (default: 50, max: 500)
minShortVolumeNoMinimum short volume filter (default: 0)
minTotalVolumeNoMinimum total FINRA-reported volume filter, in shares (default: 0 = no floor)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark it readOnly, so the burden is lower, and the description still adds real context: the underlying data source (FINRA daily short sale files), the definition of Short % as FINRA-facility/TRF off-exchange share, and the interpretive baseline that 40-50% is normal market-making. It does not discuss pagination limits itself (deferred to the schema), which keeps it short of 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.

Conciseness4/5

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

Dense but front-loaded: the core purpose and scope come first, followed by disambiguation and then the tuning tip. The parenthetical sibling list is long but each reference earns its place; only the nested asides make it slightly heavier than ideal.

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

Completeness4/5

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

For a read-only ranked-list tool with full schema coverage and a declared readOnly annotation, this covers purpose, source, metric interpretation, and alternatives. The only gap is that returned row fields are never described, though with no output schema that omission is minor.

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 3 is the floor; the description goes beyond the schema by calling out the cross-parameter interaction (sortBy=shortPercent requires a minTotalVolume floor or illiquid names dominate) and by framing the date default. That interaction guidance is the main added semantic value.

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

Purpose5/5

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

Names a specific verb+resource+scope: the largest daily short-sale-volume securities (including ETFs) for a single trading day, sourced from FINRA's daily short sale volume files, sorted descending. It explicitly distinguishes itself from position-based siblings (GetShortInterest, GetShortInterestSnapshot) and the single-security GetShortVolume.

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?

Routes the agent away from this tool with named alternatives and the condition that selects each: positions -> GetShortInterest/GetShortInterestSnapshot, squeeze candidates -> GetShortSqueezeScores, per-security history -> GetShortVolume. It also states the internal alternative (sortBy=shortPercent plus a minTotalVolume floor) for ranking by intensity rather than raw size.

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

GetLatestCftcPositioningLatest CFTC Positioning SnapshotA
Read-only

Get the latest COT positioning snapshot across all tracked futures contracts, grouped by category (Agriculture, Energy, Metals, Equity Indices, Interest Rates, Currencies). Shows commercial and non-commercial net positions in contract counts from the legacy futures-only COT report (positions as of each Tuesday, published Friday). Each row carries the market code accepted by GetCftcPositioning.

NameRequiredDescriptionDefault
categoryNoCategory filter: Agriculture, Energy, Metals, EquityIndices, InterestRates, Currencies (defaults to all)

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true, so the description carries the rest and does so well: it names the data source (legacy futures-only COT report), the reporting cadence (positions as of each Tuesday, published Friday), and the content (commercial and non-commercial net positions in contract counts). This is real behavioral context beyond the safety hint, missing only return/pagination details.

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 tight sentences with no filler, front-loading the core purpose before the data-source and timing details. The category enumeration is slightly redundant with the schema but does not bloat the 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?

With no output schema, the description covers the essentials an agent needs: one-row-per-market semantics, the fields shown, the reporting window, and the cross-reference to GetCftcPositioning. Missing only return-format specifics, but sufficient for a simple read-only snapshot 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 schema already documents the single optional category parameter, making the baseline 3. The description repeats the category list but does not add filtering syntax or notes beyond what the schema provides (and spells 'Equity Indices' differently from the schema's 'EquityIndices').

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: getting the latest COT positioning snapshot across all tracked futures contracts, grouped by category. It hints at a distinction from GetCftcPositioning by noting each row carries the market code that tool accepts, though it doesn't fully articulate the division of labor. Clear and specific enough that an agent knows what it returns.

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 this is the broad 'latest across all contracts' view and that GetCftcPositioning takes a specific market code, which gestures at when to use each. However, it never explicitly says when to prefer this over the sibling or states any prerequisites. Usage is inferable rather than stated.

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

GetLatestClosingPricesLatest Closing PricesA
Read-only

Get each ticker's newest traded, settled daily close (USD for US listings; a MIC:TICKER listing on another exchange in its own trading currency, named in a note), with one-session change, volume, and trailing 52-week closing range. Rows can have different dates while a session settles; use the Date column. Change is omitted when the immediately prior trading session is absent; for a MIC:TICKER row it compares with the previous traded close, omitted when that close is more than 12 days older or a stored session in between shows no trades. Split-limited or partial 52-week ranges are marked in the response. This is settled history, not an intraday quote.

NameRequiredDescriptionDefault
tickersYesTicker symbols (max 25). Class shares may use BRK-B or BRK.B; a listing on another exchange is MIC:TICKER (XPAR:AIR).

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint annotation, disclosing settlement lag (rows can have different dates; use the Date column), the exact conditions under which change is omitted, split-limited/partial 52-week range marking, and currency behavior per listing.

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?

Front-loaded with the core operation, then edge cases in descending importance. Efficient overall, though the change-omission sentence is dense and slightly unwieldy; every sentence still carries real 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?

With no output schema, the description carries the return-shape burden and does so: it enumerates change, volume, trailing 52-week range, the Date column, and where the currency note appears. Complete enough to call 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 schema already documents the tickers array, the 25-max cap, BRK-B/BRK.B handling, and the MIC:TICKER format. The description adds only the currency-per-listing nuance, so the 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?

States a specific verb (Get) and resource (each ticker's newest traded, settled daily close) with scope detail on currency and the MIC:TICKER variant. The closing line 'settled history, not an intraday quote' cleanly separates it from sibling price tools like GetStockPrices.

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?

Clearly frames when to use it (settled history) and when not to (intraday), which is a genuine usage boundary. It does not name a specific alternative tool, so the routing is contextual rather than explicit.

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

GetLatestEconomicIndicatorsLatest Economic IndicatorsA
Read-only

Get the latest values for key economic indicators across categories: interest rates, yield spreads, inflation, employment, GDP, money supply, sentiment, housing, exchange rates, and market indicators. Each row shows a series' latest stored observation with its date, plus the previous observation and the change between them for direction — check the Latest Date column for freshness. Returns a snapshot of current macro conditions.

NameRequiredDescriptionDefault
categoryNoCategory filter: InterestRates, YieldSpreads, CorporateBondSpreads, Inflation, Employment, GdpAndOutput, MoneySupply, Sentiment, Housing, ExchangeRates, Market (defaults to all)

TDQS

A3.5/5.0
Behavior4/5

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

Annotations cover only readOnlyHint=true, and the description adds genuinely useful behavior beyond that: the row shape (latest stored observation + date + previous observation + change), the caveat that values are 'latest stored' and freshness must be verified via the Latest Date column, and the fact that it returns a full macro snapshot rather than a single series.

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 scope and categories before the row-format detail. Nearly every clause earns its place; only the final 'Returns a snapshot of current macro conditions' is mildly redundant with the opening sentence.

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

Completeness4/5

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

With no output schema and only a readOnlyHint annotation, the description carries the burden well by describing the returned columns and freshness semantics. It is close to complete, missing only guidance on breadth vs single-series siblings and any note on whether results are paginated or cached.

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 single optional category parameter is fully documented with its allowed values, so the schema does the heavy lifting. The description restates the category list but adds no filtering syntax, default behavior, or format detail beyond it, so 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 latest values for economic indicators) and enumerates the covered categories, so the scope is unambiguous. It does not, however, name or contrast itself with the nearby siblings GetEconomicIndicator and SearchEconomicIndicators, leaving the agent to infer that this is the breadth/snapshot variant.

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 never states when to pick this over GetEconomicIndicator or SearchEconomicIndicators, nor any prerequisites. The only guidance is interpretive ('check the Latest Date column for freshness'), which helps read results but not select the tool.

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

GetMarketWide13FActivityMarket-Wide 13F ActivityA
Read-only

Get the market-wide 13F leaderboards for a given quarter — which stocks were most bought, most sold, most initiated, or most exited across all 13F filers vs the prior quarter. The bucket argument selects one of: top-buys (Δ shares > 0 ranked by Δ value desc), top-sells (Δ shares < 0 ranked by Δ value asc), new-positions (stocks ranked by count of filers initiating a position), sold-out-positions (stocks ranked by count of filers exiting). Δ Value is the change in published position value: values normally use report-date closing prices, may fall back to filer values, and can be zero when unavailable. It includes price movement on held shares, so use Δ Shares to read the position change itself. The output publishes the first complete 13F report quarter and refuses comparisons that cross that corpus boundary. Use this to answer 'what's the consensus 13F move this quarter?'

NameRequiredDescriptionDefault
bucketYesBucket: top-buys, top-sells, new-positions, or sold-out-positions
maxResultsNoMaximum number of stocks to return (default: 20, clamped to 1-500)
reportDateNoQuarter-end 13F report date in YYYY-MM-DD format, e.g. 2026-03-31 (defaults to the latest available 13F quarter; an off-quarter date snaps to the nearest report on or before it)

TDQS

A4.3/5.0
Behavior4/5

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

Beyond readOnlyHint=true, the description discloses substantive behavior: Δ Value uses report-date closing prices, may fall back to filer values, can be zero, and includes price movement on held shares (so Δ Shares should be used to read position changes). It also states the tool refuses comparisons crossing the first complete 13F report quarter boundary. Missing is any note on result volume or ordering stability, but the semantic caveats are well 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?

Purpose and bucket list are front-loaded, and every sentence carries signal (ranking rules, Δ Value caveats, corpus boundary). It is dense and readable, though the single long paragraph and the trailing rhetorical question add length without adding much beyond the earlier framing.

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

Completeness4/5

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

With no output schema, the description carries the burden of describing returns, and it does so by explaining what each bucket ranks and the Δ Value/Δ Shares distinction. It stops short of describing the per-stock fields or ordering guarantees, but an agent has enough to call it correctly and interpret the leaderboard.

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

Parameters4/5

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

Schema coverage is 100% so the baseline is 3, but the description goes further by defining each bucket's ranking rule (top-buys ranked by Δ value desc, top-sells by Δ value asc, new-positions by count of initiating filers, sold-out-positions by count of exiting filers) — information the terse schema string omits. That materially improves correct bucket selection.

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) and resource (market-wide 13F leaderboards for a given quarter) and immediately enumerates the four buckets, which clearly separates it from institution-scoped siblings like GetInstitutionQuarterlyActivity or GetTopInstitutionalBuyersSellers. An agent can tell what it returns without opening the schema.

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 closing line 'Use this to answer what's the consensus 13F move this quarter?' gives an explicit usage context and the market-wide framing implies when to prefer it over institution-scoped tools. However, it never names an alternative tool or states an exclusion condition, so routing is inferred rather than directed.

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

GetMemberNetWorthCongress Member Net WorthA
Read-only

Get a congress member's net worth history from their annual financial disclosures. Disclosed values are ranges, so every year is a band (minimum-maximum), never a point estimate. Only electronically filed reports are read: a missing year means no electronic filing, not zero net worth. Use SearchCongressMembers to find member names.

NameRequiredDescriptionDefault
maxResultsNoMaximum number of years to return (default: 20, max: 500, newest first)
memberNameYesCongress member name, case-insensitive (e.g., 'Nancy Pelosi', 'Marsha Blackburn'); use SearchCongressMembers to find the exact name

TDQS

A4.2/5.0
Behavior4/5

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

Adds value beyond readOnlyHint annotation by explaining that values are ranges (min-max), missing years mean no electronic filing not zero, and that only electronically filed reports are read. No contradictions with annotations.

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

Conciseness5/5

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

Three concise sentences covering purpose, data interpretation, and prerequisite. 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.

Completeness4/5

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

Covers key aspects: what is returned, interpretation of missing years, and how to find member names. Lacks explicit mention of output format but is sufficient for a read-only tool with simple parameters.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. Description enhances understanding by clarifying case-insensitivity of memberName and directing to SearchCongressMembers for exact names, adding value beyond schema descriptions.

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

Purpose5/5

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

Description clearly states it retrieves net worth history from annual financial disclosures, with distinct verb and resource. It differentiates from sibling tools like GetCongressionalTrades by focusing on net worth.

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?

Suggests using SearchCongressMembers to find names but does not explicitly define when to use this tool versus alternatives or provide exclusion criteria. Usage context is implied rather than explicit.

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

GetMemberTradesTrades by Congress MemberA
Read-only

Get a congress member's disclosed securities transactions (newest first, last year by default). Shows tickers, transaction and filing dates, disclosed amount ranges, the filed Asset identifying the instrument (such as stock, option, or bond), and the member's party on the transaction date. Use SearchCongressMembers to find member names, and GetCongressionalTrades for all members' transactions in one ticker.

NameRequiredDescriptionDefault
offsetNoNumber of trades to skip before returning rows (default: 0, clamped to 0-100000). For the next page, add the returned row count to the clamped current offset; if the next offset exceeds 100000, narrow the filters instead. Stop when fewer than the effective page size (maxResults clamped to 1-500) are returned, or the response's total has been reached.
tickerNoOptional stock ticker to combine with the member filter (e.g., AAPL)
endDateNoEnd date in YYYY-MM-DD format (defaults to today)
startDateNoStart date in YYYY-MM-DD format (defaults to 1 year ago)
maxResultsNoMaximum number of trades to return (default: 50, max: 500, newest first)
memberNameYesCongress member name, case-insensitive (e.g., 'Nancy Pelosi', 'Dan Crenshaw'); use SearchCongressMembers to find the exact name
transactionTypeNoFilter by transaction type: Purchase or Sale; the synonyms Buy/Sell are accepted (defaults to all)

TDQS

A4.5/5.0
Behavior4/5

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

The readOnlyHint annotation already establishes this as a safe read, lowering the burden. The description adds useful behavioral details beyond that: results are sorted newest first, the default time window is one year, and specific fields are returned. It does not mention rate limits, pagination behavior, or output limits, but for a read-only query with rich schema documentation this is a minor gap.

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 earning its place: the first defines the tool and scope, the second lists returned data because there is no output schema, and the third routes to alternatives. Front-loaded and free of 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?

With no output schema, the description compensates by enumerating the returned fields (tickers, dates, amount ranges, asset, party). It covers default date range, ordering, and sibling routing, while the fully documented schema handles pagination and parameter details. An agent has everything needed to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already fully documented in the input schema. The description does not add syntax or semantics beyond what the schema provides for memberName, ticker, dates, offset, maxResults, or transactionType. 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 states a specific verb ('Get') and resource ('a congress member's disclosed securities transactions') and adds scope details (newest first, last year by default). It explicitly distinguishes this tool from the sibling GetCongressionalTrades, which covers all members in one ticker, so an agent can route correctly without opening the 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 names the two relevant alternatives and their conditions: SearchCongressMembers to find the exact member name and GetCongressionalTrades for all members' transactions in one ticker. The implied when-to-use is clear from the first sentence: retrieve one member's transactions.

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

GetMostHeldStocksMost Widely Held StocksA
Read-only

Get the cross-sectional ranking of stocks by institutional 13F breadth for a quarter. Rank by filer count (default), quarter-over-quarter filer-count change, or total published position value. Values normally use report-date closing prices, may fall back to filer values, and can include zero for unavailable valuations. Includes Δ filers, total value, Δ value, and share of the 13F universe. The first complete report quarter is published; earlier rankings and boundary-quarter deltas are unavailable. Only currently-held stocks rank; sold-out names use GetMarketWide13FActivity. During the newest quarter's open filing window, non-filers carry prior-quarter positions (noted in output).

NameRequiredDescriptionDefault
sortNoSort by: 'filers' (default, # of 13F filers desc), 'filersDelta' (QoQ filer-count delta desc — warming names), 'filersDeltaAsc' (QoQ filer-count delta asc — cooling names), or 'value' (current total published position value desc)filers
maxResultsNoMaximum number of stocks to return (default: 25, clamped to 1-500)
reportDateNoQuarter-end 13F report date in YYYY-MM-DD format, e.g. 2026-03-31 (defaults to the latest available 13F quarter; an off-quarter date snaps to the nearest report on or before it)

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=true, but the description adds substantial behavioral context beyond that: valuation uses report-date closing prices with fallback to filer values, zero can appear for unavailable valuations, only the first complete report quarter is published, and during the newest quarter's open filing window non-filers carry prior-quarter positions. This is unusually rich disclosure.

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?

Dense but front-loaded, leading with the core purpose before folding in caveats and routing. Every sentence carries information; it is tightly packed rather than padded, though the volume of caveats makes it slightly heavy.

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

Completeness5/5

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

With no output schema, the description compensates by naming the returned fields (Δ filers, total value, Δ value, share of the 13F universe) and explaining valuation fallbacks and availability limits. An agent has everything needed to call and interpret 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 description coverage is 100%, so the schema already documents sort, maxResults, and reportDate in detail (including the off-quarter snapping behavior). The description restates the sort dimensions but adds little syntax or format detail 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?

States a specific verb+resource with scope: 'cross-sectional ranking of stocks by institutional 13F breadth for a quarter.' It clearly distinguishes itself from the sibling GetMarketWide13FActivity by explaining that only currently-held stocks rank here and sold-out names belong there.

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 routes the agent: names GetMarketWide13FActivity as the alternative for sold-out names, and flags when rankings/deltas are unavailable (pre-first-complete-quarter, boundary quarters). The conditions that select alternatives are spelled out.

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

GetOffExchangeVolumeOff-Exchange (Dark Pool) VolumeA
Read-only

Get weekly off-exchange (dark pool / OTC) trading volume for an exact stock or ETF listing from the FINRA OTC/ATS Transparency data. Each week shows ATS (alternative trading system / dark pool) volume and trade count, non-ATS OTC volume and trade count, and the total off-exchange volume (ATS + non-ATS OTC). The FINRA file does not include consolidated tape volume, so the off-exchange share of total market volume is not reported here; compute that share elsewhere against a consolidated-volume source. Weeks before 2025-08-11 may include volume from a case-variant sibling security because they predate the ordinal FINRA symbol-map fix and can no longer be re-imported from FINRA's rolling source window. FINRA publishes each week on a delay (2 weeks for Tier 1 NMS stocks, longer for other tiers), so the latest week lags today.

NameRequiredDescriptionDefault
tickerYesListed security ticker (e.g., AAPL, VOO, GME)
endDateNoEnd date in YYYY-MM-DD format (defaults to latest available)
startDateNoStart date in YYYY-MM-DD format (defaults to 6 months ago)
maxResultsNoMaximum number of weeks to return — keeps the most recent N weeks in the range, displayed oldest to newest (default: 26, max: 500)

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 several high-value behaviors: the FINRA file excludes consolidated tape volume (so share-of-volume must be computed elsewhere), weeks before 2025-08-11 may include case-variant sibling data, and publication is delayed by tier. This is exactly the kind of context annotations cannot carry.

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?

Front-loaded with what it returns, then the caveats. It is dense and multi-sentence but each sentence carries real information (component breakdown, missing consolidated volume, data-quality window, delay). Slightly long, but no filler.

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

Completeness5/5

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

With no output schema, the description compensates by enumerating the per-week fields and flagging the consolidated-volume gap and the pre-2025-08-11 data caveat. Nothing an agent needs to interpret or correctly qualify the result 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?

Schema description coverage is 100%, so the schema already documents all four parameters with types and defaults. The description adds no parameter syntax or format detail beyond noting the listing must be exact; baseline 3 is appropriate when the schema does the heavy lifting.

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), resource (weekly off-exchange/dark pool/OTC trading volume), and source (FINRA OTC/ATS Transparency), and even defines the components returned (ATS, non-ATS OTC, total). An agent can distinguish this from volume siblings like GetShortVolume or GetOnBalanceVolume without opening any schema.

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 scopes usage well (exact stock or ETF listing, weekly granularity) and implicitly tells you when it applies, but it never names an alternative tool or an explicit when-not condition. With many volume-adjacent siblings, an explicit routing hint would be needed for a higher score.

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

GetOnBalanceVolumeOn-Balance Volume (OBV)A
Read-only

On-Balance Volume (OBV) for a stock. Running cumulative volume that adds the bar's volume on up-closes, subtracts on down-closes, and stays flat on equal closes. Useful for confirming or diverging from price trends with volume flow. OBV is anchored at 0 on the first bar of the requested range, so absolute values shift with startDate and are not comparable across calls - read the slope and divergences, not the level.

NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., AAPL, MSFT). Class shares use a dash (BRK-B); the dot form (BRK.B) is also accepted. A listing on another exchange is MIC:TICKER (XPAR:AIR).
endDateNoEnd date in YYYY-MM-DD format (defaults to latest available)
startDateNoStart date in YYYY-MM-DD format (defaults to 6 months ago)
maxResultsNoMaximum number of records to return (default: 60, max: 500); the newest rows are kept and listed newest first.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true, but the description goes further with a real behavioral caveat: OBV is anchored at 0 on the first requested bar and absolute levels are not comparable across calls. That 'read the slope, not the level' warning is non-obvious operational context an agent would otherwise get wrong.

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 tight sentences, front-loaded with the definition and followed by usage and the critical caveat; there is no filler and the most decision-relevant warning is placed last for emphasis without burying the core meaning.

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

Completeness4/5

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

For a read-only, no-output-schema indicator tool the description covers what it computes, how to interpret the series, and the cross-call comparability pitfall. It stops short of noting anything about series length or pagination behavior, but nothing essential for a correct call 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 parameter definitions carry the baseline, but the description adds genuine semantic weight by tying startDate to a data-interpretation consequence (the anchor point shifting absolute values between calls) that the schema itself does not state.

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 gives a specific resource (On-Balance Volume for a stock) plus the exact computation rule (add volume on up-closes, subtract on down-closes, flat on equal closes), which makes it clearly distinguishable from the other technical-indicator siblings like GetStochasticOscillator or GetBollingerBands.

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?

It states the analytic use case ('confirming or diverging from price trends with volume flow') but offers no explicit when-to-use/when-not guidance and never names an alternative indicator or the conditions that would select one.

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

GetPutCallRatiosCBOE Put/Call RatiosA
Read-only

Get CBOE put/call ratio data showing market sentiment. Available types: Total (all exchange), Equity, Index, Vix, Etp. High ratios (>1.0) indicate bearish sentiment; low ratios (<0.7) indicate bullish sentiment. Volumes are contract counts. Data available from November 2006 to present (the Vix type from October 2019); pre-2013 history is sampled roughly weekly rather than daily.

NameRequiredDescriptionDefault
typeNoRatio type: Total, Equity, Index, Vix, Etp (default: Equity)Equity
endDateNoEnd date in YYYY-MM-DD format (defaults to latest available)
startDateNoStart date in YYYY-MM-DD format (defaults to 3 months ago)
maxResultsNoMaximum number of records to return (default: 60, max: 500). When the range holds more rows the newest are kept; rows are always listed oldest to newest.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, consistent with the data retrieval nature. Description adds behavioral context: sampling frequency for pre-2013 data and available types (Total, Equity, etc.). 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 concise with three sentences, front-loaded with purpose and key details. Slightly verbose with repeated 'available types' but still 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?

No output schema, but description sufficiently explains return values (ratio data, volumes). Covers data history, sampling, and interpretation. Missing explicit note about required permissions or response format.

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

Parameters4/5

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

Schema coverage is 100%, and description adds value by explaining the meaning of ratio values for the 'type' parameter and order for 'maxResults'. Could include more detail about date format validation.

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 CBOE put/call ratio data for market sentiment, with specific verb 'get' and resource 'CBOE put/call ratio data'. It distinguishes from siblings by focusing on this unique sentiment indicator.

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 interpretation of high/low ratios and data availability periods, providing context for use. However, it does not explicitly mention when to use this tool over similar sentiment tools like GetShortVolume or GetVixHistory.

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

GetRevenueBreakdownRevenue Breakdown by SegmentA
Read-only

Get a company's revenue disaggregated by business segment, geography and product/service — plus operating income by segment when the issuer tags it, so segment profitability and margins are answerable — from the dimensional XBRL facts the issuer tags in its own filings. Annual fiscal years only, latest restated values, one table per axis the company reports; source values are as-reported and never estimated, while segment operating margin is derived as operating income divided by revenue for the same folded raw member QName and exact period. Rows within one table can OVERLAP when the issuer tags several granularities on the same axis (a parent segment alongside its components), so never sum rows to derive total revenue — use the consolidated total row each table carries. For consolidated figures use GetFinancialStatement or GetFinancialFact.

NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., AAPL, MSFT); a listing on another exchange is MIC:TICKER (XPAR:AIR).
maxYearsNoMost recent fiscal years to include (default 8, max 12)

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only carry readOnlyHint=true, so the description must carry behavioral context and it does: as-reported vs derived distinction, operating margin derived as operating income / revenue for the same folded member QName and period, one table per axis, and an explicit overlap warning against summing rows. This is far beyond what the annotations disclose.

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?

Front-loads the purpose and keeps every clause informative — the overlap warning and derived-margin rule earn their space. It is somewhat dense and run-on (nested em-dash asides in a single paragraph), which slightly hurts scannability, but there is minimal 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?

No output schema exists, so the description must convey the return shape, and it does: one table per axis, a consolidated total row per table, as-reported vs derived fields. For a two-parameter read tool with thin annotations, this is complete enough to call and interpret correctly.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (ticker, maxYears) are fully documented in the schema with examples, format (MIC:TICKER) and defaults/max. The description adds no parameter-level detail beyond the schema, so the baseline 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?

States a specific verb (Get) and resource (revenue disaggregated by business segment, geography, product/service) plus the extra payload (operating income by segment). It explicitly differentiates from siblings by naming GetFinancialStatement and GetFinancialFact as the route for consolidated figures. An agent can pick this tool apart from the other financial tools without inspecting 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?

Explicit scope limits: 'Annual fiscal years only', 'latest restated values', plus a clear 'use X instead' for consolidated figures. It also flags the trap case (row overlap, never sum rows) which tells the agent how to interpret results correctly. Both when-to-use and when-not-to-use are present.

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

GetShortInterestShort Interest HistoryA
Read-only

Get bi-monthly short interest history for an exact stock or ETF listing from FINRA. Shows the reported short position, change from the previous settlement, average daily volume, and days to cover per settlement date. Share counts are restated onto today's split basis so the series stays continuous across stock splits; days to cover is as reported (FINRA caps it at 999.99). High days-to-cover (>5) suggests a potential short squeeze — for short interest as a % of shares outstanding and an actual squeeze-candidate ranking use GetShortSqueezeScores; for the market-wide latest settlement use GetShortInterestSnapshot. For primary operating-company stocks only, the answer may also carry a model estimate of the settlement FINRA has not published yet; it appears BELOW the table and must never be presented as a FINRA figure.

NameRequiredDescriptionDefault
tickerYesListed security ticker (e.g., AAPL, VOO, GME)
endDateNoEnd date in YYYY-MM-DD format (defaults to latest available)
startDateNoStart date in YYYY-MM-DD format (defaults to 1 year ago)
maxResultsNoMaximum number of records to return — keeps the most recent N settlements in the range, displayed oldest to newest (default: 24, max: 500)

TDQS

A4.6/5.0
Behavior5/5

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

With only readOnlyHint=true available, the description carries real behavioral load: it discloses split-restated share counts vs. as-reported days-to-cover, FINRA's 999.99 cap, and critically that the model estimate appears BELOW the table and must never be presented as a FINRA figure. That last point is a non-obvious, high-value caveat absent from structured fields.

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?

Purpose and payload are front-loaded, then interpretations, alternatives, and finally the estimate caveat. Dense but nearly every sentence earns its place; the squeeze-threshold remark and estimate caveat make the tail slightly long for a list endpoint.

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

Completeness5/5

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

There is no output schema, so the description must describe return values — and it does: short position, prior-settlement change, average daily volume, days to cover, plus the appended model estimate. An agent has everything needed to call and interpret it correctly.

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

Parameters3/5

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

Schema coverage is 100%, so ticker, startDate, endDate and maxResults are already fully documented, including the max=500 and oldest-to-newest ordering. The description adds settlement-date context but no parameter syntax beyond the schema, so the 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?

States a concrete verb+resource ('Get bi-monthly short interest history ... from FINRA') and scopes it to 'an exact stock or ETF listing'. It explicitly distinguishes itself from siblings by naming GetShortSqueezeScores and GetShortInterestSnapshot, so an agent can route without opening any 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?

Gives explicit alternatives with the selecting condition: % of shares outstanding / squeeze ranking → GetShortSqueezeScores, market-wide latest settlement → GetShortInterestSnapshot. This is exactly the when-to-use/when-not guidance the dimension asks for.

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

GetShortInterestSnapshotMarket-Wide Short Interest SnapshotA
Read-only

Market-wide snapshot of the latest FINRA bi-monthly short interest settlement — one row per exact listed security, sorted by days to cover (descending) by default. FINRA caps days to cover at 999.99: capped rows are a sentinel (almost always illiquid names with a tiny average-daily-volume denominator) and are ranked after real readings; pass minAvgDailyVolume (e.g. 100000) to drop illiquid names entirely. This is the raw FINRA snapshot — for genuine short-squeeze candidate ranking use GetShortSqueezeScores; for one stock or ETF's history use GetShortInterest; for daily short-sale flow use GetShortVolume/GetLargestShortVolume.

NameRequiredDescriptionDefault
offsetNoNumber of ranked results to skip before returning rows (default: 0, clamped to 0-100000). For the next page, add the returned row count to the clamped current offset; if the next offset exceeds 100000, narrow the filters instead. Stop when fewer than the effective page size (maxResults clamped to 1-500) are returned, or the response's total has been reached.
sortByNoSort key: daysToCover (default; FINRA-capped 999.99 sentinel rows ranked last), shortPosition, or change (largest increase in short position first)daysToCover
maxResultsNoMaximum number of results to return (default: 50, max: 500)
minDaysToCoverNoMinimum days to cover filter (default: 0)
minAvgDailyVolumeNoMinimum average daily share volume — set a floor (e.g. 100000) to drop illiquid names whose days-to-cover is inflated by a tiny volume denominator (default: 0 = no floor)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true, so safety is covered. The description adds non-obvious data semantics: FINRA caps days to cover at 999.99, capped rows are a sentinel from illiquid names with tiny volume denominators, and those rows are ranked after real readings. That is genuine behavioral context beyond the structured fields, though it does not cover auth, rate limits, or refresh cadence.

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 snapshot scope before the sibling routing rules. Dense but every sentence carries information; there is minor overlap with the schema's sortBy description of the 999.99 sentinel, which slightly dilutes efficiency.

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

Completeness4/5

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

With no output schema, the description supplies the key return shape ('one row per exact listed security') and default ordering, and covers the tricky filtering case. It stops short of naming any returned fields, but for a read-only market snapshot with full parameter coverage this is close to 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 description coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining the rationale for minAvgDailyVolume (sentinel rows inflated by a tiny volume denominator) with a concrete example value, and by restating the default days-to-cover ordering. It does not add syntax for offset/maxResults, which the schema already handles 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?

Names a specific resource and scope ('market-wide snapshot of the latest FINRA bi-monthly short interest settlement — one row per exact listed security') and explicitly distinguishes itself from three named siblings (GetShortSqueezeScores, GetShortInterest, GetShortVolume/GetLargestShortVolume). An agent can identify the tool and its output granularity without opening the 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?

States explicit routing rules: use GetShortSqueezeScores for genuine squeeze candidate ranking, GetShortInterest for a single stock/ETF's history, GetShortVolume/GetLargestShortVolume for daily flow. It also gives an actionable 'when' for a parameter (pass minAvgDailyVolume to drop illiquid names), leaving nothing to inference.

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

GetShortSqueezeScoresShort Squeeze ScoresA
Read-only

Rank primary operating-company stocks by a peer-relative 0-100 short-squeeze score using short interest, capped days to cover, price versus trailing VWAP, short-volume trend, short-interest change, fails-to-deliver pressure, and bounded price/volume/earnings catalyst boosts. Optional liquidity floors filter the board without changing scores. Pass ticker for one stock's factor breakdown and universe rank. Exchange-traded products are excluded because issuer shares outstanding and earnings are not product-level facts; use GetShortInterest for an ETF's exact FINRA series.

NameRequiredDescriptionDefault
offsetNoNumber of ranked results to skip before returning rows (default: 0, clamped to 0-100000; ignored for a single-ticker lookup). For the next page, add the returned row count to the clamped current offset; if the next offset exceeds 100000, narrow the filters instead. Stop when fewer than the effective page size (maxResults clamped to 1-200) are returned, or the response's total has been reached.
tickerNoOptional stock ticker (e.g. GME): returns that one stock's score, factor breakdown, and rank within the scored universe instead of the board. The liquidity floors do not apply to a single-ticker lookup.
maxResultsNoMaximum number of stocks to return (default: 25, highest score first; clamped to 1-200).
minMarketCapNoMinimum market capitalization in US dollars (e.g. 300000000 = $300M; default 0 = no floor). Stocks with an unknown market cap are excluded when set.
minDollarVolumeNoMinimum average daily dollar volume in US dollars, approximated as the FINRA average daily share volume times the market-cap-implied share price (e.g. 5000000 = $5M/day; default 0 = no floor). Stocks with unknown volume or market cap are excluded when set.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true, so the description carries most of the burden and does well: it discloses the scoring methodology, that liquidity floors filter the board without altering scores, that floors are ignored for a single-ticker lookup, and why ETFs are excluded. It does not cover pagination or result freshness, but that gap is largely filled by the schema.

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

Conciseness4/5

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

Front-loads purpose and scoring inputs, then mode behavior, then the exclusion and alternative. Dense but every clause carries information; the only cost is that it packs a lot into a few long sentences, which slightly hurts scannability.

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

Completeness5/5

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

With no output schema and five documented parameters, the description supplies what an agent needs: what the score is, what universe it applies to, how modes and floors interact, and where to go for the excluded ETF case. Nothing material to correct invocation 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, and the description adds real meaning on top: it clarifies that liquidity floors do not change scores and that they do not apply to a ticker lookup, and that a ticker query returns a factor breakdown plus universe rank rather than a board. This resolves interaction questions the schema alone does not.

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 ('Rank primary operating-company stocks by a peer-relative 0-100 short-squeeze score') and enumerates the factors that feed the score. It explicitly scopes the universe (primary operating companies, ETFs excluded) and points to the sibling GetShortInterest for the ETF case, so an agent can distinguish it from GetShortInterest, GetShortVolume, and GetFailsToDeliver without opening any schema.

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 clear context (screening/ranking for squeeze candidates) and an explicit alternative for the out-of-scope case ('use GetShortInterest for an ETF's exact FINRA series'). It also distinguishes board mode from single-ticker mode. It stops short of stating when *not* to use this tool for operating companies generally, so it is strong but not fully exhaustive.

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

GetShortVolumeDaily Short Sale VolumeA
Read-only

Get daily short sale volume history for an exact stock or ETF listing from FINRA's short sale volume files. Shows short volume, short-exempt volume, total volume, and short volume percentage per trading day. Volumes cover trades reported to FINRA facilities (off-exchange/TRF) only — NOT consolidated tape volume — and a 40-50% Short % is the normal baseline from market-maker liquidity provision, so it must not be quoted as a share of the stock's total traded volume. This daily flow metric is distinct from bi-monthly short interest positions: use GetShortInterest for positions, GetLargestShortVolume for a market-wide single-day ranking, and GetShortSqueezeScores for squeeze candidates.

NameRequiredDescriptionDefault
tickerYesListed security ticker (e.g., AAPL, VOO, GME)
endDateNoEnd date in YYYY-MM-DD format (defaults to latest available)
startDateNoStart date in YYYY-MM-DD format (defaults to 3 months ago)
maxResultsNoMaximum number of records to return — keeps the most recent N trading days in the range, displayed oldest to newest (default: 90, max: 500)

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=true, but the description adds critical behavioral context: volumes cover FINRA off-exchange/TRF trades only, not consolidated tape, and a 40-50% Short % is a normal baseline from market-maker liquidity. These are non-obvious data quirks that prevent 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?

The description is front-loaded with the primary purpose and then layers essential caveats and alternatives without wasted words. Every sentence contributes either scoping, warning, or disambiguation 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 no output schema, the description still names the return fields (short volume, short-exempt volume, total volume, short volume percentage per trading day). Combined with the data-source caveat and sibling disambiguation, an agent has everything needed to call and interpret the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents ticker, startDate, endDate, and maxResults. The description adds no parameter-specific semantics beyond what the schema provides, which meets the baseline of 3.

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 clear verb and resource ('Get daily short sale volume history for an exact stock or ETF listing') and immediately scopes it to FINRA short sale volume files. It explicitly distinguishes this daily flow metric from related tools like GetShortInterest, GetLargestShortVolume, and GetShortSqueezeScores.

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

Usage Guidelines5/5

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

It gives explicit when-to-use guidance by naming alternatives and their distinct purposes: 'use GetShortInterest for positions, GetLargestShortVolume for a market-wide single-day ranking, and GetShortSqueezeScores for squeeze candidates.' It also warns against misquoting the metric as a share of total traded volume.

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

GetStochasticOscillatorStochastic OscillatorA
Read-only

Stochastic Oscillator (%K and %D) for a stock. %K measures the close relative to the high/low range over the lookback window; %D is the smoothed signal line (simple moving average of %K). Useful for spotting overbought (>80) and oversold (<20) conditions. The lookback window is warmed up on price history fetched before startDate, so values do not depend on the requested range's left edge.

NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., AAPL, MSFT). Class shares use a dash (BRK-B); the dot form (BRK.B) is also accepted. A listing on another exchange is MIC:TICKER (XPAR:AIR).
dPeriodNoSmoothing window for %D (default: 3)
endDateNoEnd date in YYYY-MM-DD format (defaults to latest available)
kPeriodNoLookback window for %K (default: 14)
startDateNoStart date in YYYY-MM-DD format (defaults to 6 months ago)
maxResultsNoMaximum number of records to return (default: 60, max: 500); the newest rows are kept and listed newest first.

TDQS

A3.9/5.0
Behavior4/5

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

With readOnlyHint=true already covering the safety profile, the description still adds real behavioral context: the warm-up on price history fetched before startDate, and the explicit guarantee that values do not depend on the requested range's left edge. That is a non-obvious trait an agent would otherwise have to discover by experiment; only pagination/row-limit behavior (found in the schema) is left unaddressed.

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

Conciseness5/5

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

Four sentences, all load-bearing: indicator definition first, then the two series, then the practical interpretation, then the one non-obvious caveat. Nothing is repeated and the core identity is front-loaded.

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

Completeness4/5

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

With no output schema, the description does supply the shape of the return conceptually (%K and %D series over the requested window), and it flags the warm-up semantics that affect results. It stops short of describing row ordering, default window size, or the maxResults cap, though those live in the schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description earns above baseline by explaining what %K and %D actually represent, which is the conceptual meaning behind kPeriod and dPeriod, and by clarifying that the startDate window is warmed up from prior history—context the schema's one-line parameter notes do not convey.

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 names the specific indicator (Stochastic Oscillator), its two output series (%K and %D), and defines how each is computed, so the resource is unambiguous. It does not, however, explicitly distinguish itself from sibling technical-indicator tools like GetBollingerBands or GetAverageTrueRange, so an agent must infer the boundary from the indicator definition alone.

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?

It states an interpretive use case ('spotting overbought (>80) and oversold (<20) conditions'), which implies when the output matters. There is no guidance on when to choose this over the sibling oscillators/volatility tools, nor any preconditions or exclusions, so usage is only implied rather than explicit.

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

GetStockPricesDaily Price HistoryA
Read-only

Get daily OHLCV (Open, High, Low, Close, Volume) price history for a stock. Useful for technical analysis, charting, and price trend analysis. A US listing is quoted in USD; a listing on another exchange (MIC:TICKER) is quoted in its own trading currency, which the output names. An Adj Close column shows the provider's split- and cash-dividend-adjusted close when it differs from Close. Captured corporate-action changes trigger a full-history refresh of the exact listed series, but the stored rows do not certify which split basis the provider returned. Do not treat reconciliation status alone as proof that a window is a consistent total-return series. Zero-volume carry-forward candles are excluded because they do not establish a traded market price.

NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g., AAPL, MSFT, TSLA). Class shares use a dash (BRK-B); the dot form (BRK.B) is also accepted. A listing on another exchange is MIC:TICKER (XPAR:AIR, XLON:BP, XHKG:00005).
endDateNoEnd date in YYYY-MM-DD format (defaults to latest available)
startDateNoStart date in YYYY-MM-DD format (defaults to 1 year ago)
maxResultsNoMaximum number of records to return (default: 260, max: 500). When the range holds more rows the newest are kept; rows are always listed oldest to newest.

TDQS

A4.1/5.0
Behavior5/5

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

With only readOnlyHint provided by annotations, the description adds substantial behavioral context: currency of foreign listings, the Adj Close adjustment basis, that corporate actions trigger a full-history refresh, the caveat that stored rows don't certify split basis, the warning not to treat reconciliation status as total-return proof, and that zero-volume carry-forward candles are excluded. This is well beyond what annotations supply.

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 purpose is front-loaded in the first sentence, followed by progressively deeper caveats about currency, adjustment, and refresh behavior. It is dense and somewhat long, but each sentence carries distinct information; only the reconciliation-status sentence borders on jargon-heavy 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?

No output schema exists, so the description must carry return-value context, and it does: it names the OHLCV columns, the Adj Close column, output currency naming, and excluded zero-volume candles. It could go further on pagination/truncation interaction with maxResults, but the key behavioral surface is 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 description coverage is 100%, so all four parameters (ticker, startDate, endDate, maxResults) are already documented in the schema, including MIC:TICKER conventions and the newest-rows-kept truncation rule. The description adds no parameter-level detail beyond what the schema provides, so the baseline 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?

States a specific verb and resource with scope: 'Get daily OHLCV (Open, High, Low, Close, Volume) price history for a stock.' This clearly distinguishes it from sibling tools such as GetLatestClosingPrices (latest snapshot) and indicator tools like GetBollingerBands, since it returns the raw daily series rather than a derived metric.

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 offers 'Useful for technical analysis, charting, and price trend analysis,' which implies intended use but never states when to choose this over alternatives like GetLatestClosingPrices or indicator endpoints, and gives no exclusions or prerequisites. Usage is implied rather than explicit.

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

GetTopGovernmentContractorsTop Federal ContractorsA
Read-only

Rank public companies by total federal contract dollars awarded over a date range (from USAspending.gov). Sums the total award value (obligated dollars plus unexercised ceiling) of prime contract awards of $1M or more that resolve to a listed company; smaller awards and unlisted recipients are excluded. Answers questions like 'which public companies won the most federal contracts last quarter'. Use GetGovernmentContracts for one company's individual awards.

NameRequiredDescriptionDefault
endDateNoEnd date in YYYY-MM-DD format (defaults to today)
startDateNoStart date in YYYY-MM-DD format, filtering on the award action date (defaults to 1 year ago)
maxResultsNoMaximum number of companies to return (default: 25, largest first)

TDQS

A4.7/5.0
Behavior5/5

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

The description adds significant behavioral context beyond the readOnlyHint annotation: it details data source (USAspending.gov), aggregation methodology (sum of obligated dollars plus unexercised ceiling), filtering (prime contracts of $1M+, excluding smaller awards and unlisted recipients). 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?

Four sentences with no wasted words. The first sentence states the core purpose, followed by methodological details and usage guidance. Front-loads the most important 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 3 optional parameters and no output schema, the description adequately explains input (dates, max results) and output (ranked list of companies with total federal contract dollars). It also clarifies exclusions and data source, making the tool's behavior fully predictable.

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 reinforces parameter meaning (e.g., date range filtering on award action date, defaults for startDate and endDate). It adds context about what data is aggregated, which complements 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 public companies by total federal contract dollars over a date range, with specific verb 'Rank' and resource 'public companies by total federal contract dollars'. It distinguishes from sibling GetGovernmentContracts by mentioning different 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 explicitly references an alternative tool ('Use GetGovernmentContracts for one company's individual awards') and provides example questions ('which public companies won the most federal contracts last quarter'). It lacks explicit when-not to use but the alternative covers the main distinction.

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

GetTopHoldersTop Institutional HoldersA
Read-only

Get the top institutional holders (fund managers) of an exact stock or ETF listing from SEC 13F-HR filings. Returns a ranked list by shares held, including published position value and percentage of total institutional 13F shares (not of shares outstanding). Values normally use report-date closing prices, may fall back to filer values, and can be zero when unavailable. During the newest quarter's filing window, non-ETF primary stocks carry non-filers' prior-quarter positions; ETF listings remain exact and as-filed because carry-forward is filer-wide. Use position type before treating put/call rows as ownership. Each holder shows its entity type from regulatory records (Form ADV, SEC filer profile, 13D/13G, N-CEN), filtered by holderTypes, and its style band measured from its filed book, filtered by styles.

NameRequiredDescriptionDefault
offsetNoNumber of ranked holding rows to skip before returning results (default: 0)
stylesNoStyle bands to keep, as an array of tokens: idx (index-like), sys (systematic-like), conc (concentrated), divact (diversified active), unk (book too small or unvalued to band), e.g. ["conc"]. Bands are measured from each holder's filed 13F book in the newest measured quarter on or before the report date; a holder not measured that quarter is left out by any style filter. Omit for all.
tickerYesListed security ticker (e.g., AAPL, VOO)
maxResultsNoMaximum number of holding rows to return (default: 20, clamped to 1-500)
reportDateNoQuarter-end 13F report date in YYYY-MM-DD format, e.g. 2026-03-31 (defaults to the latest available; an off-quarter date snaps to the nearest report on or before it)
holderTypesNoHolder types to keep, as an array of tokens: adv (registered investment adviser), era (exempt reporting adviser), ia (other adviser), bank, ins (insurer), bd (broker-dealer), fund (registered fund), plan (benefit plan), nonus (non-US institution), unk (no deciding record yet), e.g. ["bank", "ins"]. Types come from Form ADV, SEC filer profiles, 13D/13G and N-CEN, never from names. Omit for all.

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only assert readOnlyHint=true, so the description carries the interpretive burden and does so richly: price-source fallbacks, zero-value cases, prior-quarter carry-forward behavior during filing windows and its ETF exception, and the warning that the percentage is of total institutional 13F shares, not shares outstanding. These are non-obvious traits an agent could not infer from structured fields.

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?

Purpose and return format are front-loaded, with caveats following. The prose is dense and some sentences carry several clauses, but each sentence adds a distinct operational caveat rather than 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?

With no output schema, the description usefully enumerates what a row contains (rank, shares, position value, percentage basis, entity type, style band). Combined with the carry-forward and put/call caveats it is nearly complete, though the pagination interaction between offset and maxResults is left to the 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 description coverage is 100%, so all six parameters including styles and holderTypes tokens are already documented in the schema. The description restates the existence of the holderTypes and styles filters without adding token syntax or default behavior beyond what the schema provides, so the 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?

States a precise verb+resource scope: top institutional holders of an exact stock or ETF listing sourced from SEC 13F-HR filings. This clearly separates it from sibling tools that traverse the other direction (GetInstitutionPortfolio, GetInstitutionConsensusHoldings) or aggregate across stocks (GetMostHeldStocks, GetHolderMix).

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 offers interpretation guidance ('Use position type before treating put/call rows as ownership') and explains the filing-window nuance, but never explicitly states when to choose this tool over alternatives such as GetHolderMix or GetTopInstitutionalBuyersSellers. Usage is implied rather than routed.

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

GetTopInstitutionalBuyersSellersTop Institutional Buyers and SellersA
Read-only

Get the institutions that moved the needle the most on a stock this quarter — biggest absolute share additions (Top Buyers) and biggest absolute share reductions (Top Sellers) versus the previous 13F report date. Includes new positions (Δ = full position) and sold-out positions (Δ = −prior position); entries and exits require observed 13F filings in both compared quarters, so missing filings cannot become a full-position buy or sale; a filer that continues under one new CIK with a matching 13F book is compared through that successor, and one split across several new CIKs is left out; the output counts the filers and shares left out and names the largest. While the newest quarter's filing window is open, results cover only the funds that have already filed (noted in the output). Returns a markdown table with two sections. Use this to surface the most actionable quarterly signal from 13F filings.

NameRequiredDescriptionDefault
tickerYesListed security ticker (e.g., AAPL, VOO)
maxResultsNoMaximum number of buyers and sellers to return per section (default: 10, clamped to 1-500)
reportDateNoQuarter-end 13F report date in YYYY-MM-DD format, e.g. 2026-03-31 (defaults to the latest available; an off-quarter date snaps to the nearest report on or before it)

TDQS

A4.2/5.0
Behavior5/5

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

With readOnlyHint=true already covering the safety profile, the description layers on genuinely useful behavior: new/sold-out position treatment (Δ = full position / −prior position), the requirement of observed filings in both quarters, CIK-successor handling, an explicit note that open filing windows yield partial results, and disclosure that excluded filers/shares are counted and the largest named. This is far beyond what the annotation conveys.

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?

Purpose and comparison window are front-loaded, and most clauses earn their place by encoding real edge-case rules. The dense semicolon-chained middle is heavy to parse, and the closing sentence is pure sales copy that adds no selection 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?

No output schema exists, and the description compensates by stating the return shape ('a markdown table with two sections') plus the caveat that open filing windows produce partial coverage. Combined with the exclusion/counting rules, an agent has everything needed to call and interpret this 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 ticker, maxResults, and reportDate are already fully documented with defaults, clamps, and snapping behavior. The description adds nothing parameter-specific beyond restating 'this quarter' (matching reportDate's latest-available default), 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 names a precise verb+resource and defines the exact metric: biggest absolute share additions (Top Buyers) and reductions (Top Sellers) versus the previous 13F report date. This quarter-over-quarter change framing clearly separates it from siblings like GetTopHolders and GetInstitutionalOwnershipHistory, which describe static or historical ownership rather than the buyer/seller delta.

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?

Only one usage statement is given — 'Use this to surface the most actionable quarterly signal from 13F filings' — which is promotional rather than directive. It never names an alternative (e.g., GetTopHolders, GetMarketWide13FActivity, GetInstitutionQuarterlyActivity) or states when not to use it, so the routing burden falls on the agent inferring scope from the definition alone.

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

GetVixHistoryVIX Volatility Index HistoryA
Read-only

Get CBOE Volatility Index (VIX) historical daily OHLC data. VIX measures expected 30-day S&P 500 volatility. Below 15 = low volatility/complacency, above 30 = high fear/uncertainty. Data available from 1990 to present.

NameRequiredDescriptionDefault
endDateNoEnd date in YYYY-MM-DD format (defaults to latest available)
startDateNoStart date in YYYY-MM-DD format (defaults to 3 months ago)
maxResultsNoMaximum number of records to return (default: 60, max: 500). When the range holds more rows the newest are kept; rows are always listed oldest to newest.

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 data range (1990-present) and explains the meaning of VIX levels. 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 succinct sentences: first states purpose, second adds contextual meaning and data range. No wasted words, front-loaded.

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

Completeness5/5

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

With 3 optional parameters and no output schema, the description is complete: it explains what the tool does, what VIX represents, data availability, and implicitly that output is OHLC daily data.

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 includes descriptions for each parameter. The description adds overall context but no additional parameter-level specifics beyond the schema.

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

Purpose5/5

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

Clearly states it gets CBOE VIX historical daily OHLC data, with specific verb and resource. Distinguishes from siblings like GetStockPrices by focusing on the VIX index.

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 context on VIX levels and data availability, helping agents understand when to use this tool. However, no explicit alternative or when-not-to-use guidance is given.

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

ListFilingsList FilingsA
Read-only

List stored SEC filings and earnings-call transcripts newest first. Omit ticker for a market-wide feed or provide one ticker for a company-specific list. Returns company identity, document IDs, types, filing and reporting dates, SEC item numbers, line counts, EDGAR accession numbers and acceptance times (UTC; blank for filings stored before October 2026), and page totals. Supports date, document-type, and exact SEC item-number filters. Hidden document types remain excluded unless explicitly requested. When the deployment summarizes documents, each row adds a one- or two-sentence summary of what the document says. Pass a returned ID to SearchDocument or ReadDocumentLines.

NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
tickerNoOptional company ticker symbol (e.g., AAPL, MSFT); a listing outside the US is MIC:TICKER (e.g. XPAR:AIR), whose list includes its ESEF reports. Omit for all companies.
endDateNoOptional end date filter in YYYY-MM-DD format
maxItemsNoMaximum number of documents per page (default: 10)
startDateNoOptional start date filter in YYYY-MM-DD format
itemNumberNoOptional exact SEC current-report item number, e.g. 2.02, 5.02, or 1.01.
documentTypeNoDocument type filter: a registered value such as 'TenK', 'TenQa', 'EightK', 'TwentyF', 'Def14A', 'Defa14A', 'SThree' or 'TenderOfferThirdParty', or its SEC form name ('10-K', '20-F/A', 'DEFA14A', 'S-3ASR', 'SC TO-T', 'NT 10-Q'), plus deployment-registered types such as EarningsCallTranscript. An unrecognized value returns an error listing every accepted value.

TDQS

A4.7/5.0
Behavior5/5

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

Adds substantial behavior beyond readOnlyHint=true: return fields, UTC/blank acceptance times before October 2026, hidden document types excluded unless requested, and optional per-row summaries. These details materially inform expected results.

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?

Front-loads the core list operation, then covers filtering, exclusions, optional summaries, and next-step routing. The length is justified by the tool's breadth, with no obvious 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?

No output schema exists, but the description explains returned identity, IDs, types, dates, item numbers, line counts, accession data, and page totals. Combined with annotations, it is complete enough 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 coverage is 100%, so parameter documentation is already complete. The description still adds semantics by explaining ticker omission for market-wide feeds, date/document-type/item filters, and hidden-type behavior.

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: lists stored SEC filings and earnings-call transcripts newest first. It clearly distinguishes market-wide versus ticker-specific listing, so the agent can identify the tool without opening schemas.

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

Usage Guidelines4/5

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

Explains ticker usage and names SearchDocument and ReadDocumentLines as follow-up tools for IDs. It does not directly compare itself to SearchDocuments or exclude specific situations, but the usage context is clear.

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

ReadDocumentLinesRead Filing LinesA
Read-only

Read numbered lines from one SEC filing or earnings-call transcript. Use line numbers returned by SearchDocument or request a known range. Returns at most 2,000 lines and identifies the next startLine when truncated.

NameRequiredDescriptionDefault
endLineYesLast line to read (1-based, inclusive). At most 2,000 lines are returned per call; a longer range is truncated with a note on how to continue.
startLineYesFirst line to read (1-based, inclusive)
documentIdYesDocument ID obtained from ListFilings

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description discloses the 2,000-line return cap and the truncation/continuation behavior (next startLine), which the annotation does not carry. It adds useful operational context, though it does not detail error handling or how the 'next startLine' is surfaced.

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 tight sentences, front-loaded with the core action and followed by usage and output behavior. No filler 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?

For a read-only tool with a fully covered schema and no output schema, the description supplies what an agent needs: the resource, how to obtain inputs, and the return-size/continuation model. Nothing material 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?

Schema description coverage is 100%, so all three parameters (documentId, startLine, endLine) are already fully documented, including 1-based inclusive semantics and the truncation note. The description reinforces the range/limit concept but adds little beyond what the schema already provides.

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

Purpose5/5

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

States a specific verb (Read) and resource (numbered lines from an SEC filing or earnings-call transcript), and implicitly contrasts itself with SearchDocument, which produces the line numbers rather than reading them. An agent can distinguish this from its siblings without opening the schema.

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 workflow context by naming SearchDocument as the source of line numbers and offering the alternative of requesting a known range. It stops short of explicit when-not-to-use guidance or edge cases, but the intended entry point is unambiguous.

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

SearchCftcMarketsSearch CFTC Futures ContractsA
Read-only

Search the tracked CFTC futures contracts by name, market code, common contract name, or standard futures symbol, or omit the query to list every tracked contract. Coverage is a curated set of ~35 major contracts across Agriculture, Energy, Metals, Equity Indices, Interest Rates, and Currencies - markets outside this set have no COT data here. Returns matching contracts with their codes and categories; use this to discover market codes before calling GetCftcPositioning.

NameRequiredDescriptionDefault
queryNoSearch query — market code, name words, common name, or standard symbol (e.g., 'gold futures', 'WTI', 'ES', 'S&P 500', '088691'). Search requires every punctuation-independent word first and broadens to any word only when no strict row matches. Omit to list all tracked contracts.
maxResultsNoMaximum number of results to return (default: 50, max: 500)

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 doesn't need to restate safety. It adds real context beyond the annotations: the coverage is a curated ~35-contract set, and markets outside it have no COT data here — an important expectation-setting constraint. It also names what is returned (codes and categories), though it says nothing about result ordering or 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.

Conciseness4/5

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

Front-loads the core action and scope in the first sentence, then the coverage caveat and the routing hint. Every sentence carries information, though the middle coverage sentence is dense and the closing clause is slightly run-on.

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

Completeness4/5

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

With no output schema, the description compensates by describing the return shape (matching contracts with codes and categories) and the coverage boundary. Combined with the fully documented schema and readOnly annotation, an agent has nearly everything needed; only ordering/pagination detail is absent.

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 schema already documents both parameters, including the fuzzy/strict matching rule and the omit-to-list-all behavior. The description restates the searchable fields and the list-all case but adds no syntax or format detail 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?

States a specific verb (Search) and resource (tracked CFTC futures contracts) and enumerates the searchable keys (name, market code, common contract name, symbol). It is clearly distinguishable from siblings like GetCftcPositioning, which it explicitly references.

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

Usage Guidelines5/5

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

Gives explicit when-to-use: 'use this to discover market codes before calling GetCftcPositioning,' plus the no-query behavior ('omit the query to list every tracked contract'). The alternative workflow is named, so the agent knows both the trigger and the downstream step.

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

SearchCongressMembersSearch Congress MembersA
Read-only

Search the tracked congressional roster by name. Search first requires every punctuation-independent query word anywhere in the filed name, then broadens to any word only when no strict row matches. Verified public-name aliases such as Dan Crenshaw resolve to the roster name. Returns each match with its position, seat and current party (from the latest term); pass the returned exact Name to GetMemberTrades or GetMemberNetWorth.

NameRequiredDescriptionDefault
queryYesSearch query — partial or full name (e.g., 'Pelosi', 'Cruz', 'Dan')
positionNoFilter by position: Senator or Representative (defaults to both)
maxResultsNoMaximum number of results to return (default: 20, max: 500)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only declare readOnlyHint, so the description carries most of the burden — and it does: it discloses the two-phase strict-then-broad matching algorithm, that it requires every query word in the first pass, that aliases like 'Dan Crenshaw' resolve to the roster name, and what the response contains (position, seat, latest-term party). It omits pagination/result-count behavior, keeping it short of 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.

Conciseness4/5

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

Four sentences, none filler, with the core purpose and matching rules front-loaded ahead of the downstream routing hint. The middle sentences are dense, but every one carries information the schema does not.

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

Completeness5/5

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

There is no output schema, so the description must describe the return shape — and it does, listing position, seat, and current party with a stated source (latest term) plus the exact Name field needed for chaining. Combined with the 100%-covered input schema, an agent has everything required to call and use this tool.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond it: the multi-word AND-then-OR broadening rule for `query` and the alias-resolution behavior are not expressed anywhere in the schema. It says nothing additional about the `position` or `maxResults` filters, so it does not earn a 5.

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?

Names a specific verb and resource ('Search the tracked congressional roster by name') and is immediately distinguishable from the many GetCongressionalTrades/GetMemberTrades siblings that retrieve trade data rather than resolve identities. It even states the matching policy up front.

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 routes the agent onward: 'pass the returned exact Name to GetMemberTrades or GetMemberNetWorth', which tells the agent this is the lookup step before those tools. It stops short of stating when to prefer this over adjacent search tools like SearchInsiders or SearchInstitutions, so it is clear context without full exclusions.

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

SearchDocumentSearch Within One FilingA
Read-only

Search one SEC filing or earnings-call transcript by document ID. semantic mode uses hybrid relevance and returns excerpts in document order with approximate line numbers. exact mode performs a literal case-insensitive substring match and returns precise matching lines. Get document IDs from SearchDocuments or ListFilings; use ReadDocumentLines for surrounding text.

NameRequiredDescriptionDefault
queryYesSearch query — plain keywords or a short natural-language phrase. When too few excerpts match every word, the search automatically broadens to match any of the words. In searchMode 'exact', matched as a literal case-insensitive substring.
documentIdYesDocument ID obtained from ListFilings or a SearchDocuments result header
maxResultsNoMaximum number of results to return (default: 5)
searchModeNoHow to match: 'semantic' (default — hybrid keyword and semantic relevance) or 'exact' (literal case-insensitive substring match with precise line numbers).semantic
maxExcerptCharsNoMaximum characters per excerpt (default: 0 = full excerpt). Set a small value (e.g. 400) for a compact scan across many results; truncated excerpts end with an explicit note.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true, and the description adds useful behavioral detail: semantic mode returns excerpts in document order with approximate line numbers, while exact mode returns precise matching lines. It does not discuss pagination or limits, but the core retrieval behavior is transparent.

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

Conciseness5/5

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

Three tightly written sentences with no waste. The core action and mode distinction are front-loaded, followed by prerequisite IDs and alternative tool 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 read-only search tool with no output schema, the description is complete enough: it covers input source, mode behavior, result ordering, line-number behavior, and the alternative for surrounding context. Nothing critical is missing for correct invocation.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful interpretation of searchMode and source of documentId beyond the schema text. It does not elaborate every parameter, such as maxResults, but improves mode selection 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?

States a specific verb and resource: searching one SEC filing or earnings-call transcript by document ID. It clearly distinguishes itself from SearchDocuments and ReadDocumentLines, so an agent can route among them without opening 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?

Explicitly explains where to get document IDs (SearchDocuments or ListFilings) and when to use ReadDocumentLines for surrounding text. It also distinguishes semantic versus exact mode use, leaving little to inference.

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

SearchDocumentsSearch SEC FilingsA
Read-only

Search SEC filings and earnings-call transcripts with hybrid keyword and semantic retrieval, or with match 'phrase' for only the excerpts containing an exact phrase. Omit ticker to search every company, or provide one ticker to search only that company. Returns excerpts with document IDs for SearchDocument or ReadDocumentLines. Use excludeTickers and maxResultsPerCompany only for market-wide discovery; use ListFilings to browse filings newest first without a text query.

NameRequiredDescriptionDefault
matchNoHow the query matches: 'ranked' (default — relevance-ranked keyword and semantic retrieval that broadens to any of the words when results are sparse) or 'phrase' (only excerpts containing the query's words consecutively and in order; case and punctuation are ignored).ranked
queryYesSearch query — plain keywords or a short natural-language phrase. In ranked mode, when too few excerpts match every word, the search automatically broadens to match any of the words; concise, filing-phrased terms (e.g. 'Data Center revenue') still rank best. In phrase mode, the exact phrase to find.
tickerNoOptional company ticker; a listing outside the US is MIC:TICKER (e.g. XPAR:AIR). Omit to search across all companies.
endDateNoOptional end date filter in YYYY-MM-DD format
startDateNoOptional start date filter in YYYY-MM-DD format
maxResultsNoMaximum number of results to return (default: 5, max: 500)
documentTypesNoOptional document types. Accepts registered values such as TenK, TenQ, EightK, TwentyF, SixK, FortyF, Def14A, SOne, or deployment-registered types such as EarningsCallTranscript. SEC form names such as 10-K, DEFA14A, S-3, SC TO-T or NT 10-K are also accepted; an invalid value returns the full accepted list.
excludeTickersNoOptional tickers to exclude from a market-wide search (max 25). Cannot be combined with ticker.
maxExcerptCharsNoMaximum characters per excerpt (default: 0 = full excerpt). Set a small value (e.g. 400) for a compact scan across many results; truncated excerpts end with an explicit note.
maxResultsPerCompanyNoMaximum results from any single company (default: 0 = unlimited). Set a small value (e.g. 2) to spread results across more companies for discovery-style queries.

TDQS

A4.8/5.0
Behavior5/5

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

The readOnlyHint annotation already covers safety, and the description adds substantial behavioral context: hybrid keyword/semantic retrieval, ranked-mode broadening, exact phrase behavior, excerpt return format, and document IDs for follow-up tools. It is consistent with the read-only 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 front-loaded and compact for a 10-parameter tool. Each sentence conveys useful selection or behavior information without repetition.

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 key search behavior, scope controls, and return excerpts with document IDs. Because there is no output schema, a fuller description of the returned excerpt object would be ideal, but the essential information for calling the tool is present.

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 most parameter meaning is already documented. The description adds cross-parameter usage guidance, especially for ticker scope and for excludeTickers/maxResultsPerCompany in market-wide discovery, but it does not add detail for every 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 states a specific verb and resource: searching SEC filings and earnings-call transcripts. It distinguishes retrieval modes and names related tools such as SearchDocument, ReadDocumentLines, and ListFilings.

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

Usage Guidelines5/5

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

It gives explicit selection guidance: omit ticker to search all companies, provide one ticker to narrow, use phrase mode for exact excerpts, and use ListFilings instead when browsing without a text query. It also explains when excludeTickers and maxResultsPerCompany are appropriate.

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

SearchEconomicIndicatorsSearch Economic IndicatorsA
Read-only

Search the curated set of ~40 US macro FRED series Equibles tracks (rates, inflation, employment, GDP, housing, market indicators) — not the full FRED catalog. Search first requires every punctuation-independent query word anywhere across the series ID, title, or category, then broadens to any word only when that strict search has no rows. Standard names such as fed funds rate, jobless claims, payrolls, yield curve, and core CPI are recognized. An empty query lists every tracked series. Results include seasonal adjustment, the latest observation date, and the UTC time Equibles last synced the series.

NameRequiredDescriptionDefault
queryYesSearch query — series ID, title keyword, or category name (e.g., 'inflation', 'unemployment', 'GDP', 'FEDFUNDS'). Empty lists all tracked series.
maxResultsNoMaximum number of results to return (default: 20, max: 500)

TDQS

A4.1/5.0
Behavior5/5

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

Annotations supply only readOnlyHint=true, so the description carries the behavioral burden and does so well: it explains the strict-AND-first-then-broaden fallback (which explains why loose results can appear), alias recognition for names like 'yield curve' and 'core CPI', and empty-query behavior. It also names the fields returned (seasonal adjustment, latest observation date, UTC sync time), which matters since there is no output schema.

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

Conciseness4/5

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

Purpose and scope are front-loaded in the first clause, and the remaining sentences each add distinct operational detail (fallback logic, aliases, empty query, return fields). It is dense but not padded; slightly long single-block structure is the only weakness.

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

Completeness4/5

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

With no output schema, the description compensates by enumerating result fields and by documenting search semantics and the empty-query case. What remains thin is the relationship to sibling retrieval tools (e.g., how to go from a search hit to fetching a series), leaving a small gap for a 2-param discovery 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 both parameters are already documented in the schema, including query examples and the maxResults default/max. The description only marginally exceeds this by noting punctuation-independent word matching and standard-name recognition; maxResults is not discussed in prose. 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?

Starts with a specific verb+resource ('Search the curated set of ~40 US macro FRED series Equibles tracks') and explicitly bounds scope with 'not the full FRED catalog.' That contrast distinguishes it from siblings like GetEconomicIndicator (single series fetch) and GetLatestEconomicIndicators, so an agent can route without opening any schema.

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?

Usage is only implied by the scope statement ('curated set... not the full FRED catalog'), which hints this is a discovery tool. There is no explicit when-to-use/when-not or named alternative such as GetEconomicIndicator for retrieving a known series, so the agent must infer the routing itself.

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

SearchFundsSearch Funds and ETFsA
Read-only

Search the tracked SEC Form NPORT-P fund directory by fund name, ticker, SEC series ID, or registrant. Returns one canonical profile per series with ticker, registration type, latest report date, assets, and reported-versus-stored holding counts. Exact stored tickers outrank verified share-class aliases. Use the profile ID with GetFundProfile. The directory covers NPORT-P filers; a miss is a dataset-coverage result, not proof that a fund does not exist.

NameRequiredDescriptionDefault
queryYesFund name, ticker, registrant, or verified share-class alias (e.g., 'Russell 2000', 'iShares', 'IWM', 'VOO').
maxResultsNoMaximum number of funds to return, largest by net assets first (default: 20, max: 500)

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, it discloses result shape (one canonical profile per series), ranking behavior ('exact stored tickers outrank verified share-class aliases'), and a coverage boundary (NPORT-P filers only, misses are coverage artifacts). These are exactly the behavioral traits an agent needs and that annotations cannot convey.

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 compact sentences plus the coverage caveat, front-loaded with the core action before the ranking and coverage details. No padding, though the enumeration of return fields is dense enough that it verges on a run-on.

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

Completeness5/5

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

With no output schema, the description compensates by naming the returned fields (ticker, registration type, latest report date, assets, holding counts), stating the ranking rule, the coverage scope, and the follow-up tool. Nothing material for a correct call 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?

Schema coverage is 100%, so the baseline is 3 and the schema already documents both parameters. The description largely mirrors the schema's query enumeration, and it even diverges slightly by citing 'SEC series ID' while omitting the 'verified share-class alias' the schema lists; it adds little new parameter syntax or format detail.

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 ('Search the tracked SEC Form NPORT-P fund directory') and enumerates the four accepted lookup keys. It distinguishes itself from adjacent tools such as GetFundProfile by explicitly routing the returned profile ID forward, so an agent can tell which tool to call first without opening a schema.

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 workflow cue ('Use the profile ID with GetFundProfile') and an important interpretive caveat that empty results reflect dataset coverage rather than fund existence. It does not, however, contrast this tool against textual siblings like SearchDocument or SearchInstitutions, so the 'when not to use' side is left implicit.

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

SearchInsidersSearch Corporate InsidersA
Read-only

Search the tracked SEC corporate-insider set (directors, officers, 10% owners) by name. Search first requires every punctuation-independent whole query word in the filed legal name, then broadens to any whole word only when no strict row matches; a token inside a different word is not a match. Verified public-name aliases such as Jensen Huang resolve to the SEC owner identity. Returns CIK, role, latest filing company, and location, ordered by recent filing activity.

NameRequiredDescriptionDefault
queryYesSearch query for insider name
offsetNoNumber of matches to skip before returning rows (default: 0, clamped to 0-100000). For the next page, add the returned row count to the clamped current offset; if the next offset exceeds 100000, narrow the filters instead. Stop when fewer than the effective page size (maxResults clamped to 1-500) are returned, or the response's total has been reached.
maxResultsNoMaximum number of results (default: 10, max: 500; values outside 1-500 are clamped)

TDQS

A4.2/5.0
Behavior4/5

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

With readOnlyHint already declaring safety, the description adds meaningful behavior: strict whole-word matching first, broadening only when no strict row matches, no partial-token matches, alias resolution, and result ordering by recent filing activity. It does not disclose pagination or rate-limit behavior, but the schema already covers paging.

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 every sentence contributes useful search semantics. The second sentence is dense and technical, but it earns its length by explaining the non-obvious matching rules.

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 name-search tool with no output schema, the description covers the tracked population, query matching semantics, alias behavior, returned fields (CIK, role, latest filing company, location), and ordering. Pagination is already fully documented in the schema, so no essential information 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 goes beyond the schema's bare 'Search query for insider name' by explaining punctuation-independent whole-word matching, strict-then-broad fallback, and alias resolution such as Jensen Huang, which materially clarifies how to form the query 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?

States a specific verb and resource: 'Search the tracked SEC corporate-insider set (directors, officers, 10% owners) by name.' This clearly distinguishes it from sibling search tools such as SearchCongressMembers and SearchInstitutions by domain and by the name-based lookup.

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 explains the search's matching algorithm in detail but never explicitly says when to choose it over siblings like GetInsiderTransactions or GetInsiderOwnership. Usage is implied by 'Search ... by name,' so an agent can infer the intent, but no alternatives or exclusions are named.

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

SearchInstitutionsSearch Institutional InvestorsA
Read-only

Search the tracked 13F filer set by institution name or SEC CIK. Search first requires every punctuation-independent query word anywhere in the filed name, then broadens to any word only when no strict row matches. Verified brand aliases such as Fidelity, Vanguard, and BlackRock include their current flagship CIK. Results are largest within the recently-active filing bucket first and include latest report date, tracked 13F position value, and position count so same-name filers can be compared before calling an institution tool. Values normally use report-date closing prices, may fall back to filer values, and can include zero for unavailable valuations. Scoped institution tools remain strict and never discard an unmatched word. Each result shows its entity type from regulatory records, and holderTypes filters by it.

NameRequiredDescriptionDefault
queryYesSearch query — institution name, partial name, or CIK
maxResultsNoMaximum number of results to return (default: 10, clamped to 1-500)
holderTypesNoHolder types to keep, as an array of tokens: adv (registered investment adviser), era (exempt reporting adviser), ia (other adviser), bank, ins (insurer), bd (broker-dealer), fund (registered fund), plan (benefit plan), nonus (non-US institution), unk (no deciding record yet), e.g. ["bank", "ins"]. Types come from Form ADV, SEC filer profiles, 13D/13G and N-CEN, never from names. Omit for all.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond readOnlyHint, the description discloses matching semantics, alias behavior for major brands, result ordering by largest recently-active filer, included comparison fields, valuation fallback behavior, and the possibility of zero values. These are substantive behavioral traits that help an 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 core purpose and matching logic, and most sentences carry useful behavioral detail. It is somewhat dense and long, with minor overlap against schema-documented holderTypes behavior, but not bloated.

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 lack of an output schema, the description supplies enough return-value context: latest report date, tracked 13F position value, position count, entity type, ordering, and valuation caveats. An agent has what it needs to call and interpret this 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 schema already documents query, maxResults, and holderTypes in detail. The description adds only limited parameter-specific meaning, such as noting that results show entity type and holderTypes filters by it, which is consistent with but not substantially 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 and resource: search the tracked 13F filer set by institution name or SEC CIK. It also distinguishes this broad search from scoped institution tools, which remain strict and never discard unmatched words, so an agent can tell which tool category fits.

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 that search first requires all punctuation-independent query words to match, then broadens only when no strict row matches, and it suggests comparing same-name filers before calling an institution tool. It names the alternative category, scoped institution tools, but does not explicitly list when not 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.

SearchInvestmentAdvisersSearch Investment AdvisersA
Read-only

Search the tracked SEC Form ADV adviser set by firm name. Search first requires every punctuation-independent query word anywhere in the legal or business name, then broadens to any word only when no strict row matches. Returns CRD, main office, regulatory assets under management, employee count and as-of date, largest by assets first. Use the CRD with GetInvestmentAdviser.

NameRequiredDescriptionDefault
queryYesPart of the firm's legal or business name (e.g., "Vanguard", "Renaissance")
maxResultsNoMaximum number of advisers to return (default: 20, clamped to 1-500)

TDQS

A4.7/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 does so richly: two-phase matching (strict all-word first, broadening to any-word only on no strict matches), the returned fields (CRD, main office, AUM, employee count, as-of date), and the sort order (largest by assets first).

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 tight sentences with no filler: the search scope leads, matching semantics follow, return shape comes third, and the hand-off to the sibling tool closes. Everything is 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?

There is no output schema, but the description enumerates the returned fields and their ordering, and it explains the follow-up path via CRD. An agent has everything needed to call it and chain 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 description coverage is already 100%, so the baseline is 3; the description goes further by characterizing how the query string is matched (punctuation-independent, strict then broad) rather than just restating that it is part of a firm name.

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 (Search) and a precise resource (the tracked SEC Form ADV adviser set), scoped to firm name. It is distinguishable from sibling searchers like SearchFunds and SearchInstitutions by naming the adviser universe, and it names GetInvestmentAdviser as the complementary tool.

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 clear context for the search and explicitly routes the agent to GetInvestmentAdviser for the CRD follow-up. It does not state when NOT to use this versus other search tools, so it stops short of full when/when-not guidance.

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. 65 tool updatesv0.1.0
    • First observedCompareFinancialFact
    • First observedCompareInstitutionPortfolios
    • First observedGetAverageTrueRange
    • First observedGetBollingerBands
    • First observedGetCftcPositioning
    • First observedGetCongressionalTrades
    • First observedGetDividendHistory
    • First observedGetEconomicCalendar
    • First observedGetEconomicIndicator
    • First observedGetFailsToDeliver
    • First observedGetFdaAdvisoryCommitteeMeetings
    • First observedGetFinancialFact
    • First observedGetFinancialStatement
    • First observedGetForm144ProposedSales
    • First observedGetFormDOfferings
    • First observedGetFundNcenReports
    • First observedGetFundProfile
    • First observedGetFundsHoldingStock
    • First observedGetGovernmentContracts
    • First observedGetHolderMix
    • First observedGetHolderTypeFlows
    • First observedGetInsiderOwnership
    • First observedGetInsiderTransactions
    • First observedGetInstitutionalOwnershipHistory
    • First observedGetInstitutionCloneBacktest
    • First observedGetInstitutionConsensusHoldings
    • First observedGetInstitutionPortfolio
    • First observedGetInstitutionQuarterlyActivity
    • First observedGetInstitutionSectorAllocation
    • First observedGetInstitutionStyleHistory
    • First observedGetInstitutionSummary
    • First observedGetInvestmentAdviser
    • First observedGetLargestShortVolume
    • First observedGetLatestCftcPositioning
    • First observedGetLatestClosingPrices
    • First observedGetLatestEconomicIndicators
    • First observedGetMarketWide13FActivity
    • First observedGetMemberNetWorth
    • First observedGetMemberTrades
    • First observedGetMostHeldStocks
    • First observedGetOffExchangeVolume
    • First observedGetOnBalanceVolume
    • First observedGetPutCallRatios
    • First observedGetRevenueBreakdown
    • First observedGetShortInterest
    • First observedGetShortInterestSnapshot
    • First observedGetShortSqueezeScores
    • First observedGetShortVolume
    • First observedGetStochasticOscillator
    • First observedGetStockPrices
    • First observedGetTopGovernmentContractors
    • First observedGetTopHolders
    • First observedGetTopInstitutionalBuyersSellers
    • First observedGetVixHistory
    • First observedListFilings
    • First observedReadDocumentLines
    • First observedSearchCftcMarkets
    • First observedSearchCongressMembers
    • First observedSearchDocument
    • First observedSearchDocuments
    • First observedSearchEconomicIndicators
    • First observedSearchFunds
    • First observedSearchInsiders
    • First observedSearchInstitutions
    • First observedSearchInvestmentAdvisers

TDQS

A3.9/5.0

Scored across 65 tools

Disambiguation3/5

Descriptions are unusually thorough and explicitly cross-reference siblings (e.g. GetShortInterest vs GetShortInterestSnapshot vs GetShortVolume vs GetLargestShortVolume vs GetShortSqueezeScores; GetFinancialStatement vs GetFinancialFact vs GetRevenueBreakdown), which greatly mitigates overlap. However, large clusters of near-sibling tools — ~15 tools all covering SEC 13F holdings (GetInstitutionPortfolio, GetInstitutionSummary, GetInstitutionQuarterlyActivity, GetInstitutionStyleHistory, GetInstitutionSectorAllocation, GetHolderMix, GetHolderTypeFlows, GetMarketWide13FActivity, GetMostHeldStocks, GetTopInstitutionalBuyersSellers, etc.) — still create real selection ambiguity for an agent.

Naming Consistency5/5

Names follow a highly predictable PascalCase Verb+Noun pattern throughout: Get*, Search*, List*, Read*, Compare*. Verb choice is semantically meaningful (Get for retrieval, Search for discovery, Compare for multi-entity), and no camelCase/snake_case mixing appears.

Tool Count2/5

65 tools is far beyond the well-scoped 3-15 range and lands in the '50+' extreme per the rubric. Although the server spans many genuine domains (filings, 13F, insiders, congress, shorts, macro, technicals, funds, advisers, contracts, FDA), the surface is heavily over-fragmented, with many near-duplicate tools that could be consolidated via parameters.

Completeness4/5

Coverage is broad and deep: prices, dividends, financial statements/facts, revenue breakdown, insider transactions/ownership, 13F institution, fund, adviser, congressional, short-interest, macro, technical-indicator, government-contract, and FDA-calendar surfaces are all present with lifecycle-style variants. Minor gaps (e.g. no options-chain data, no analyst estimates/news) exist but are not central to the stated data-provider purpose.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Hosted MCP server that gives AI agents real-time access to SEC EDGAR filings search, 10-K/8-K reading, XBRL financial facts, and insider-trade (Form 4) alerts.
    11 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Wall Street data feed for AI agents, providing access to 100M+ source-traced SEC records, institutional holdings, insider trades, congress trading, and more via MCP tools.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Institutional Financial Intelligence MCP Server for Claude Desktop & AI Agents. Sub-second market data, technical indicators, SEC EDGAR 10-K parsing, and local SQLite backtesting.
    1
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    An open-source financial data server that exposes MCP tools and HTTP endpoints for A-share, US equity, ETF, index, and crypto market data, technical indicators, fundamentals, money flow, news, and filings. It enables AI agents and backends to query multi-source market data, run analysis, and export CSV/JSON for code-execution workflows.
    -