Skip to main content
Glama
SiftingIO

siftingio-mcp

Official
by SiftingIO

siftingio-mcp

siftingio-mcp MCP server

This is a Model Context Protocol (MCP) server that puts the SiftingIO market-data SDK (@siftingio/sdk) in reach of your AI assistant. Once it's running, the model can pull live prices, dig through SEC/EDGAR fundamentals, fetch OHLCV bars, look up 13F holdings, check market status, and scan the macro economic calendar — all as tools.

Setup

npm install
npm run build

You'll need an API key, which you can grab at https://sifting.io:

export SIFTING_API_KEY=sft_...

If you need to point at a different backend, SIFTING_BASE_URL and SIFTING_WS_URL are there to override the defaults.

Working locally? Copy .env.example to .env instead — npm run dev and npm start pick it up automatically (Node does the loading via --env-file-if-exists). When you wire this into an actual MCP client, though, pass the key through the server's env block rather than a file (there's an example further down).

Related MCP server: mcp-financex

Run

Here's the toolbox:

  • npm run build — compile TypeScript into dist/.

  • npm start — run the compiled server (node dist/index.js) over stdio.

  • npm run start:http — run it over Streamable HTTP (node dist/http.js).

  • npm run dev / npm run dev:http — run straight from source with tsx, no build step.

  • npm test — run the vitest suite (add npm run test:watch to keep it running).

  • npm run lint / npm run format — ESLint (typescript-eslint) and Prettier.

  • npm run typechecktsc --noEmit.

On every push and PR, CI (.github/workflows/ci.yml) walks through the same gauntlet: format check → lint → typecheck → build → test.

One thing worth knowing: the server talks JSON-RPC over stdio, so stdout belongs entirely to the protocol. Anything diagnostic goes to stderr to stay out of the way.

Inspect interactively

Want to poke at it by hand? The MCP inspector is the easiest way:

SIFTING_API_KEY=sft_... npx @modelcontextprotocol/inspector node dist/index.js

HTTP (Streamable HTTP) transport

If you're running this somewhere remote or hosted, use MCP's Streamable HTTP transport instead of stdio:

SIFTING_API_KEY=sft_... PORT=3000 npm run start:http
# → MCP endpoint at http://127.0.0.1:3000/mcp  (POST messages, GET SSE, DELETE session)

It's stateful: every client gets its own session (tracked by the mcp-session-id header) and its own McpServer, while the upstream SiftingIO connection is shared across the whole process. As a safety measure it only binds to loopback and turns away non-local browser Origins — that's the DNS-rebinding protection. Set the port with PORT (or MCP_HTTP_PORT); it defaults to 3000.

If you want auth, set MCP_AUTH_TOKEN and the server will demand Authorization: Bearer <token> on every request (anything missing or wrong gets a 401). Pair that with a reverse proxy handling TLS and the token, and you can safely expose the server past localhost:

MCP_AUTH_TOKEN=s3cret SIFTING_API_KEY=sft_... npm run start:http

Then just point any HTTP-capable MCP client at http://127.0.0.1:3000/mcp:

claude mcp add --transport http siftingio http://127.0.0.1:3000/mcp

Use with an MCP client

Drop this into your client config — Claude Desktop's claude_desktop_config.json, say, or use claude mcp add if you're on Claude Code:

{
  "mcpServers": {
    "siftingio": {
      "command": "node",
      "args": ["/absolute/path/to/siftingio-mcp/dist/index.js"],
      "env": { "SIFTING_API_KEY": "sft_..." }
    }
  }
}

Tools (36)

Namespace

Tools

Live (snapshot)

last_trade, last_quote, last_tvl

Stocks

stocks_search, stocks_profile, stocks_filings, stocks_filing, stocks_sections, stocks_section, stocks_risk_factors_diff, stocks_ratios, stocks_earnings, stocks_financials, stocks_financial_concept, stocks_insiders, stocks_ownership, stocks_events, stocks_compensation, stocks_screener, stocks_bars

Crypto / Forex

crypto_bars, forex_bars

DEX

dex_wallet

Markets

markets_list, markets_status_all, markets_status, markets_hours, markets_calendar

Filers

filers_holdings

Macro

economic_calendar_list

Live (stream)

ws_subscribe, ws_unsubscribe, ws_poll, ws_collect, ws_status, ws_disconnect

A few patterns are worth calling out:

Paginated tools take cursor/limit and hand back a meta.next_cursor to fetch the next page. The stocks_* list tools — stocks_filings, stocks_earnings, stocks_insiders, stocks_ownership, stocks_events, stocks_compensation — also understand max_items: set it and they'll auto-paginate, gathering up to that many items across pages in a single call.

The high-traffic tools (last_trade, last_quote, last_tvl, stocks_profile, stocks_search) come with an output schema and return structuredContent alongside the human-readable text, so clients can read them machine-side too.

Every tool also carries MCP annotations. The data tools are readOnlyHint: true (and openWorldHint: true, since they reach out to the external API), while the WebSocket tools that change connection state are readOnlyHint: false, destructiveHint: false.

Results are size-capped at roughly 60k characters (see MAX_RESULT_CHARS in src/util.ts). When a heavy endpoint — full XBRL financials, screeners, OHLCV bars — returns more than that, the server trims its largest array and tacks on a _truncated note explaining how to narrow the query.

Live WebSocket streaming

Streaming is the awkward case: it doesn't fit neatly into a single request/response. So the server holds one persistent WebSocket open, buffers the frames as they arrive, and the tools just read from that buffer. Channels (the product field) are cex (crypto), dex (DEX trades), fx (forex), us (US stocks), and tvl (DEX pool TVL).

There are two ways to work with it:

  • Subscribe + poll, for ongoing streams: call ws_subscribe once, then keep calling ws_poll. The first poll gives you a recent tail; feed the returned next_seq back in as after_seq and you'll only get newer frames from then on. ws_status shows you the connection and what's subscribed, and ws_disconnect tears the whole thing down.

  • Collect, for a quick one-shot: ws_collect subscribes, waits up to duration_ms (or until it's seen max frames), returns what it caught, and cleans up any subscription it had to create. Perfect for "grab me a few seconds of BTCUSD."

The connection reconnects on its own and replays your subscriptions when it does. The buffer is a rolling window, so the oldest frames eventually fall off — and when they do, you'll hear about it through dropped/gap.

Prompts

These are guided, multi-tool workflows your client can surface as slash-commands:

  • company_snapshot (ticker) — pulls stocks_profile, stocks_ratios, the latest stocks_filings, and last_trade together into one briefing.

  • compare_companies (tickers) — lines up several tickers side by side across the key ratios.

  • market_now — what's open and closed right now, plus the high-impact macro events coming up.

Logging & shutdown

The server advertises the MCP logging capability and pushes structured notifications/message to the client whenever something happens with the connection (WebSocket open/close/reconnect/error) or on shutdown — and it mirrors all of that to stderr too.

When it catches a SIGINT or SIGTERM, it closes the live WebSocket and shuts the server down cleanly before exiting.

Available Tools

36 tools
crypto_barsCrypto OHLCV barsA
Read-only

Fetch historical OHLCV bars for a USD-quoted crypto symbol (e.g. BTCUSD) over a time range at a chosen interval (default 1m); volume is fractional base-asset volume. Large ranges are size-capped (watch for the _truncated note) — narrow the range or paginate with cursor/limit (max 5000/page). For the current price use last_trade.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoInclusive upper bound. Default: now.
limitNoPage size, max 5000.
startYesInclusive lower bound, YYYY-MM-DD or RFC3339 (UTC). Required.
cursorNoOpaque pagination cursor.
symbolYesUSD-quoted crypto symbol, e.g. BTCUSD.
intervalNoBar interval. Default 1m.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint and openWorldHint. The description adds behavioral details: volume is fractional base-asset volume, large ranges are size-capped with a _truncated note, and pagination with cursor/limit. 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 sentences, front-loaded with purpose, then important details, then alternative tool. Every sentence is substantive with no fluff.

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

Completeness4/5

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

Given 6 parameters and no output schema, the description adequately covers input constraints, pagination, and volume meaning. Could mention expected output format, but tool name implies standard OHLCV bars.

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 descriptions cover all 6 parameters. The description adds value beyond schema: default interval of 1m, max limit of 5000, inclusive bounds for start/end, and the symbol format. This enriches understanding.

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

Purpose5/5

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

The description clearly states the tool fetches historical OHLCV bars for USD-quoted crypto symbols, with an example (BTCUSD). It distinguishes from sibling tools like last_trade by noting 'For the current price use last_trade'.

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 guidance on when to use this tool (historical bars) and when to use last_trade (current price). It also mentions pagination for large ranges, but does not explicitly contrast with other bar tools like forex_bars or stocks_bars.

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

dex_walletDEX wallet portfolioA
Read-only

Fetch the current token holdings — balances and identified tokens — for a wallet address on an EVM chain (e.g. ethereum, base). Both chain and address are required. For a DEX pair's pooled liquidity use last_tvl.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainYesEVM chain: eth, base, arbitrum, bsc, polygon.
addressYesWallet address, e.g. 0x....

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint and openWorldHint. The description adds that it returns balances and identified tokens, which is useful context. No contradictions and no missing behavioral disclosure for a read-only tool.

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

Conciseness5/5

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

Two sentences, no unnecessary words. Front-loaded with the core purpose, followed by essential usage notes. Highly concise.

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

Completeness5/5

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

For a simple tool with only two parameters and no output schema, the description is complete. It covers purpose, required inputs, return type, and provides a usage alternative, all within two sentences.

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

Parameters3/5

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

Schema coverage is 100%, so the description adds limited value beyond confirming required parameters. It mentions 'EVM chain' context, but does not detail allowed values or formatting beyond the schema.

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

Purpose5/5

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

The description clearly states the verb 'Fetch' and the resource 'current token holdings for a wallet on an EVM chain'. It distinguishes from sibling 'last_tvl' by mentioning that tool handles pooled liquidity.

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

Usage Guidelines4/5

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

The description explicitly says when to use (fetch token holdings) and provides an alternative ('last_tvl') for DEX pair liquidity. It also states both parameters are required. However, it does not address when not to use this tool compared to other siblings like stocks_profile.

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

economic_calendar_listEconomic calendarA
Read-only

List scheduled and released macroeconomic events (e.g. CPI, non-farm payrolls, rate decisions) over a date range, each with its actual, previous, and consensus figures. Filter by country, impact level, issuing agency, or a specific recurring event_id. Defaults to the US and roughly the next 30 days.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoUpper bound, YYYY-MM-DD or RFC3339. Default: from + 30 days.
fromNoLower bound, YYYY-MM-DD or RFC3339. Default: now.
limitNo1-500. Default 100.
agencyNoIssuing agency: BLS, BEA, Census, Fed, DOL, EIA.
impactNoImpact level: low, medium, high.
countryNoTwo-letter country code. Default: US.
event_idNoFilter to a single recurring event, e.g. us_cpi.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate read-only; description adds that it lists both scheduled and released events with figures. Does not contradict annotations and provides useful behavioral context beyond them.

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

Conciseness5/5

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

Single, well-structured sentence that front-loads the core action and then details defaults and filters with zero wasted words.

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

Completeness4/5

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

Covers return fields (actual, previous, consensus), defaults, and common filters. Lacks mention of pagination or response format, but sufficient for a list tool with a limit parameter.

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 has 100% coverage, but description adds meaningful context like defaults, filtering purpose, and concrete example (event_id: us_cpi), enhancing understanding beyond schema alone.

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

Purpose5/5

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

The description states it lists scheduled and released macroeconomic events over a date range with specific figures (actual, previous, consensus), clearly distinguishing it from sibling tools like stocks_earnings or markets_calendar.

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

Usage Guidelines4/5

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

Provides clear context on defaults (US, next 30 days) and filtering options (country, impact, agency, event_id), but does not explicitly state when not to use or compare with alternatives.

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

filers_holdings13F holdingsA
Read-only

List the latest 13F-HR reported equity positions for an institutional investment manager (a fund), identified by CIK or ticker, with share counts and market values. Paginate with cursor/limit. This is holdings held BY the filer; for a single company's insider or large-stakeholder filings use stocks_insiders / stocks_ownership.

ParametersJSON Schema
NameRequiredDescriptionDefault
filerYesInstitutional filer's CIK (numeric) or ticker.
limitNoPage size (endpoint default applies if omitted).
cursorNoOpaque cursor from a previous response's meta.next_cursor.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint and openWorldHint. Description adds pagination behavior and clarifies the nature of holdings (by filer, not for a company). No contradictions.

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

Conciseness5/5

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

Two sentences, no wasted words. Front-loads purpose and key details, then provides pagination and sibling contrast.

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 list tool with no output schema, description covers: what, how to identify, pagination, and when to use alternatives. No major gaps.

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

Parameters3/5

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

Schema coverage is 100%, so baseline 3. Description adds context for cursor usage and filer identification, but repeats schema descriptions. Minimal additional 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?

Description specifies action (list), resource (13F holdings), identifier (CIK/ticker), and what is returned (share counts, market values). Contrasts with sibling tools for single-company filings.

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

Usage Guidelines5/5

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

Explicitly says when to use (holdings by a filer) and when not to (use stocks_insiders/stocks_ownership for company insider filings). Also explains pagination with cursor/limit.

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

forex_barsForex OHLC barsA
Read-only

Fetch historical OHLC bars for a 6-character FX pair (e.g. EURUSD) over a time range at a chosen interval (default 1m); volume is always 0 for OTC spot forex. Large ranges are size-capped (watch for the _truncated note) — narrow the range or paginate with cursor/limit. For the current rate use last_quote.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoInclusive upper bound. Default: now.
pairYes6-character FX pair, e.g. EURUSD.
limitNoPage size.
startYesInclusive lower bound, YYYY-MM-DD or RFC3339 (UTC). Required.
cursorNoOpaque pagination cursor.
intervalNoBar interval. Default 1m.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows it's a read operation. The description adds behavioral context: volume is always 0 for OTC spot forex, and that large ranges may be truncated with a note. This goes beyond annotations without contradiction.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with the main action and key constraints. Every sentence provides essential information without 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?

No output schema exists, so the description must cover what is returned. It mentions OHLC bars and the _truncated note for large ranges. It also explains volume behavior. With 6 parameters and 2 required, the description covers core aspects adequately, though it doesn't detail the exact bar structure (e.g., fields returned). Still, it is sufficient for an experienced agent.

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

Parameters4/5

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

Schema coverage is 100%, so the schema defines all parameters. The description adds meaning: explains the default interval ('default 1m'), specifies pair format ('6-character FX pair'), and clarifies pagination mechanism ('paginate with cursor/limit'). This adds value over bare schema.

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

Purpose5/5

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

The description clearly states it fetches historical OHLC bars for a 6-character FX pair, specifying pair format, time range, and interval. It distinguishes from sibling tool last_quote by stating 'For the current rate use last_quote.' This provides a specific verb+resource with scope.

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

Usage Guidelines5/5

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

The description explicitly tells when to use this tool (historical bars) and when not ('for the current rate use last_quote'). It provides guidance on handling large ranges: 'Large ranges are size-capped (watch for the _truncated note) — narrow the range or paginate with cursor/limit.' This is clear and actionable.

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

last_quoteLast quoteA
Read-only

Top-of-book quote — best bid and ask with their sizes — for a symbol on a venue, read live from the engine and never cached. For the last traded price use last_trade instead. Returns structuredContent alongside the text.

ParametersJSON Schema
NameRequiredDescriptionDefault
venueYesLive-data venue: stocks, crypto, forex, dex.
symbolYesSymbol, e.g. BTCUSD, AAPL, EURUSD.

Output Schema

ParametersJSON Schema
NameRequiredDescription
AYesAsk size.
BYesBid size.
aYesAsk price.
bYesBid price.
tYesTimestamp, Unix epoch milliseconds.

TDQS

A4.7/5.0
Behavior5/5

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

Description adds context beyond annotations: 'read live from the engine and never cached' and 'Returns structuredContent alongside the text.' This covers caching behavior and output format, aligning with readOnlyHint and openWorldHint.

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

Conciseness5/5

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

Two concise sentences, front-loaded with purpose. No wasted text, efficiently conveys all necessary 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 high schema coverage, output schema presence, and annotations covering read-only and open-world aspects, the description is complete. It specifies live, uncached data and return structure, sufficient for agent understanding.

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

Parameters3/5

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

Schema coverage is 100% with clear descriptions for both parameters. The description adds no new meaning beyond what the schema already provides, meeting baseline but not exceeding.

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 provides top-of-book quote (best bid/ask and sizes) for a symbol on a venue. Distinctly differentiates from sibling last_trade by noting that tool is for last traded price.

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

Usage Guidelines5/5

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

Explicitly tells the agent when not to use this tool (for last traded price) and directs to the alternative last_trade. Also implies live, uncached nature guides appropriate use.

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

last_tradeLast tradeA
Read-only

Latest trade snapshot (price and size) for a symbol on a venue, read straight from the live engine and never cached. For the best bid/ask instead use last_quote; for historical bars use stocks_bars / crypto_bars / forex_bars. Returns structuredContent alongside the text.

ParametersJSON Schema
NameRequiredDescriptionDefault
venueYesLive-data venue: stocks, crypto, forex, dex.
symbolYesSymbol, e.g. BTCUSD, AAPL, EURUSD.

Output Schema

ParametersJSON Schema
NameRequiredDescription
PYesLast trade size.
pYesLast trade price.
sYesSymbol, normalized to the venue's canonical form.
tYesTimestamp, Unix epoch milliseconds.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint, openWorldHint), the description specifies 'read straight from the live engine and never cached' and 'Returns structuredContent alongside the text', adding valuable behavioral context about freshness and return format.

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, each adding essential information: core purpose, distinction from siblings, and return type. No redundant words.

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

Completeness5/5

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

Given the simple tool (2 params, output schema exists, annotations present), the description covers purpose, freshness, alternatives, and return format completely.

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

Parameters3/5

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

Schema description coverage is 100% with both parameters having clear descriptions. The description does not add additional meaning beyond what the schema provides for parameters.

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

Purpose5/5

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

The description clearly states it returns the latest trade snapshot (price and size) for a symbol on a venue, distinguishing it from sibling tools like last_quote (best bid/ask) and historical bars endpoints.

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

Usage Guidelines5/5

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

Explicitly tells when to use this tool (for latest trade) and when not to (for best bid/ask use last_quote, for historical bars use stocks_bars/crypto_bars/forex_bars), with alternative tools named.

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

last_tvlLast DEX TVLA
Read-only

Current aggregated total value locked (TVL) for a DEX trading pair on an EVM chain, read live. Provide the canonical pair (e.g. WETH-USDC); for a wallet's token balances use dex_wallet. Returns structuredContent alongside the text.

ParametersJSON Schema
NameRequiredDescriptionDefault
pairYesCanonical pair, e.g. WETH-USDC.
chainYesEVM chain: eth, base, arbitrum, bsc, polygon.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nYesNumber of pools aggregated.
tYesTimestamp, Unix epoch milliseconds.
vYesVersion/volume counter.
r0YesReserve of token0.
r1YesReserve of token1.
usdYesTotal value locked, USD.
pairYesCanonical uppercase pair, e.g. WETH-USDC.
chainYesCanonical lowercase chain.

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 and openWorldHint=true. The description adds 'read live' and 'Returns structuredContent alongside the text,' providing behavioral context about the return format and real-time nature beyond the annotations. No contradiction.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, no filler. Every sentence earns its place by providing essential information.

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

Completeness5/5

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

Given the tool's low complexity (2 params, output schema exists, strong annotations), the description fully covers purpose, usage distinction, parameter guidance, and return type. No gaps.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for both 'pair' and 'chain'. The description repeats an example and the chain list, adding marginal value beyond the schema. Baseline of 3 is appropriate as the schema already 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?

Clearly states it returns 'current aggregated TVL for a DEX trading pair on an EVM chain, read live.' The verb 'provides' and resource 'TVL' are specific. It distinguishes itself from sibling 'dex_wallet' by noting that for wallet balances you should use that tool instead.

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

Usage Guidelines4/5

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

Explicitly tells when to use this tool (get TVL for a pair) and when not (wallet balances → dex_wallet). Provides guidance on the canonical pair format and chain options. However, it does not mention other related siblings (e.g., last_quote for price), leaving minor ambiguity.

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

markets_calendarMarket calendarA
Read-only

List the holidays and half-day (early-close) sessions for a market over a date range (defaults to the next ~90 days, max 730). Use markets_hours for the normal weekly schedule and markets_status for the live open/closed state.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoInclusive upper bound, YYYY-MM-DD. Default: from + 90 days. Max range 730 days.
fromNoInclusive lower bound, YYYY-MM-DD. Default: today.
marketYesMarket slug, e.g. nyse, us_equities, forex, crypto.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations provide readOnlyHint and openWorldHint. Description adds context about returning holidays and half-day sessions, and date range behavior, which is helpful beyond annotations.

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

Conciseness5/5

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

Two sentences, no wasted words. Front-loaded with purpose and key details, then alternatives.

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

Completeness5/5

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

Given high schema coverage and annotations, the description is complete: it explains the tool's purpose, usage context, and distinctions from siblings. No output schema expected.

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

Parameters4/5

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

Schema covers all 3 parameters with 100% coverage. Description adds defaults (from=today, to=from+90, max 730 days), providing value beyond schema.

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

Purpose5/5

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

Description clearly states the tool lists holidays and half-day sessions for a market over a date range, distinguishing it from siblings like markets_hours and markets_status.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool vs alternatives: 'Use markets_hours for the normal weekly schedule and markets_status for the live open/closed state.' Also provides defaults and max range.

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

markets_hoursMarket hoursA
Read-only

Return the regular weekly trading-hours schedule (open/close times per weekday, with time zone) for a market by slug. This is the recurring schedule, not today's state — use markets_status for whether it's open right now, and markets_calendar for holidays and half-days.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketYesMarket slug, e.g. nyse, us_equities, forex, crypto.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds context by clarifying that this tool returns the recurring schedule (not real-time state), which is valuable beyond the annotations. However, it doesn't detail the return structure with no output schema, so a minor gap remains.

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

Conciseness5/5

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

Two sentences with no wasted words. The key information is front-loaded, and every sentence adds value.

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

Completeness5/5

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

Given the tool has only one parameter, good annotations, and no output schema, the description covers all necessary context: what it returns, what it doesn't, and how it differs from related tools.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The tool description provides examples of slugs ('nyse, us_equities, forex, crypto'), which adds practical guidance beyond the schema's description.

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

Purpose5/5

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

The description uses specific verbs ('Return the regular weekly trading-hours schedule') and clearly identifies the resource (market by slug). It distinguishes from siblings by explicitly naming 'markets_status' and 'markets_calendar' for different use cases.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool ('for the recurring schedule') and when not to ('for today's state... use markets_status; for holidays... use markets_calendar'). It provides clear alternatives.

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

markets_listList marketsA
Read-only

List every market in the catalog — exchanges and asset classes such as nyse, us_equities, forex, crypto — optionally filtered by region. Use it to discover the market slug the other markets_* tools expect.

ParametersJSON Schema
NameRequiredDescriptionDefault
regionNoRegion filter: north_america, europe, asia_pacific, latam, global.

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, and description adds scope (every market, optional filter). No contradictions; description provides safe read behavior context.

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

Conciseness5/5

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

Two sentences: first states purpose with examples, second states usage guidance. No unnecessary words; front-loaded with key 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?

For a simple list tool with one optional parameter, no output schema needed. Description covers purpose, usage, and output (slug). Annotations cover safety. Complete.

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

Parameters3/5

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

Schema coverage is 100% with 'region' parameter already described. Description only repeats 'optionally filtered by region,' adding no new meaning beyond schema.

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

Purpose5/5

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

Description clearly states 'List every market' with examples (nyse, us_equities, forex, crypto) and explains it provides slugs for other tools, distinguishing from siblings.

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

Usage Guidelines4/5

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

Explicitly says 'Use it to discover the market slug the other markets_* tools expect,' guiding when to use. Does not explicitly state when not to use, but context is clear given sibling tools.

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

markets_statusMarket statusA
Read-only

Return the current open/closed status for a single market by slug (e.g. nyse). For a snapshot across all markets use markets_status_all; for the recurring weekly schedule use markets_hours.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketYesMarket slug, e.g. nyse, us_equities, forex, crypto.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint. The description adds that the tool returns current status for a single market and provides example slugs, enhancing beyond annotations.

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

Conciseness5/5

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

Two sentences: first explains the main purpose, second provides alternatives. No redundant information. Well-structured and concise.

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

Completeness5/5

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

For a simple read-only tool with one parameter, the description adequately states what it returns (open/closed status) and how to access broader data. No output schema is needed for such a basic result.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter 'market'. The description's example 'nyse' is also in the schema's description. No additional semantics beyond schema.

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

Purpose5/5

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

The description clearly states 'Return the current open/closed status for a single market by slug', specifying the action, resource, and method. It also distinguishes from siblings by naming alternatives.

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

Usage Guidelines5/5

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

The description explicitly provides guidance on when to use alternatives: 'For a snapshot across all markets use markets_status_all; for the recurring weekly schedule use markets_hours.' This covers when to use and 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.

markets_status_allAll market statusesA
Read-only

Return the current open/closed status for every market at once, optionally filtered by region. Use markets_status when you already know the single market slug you care about.

ParametersJSON Schema
NameRequiredDescriptionDefault
regionNoRegion filter: north_america, europe, asia_pacific, latam, global.

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already provide readOnlyHint and openWorldHint, so description's behavioral disclosure is limited. It adds no extra details about return format or limitations beyond being a read operation.

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

Conciseness5/5

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

Two concise sentences, front-loaded with purpose, zero waste. Every sentence adds value.

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

Completeness5/5

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

With one optional param, no nested objects, no output schema, the description sufficiently covers what the tool does and when to use it, given annotations.

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

Parameters3/5

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

Only one optional parameter 'region' with a description in the schema; the description does not add significant meaning beyond the schema. Schema coverage is 100%, 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?

Description specifies 'return the current open/closed status for every market at once' with optional region filtering, clearly stating the verb and resource. It also distinguishes from the sibling 'markets_status' which is for a single slug.

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

Usage Guidelines5/5

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

Explicitly advises using 'markets_status' when the agent already knows the single market slug, providing direct guidance on tool selection.

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

stocks_barsStock OHLCV barsA
Read-only

Fetch historical OHLCV bars for a US equity over a date/time range at a chosen interval (default 1m). Large ranges are size-capped (watch for the _truncated note) — narrow the window or paginate with cursor/limit. For a live price snapshot use last_trade or last_quote instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoInclusive upper bound. Default: now.
limitNoPage size (endpoint-specific default and max).
startNoInclusive lower bound: YYYY-MM-DD (NYSE local) or RFC3339 (UTC).
cursorNoOpaque cursor from a previous response's meta.next_cursor.
tickerYesUS equity ticker, e.g. AAPL.
intervalNoBar interval. Default 1m.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and openWorldHint=true. Description adds concrete behavioral details: size caps, _truncated note, and pagination mechanism, which are not in annotations.

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

Conciseness5/5

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

Three sentences, each with distinct purpose: purpose, limitation/solution, alternative. Front-loaded and no extraneous text.

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

Completeness4/5

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

Covers key aspects (large-range handling, pagination, alternative tools) but does not describe the output format (OHLCV fields) which is essential since there is no output schema. Slightly incomplete but still informative.

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 each parameter already has a description. The tool description adds only minor context about default interval (1m) and pagination hints. No significant parameter clarification beyond schema.

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

Purpose5/5

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

Clearly states 'Fetch historical OHLCV bars for a US equity over a date/time range at a chosen interval', specifying verb, resource, and scope. Distinguishes from live-price siblings (last_trade, last_quote) and implicitly from crypto_bars/forex_bars by restricting to US equities.

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 guides handling of large ranges via narrowing window or pagination, and directs to alternatives for live prices. However, does not explicitly exclude usage for non-historical scenarios like streaming.

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

stocks_compensationCompensation filingsA
Read-only

List a company's DEF 14A proxy statements, which cover executive compensation and shareholder-vote matters, most recent first. Paginate with cursor/limit, or set max_items to auto-collect across pages.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size (endpoint-specific default and max).
cursorNoOpaque cursor from a previous response's meta.next_cursor.
tickerYesUS equity ticker, e.g. AAPL.
max_itemsNoIf set, auto-paginate across pages and return up to this many items (ignores cursor).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint. Description adds ordering (most recent first) and pagination behavior (auto-collect via max_items). No contradictions; additional context beyond annotations.

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

Conciseness5/5

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

Two succinct sentences: first explains purpose, second explains pagination. No filler, front-loaded, every sentence adds value.

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

Completeness4/5

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

With no output schema, description conveys purpose, ordering, and pagination. Could hint at return fields but is sufficient for agent to understand tool behavior given openWorldHint.

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 has 100% description coverage. Description adds clarity on pagination (cursor/limit vs max_items, with max_items ignoring cursor), providing meaningful guidance beyond schema descriptions.

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

Purpose5/5

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

The description clearly states it lists DEF 14A proxy statements, specifies they cover executive compensation and shareholder-vote matters, and orders most recent first. This distinguishes it from siblings like stocks_filings.

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

Usage Guidelines4/5

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

Explicitly states when to use (list a company's DEF 14A proxy statements) and pagination options. Does not explicitly mention alternatives or when not to use, but context with sibling names implies differentiation.

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

stocks_earningsEarnings historyA
Read-only

List a company's earnings-release history, sourced from 8-K Item 2.02 filings, most recent first. Paginate with cursor/limit, or set max_items to auto-collect across pages. For all 8-K material events (not just earnings) use stocks_events.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size (endpoint-specific default and max).
cursorNoOpaque cursor from a previous response's meta.next_cursor.
tickerYesUS equity ticker, e.g. AAPL.
max_itemsNoIf set, auto-paginate across pages and return up to this many items (ignores cursor).

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the description complements by detailing the data source (Item 2.02 filings) and pagination behavior. It adds context about auto-collection and ordering but does not describe return format, which is acceptable without an 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.

Conciseness5/5

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

Two sentences cover purpose, source, pagination, and alternative. Every sentence adds information with no fluff. Front-loaded with primary purpose.

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 list tool with 4 parameters and pagination, the description is sufficient. It explains what the tool does, how to use pagination, and how it compares to a sibling. No output schema, but the description doesn't need to detail return values as per guidelines.

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

Parameters4/5

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

Schema coverage is 100% with descriptions for all parameters. The description adds value by explaining the interaction between cursor/limit and max_items, and that results are ordered most recent first, which is not in the schema's parameter descriptions.

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

Purpose5/5

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

The description clearly states the tool lists earnings-release history sourced from 8-K filings, most recent first. It distinguishes from the sibling tool 'stocks_events' by specifying that this tool is for earnings only while 'stocks_events' covers all material events.

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

Usage Guidelines5/5

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

Explicitly describes pagination methods (cursor/limit, auto-page with max_items) and provides a clear alternative: for all 8-K events, use stocks_events. This tells the agent when to use and 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.

stocks_eventsMaterial eventsA
Read-only

List a company's 8-K material-event filings, optionally filtered to a single item code (e.g. 2.02). Most recent first; paginate with cursor/limit, or set max_items to auto-collect across pages. For earnings releases specifically use stocks_earnings.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemNoFilter by 8-K item code, e.g. "2.02".
limitNoPage size (endpoint-specific default and max).
cursorNoOpaque cursor from a previous response's meta.next_cursor.
tickerYesUS equity ticker, e.g. AAPL.
max_itemsNoIf set, auto-paginate across pages and return up to this many items (ignores cursor).

TDQS

A4.6/5.0
Behavior4/5

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

Annotations indicate readOnlyHint and openWorldHint, so the tool is a safe, read-only operation with potentially dynamic results. The description adds behavioral details: auto-pagination via max_items, cursor-based pagination, and ordering. It does not contradict annotations and provides useful context beyond them.

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

Conciseness5/5

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

Two sentences, each packed with information: purpose and filtering in first sentence, pagination and alternative tool in second. No wasted words, well 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?

Despite no output schema, the description covers purpose, filtering, pagination modes, ordering, and alternative tool. It is sufficient for an agent to select and use the tool correctly. Minor omission: no mention of response structure, but not critical.

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

Parameters4/5

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

All parameters have schema descriptions (100% coverage), so the baseline is 3. The description adds value by explaining how cursor, limit, and max_items work together for pagination, and notes optional filtering. This synopsis elevates the score above 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 clearly states the tool lists a company's 8-K material-event filings, with optional filtering by item code. It distinguishes itself from the sibling tool stocks_earnings by specifying the alternative use case.

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

Usage Guidelines5/5

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

Explicitly guides when to use this tool (for 8-K filings) and when to use stocks_earnings (for earnings releases). Also explains pagination strategies with cursor/limit or max_items, and ordering (most recent first).

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

stocks_filingFiling detailA
Read-only

Fetch one SEC filing's detail — header metadata plus its list of document files — identified by ticker and accession number. Get accession numbers from stocks_filings; for the filing's extracted narrative text use stocks_sections (all sections) or stocks_section (one section's body).

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesUS equity ticker, e.g. AAPL.
accessionYesSEC accession number, e.g. 0000320193-24-000123.

TDQS

A4.9/5.0
Behavior5/5

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

Discloses that the tool returns header metadata plus list of document files, which adds value beyond annotations. Annotations already declare readOnlyHint and openWorldHint, so no contradiction.

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

Conciseness5/5

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

Three concise sentences, front-loaded with the action. Every sentence adds essential information: what it does, where to get inputs, and alternatives for other needs. No wasted words.

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

Completeness5/5

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

Given no output schema, the description adequately explains the return value (header metadata + document files). Additionally, it cross-references sibling tools for related tasks, providing complete context for an agent.

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

Parameters4/5

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

Schema coverage is 100% (baseline 3). Description adds context by explaining the role of accession number and providing examples (AAPL, 0000320193-24-000123), and notes that accession numbers come from stocks_filings.

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

Purpose5/5

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

Clearly states it fetches one SEC filing's detail (header metadata + document files) with specific inputs. Distinguishes from siblings by noting that accession numbers come from stocks_filings and narrative text from stocks_sections/stocks_section.

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

Usage Guidelines5/5

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

Explicitly tells when to use this tool (to get filing detail and document files) and when to use alternatives (stocks_sections/stocks_section for narrative text). Also directs to stocks_filings for accession numbers.

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

stocks_filingsList filingsA
Read-only

List a company's SEC EDGAR filings (most recent first), optionally filtered by form type and filed-date range. Paginate with cursor/limit, or set max_items to auto-collect across pages in one call. Returns filing metadata and accession numbers; pass an accession to stocks_filing for its document list, or to stocks_sections / stocks_section for its extracted text.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoUpper bound on filed_at, YYYY-MM-DD.
formNoComma-separated exact form types, e.g. "10-K,10-Q".
fromNoLower bound on filed_at, YYYY-MM-DD.
limitNoPage size (endpoint-specific default and max).
cursorNoOpaque cursor from a previous response's meta.next_cursor.
tickerYesUS equity ticker, e.g. AAPL.
max_itemsNoIf set, auto-paginate across pages and return up to this many items (ignores cursor).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint. The description adds meaningful behavioral details like ordering (most recent first), pagination options (cursor/limit or auto-collect via max_items), and return content (filing metadata and accession numbers). No contradictions.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose, followed by specifics. Every sentence contributes useful information without redundancy.

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

Completeness5/5

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

Given the tool's complexity (7 parameters, no output schema), the description covers all necessary context: purpose, filtering, pagination, return type, and integration with sibling tools. It is comprehensive for a listing 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% with individual parameter descriptions. The description adds context by explaining how the parameters relate to filtering (form type, date range) and pagination (cursor, limit, max_items). This goes beyond the schema alone.

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

Purpose5/5

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

The description clearly states the tool lists a company's SEC EDGAR filings with ordering and filtering options. It distinguishes itself from sibling tools like stocks_filing, stocks_sections, and stocks_section by explaining how the output is used downstream.

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

Usage Guidelines4/5

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

The description explains the tool's functionality and how to use its output with other tools (e.g., pass accession to stocks_filing). It provides implicit usage context but does not explicitly state when not to use it or list alternatives.

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

stocks_financial_conceptFinancial concept seriesA
Read-only

Fetch the full reported time series for one XBRL concept (e.g. Revenues, NetIncomeLoss) for a single company. Use this instead of stocks_financials when you need one line item rather than the whole statement bundle; to screen the same concept across all companies use stocks_screener.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesUS equity ticker, e.g. AAPL.
conceptYesXBRL concept name, e.g. Revenues, NetIncomeLoss.
taxonomyNoConcept namespace. Default us-gaap.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint. The description adds that the tool returns a 'full reported time series', which is a useful behavioral detail beyond annotations. No contradictions.

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

Conciseness5/5

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

Two sentences with no unnecessary words. First sentence states purpose, second provides usage alternatives. Highly efficient.

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

Completeness4/5

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

The description covers purpose, usage, and examples well. However, without an output schema, a brief mention of the return format (e.g., array of objects with date and value) would improve completeness. Still, it is sufficient for a simple 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 clear descriptions. The description adds example values (AAPL, Revenues) but does not significantly expand on parameter semantics beyond what the schema provides.

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

Purpose5/5

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

The description clearly states the tool fetches full reported time series for one XBRL concept for a single company. It provides concrete examples (Revenues, NetIncomeLoss) and explicitly distinguishes from siblings stocks_financials and stocks_screener.

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

Usage Guidelines5/5

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

The description gives explicit guidance on when to use this tool ('when you need one line item') and when to use alternatives (stocks_financials for whole statement, stocks_screener for cross-company screening).

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

stocks_financialsXBRL financialsA
Read-only

Fetch a company's complete XBRL financials bundle — every reported concept across every period — from its SEC filings. This is a large payload and may be size-capped (watch for the _truncated note); for a single line item's time series use stocks_financial_concept, and for computed ratios use stocks_ratios.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesUS equity ticker, e.g. AAPL.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the bar is lower. The description adds the important behavioral trait of a potential size cap and the _truncated note, which is not captured in annotations.

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

Conciseness5/5

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

The description is extremely concise with two sentences. The first sentence front-loads the purpose and scope, and the second sentence provides usage guidelines and alternatives. No wasted words.

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

Completeness4/5

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

Given the complexity of fetching a complete XBRL bundle, the description adequately covers the scope, the large payload warning, and the alternatives. It does not require an output schema explanation since none is provided.

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

Parameters3/5

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

Schema coverage is 100%, and the single parameter 'ticker' has a clear description in the schema. The description does not add additional meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool fetches a company's complete XBRL financials bundle, specifying the verb 'Fetch' and the resource 'complete XBRL financials bundle' from SEC filings. It distinguishes from siblings by naming stocks_financial_concept and stocks_ratios.

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

Usage Guidelines5/5

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

The description explicitly provides when to use this tool versus alternatives: for a single line item use stocks_financial_concept, and for computed ratios use stocks_ratios. It also warns about the size cap and the _truncated note.

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

stocks_insidersInsider transactionsA
Read-only

List a company's insider transactions from SEC Form 3/4/5 filings (officers, directors, 10% owners), most recent first. Paginate with cursor/limit (default 10, max 25), or set max_items to auto-collect across pages. For large outside stakeholders (13D/13G) use stocks_ownership.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size (endpoint-specific default and max).
cursorNoOpaque cursor from a previous response's meta.next_cursor.
tickerYesUS equity ticker, e.g. AAPL.
max_itemsNoIf set, auto-paginate across pages and return up to this many items (ignores cursor).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint and openWorldHint. Description adds important behavioral details: ordering (most recent first), pagination mechanisms (cursor/limit, max_items for auto-paginate). Does not mention rate limits or other constraints.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, then pagination and alternative tool. Every sentence is informative with no redundancy.

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?

No output schema exists, so description should provide some detail about return structure (e.g., fields like filing date, transaction type). The description only mentions ordering and pagination, missing what the response contains.

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 description adds context: limit default 10 max 25, max_items auto-collects (ignores cursor), cursor is opaque. Adds 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?

Explicitly states it lists insider transactions from SEC Form 3/4/5 filings, specifies officers/directors/10% owners, and distinguishes from stocks_ownership for 13D/13G.

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?

Clearly says when to use this tool (for insider transactions) and when to use alternative (stocks_ownership for 13D/13G), plus explains pagination with cursor/limit and max_items.

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

stocks_ownershipOwnership filingsA
Read-only

List a company's Schedule 13D/13G beneficial-ownership filings (holders of large stakes), most recent first. Paginate with cursor/limit, or set max_items to auto-collect across pages. For officer/director trades use stocks_insiders; for institutional 13F positions use filers_holdings.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size (endpoint-specific default and max).
cursorNoOpaque cursor from a previous response's meta.next_cursor.
tickerYesUS equity ticker, e.g. AAPL.
max_itemsNoIf set, auto-paginate across pages and return up to this many items (ignores cursor).

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds ordering behavior ('most recent first') and pagination behavior (cursor/limit or auto-collect with max_items). This provides useful context beyond annotations, though it does not detail rate limits or maximum page sizes beyond schema constraints.

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: first defines the core function, second explains pagination, third provides alternatives. No redundant information, front-loaded with the most important action.

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

Completeness5/5

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

Given the absence of an output schema and the tool's moderate complexity, the description fully covers what the tool does, how to use pagination, and when to use sibling tools. No gaps in essential information.

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 value by explaining how max_items enables auto-collect across pages, which is not detailed in the schema. This enhances understanding of the parameter's behavior beyond the basic description.

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

Purpose5/5

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

The description specifies the exact resource (Schedule 13D/13G beneficial-ownership filings), the action (list), and ordering (most recent first). It clearly distinguishes from sibling tools stocks_insiders and filers_holdings by specifying their different use cases.

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

Usage Guidelines5/5

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

The description explicitly provides alternatives for related tasks: 'For officer/director trades use stocks_insiders; for institutional 13F positions use filers_holdings.' It also explains pagination options (cursor/limit vs. max_items), giving clear guidance on when to use each.

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

stocks_profileCompany profileA
Read-only

Fetch a company's reference profile — name, CIK, SIC/industry, exchange, and address — assembled from SEC EDGAR submissions metadata. Use it for company identity details; for financial statements use stocks_financials and for the filing history use stocks_filings. Returns structuredContent alongside the text.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesUS equity ticker, e.g. AAPL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
cikYes
nameYes
tickerYes
sic_codeNo4-digit SIC industry code.
exchangesNo
entity_typeNo
other_tickersNo
fiscal_year_endNoFiscal year end, MMDD (e.g. 0930).
sic_descriptionNo

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, indicating a safe read operation from external sources. The description adds the source (SEC EDGAR) and return format (structuredContent + text), but lacks additional behavioral details beyond what annotations provide.

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

Conciseness5/5

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

Two sentences front-load the core action and scope, then provide usage guidance and return format. Every sentence adds value with no redundancy.

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

Completeness5/5

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

Given the simple parameter set, existing annotations (readOnly, openWorld), and presence of an output schema, the description fully covers what the tool does, when to use it, and its data source. No gaps remain.

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

Parameters3/5

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

Schema coverage is 100% with a description for the ticker parameter. The description does not add meaning beyond the schema's own description ('US equity ticker, e.g. AAPL.') so baseline 3 applies.

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

Purpose5/5

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

The description clearly states the tool fetches a company's reference profile with specific fields (name, CIK, SIC/industry, exchange, address) from SEC EDGAR metadata. It explicitly distinguishes from sibling tools by naming alternatives for financial statements and filing history.

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 clear guidance: use for company identity details, and explicitly recommends stocks_financials for financial statements and stocks_filings for filing history as alternatives.

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

stocks_ratiosFinancial ratiosA
Read-only

Fetch a company's fundamental financial ratios (valuation, profitability, liquidity, leverage) for the latest reporting period plus the full historical series, derived from its XBRL financials. For raw statement line items use stocks_financials or stocks_financial_concept.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesUS equity ticker, e.g. AAPL.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate read-only and open-world. Description adds that data is derived from XBRL financials and includes full historical series, providing useful context beyond annotations.

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

Conciseness5/5

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

Two concise sentences with no extraneous content, efficiently communicating purpose and alternatives.

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

Completeness5/5

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

Given simple parameter set and presence of annotations, the description sufficiently covers return type (ratios, historical series) and data source (XBRL). Complete for agent invocation.

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

Parameters3/5

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

Schema coverage is 100% with description of ticker parameter. Description does not add further meaning beyond the schema, so baseline score of 3 applies.

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

Purpose5/5

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

Clearly states it fetches fundamental financial ratios for latest period and historical series. Distinguishes from siblings by mentioning alternatives for raw statement data.

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

Usage Guidelines4/5

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

Provides explicit alternative tools for raw statement line items, guiding when not to use. Could be more explicit about when to prefer this over other ratio-providing tools like stocks_screener, but still helpful.

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

stocks_risk_factors_diffRisk-factors diffA
Read-only

Compute the year-over-year diff of a company's risk factors (10-K Item 1A), highlighting added, removed, and changed language between its two most recent annual reports. Use it to see how disclosed risks evolved; for the raw text use stocks_section with section 'risk-factors'.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesUS equity ticker, e.g. AAPL.

TDQS

A4.7/5.0
Behavior5/5

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

The description fully explains the behavior: it computes the diff between two most recent annual reports, highlighting changes. Annotations declare readOnlyHint and openWorldHint, and the description adds no contradictions, only enriching understanding.

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

Conciseness5/5

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

Two sentences, front-loaded with the action, no unnecessary words. Every sentence adds value: main functionality, usage guidance, and alternative tool reference.

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

Completeness5/5

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

For a tool with one parameter, no output schema, and good annotations, the description covers all necessary aspects: what it does, what it produces, and when to use an alternative. Nothing 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?

There is one parameter (ticker) with 100% schema coverage. The description does not add additional meaning beyond the schema's description ('US equity ticker, e.g. AAPL.'), so baseline score applies.

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

Purpose5/5

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

The description states a specific action: compute year-over-year diff of risk factors (10-K Item 1A), highlighting added, removed, and changed language. It clearly distinguishes itself from the sibling tool stocks_section by providing an alternative for raw text.

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

Usage Guidelines5/5

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

The description explicitly tells when to use it ('to see how disclosed risks evolved') and provides an alternative for raw text ('use stocks_section with section 'risk-factors''). This gives clear context for selection among siblings.

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

stocks_screenerFundamentals screenerA
Read-only

Screen one XBRL concept for a single fiscal period across all filers at once (e.g. Revenues for FY2023), returning each company's reported value. This is the cross-sectional counterpart to stocks_financial_concept, which returns one company's series over time. Paginate with cursor/limit.

ParametersJSON Schema
NameRequiredDescriptionDefault
unitNoUnit filter. Default USD.
limitNoPage size (endpoint-specific default and max).
cursorNoOpaque cursor from a previous response's meta.next_cursor.
periodYesFiscal period, e.g. FY2023 or 2023Q4 (as documented).
conceptYesXBRL concept name, e.g. Revenues.
taxonomyNoConcept namespace. Default us-gaap.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint. The description adds that it returns each company's reported value and mentions pagination, which is consistent. No additional behavioral traits beyond annotations, but no contradictions.

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

Conciseness5/5

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

Two sentences, front-loaded with main purpose, no extraneous information. Efficiently communicates key details.

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

Completeness4/5

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

Given no output schema, the description explains the return value (each company's reported value). It provides an illustrative example. Annotation coverage is present. Slight gap: no explanation of the unit or taxonomy parameters, but they are self-explanatory from 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 baseline is 3. The description adds context by explaining the concept and period parameters with examples, but doesn't add significant meaning beyond the schema.

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

Purpose5/5

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

Description uses specific verb 'screen' and explicitly states it screens one XBRL concept for one fiscal period across all filers, clearly distinguishing it from sibling stocks_financial_concept which does time series for one company.

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

Usage Guidelines4/5

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

Directly states when to use (cross-sectional across all filers) and when to use the alternative sibling (stocks_financial_concept). Also mentions pagination via cursor/limit. However, it does not provide exclusions for other siblings or additional context.

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

stocks_sectionFiling section textA
Read-only

Fetch the full text of a single narrative section from one SEC filing, selected by section code (e.g. business, risk-factors, mda). Prefer this over stocks_sections when you need just one section — it returns far less text. Discover the available section codes with stocks_sections and get accession numbers from stocks_filings.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesUS equity ticker, e.g. AAPL.
sectionYesSection code: business, risk-factors, legal-proceedings, mda, market-risk, ...
accessionYesSEC accession number, e.g. 0000320193-24-000123.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, covering safety profile. Description adds value by stating it returns the full text of a single section and that it returns less text than stocks_sections, providing additional behavioral context.

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

Conciseness5/5

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

Two sentences with zero wasted words. Front-loaded with purpose, then usage guidelines and discovery hints. Highly efficient.

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

Completeness5/5

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

For a simple data retrieval tool with 3 required params, no output schema, and no enums, the description fully explains what the tool does, what it returns, and how to obtain necessary inputs (section codes and accession numbers). Complete.

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

Parameters3/5

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

Input schema has 100% coverage with descriptions for all three parameters (ticker, accession, section). Description does not add additional parameter details beyond the schema, so baseline score of 3 is appropriate.

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

Purpose5/5

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

Clearly states action (fetch), resource (full text of a single narrative section from one SEC filing), and selection criteria (section code). Distinguishes from sibling stocks_sections by noting it returns one section instead of multiple.

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

Usage Guidelines5/5

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

Explicitly says when to prefer this tool over stocks_sections (when you need just one section, returns far less text). Provides discovery hints: use stocks_sections for available section codes and stocks_filings for accession numbers.

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

stocks_sectionsFiling sectionsA
Read-only

Fetch every extracted narrative section of one SEC filing at once — e.g. business, risk-factors, mda, legal-proceedings — each with its section code and full text, identified by ticker and accession. Use this to pull a whole filing's readable text; when you only need one section, stocks_section returns far less. Large filings may be size-capped (watch for the _truncated note). Get accession numbers from stocks_filings.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesUS equity ticker, e.g. AAPL.
accessionYesSEC accession number, e.g. 0000320193-24-000123.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare readOnlyHint and openWorldHint; description adds behavioral detail about potential size-capping ('watch for the _truncated note') and documents that each section includes its code and full text. No contradiction with annotations.

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

Conciseness5/5

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

Two efficient sentences that front-load the core action and purpose. Every sentence adds value with no redundant or filler content.

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

Completeness5/5

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

Given the tool fetches multiple sections, description adequately covers return content (section code and full text) and potential truncation. No output schema exists but description provides sufficient context for an agent to invoke and interpret results.

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

Parameters4/5

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

Input schema has 100% coverage on both parameters (ticker, accession) with clear descriptions. The description adds context by linking accession to stocks_filings and reaffirming parameters are used to identify the filing.

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

Purpose5/5

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

Clearly states it fetches every extracted narrative section of one SEC filing at once, listing examples like business, risk-factors, mda, and legal-proceedings. Distinguishes itself from sibling stocks_section by noting it returns all sections versus single section.

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 pull a whole filing's readable text; when you only need one section, stocks_section returns far less.' Also instructs to get accession numbers from stocks_filings, providing clear when-to-use guidance.

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

ws_collectCollect a live windowA

One-shot: subscribe, wait up to duration_ms collecting matching ticks (or until max reached), then return them. Subscriptions this call newly creates are removed afterwards. Use this for a quick 'sample N seconds of live data' request.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxNoStop early after this many frames. Default 50.
productYesChannel: cex (crypto), dex (DEX trades), fx (forex), us (US stocks), tvl (DEX pool TVL).
symbolsYesSymbols to (un)subscribe, e.g. ['BTCUSD','ETHUSD'].
duration_msNoHow long to collect, in ms. Default 3000, max 15000.

TDQS

A4.4/5.0
Behavior4/5

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

Description discloses that subscriptions created are removed after the call, which is key behavioral context beyond annotations. It also specifies stop conditions (duration_ms or max). No contradictions with annotations.

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

Conciseness5/5

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

Two sentences, front-loaded with core action (subscribe, collect, cleanup) and a clear use case. Every sentence adds value with no redundancy.

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

Completeness4/5

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

Covers essential behavior (cleanup, stop conditions) and intended use. Lacks explicit mention of return format, but implied by 'collecting matching ticks'. Generally complete for a simple tool.

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

Parameters4/5

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

Schema coverage is 100%, so baseline 3. Description adds value by explaining the product enum, providing symbols example, and stating defaults/bounds for duration_ms and max, which goes beyond the schema.

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

Purpose5/5

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

Description clearly states it subscribes, collects ticks for a duration or max, then returns them and removes subscriptions. It distinguishes from sibling tools like ws_subscribe (persistent) and ws_poll (polling existing).

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

Usage Guidelines4/5

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

Explicitly says 'Use this for a quick sample N seconds of live data request', indicating when to use. Could be more explicit about when not to use or alternatives, but the sibling list provides context.

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

ws_disconnectDisconnect live streamA
Idempotent

Close the live WebSocket and clear all subscriptions and the buffered frames. Use this to tear everything down; to drop only some symbols while keeping the connection open use ws_unsubscribe. Idempotent — safe to call when already disconnected.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Description adds details beyond annotations: clarifies what is cleared (subscriptions, buffered frames) and confirms idempotency. Annotations already cover idempotence and non-destructiveness, so description adds moderate extra value.

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

Conciseness5/5

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

Two sentences, no redundancy, front-loads the main action, efficient and clear.

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

Completeness5/5

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

Tool has no parameters and no output schema. Description fully covers what the tool does, when to use, and safety properties, leaving no gaps.

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

Parameters4/5

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

No parameters, so schema coverage is 100%. Baseline score of 4 applies as description does not need to add parameter info.

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

Purpose5/5

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

Clearly states the tool disconnects the WebSocket, clears all subscriptions and buffered frames. Distinct from ws_unsubscribe which only removes some symbols.

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

Usage Guidelines5/5

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

Explicitly tells when to use this tool (tear everything down) and when to use the alternative (ws_unsubscribe for selective unsubscription).

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

ws_pollPoll buffered ticksA
Read-only

Read buffered live frames. Omit after_seq to get the most recent frames (a tail snapshot); then pass the returned next_seq on subsequent calls to get only newer frames. Non-blocking.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax frames to return. Default 100.
symbolNoFilter to a single symbol, e.g. BTCUSD.
after_seqNoReturn only frames with seq greater than this (from a prior poll's next_seq).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, so description is not required to repeat safety. It adds behavioral context: 'Non-blocking' and the polling mechanism with sequence numbers, which enriches beyond annotations.

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

Conciseness5/5

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

Two concise sentences, front-loaded with purpose, then usage instructions. No unnecessary words.

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

Completeness5/5

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

Given the tool's simplicity (3 optional params, no required, read-only), the description fully covers what an agent needs to know to use it correctly, including the polling pattern and non-blocking nature.

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 operational meaning: explains the role of after_seq in polling and the default behavior when omitted, which supplements 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?

Name 'ws_poll' and title 'Poll buffered ticks' together with the description clearly state the tool reads buffered live frames. It distinguishes from sibling tools like ws_subscribe or ws_collect by focusing on reading data.

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

Usage Guidelines4/5

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

Description provides clear usage pattern: omit after_seq for initial snapshot, then pass next_seq for subsequent polls. It also states 'Non-blocking', implying no waiting. However, it does not explicitly contrast with alternatives or mention when not to use it.

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

ws_statusLive stream statusA
Read-only

Report the live stream's connection state, active subscriptions, buffered frame count, and last error, without opening a connection or consuming buffered frames. Use it to check what's subscribed before ws_poll; read buffered ticks with ws_poll.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true; the description adds that the tool does not open a connection or consume buffered frames, reinforcing the read-only nature and disclosing the exact state reported, with no contradictions.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, no unnecessary words. Efficient and clear.

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

Completeness5/5

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

Despite no output schema, the description enumerates all returned fields (connection state, subscriptions, buffered frame count, last error), making the tool's output clear and complete for its simple purpose.

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

Parameters4/5

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

No parameters exist; schema coverage is 100%. The description adds meaning by explaining what the tool reports, which is sufficient beyond the schema.

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

Purpose5/5

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

The description clearly states the tool reports live stream status (connection state, subscriptions, buffered frame count, last error) and specifically notes it does not open a connection or consume frames, distinguishing it from siblings like ws_poll.

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

Usage Guidelines5/5

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

Explicitly advises using this tool to check subscriptions before ws_poll and contrasts with ws_poll for reading buffered ticks, providing clear guidance on when to use this tool over alternatives.

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

ws_subscribeSubscribe to live streamA

Open (if needed) the live WebSocket and subscribe to symbols on a channel. Incoming ticks are buffered; read them with ws_poll. Returns current connection status.

ParametersJSON Schema
NameRequiredDescriptionDefault
productYesChannel: cex (crypto), dex (DEX trades), fx (forex), us (US stocks), tvl (DEX pool TVL).
symbolsYesSymbols to (un)subscribe, e.g. ['BTCUSD','ETHUSD'].

TDQS

A4.2/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations: it explains that the WebSocket opens if needed, ticks are buffered, and the tool returns connection status. Annotations only provide readOnlyHint=false and openWorldHint=true, so the description adds value.

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

Conciseness5/5

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

The description is two sentences, concise and front-loaded with the main action. Every sentence provides necessary information without redundancy.

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 return value ('Returns current connection status') and mentions buffering and the companion tool. It could mention prerequisites like authentication, but overall it is complete for the tool's complexity.

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

Parameters3/5

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

The schema already has 100% description coverage for both parameters (product enum and symbols array). The description does not add new information about the parameters, adhering to the baseline for high coverage.

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

Purpose5/5

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

The description clearly states the action: 'Open (if needed) the live WebSocket and subscribe to symbols on a channel.' It specifies the resource and verb, and distinguishes from sibling tools like ws_poll, ws_unsubscribe, and ws_disconnect.

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 indicates when to use the tool ('subscribe to symbols') and mentions the companion tool ws_poll for reading buffered ticks. It does not explicitly exclude scenarios, but the sibling list provides context for alternatives.

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

ws_unsubscribeUnsubscribe from live streamA
Idempotent

Stop receiving the given symbols on a channel; the WebSocket stays open for any remaining subscriptions. Returns current connection status. Pair with ws_subscribe; to close the connection entirely use ws_disconnect.

ParametersJSON Schema
NameRequiredDescriptionDefault
productYesChannel: cex (crypto), dex (DEX trades), fx (forex), us (US stocks), tvl (DEX pool TVL).
symbolsYesSymbols to (un)subscribe, e.g. ['BTCUSD','ETHUSD'].

TDQS

A4.7/5.0
Behavior5/5

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

The description explains beyond annotations: the WebSocket stays open for remaining subscriptions and returns current connection status, revealing side effects not covered by annotations.

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

Conciseness5/5

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

Two concise sentences with no waste, front-loaded with the primary action.

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

Completeness5/5

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

Despite no output schema, the description covers return value, connection state, and sibling relationships, making it complete for this simple tool.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description does not add new parameter details beyond the schema, but it ties the parameters to the action ('given symbols').

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

Purpose5/5

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

The description clearly states the tool's action: 'Stop receiving the given symbols on a channel' and distinguishes it from siblings like ws_subscribe and ws_disconnect.

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 pairs with ws_subscribe and directs to ws_disconnect for closing the connection, providing clear when-to-use and when-not-to-use guidance.

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

TDQS

A4.3/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with thorough descriptions explaining differences (e.g., last_trade vs last_quote, stocks_section vs stocks_sections, ws_subscribe vs ws_collect). Even closely related tools like markets_status and markets_status_all are well-differentiated.

Naming Consistency5/5

Tool names follow consistent patterns: stocks_ prefix for equity tools, markets_ for market tools, ws_ for WebSocket tools, and descriptive names like last_trade, last_quote, etc. All use snake_case uniformly, making the set predictable.

Tool Count3/5

At 36 tools, the set is large but reflects the comprehensive financial data coverage (stocks, crypto, forex, markets, economic calendar, DEX, WebSocket streaming). While it could be more focused, each tool seems necessary for the domain, keeping it just above the typical ideal range.

Completeness4/5

The tool surface covers major financial data needs: equities (fundamentals, filings, insider trades, ratios, screening, historical bars), markets (schedules, status, calendar), crypto/forex (OHLCV bars, live quotes), WebSocket streaming, and DEX data. Minor gaps like crypto order books or options data exist but are not core to the server's expressed purpose.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    MCP server that provides AI assistants access to stock market data including financial statements, stock prices, and market news through a Model Context Protocol interface.
    11
    2,282
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Comprehensive MCP server for real-time stock, cryptocurrency, options, and fundamental analysis, including SEC filings and insider trading data.
    26
    28
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    An MCP server providing Model-usable tools to fetch real-time quotes, historical price charts, fundamental datasets, SEC filings, economic/earnings calendars, option chains, and corporate bond data from TradingView.
    21
  • A
    license
    Not graded
    quality
    A
    maintenance
    Official MCP server for the FinancialReports API. Provides direct access to regulatory filings, financial data, and corporate information from listed companies worldwide via 15 curated tools.
    2
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SiftingIO/siftingio-mcp'

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