Tickerbot MCP Server
OfficialClick on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Tickerbot MCP ServerFind oversold semiconductor stocks bouncing on volume."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@tickerbot/mcp-server
Model Context Protocol server for Tickerbot — the stock market, in SQL. Install in Claude, Cursor, VS Code Copilot, and other MCP-compatible clients to scan ~14,500 US-listed equities plus a curated set of rates, FX and crypto series, replay any day, or subscribe a query — across 421+ signal columns.
Install
You need a Tickerbot API key. Get one from your dashboard.
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%/Claude/claude_desktop_config.json (Windows):
{
"mcpServers": {
"tickerbot": {
"command": "npx",
"args": ["-y", "@tickerbot/mcp-server"],
"env": {
"TICKERBOT_API_KEY": "tb_live_..."
}
}
}
}Restart Claude Desktop.
Claude Code
claude mcp add tickerbot --env TICKERBOT_API_KEY=tb_live_... -- npx -y @tickerbot/mcp-serverCursor
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"tickerbot": {
"command": "npx",
"args": ["-y", "@tickerbot/mcp-server"],
"env": { "TICKERBOT_API_KEY": "tb_live_..." }
}
}
}VS Code (Copilot)
Add to .vscode/mcp.json in your workspace:
{
"servers": {
"tickerbot": {
"command": "npx",
"args": ["-y", "@tickerbot/mcp-server"],
"env": { "TICKERBOT_API_KEY": "tb_live_..." }
}
}
}Related MCP server: twelvedata
Tools
19 tools covering tickers, signals, scans, universes, news, and webhook subscriptions.
Tool | Endpoint |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Strategies are not exposed via MCP — see the REST API docs for those.
Examples
Open Claude and try:
"Find oversold semiconductor stocks bouncing on volume."
"What's NVDA's RSI and short interest right now?"
"How often has the gap-up + small-cap + high-RVOL setup hit over the last 30 days?"
"Save a signal called
oversold_with_volumedefined asrsi_14 < 30 AND volume_ratio_20d > 2."
Configuration
Env var | Default | Purpose |
| (required) | Your API key. Sent as |
|
| Override the API base URL (for staging or self-hosted). |
Remote install
For consumer chat apps (Claude.ai web/mobile, ChatGPT) that don't run subprocesses, use the hosted remote MCP endpoint at https://mcp.tickerbot.io instead. See tickerbot.io/mcp-server for setup.
License
MIT
Available Tools
35 toolstickerbot_create_custom_signalAInspect
Save a SQL WHERE expression as a named custom signal the caller can reference by name in future scans.
| Name | Required | Description | Default |
|---|---|---|---|
| expr | Yes | SQL WHERE expression. Same grammar as scan `q`. | |
| name | Yes | Snake_case identifier. | |
| description | No | Optional human description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It conveys the persistence and reusability of the signal ('reference by name in future scans'), which is valuable context beyond the schema. However, it doesn't disclose potential side effects (e.g., overwriting an existing signal with the same name) or any permissions required, leaving some transparency gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the core action ('Save...') and its purpose. Every word adds value, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 parameters, no output schema, no annotations), the description is complete: it explains what is saved, how it is structured (SQL WHERE expression), and the key benefit (reusable by name in future scans). No critical information is missing for a create operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage with descriptions for all three parameters (`expr`, `name`, `description`), so the baseline is 3. The description does not add additional parameter details beyond what the schema already includes; it merely restates the role of `expr` as a SQL WHERE expression.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Save a SQL WHERE expression as a named custom signal' with a specific verb and resource. It distinguishes this from scanning directly by mentioning the signal can be referenced by name in future scans, differentiating it from sibling tools like `tickerbot_scan` and `tickerbot_update_custom_signal`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: creating a persistent, named filter for future scans. It doesn't explicitly mention alternatives or exclusions, but the context is clear. Sibling tools like `tickerbot_update_custom_signal` and `tickerbot_delete_custom_signal` exist, yet the description sufficiently hints that this is for creating a reusable signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_create_universeAInspect
Create a new universe (named set of tickers) for scoping future scans.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Optional slug (lowercase letters, digits, underscore). Auto-generated from name if omitted. Must be unique within the account. | |
| name | Yes | Human-readable name. | |
| tickers | Yes | List of ticker symbols. | |
| description | No | Optional free-form notes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden but does not disclose any behavioral traits beyond the verb 'Create' implying mutation. It fails to mention idempotency, permissions, side effects, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the action, resource, and purpose with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and no annotations, the description is adequate for a simple create operation but doesn't explain return values, prerequisites, or potential errors. The purpose is clear, but behavioral and post-condition details are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds minimal semantic value by clarifying that a universe is a 'named set of tickers,' which indirectly maps to the name and tickers parameters but doesn't go beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Create a new universe') and defines the resource as a 'named set of tickers' with a clear purpose ('for scoping future scans'). This distinguishes it from sibling tools like update_universe or list_universes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context (to create a universe for scoping scans) but does not explicitly mention when to use this tool instead of alternatives like update_universe or delete_universe. No exclusions or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_create_webhookAInspect
The canonical webhook create — POST /v2/webhooks with an explicit trigger object: { type: "scan" | "ticker" | "signal" | "event", … } plus delivery fields. The subscribe tools above are flat sugar over exactly this; use this form when composing the trigger programmatically or when a sugar door doesn't fit. Trigger shapes: scan {type:"scan", q, universe?}; ticker {type:"ticker", ticker, condition}; signal {type:"signal", signal, ticker?, universe?, condition?}; event {type:"event", kinds, tickers?, universe?, event_q?}.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Display name. Defaults from the trigger. | |
| cadence | No | Evaluation cadence. Default realtime. (`1m` accepted as a deprecated alias of realtime.) | |
| channel | No | Delivery channel. Inferred from the URL you pass if omitted. | |
| columns | No | Comma list of extra columns to include with each delivered match (`fields` accepted as alias). | |
| trigger | Yes | What fires the webhook: { type: "scan" | "ticker" | "signal" | "event", … } — see the tool description for each shape. | |
| device_id | No | Registered device id from the mobile app (channel mobile_push). | |
| target_url | No | HTTPS delivery URL (`webhook` channel). Omit for in-app. | |
| discord_url | No | Discord incoming-webhook URL (channel discord). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the HTTP endpoint, the required trigger object, and trigger shapes, but it does not mention what side effects occur (e.g., webhook creation, idempotency, required authentication, or response format). This is a gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the core purpose, and tightly structured: endpoint, usage guidance, and trigger shapes. Every sentence carries essential information with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The input side is well covered: 8 parameters with 100% schema coverage, trigger shapes detailed, and channel inference noted. However, there is no output schema and the description does not mention return values, error behavior, or prerequisites (e.g., authentication), leaving the context incomplete for a create operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description exceeds this by detailing the exact trigger shapes for each type (e.g., scan {type:'scan', q, universe?}), which the schema's trigger property only vaguely references by saying 'see the tool description'. This adds meaningful parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is 'the canonical webhook create — POST /v2/webhooks with an explicit trigger object' and enumerates the four trigger types (scan, ticker, signal, event). It also explicitly distinguishes itself from the 'subscribe tools above' as flat sugar, making the purpose and scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit usage guidance: 'use this form when composing the trigger programmatically or when a sugar door doesn't fit.' It also names the alternative subscribe tools, giving clear when-to-use vs. when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_delete_custom_signalAInspect
Delete one of the caller's custom signals. Cascade-safe by default: refused with 409 if another custom signal references it (the error lists the referencing signals). Pass force: true to delete anyway — existing references will break on next recompile. Available on every plan.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Custom signal slug. | |
| force | No | When true, skip the reference check and delete anyway. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the behavioral disclosure burden. It details cascade-safe deletion, the 409 conflict response listing referencing signals, the force option, and the consequence that existing references will break on next recompile — strong transparency for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three efficiently structured sentences: what it does, default safety behavior, and force behavior. Every sentence delivers necessary information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter delete tool with no output schema, the description covers the essential behavior: target scope, conflict handling, force alternative, and plan availability. Minor lack of explicit success response details is acceptable and likely inferred from standard API conventions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the real-world consequence of force: existing references will break on next recompile, which goes beyond the schema's simple 'skip the reference check' phrasing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Delete one of the caller's custom signals,' a specific verb-resource pair that clearly identifies the tool's scope and distinguishes it from sibling delete tools like tickerbot_delete_universe and tickerbot_delete_webhook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear the tool operates on the caller's own custom signals and notes it is available on every plan, providing actionable context. It does not explicitly name alternatives or edge cases where another tool should be used, but the scope is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_delete_universeAInspect
Delete one of the caller's universes. System universes (top_10/top_100) cannot be deleted. Webhooks that reference the deleted universe will fail on their next eval, so clean those up first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Universe slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It reveals important side effects (webhooks referencing the universe will fail on next eval) and notes the ownership restriction. It does not explicitly state that deletion is irreversible, but 'delete' strongly implies that. Overall, it covers the key non-obvious behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no unnecessary detail. It front-loads the primary action, then adds crucial exclusions and side effects. Every sentence earns its place, making it a model of concise, structured documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no annotations, the description provides all needed context: what it deletes, ownership scope, what cannot be deleted, and downstream impact. It references the cleanup action (webhooks) and is sufficiently complete for an agent to invoke it safely. The sibling list includes delete_webhook, so the guidance is actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage for the single parameter (id as 'Universe slug'), so the baseline is 3. The description adds value by naming example system universes (top_10/top_100) that are invalid targets, thereby enriching the understanding of what the id accepts beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete one of the caller's universes'), specifies the resource (universe), and sets the scope (caller's own). It further distinguishes from related tools by noting system universes cannot be deleted, which makes the purpose unambiguous among siblings like update_universe and list_universes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit constraints on when the tool should not be used (system universes) and provides a prerequisite (clean up webhooks first). It does not explicitly name alternative tools, but the context with siblings like tickerbot_delete_webhook makes the necessary follow-up actionable. This is clear guidance, though it stops short of a full 'when-to-use vs alternatives' comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_delete_webhookAInspect
Delete a webhook subscription by id. Use after listing webhooks when the user wants to remove an alert.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook id (looks like `wh_…`). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for behavioral disclosure. It states the deletion action but does not mention consequences like irreversibility, required permissions, or error handling. This is a significant gap for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, then usage context. No redundant information, every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with one required parameter and no output schema, the description adequately covers what it does and when to use it. It lacks details on outcomes or failures, but given the tool's simplicity, it is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the 'id' parameter as a webhook id with format `wh_…`, providing 100% coverage. The description adds no extra semantic value beyond confirming the id is used for deletion, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (delete), the resource (webhook subscription), and the identifier (by id). It distinguishes from sibling tools like create, patch, and list webhooks by focusing on removal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: 'Use after listing webhooks when the user wants to remove an alert.' This tells the agent when to invoke this tool, though it does not explicitly name alternative tools or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_enable_webhookAInspect
Re-enable a disabled webhook — flips it back to active and clears its match-state so the next eval treats every currently-matching ticker as new. Use after fixing whatever caused auto-disable. No-op on an already-active webhook.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It mentions that the tool clears match-state and is a no-op on already-active webhooks, which gives important side-effect information. It does not cover permissions or reversibility, but for a simple enable operation, it is sufficiently transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loading the core action and effect, then adding usage context. Every word earns its place; there is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description fully covers what the tool does, its behavioral effects, and when to use it. It is complete for an agent to understand and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the parameter with a description ('Webhook id.'). The tool description adds no additional meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's specific function: re-enabling a disabled webhook and flipping it to active while clearing match-state. This distinguishes it from sibling tools like create, patch, delete, or list webhooks. The verb 're-enable' and resource 'webhook' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear when-to-use guidance ('Use after fixing whatever caused auto-disable') and a when-not-to-use note ('No-op on an already-active webhook'). However, it does not explicitly mention alternative tools for related operations, so it falls just short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_get_seriesAInspect
THE series primitive: cross-ticker, multi-column time series on one aligned grid. Pick up to 25 columns (price, OHLCV, indicators like rsi_14, boolean flags, custom signals) and up to 50 tickers; get one flat row per ticker per interval step ({ticker, t, price, rsi_14, …}), cursor-paged backward. transitions_only=true with boolean columns returns only the rows where a flag CHANGED — "every golden_cross flip this year" in one call. All-time on every plan. Replaces looping asof snapshots per date, and replaces the sunset per-ticker history routes.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Latest timestamp (inclusive; a bare date means through that day). | |
| from | No | Earliest timestamp (inclusive), YYYY-MM-DD or ISO. | |
| limit | No | Rows per page. Max 1000. Default 252. | |
| cursor | No | Opaque cursor from a prior response — pages older. | |
| ticker | No | Single symbol (alias of `tickers`, wins when both are set). One of ticker/tickers is required. | |
| columns | No | Comma list of columns (max 25). `fields` is a permanent alias. Defaults to a small set intersected with the interval's schema (intraday tiers carry fewer columns than daily — e.g. market_cap is daily-only). | |
| tickers | No | Comma-separated symbols, max 50, all sharing one time grid. One of ticker/tickers is required. | |
| interval | No | Grid granularity. `1w` weekly, `1q` fiscal-quarterly (fundamentals). | |
| transitions_only | No | Only rows where a boolean column changed value (requires at least one boolean column). Each row carries `transition_drivers` naming the flags that flipped. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses pagination ('cursor-paged backward'), row output shape, transitions_only behavior, plan coverage ('All-time on every plan'), and limits (25 columns, 50 tickers). This goes well beyond minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core concept ('THE series primitive'), and each sentence adds distinct, non-redundant information: capability, limits/behavior, transitions, and replacement of older routes. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 9 parameters and no output schema, the description covers all critical aspects for selection and invocation: data shape, limits, pagination, transitions mode, plan access, and relationship to deprecated routes. It is more than adequate for an agent to decide when and how to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining how parameters combine (flat row per ticker per interval step) and illustrating the output shape with an example, but it largely reiterates schema details. This extra contextualization justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource with defining characteristics: 'THE series primitive: cross-ticker, multi-column time series on one aligned grid.' It clearly distinguishes from siblings like get_ticker_history and get_ticker_bars by stating it replaces per-ticker history routes and looping asof snapshots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names when to use: 'Replaces looping asof snapshots per date, and replaces the sunset per-ticker history routes.' This directly addresses alternatives and gives a concrete use case for transitions_only, making the usage context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_get_signals_matchAInspect
Find tickers that match a single signal right now (or at a past moment with asof). Booleans need no condition. Numerics need a condition like ">70" or "<=200". Sorted by signal value desc for numerics.
| Name | Required | Description | Default |
|---|---|---|---|
| asof | No | Optional YYYY-MM-DD or ISO timestamp. Date-only matches daily state; a timestamp matches the finest intraday state covering the query. | |
| limit | No | Page size. Max 200. Default 50. | |
| cursor | No | Opaque cursor. | |
| signal | Yes | Column name on ticker (e.g. golden_cross_today, rsi_14, market_cap). | |
| sort_by | No | Row order: `default` (alphabetic for booleans, highest-value-first for numerics) or `market_cap` (desc, adds market_cap to each row). | |
| universe | No | Optional universe slug. | |
| condition | No | Required for numerics. Single bound: <op><value>, ops in (>, >=, =, !=, <, <=). | |
| include_active_since | No | Built-in booleans only: adds `active_since` per row — when the flag last flipped true (from the spans archive). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses important behavioral traits: support for historical queries via 'asof', sorting behavior for numerics, and the condition requirement for numerics. Missing details like pagination, error handling, or universe defaults, but this is adequate for a read/filter tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, and no wasted words. Every sentence adds meaningful information about usage and behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters and no output schema, the description covers core behaviors well: temporal queries, condition syntax, and sorting. It doesn't describe the output rows or mention the 'universe' parameter default, but the schema covers parameter details. Overall, it is adequate for someone to start using the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters, so baseline is 3. The description adds significant value by giving concrete examples for 'condition' (e.g., '>70', '<=200'), explaining the 'asof' behavior, and noting sort order. This goes beyond the bare schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Find tickers that match a single signal right now (or at a past moment...)'. It uses a specific verb ('Find') and resource ('tickers'), and the scope of matching one signal distinguishes it from broader tools like tickerbot_scan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on how to use the tool, including the distinction between boolean and numeric signals, the need for a 'condition' for numerics, and the 'asof' parameter for past moments. However, it does not explicitly mention when to use this instead of alternatives like scanning or signal event listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_get_tickerAInspect
Get the full current row for one ticker — every column on the schema (price, change, indicators like rsi_14, every boolean flag like above_sma_50, fundamentals like pe_ratio). Pass asof (YYYY-MM-DD or ISO timestamp like 2026-07-20T15:30:00Z) for the row as it stood at that past moment — date-only gives the close of that day.
| Name | Required | Description | Default |
|---|---|---|---|
| asof | No | Optional YYYY-MM-DD or ISO timestamp. Date-only returns the row at close of that day; a timestamp returns the row as of that moment (finest tier covering each column). | |
| ticker | Yes | Symbol. Case-insensitive. Equities: bare symbol (AAPL). Crypto: X-prefixed pair (X:BTCUSD) — bare BTC/ETH are US-listed ETFs, not spot crypto. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden. It clearly explains that the tool returns every column on the schema and gives concrete examples (rsi_14, above_sma_50, pe_ratio). It also details the asof behavior: date-only gives close of day, timestamp gives moment-in-time row. This is valuable context beyond the bare parameter descriptions, though it does not mention error handling or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose and followed by a single clarifying detail about asof. Every word earns its place, with no filler or repetition. It is concise yet comprehensive for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description appropriately explains what the returned row contains by referencing the full schema and listing examples. It also covers the asof edge case. The tool is simple (2 parameters, no nested objects), and the description gives enough context for an agent to select and correctly invoke it. Minor omissions like not-found behavior are acceptable for a getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for both parameters, so the baseline is 3. The description adds a concrete example timestamp (2026-07-20T15:30:00Z) and rephrases the asof semantics, but does not materially extend what the schema already provides. The ticker parameter semantics (case-insensitive, crypto prefix) are fully covered in the schema, not in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Get the full current row for one ticker', and further clarifies scope by listing column categories (price, indicators, boolean flags, fundamentals). This clearly distinguishes it from sibling tools like get_ticker_history or get_ticker_bars, which are not point-in-time row snapshots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for obtaining a complete row at current or historical moment, but does not explicitly say when to use this tool vs alternatives. For instance, it does not mention that get_ticker_history or get_series would be used for multi-row time series. While the context is clear, there are no explicit exclusions or alternates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_get_ticker_barsAInspect
Get OHLCV (open/high/low/close/volume) bars for one or more symbols at a given interval, oldest-first. Pass a comma-separated ticker list (up to 50) for a bulk response keyed by symbol. Use asof for a single point-in-time bar, or before+limit to back-page. 1d/1h cover the full universe with full history; sub-hour intervals back-fill on demand.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Window end (inclusive; a bare YYYY-MM-DD means through the end of that day). Mutually exclusive with `asof` and `before` (400). | |
| asof | No | Return a single bar as of this date/timestamp (point-in-time). | |
| from | No | Window start (inclusive), YYYY-MM-DD / ISO / epoch-ms. Combines with `to`; page inside the window with `cursor`. Mutually exclusive with `asof` and `before` (400). | |
| limit | No | Most-recent N bars. Default 100. | |
| before | No | Return the N bars ending strictly before this date/timestamp (YYYY-MM-DD or epoch-ms) — back-paging. | |
| cursor | No | Continuation token from a prior response's `next_cursor` (sugar for `before`, and the way to page inside a from/to window). | |
| ticker | Yes | Symbol, or comma-separated list (up to 50) for a bulk response keyed by symbol. | |
| interval | Yes | Bar interval. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses ordering (oldest-first), bulk response shape (keyed by symbol), back-paging semantics (before+limit), and interval coverage differences (1d/1h full history vs sub-hour back-fill). This far exceeds what the schema alone reveals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each with distinct operational guidance (bulk, point-in-time, coverage/paging). Front-loaded with the core purpose, no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no output schema, the description covers the main usage modes and critical behavioral nuances. The schema fully documents every parameter, so the description's high-level context suffices; minor gaps like default limit or cursor mechanics remain in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by clarifying that asof returns a single bar, before+limit enables back-paging, ticker supports up to 50 symbols, and 1d/1h have full coverage. This goes beyond the schema's per-param descriptions, earning a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Get OHLCV (open/high/low/close/volume) bars for one or more symbols at a given interval'. It clearly distinguishes this tool from siblings like get_ticker or get_ticker_history by focusing on OHLCV bars, bulk symbol support, and interval-based retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage guidance: comma-separated tickers for bulk, asof for point-in-time bars, before+limit for back-paging, and interval coverage differences. However, it does not explicitly name alternative tools or state when NOT to use this tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_get_ticker_coverageAInspect
Data-coverage report for one ticker — which intervals and columns exist, from when, at what depth. The honesty endpoint: ask this before assuming a gap in bars/series is a data outage vs. genuinely-never-covered (e.g. sub-hour bars outside the active universe, fundamentals on non-equities).
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | Symbol. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It reveals the tool's role as an 'honesty endpoint' and clarifies it reports coverage rather than filling gaps. It adds context about limitations and edge cases. A minor gap is that it doesn't state read-only or side-effect safety, but it's implied and the description is quite transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with front-loaded purpose. Every clause adds value, including the em-dash elaboration and the concrete examples. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description sufficiently explains what the report returns (intervals, columns, start time, depth) and when to use it. It could be more explicit about the exact response format, but given the simplicity, it is very complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes 'ticker' as a symbol, providing 100% coverage. The description adds no additional parameter-level detail, but it does tie the parameter to the tool's purpose. Given the schema is complete, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool produces a data-coverage report for one ticker, enumerating what it covers: intervals, columns, time range, and depth. This distinguishes it from siblings like get_ticker_bars or get_ticker_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs when to use this tool: before assuming a data gap is an outage, to check if data was ever covered. It also provides examples of edge cases (sub-hour bars, fundamentals on non-equities), making the usage context very clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_get_ticker_historyAInspect
Time-travel SNAPSHOT: the full wide row for one ticker as it stood at a past date (one row, not a series — for a multi-column time SERIES use tickerbot_get_series). Returns indicators, boolean flags, and the most-recent fundamentals known on that date. Unlimited depth on every plan.
| Name | Required | Description | Default |
|---|---|---|---|
| asof | Yes | Target date as YYYY-MM-DD or full ISO timestamp. | |
| ticker | Yes | Symbol. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that it returns a point-in-time row with indicators, boolean flags, and the most-recent fundamentals known on that date, plus 'Unlimited depth on every plan'. This gives clear behavioral expectations beyond a basic 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core concept. Every sentence adds value: the first defines what is returned and distinguishes it from a series; the second clarifies alternative usage and plan access. No filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only tool with no annotations or output schema, the description is notably complete. It conveys return contents, temporal semantics, and plan access, while also directing to alternatives. A concrete example of the returned row could further enhance completeness, but it is not essential for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described. The description adds meaningful context by framing asof as a 'past date' and explaining that the row represents state 'as it stood' with 'most-recent fundamentals known on that date', enriching the temporal semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Time-travel SNAPSHOT' and clearly identifies the resource as 'the full wide row for one ticker as it stood at a past date'. It explicitly distinguishes from sibling tools by noting 'one row, not a series' and pointing to tickerbot_get_series for series data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: it states when to use this snapshot tool and directs to an alternative for series data ('for a multi-column time SERIES use tickerbot_get_series'). This clearly differentiates it from sibling tools and clarifies selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_get_ticker_holdingsAInspect
Get an ETF's constituent holdings and their weights, heaviest first. When the ticker is not an ETF, is_etf is false and holdings is empty; is_etf: true with zero holdings means a real ETF whose holdings aren't ingested yet. (The reverse lookup "which ETFs hold NVDA" is a scan filter on the etf_holders column, not this tool.)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max holdings returned. Max 5000. Default 500. When the cap cuts the list, the response sets `truncated: true` and `total` (the full holding count). | |
| ticker | Yes | ETF symbol. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes on the full burden of behavioral disclosure. It discloses edge-case behavior: when ticker is not an ETF, `is_etf` is false and `holdings` is empty; `is_etf: true` with zero holdings indicates a real ETF whose data isn't ingested yet. This goes beyond what the schema specifies and helps the agent interpret unusual responses.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and efficient: a single main sentence followed by two clarifying notes. The core action is front-loaded, and every clause adds value—edge cases and exclusions are included without fluff. It is exemplary in conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool, the description is fairly complete: it states the main output, ordering, edge cases, and a key exclusion. It lacks an explicit return-structure description, but the absence of an output schema means the description still conveys enough for the agent to use the tool correctly. A dedicated section on fields within each holding could nudge this to 5, but the current coverage is solid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides complete descriptions for both parameters: ticker is an 'ETF symbol' and limit covers max, default, and truncation behavior. The description adds ordering context ('heaviest first') but does not add new parameter-level semantics beyond the schema. Since schema coverage is 100%, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Get an ETF's constituent holdings and their weights, heaviest first.' This clearly states what the tool does and distinguishes it from siblings like get_ticker or get_ticker_sectors. The parenthetical further clarifies that this is not for reverse lookups, reinforcing its unique purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when NOT to use this tool: 'The reverse lookup "which ETFs hold NVDA" is a scan filter on the etf_holders column, not this tool.' This provides an exclusion and a pointer to an alternative. However, it doesn't discuss other contexts, such as when to use get_ticker instead of get_ticker_holdings, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_get_ticker_sectorsAInspect
Get an ETF's sector allocation (sector weights, heaviest first). When the ticker is not an ETF, is_etf is false and sectors is empty; is_etf: true with zero sectors means a real ETF whose sector data isn't ingested yet.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | ETF symbol. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses key behaviors beyond the tool name: non-ETF tickers return is_etf=false with empty sectors, and is_etf=true with zero sectors means data isn't ingested yet. It does not cover all edge cases like invalid tickers, but the disclosed behavior is genuinely useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences: the first states the core function, the second covers important edge-case semantics. Every phrase earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only tool with no output schema, the description sufficiently covers what the tool returns (sector weights, ordered heaviest first), the is_etf flag, and the distinction between non-ETFs and ETFs without ingested data. This is complete enough for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for the single parameter with description "ETF symbol." The tool description reinforces this by saying "ETF's sector allocation," but adds no additional parameter semantics, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: "Get an ETF's sector allocation (sector weights, heaviest first)." It clearly differentiates this tool from sibling tools like get_ticker_holdings or get_ticker_coverage by focusing on sector-level data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied through the description: use this when you need sector weights for an ETF. However, it does not explicitly state when to prefer this over alternatives (e.g., get_ticker_holdings for holdings or get_ticker_coverage for coverage), so clear exclusion guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_get_universeAInspect
Get one universe by slug, including its ticker list.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Universe slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description discloses that this is a read operation ('Get') and that it returns the ticker list. It does not go into details about error handling, permissions, or side effects, but for a simple get tool, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence that front-loads the verb and resource, with no wasted words. Every piece of information is useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool (one parameter, no output schema), the description covers the essential behavior—what it retrieves and the resource identifier key. It doesn't document edge cases or return details, but the tool is simple enough that this is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% coverage, with the id parameter described as 'Universe slug.' The description adds minimal meaning beyond that, but it correctly aligns with the parameter, maintaining the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' with a clear resource 'one universe by slug' and adds 'including its ticker list', which differentiates it from sibling list_universes and get_ticker. It is unambiguous about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a specific universe slug and need its details, but it does not explicitly state when to use this over list_universes or other alternatives. Context is clear but not supported by explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_get_webhookAInspect
Fetch one webhook subscription by id (current state, match-set, schedule). Account-scoped: any key on the account can read any of the account's webhooks.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook id (looks like `wh_…`). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and provides meaningful behavioral context: the account-scoped read access ('any key on the account can read any of the account's webhooks') and the specific data returned (state, match-set, schedule). This is useful for a read operation, though it does not cover error handling or pagination (not applicable).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences deliver the core purpose and an important access detail without redundancy. Every word earns its place, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-id tool with one parameter and no output schema, the description is quite complete: it covers what the tool does, what is returned, and the access scope. It could be slightly more explicit about the absence of list functionality, but overall it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description of the 'id' parameter. The tool description adds no additional parameter semantics beyond the schema, which already explains the format ('wh_…'). This meets the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Fetch' and clearly identifies the resource as 'one webhook subscription by id', including what will be returned ('current state, match-set, schedule'). This distinguishes it from siblings like list_webhooks (multiple) and create/patch/delete webhooks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving a single webhook by id and adds the account-scoped access context. However, it does not explicitly mention when not to use it (e.g., use list_webhooks for all webhooks), so it lacks clear exclusions but still provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_list_eventsAInspect
THE events primitive — one timeline over every event log, cross-ticker: dividends, splits, insider transactions, and analyst actions ("all splits this month", "every analyst action in my universe this week", "AAPL's full corporate history" via ticker), plus two opt-in kinds that join only when named: signal (boolean-flag firings) and news. Rows are { ticker, ts, kind, payload }, newest first. Analyst payloads (history to 2012) carry firm/analyst/action/rating/price_target; filter them with firm=/action= (structured, case-insensitive — a q payload match is case-SENSITIVE) — actions: upgrades, downgrades, initiates_coverage_on, maintains, reiterates, assumes, reinstates, suspends, terminates_coverage_on. Use q for other payload conditions: it speaks the SQL grammar over exactly (ticker, ts, kind, payload jsonb); group_by/select/having roll the stream up (aggregates return truncated: true instead of paginating); join=state attaches the ticker's state as of each event. Requires at least one bound: a ticker scope (ticker/tickers/universe), a time window (from/to), or firm/action — q alone is not a bound.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | SQL WHERE over (ticker, ts, kind, payload jsonb) — ONLY those four identifiers. Payload fields via jsonb operators: payload->>'firm' = 'Goldman Sachs', (payload->>'shares')::numeric > 1e6. On kind=signal this requires `signal` (the firing log is ~175M rows); kind=signal takes no group_by. | |
| to | No | Window end: a bare YYYY-MM-DD means through the END of that day (matching bars/series/spans); a timestamp is exclusive — events strictly before it. `until` accepted as alias. | |
| dir | No | Aggregate-mode sort direction. | |
| firm | No | kind=analyst only. Case-insensitive analyst-firm filter (e.g. "Goldman Sachs" matches "goldman sachs") — prefer this over a q payload match, which is case-sensitive. | |
| from | No | Events at or after this ISO date/datetime (inclusive; a bare YYYY-MM-DD means from the start of that day). `since` accepted as alias. | |
| join | No | join=state attaches each event's ticker STATE as of that event's moment (the replay join) under a `state` key — "downgrades where rsi_14 was already under 40" composes with q. Free on every plan. | |
| kind | No | Comma list of kinds to include. Default is the four corporate kinds: dividend, split, insider, analyst. Two more are opt-in and join only when named: `signal` (boolean-flag firings) and `news`. | |
| limit | No | Page size. Max 1000. | |
| order | No | Aggregate-mode sort column/alias. Default: events. | |
| action | No | kind=analyst only. Exact rating-action filter. | |
| cursor | No | Opaque cursor from a prior response — carries the original filters, pass it alone (long q values must be resent alongside it). | |
| having | No | Post-aggregation filter (requires group_by), e.g. COUNT(*) > 5. | |
| select | No | Aggregate-mode output columns (requires group_by). Default: group keys + COUNT(*) AS events. | |
| signal | No | kind=signal only. One built-in boolean flag (e.g. golden_cross). REQUIRED to use `q` or `join` on kind=signal — naming the signal is what keeps the query on an index; optional otherwise. | |
| ticker | No | Single-ticker filter, e.g. AAPL. | |
| tickers | No | Comma-separated tickers, max 50. Mutually exclusive with `universe`. | |
| group_by | No | Comma list of rollup keys — switches to aggregate rows, e.g. payload->>'firm' AS firm, or kind. `AS` names the JSON key; an un-named payload read is keyed by its payload key (payload->>'firm' -> firm). | |
| interval | No | Grain for join=state replay (finest covering tier by default). | |
| universe | No | Universe slug (top_10, top_100, or a saved one) to scope the stream. Mutually exclusive with `tickers`. | |
| transition | No | kind=signal only. `enter` (false->true) or `exit` (true->false). Always optional — an ordinary filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does an excellent job. It discloses row format and ordering, analyst payload history, case-sensitivity nuances between structured filters and q, aggregate behavior (truncated: true instead of pagination), join semantics, and the mandatory bound condition. This is far beyond a minimal description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but information-dense, covering a complex 20-parameter tool. It is front-loaded with the core purpose and examples, then logically flows to row format, analyst specifics, q grammar, aggregation, join, and bounds. While every sentence earns its place, it could be tightened to improve scannability without losing critical details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (20 parameters, no output schema, no annotations), the description is remarkably complete. It explains the return row shape, the difference between default and opt-in kinds, analyst filter behavior, q usage, aggregation response (truncated: true), join=state behavior, and the essential bound requirement. This covers the vast majority of what an agent needs to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful high-level semantics: it explains that q 'speaks the SQL grammar over exactly (ticker, ts, kind, payload jsonb)', describes aggregation with group_by/select/having, and clarifies the bound requirement across multiple parameters. This goes beyond the per-parameter schema descriptions, though it does not dive into individual parameter syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'THE events primitive — one timeline over every event log, cross-ticker: dividends, splits, insider transactions, and analyst actions'. It gives concrete examples ('all splits this month', 'every analyst action in my universe this week') and distinguishes it from siblings like list_signal_events by noting signal and news are opt-in kinds. The verb+resource+scope is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: as the events primitive covering all event logs, with optional kinds (signal, news) and aggregate/join modes. It also gives a critical constraint: 'Requires at least one bound: a ticker scope, a time window, or firm/action — q alone is not a bound.' However, it does not explicitly name alternative tools or state when to prefer them over this one, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_list_signal_eventsAInspect
Occurrence SPANS of a boolean signal for one ticker, newest-first. For STATE flags (above_sma_50, in_uptrend) each row is a true-WINDOW: started_at when it flipped true, ended_at when it flipped back (null while still true), with prices at both ends. For EVENT flags (golden_cross, gap_up) each row is a point firing (started_at = ended_at). "Golden crosses in June" is from=2026-06-01&to=2026-06-30. Built-in booleans only — numerics and custom signals have no precomputed spans (use tickerbot_get_series).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Window end (inclusive) on started_at; a bare YYYY-MM-DD means through the end of that day. | |
| from | No | Window start (inclusive) on each span's started_at — YYYY-MM-DD, ISO, or epoch-ms. | |
| limit | No | Page size. Max 1000, newest first. | |
| cursor | No | Opaque cursor — pages older, inside the from/to window if one is set. | |
| signal | Yes | Built-in boolean flag name. | |
| ticker | Yes | Symbol. | |
| merge_gap_seconds | No | Interval-union: contiguous windows whose gap is ≤ N seconds collapse into one — de-fragments flags with thousands of per-tick rows (e.g. 3600 for daily flags). Default 0 = no merge. A cursor pins this; resend it unchanged when paging. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of explaining behavior. It does this well by detailing the difference between state windows (null ended_at while active, prices at both ends) and event point fires (started_at=ended_at), and clarifies the meaning of from/to. It does not cover merge_gap_seconds or pagination behavior beyond what the schema already describes, but the core behavior is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph, front-loaded with the core purpose, and each sentence adds value. It is slightly longer than necessary but packs domain-specific details (state vs event, example query) without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description does a good job explaining the row structure (started_at, ended_at, prices). It also covers the main use cases and exclusions. It does not explicitly list every return field, but the essential shape is conveyed. The tool is complex enough that a bit more detail on paging or merge behavior could be useful, but the description is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds context around from/to with the example but does not provide additional semantics beyond what the schema already states for each parameter. It reinforces the 'built-in booleans only' constraint for signal, but this is also implied in the description's first sentence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists 'Occurrence SPANS of a boolean signal for one ticker, newest-first,' which is a specific verb+resource+scope. It distinguishes itself from siblings by explicitly contrasting state vs event flags and referencing tickerbot_get_series for non-boolean signals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'Built-in booleans only — numerics and custom signals have no precomputed spans (use tickerbot_get_series).' Also gives a concrete example for date filtering ('Golden crosses in June' is from=2026-06-01&to=2026-06-30), making usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_list_signals_catalogAInspect
List the unified signal catalog: every built-in column on the schema (kind: builtin) plus the caller's custom signals (kind: expression). Built-in rows carry the audited spec metadata — description, category, update cadence, ticker coverage (ticker_scope), history depth (history/history_since), queryable resolutions, and asset classes. Use to discover what q= clauses and signal names are available before composing a scan.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Filter by kind. Omit for both. (`custom` is accepted as a legacy alias of `expression`.) | |
| limit | No | Page size for custom slice. Max 200. Default 50. | |
| cursor | No | Opaque cursor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It describes the output composition (built-in plus caller's custom signals) and enumerates the metadata fields included for built-in rows, which are beyond what the schema provides. It also indicates scoping to the caller's custom signals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary purpose, followed by valuable detail on output content and intended use. Every sentence earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with no output schema, the description explains what the response contains (including metadata fields) and when to use it. Parameters are fully covered by the schema, so the description is nearly complete; a brief note on pagination defaults could push it to a 5, but that is already in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already thoroughly documents all three parameters. The description adds the connection to 'q= clauses and signal names' but does not elaborate on limit/cursor behavior beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('the unified signal catalog'), and distinguishes it from sibling tools by specifying built-in vs custom signals. It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit use case: 'Use to discover what q= clauses and signal names are available before composing a scan.' It does not mention alternatives or exclusions, but the context is clear and sufficient for an agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_list_system_universesAInspect
List the built-in system universes (top_10, top_100 — the most-actively-traded tickers by 30-day trailing dollar volume, rebalanced monthly). Available to every account regardless of plan. Use these slugs as universe in scans/signals or universe_id when subscribing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that the universes are built-in, rebalanced monthly, and based on 30-day trailing dollar volume, plus availability to all accounts. This provides useful context beyond mere listing, though it doesn't specify response format or potential limitations, which is acceptable for a simple 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action, and every clause adds value: what is listed, examples, definition, availability, and usage. There is no wasted wording or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool with no output schema, the description is adequately complete. It explains what the universes are, why they exist, and how to use the resulting slugs. It doesn't describe the exact response shape, but for a simple list operation the expectation is straightforward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description correctly notes the slugs but doesn't need to add parameter details since none exist. The schema already confirms an empty object, so the description provides sufficient context for how to use the returned slugs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'List the built-in system universes' with specific slugs and their definition, distinguishing it from sibling tools like tickerbot_list_universes which likely handles all universes. The verb and resource are explicit and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool: to get system universe slugs that can be used in scans/signals or subscriptions. It notes availability to all accounts, implying it is the go-to for built-in universes. It doesn't explicitly mention alternatives like list_universes for custom universes, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_list_tickersAInspect
List active tickers from the Tickerbot universe (~14,500 US equities, plus the US Treasury curve and Fed policy rates under R:, and major FX pairs, spot metals and crypto under X:). Use tickers for bulk lookup of named symbols (returns full rows); otherwise walks the universe alphabetically with cursor pagination. Supports filters: search, asset_type, exchange, sector, min_market_cap.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. Max 1000. Default 50. | |
| cursor | No | Opaque cursor from a prior response. | |
| search | No | Case-insensitive substring filter on ticker/name. Orders results by market_cap desc. | |
| sector | No | Exact-match sector filter (e.g. "Technology"). | |
| tickers | No | Comma-separated symbols (max 50). When set, returns full rows for these symbols and pagination params are ignored. | |
| exchange | No | Filter by exchange (e.g. "XNYS", "XNAS", "BATS"). | |
| universe | No | Restrict to a universe slug (top_10, top_100, or a saved one). | |
| asset_type | No | Filter by INSTRUMENT TYPE within equities: the stored value (CS, ETF, ADRC, PFD, FUND, UNIT, SP, ETS, WARRANT, RIGHT, ETN, ETV), or "equity" for the equity-like set. This is not an asset class — `asset_type=crypto` is rejected; crypto is in the main list under its X: symbols. | |
| asset_class | No | Filter by asset class — `stocks`, `rates`, `crypto`, `fx`, or a comma-separated list. Omit for every class. Distinct from asset_type (the instrument type within equities). | |
| min_market_cap | No | Minimum market cap in USD. Orders results by market_cap desc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals the universe composition, the distinct behavior of the `tickers` parameter (returns full rows, ignores pagination), and the pagination mechanism. It does not mention rate limits, return format, or what 'active' means, but these are partially covered elsewhere and the description adds substantial context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the primary purpose, and each sentence adds distinct value: scope, bulk vs paginated behavior, and filter list. There is no fluff or redundancy, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex listing tool with 10 optional parameters and no output schema, the description is quite complete: it explains universe content, two usage modes, pagination, and filters. It does not explicitly describe the response structure or error behavior, but these are often left implicit, and the overall context is sufficient for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the baseline is 3. The description adds meaningful context beyond the schema by explaining the universe scope, the bulk-lookup mode behavior, and the existence of filters like search, asset_type, exchange, sector, and min_market_cap. This helps the agent understand parameter interplay without reading every schema detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists active tickers from the Tickerbot universe, specifies the exact scope (~14,500 US equities, US Treasury curve, Fed policy rates, FX, metals, crypto under X:), and distinguishes this from a bulk lookup mode via the `tickers` parameter. It is a specific verb+resource+scope statement that differentiates it from sibling tools like get_ticker (singular) and list_universes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: 'Use `tickers` for bulk lookup of named symbols... otherwise walks the universe alphabetically with `cursor` pagination.' It also mentions supported filters. However, it does not explicitly compare to alternative sibling tools such as get_ticker for single-symbol lookups, so exclusions are not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_list_universesAInspect
List universes — your saved ones and/or the built-in system universes (top_10, top_100). Filter with owner (like the signals catalog's kind): me (default, your own), system (built-ins), or all (both). Each row carries system: true|false.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (applies to your own; system universes are a small fixed set returned in full on the first page). | |
| owner | No | Which universes to list. | |
| cursor | No | Opaque cursor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It adds useful behavioral context: each row carries a 'system: true|false' flag, and it implies a read-only listing operation. It does not disclose pagination behavior or auth requirements, but for a list tool these are less critical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose, and every clause carries useful information. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 output schema), the description is nearly complete: it explains purpose, filtering options, and a key output field. It doesn't explain pagination, but that is covered by the schema's 'cursor' and 'limit' descriptions. Overall, sufficient for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the semantics of the 'owner' parameter (defaults, meaning of 'me/system/all') and drawing an analogy to the signals catalog's 'kind'. This goes beyond the schema descriptions, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List universes — your saved ones and/or the built-in system universes (top_10, top_100).' It uses a specific verb ('List') and resource ('universes'), and explicitly defines the scope, distinguishing it from sibling list_system_universes by covering both owner and system universes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to filter using the 'owner' parameter ('me', 'system', 'all') and notes the default. However, it does not mention alternatives like tickerbot_list_system_universes, nor when to prefer one over the other. This is a clear omission given the sibling tool exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_list_webhook_deliveriesAInspect
List recent deliveries (pings and fires) for a webhook, newest-first — for diagnosing failures. Returns metadata only (status, attempt, response code, error); the POST body is not stored.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook id. | |
| to | No | Only deliveries created at/before this moment — same value grammar as `from`; a date-only value means through the end of that UTC day. | |
| from | No | Only deliveries created at/after this moment — epoch seconds, epoch milliseconds (13+ digits), or ISO datetime. (90-day retention on every plan.) | |
| limit | No | Page size. Max 100. Default 50. | |
| cursor | No | Opaque cursor. | |
| status | No | Filter by delivery status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so excellently. It discloses the return shape ('Returns metadata only (status, attempt, response code, error)'), a critical limitation ('the POST body is not stored'), and ordering behavior ('newest-first'). This goes beyond what the schema provides and gives the agent essential expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main function and purpose, then adds a valuable limitation. Every word earns its place, and no redundant information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with a comprehensive schema, the description covers all essential context: purpose, scope, ordering, use case, and return limitations. Since there is no output schema, the explicit mention of metadata fields (status, attempt, response code, error) is particularly helpful. The description and schema together fully equip an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with detailed parameter descriptions (time formats for from/to, limit default, cursor opacity, status enum). The description adds no parameter-specific details, but the schema already documents them thoroughly, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List recent deliveries (pings and fires) for a webhook, newest-first' with a specific verb and resource, plus a use case ('for diagnosing failures'). This differentiates it from sibling tools like get_webhook (config) and test_webhook (send test ping), and from list_webhooks which lists webhooks themselves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for diagnosing failures' provides a clear context for when to use this tool. It does not explicitly name alternatives or exclusions, but it implies this is the tool for inspecting delivery history. It could be improved by explicitly distinguishing from test_webhook, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_list_webhooksAInspect
List the caller's webhook subscriptions (rules created via the subscribe tools), newest-first. Use status to filter to active or disabled rules.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. Max 100. Default 50. | |
| cursor | No | Opaque cursor. | |
| status | No | Filter by status: `active` or `disabled`. Omit for all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It adds useful context (caller's scope, newest-first ordering) but does not explicitly state that the operation is read-only or describe return format/pagination behavior. The verb 'List' implies safety, but explicit confirmation is absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose and a targeted usage tip. Every word earns its place; no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema, the description covers scope, ordering, and filtering. It does not explain the response structure or pagination beyond what the schema provides, but the essential information for invoking the tool correctly is present. Slight gap in return value details, though acceptable given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already documented. The description adds a mention of filtering by 'status' but provides no additional syntax or semantics beyond the schema. It reinforces existing information without expanding on parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List'), the resource ('the caller's webhook subscriptions'), and a differentiator ('newest-first'). It also distinguishes from siblings like 'tickerbot_list_webhook_deliveries' and 'tickerbot_get_webhook' by focusing on subscriptions overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool and specifically instructs how to use the 'status' parameter to filter. However, it does not explicitly mention when to prefer this over related tools (e.g., get_webhook for a single subscription or list_webhook_deliveries for delivery logs).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_patch_webhookAInspect
Edit a webhook in place: name, cadence, target_url, enabled (pausing/resuming without losing match-state). The trigger (q) and channel are immutable by design — delete and re-create to change what fires or where it delivers. Unknown fields are a 400, never silently ignored.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook id (looks like `wh_…`). | |
| name | No | New display name. | |
| cadence | No | New evaluation cadence. | |
| enabled | No | false pauses deliveries; true resumes. (Re-enabling after auto-disable also works via tickerbot_enable_webhook, which additionally clears match-state.) | |
| target_url | No | New HTTPS delivery URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that `enabled` toggles without losing match-state, that trigger/channel are immutable by design, and that unknown fields return 400 rather than being silently ignored – all substantive behavioral details not visible in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: a front-loaded purpose, an explicit immutability caveat, and an error-behavior note. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a patch tool with no annotations and no output schema, the description covers purpose, editable fields, immutable constraints, and error behavior. It does not explicitly describe the response payload or state partial-update semantics (omitted fields unchanged), which is a minor gap given the otherwise rich context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described, so the baseline is 3. The description restates the editable fields and adds a minor nuance about `enabled` preserving match-state, but does not materially enhance parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Edit a webhook in place' – a specific verb and resource – and enumerates the editable fields (`name`, `cadence`, `target_url`, `enabled`). This clearly distinguishes it from sibling tools like `tickerbot_create_webhook` and `tickerbot_delete_webhook` by signaling in-place modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states that trigger and channel are immutable and directs users to delete and re-create for those changes. It also points to `tickerbot_enable_webhook` as the alternative for re-enabling with match-state clearing, giving clear when-to-use vs alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_scanAInspect
Run a SQL WHERE clause against the live ticker universe (or against a past moment with asof — unlimited depth on every plan). Returns matching tickers sorted by chosen column, OR — with group_by — aggregate rollups instead of rows (breadth stats: "count of tickers above their 200dma by sector", "median RSI by sector on 2026-03-03"). The q grammar is a flat WHERE: column names from the schema, AND/OR/NOT, comparison operators, numeric/string literals. No JOIN or subqueries. Example: gap_up AND market_cap < 2000000000 AND NOT earnings_this_week.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | SQL WHERE expression. Max 4000 chars. | |
| dir | No | Sort direction. | |
| asof | No | Optional YYYY-MM-DD or ISO timestamp for a historical scan. Unlimited depth on every plan. | |
| full | No | Row mode: return the FULL wide row for each match (every column) instead of the slim default projection. | |
| limit | No | Page size. Max 100. Default 50. Aggregate mode does not paginate — response sets `truncated: true` when groups were cut. | |
| order | No | Sort column. Default day_change_pct (rows) / tickers (aggregate). | |
| cursor | No | Opaque cursor (row mode only). | |
| fields | No | Comma-separated extra columns to include (row mode only). | |
| having | No | Aggregate filter (requires group_by). Example: `COUNT(*) >= 10`. | |
| select | No | Aggregate output items (requires group_by). Default: group keys + COUNT(*) AS tickers. Aggregates: count/avg/sum/min/max/stddev/string_agg + FILTER (WHERE …). Alias items with AS. Example: `sector, COUNT(*) AS n, AVG(rsi_14) AS avg_rsi`. | |
| group_by | No | AGGREGATE MODE: 1–6 comma-separated group keys (columns or expressions, e.g. `sector`). Results become rollup rows instead of tickers. Alias a key with `AS` to name its JSON key; un-named expressions are named for you. | |
| universe | No | Optional universe slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes on the transparency burden. It reveals key behavioral constraints: the flat WHERE grammar, no JOIN/subqueries, unlimited asof depth, and the row-vs-aggregate output modes. It does not mention read-only implications, pagination, or error handling, but the stated limits give substantial insight beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: it opens with the core action, then explains output modes and grammar constraints, and ends with a practical example. No filler or redundancy; it is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter scan tool with no output schema, the description covers the essential conceptual model: row mode, aggregate mode, the query grammar, and a representative example. It does not spell out default row projections or pagination details, but those are sufficiently documented in the input schema, so only a minor gap remains in return-value clarity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all parameters in detail (100% coverage), so the baseline is 3. The description adds valuable context by explaining the q grammar (AND/OR/NOT, comparison operators, literals) and demonstrating group_by rollups with examples, which deepens understanding beyond the schema's short parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource ('Run a SQL WHERE clause against the live ticker universe') and clearly distinguishes this tool from siblings by explaining its filtering and aggregation power. It also provides a concrete example, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly conveys when to use the tool: for arbitrary SQL-like filtering and aggregations over the ticker universe, with a past-moment option. However, it doesn't explicitly name alternative tools (e.g., list_tickers, get_ticker) or state when NOT to use this in favor of those, so it stops short of full exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_search_newsAInspect
Search the news archive (back to 2015) with a SQL WHERE clause. Available on every plan. Columns on news_article include time_published, title, summary, source, source_domain, category, authors, topics, tickers (array), overall_sentiment_score, overall_sentiment_label, url. To filter to one ticker use 'NVDA' = ANY(tickers) or the auto-unnest alias tk = 'NVDA'. Example: q=tk='NVDA' AND time_published >= NOW() - INTERVAL '1 day'. Supports group_by + having for aggregation (e.g. count of articles per day).
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | SQL WHERE on news_article. Optional when search or a scoping param is present. | |
| dir | No | Sort direction. | |
| limit | No | Page size. | |
| order | No | Sort column or SELECT alias. Default time_published (non-aggregate) or volume (aggregate). | |
| cursor | No | Opaque cursor. | |
| having | No | WHERE-style filter on aggregates. Requires group_by. | |
| search | No | Full-text search over title+summary (websearch grammar: "apple earnings", quoted phrases, OR, -negation). ANDs with q and the scoping params. | |
| select | No | Comma-separated columns to include. Defaults to a slim set. | |
| group_by | No | Comma-separated columns for aggregation. Alias a key with `AS` to name its JSON key; un-named expressions are named for you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It explains the archive depth, available columns, filter patterns, and aggregation support. It doesn't cover pagination or rate limits, but the schema covers cursor/limit, and the read-only nature is implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise, with the main purpose front-loaded and only essential details included. The column list and examples are useful but make it slightly dense; still, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, no output schema), the description covers the primary use cases well with examples and column details. It doesn't explain every parameter, but the schema fills that gap. It lacks explicit return-format info, but the column list compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage of parameters, so the baseline is 3. The description adds meaning beyond the schema by explaining the SQL WHERE clause for q, providing example syntax, and mentioning group_by/having behavior, thus adding value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search the news archive (back to 2015) with a SQL WHERE clause.' This uses a specific verb and resource, and distinguishes the tool from sibling tools focused on tickers, signals, or webhooks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context on usage, including availability on every plan, SQL syntax, example queries, and aggregation support. It doesn't explicitly say when not to use this tool versus alternatives, but the description makes the use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_subscribe_eventsAInspect
Create an event-trigger webhook: fires when NEW events land — dividends, splits, insider filings, analyst actions ("every split in my universe", "Goldman downgrades on large caps"). TWO composable filters: q filters the event's TICKER STATE (market_cap > 1e10); event_q filters the EVENT CONTENT in the /v2/events grammar (payload->>'firm' = 'Goldman Sachs'). Paid plans (webhook slots). Deliveries carry event: "events.fired" with an events array. Latency = ingest cadence: analyst ≤1h, corporate kinds daily — NOT sub-minute like state webhooks.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Optional row-STATE filter evaluated against the event's ticker at fire time, e.g. market_cap > 1e10. | |
| name | No | Display name. | |
| kinds | Yes | Comma list of kinds to fire on — any of: dividend, split, insider, analyst (e.g. "split,analyst"). NOTE: no enum here on purpose — a scalar enum would reject multi-kind values. | |
| channel | No | Delivery channel. | |
| event_q | No | Optional event-CONTENT filter over (ticker, ts, kind, payload jsonb) — only those four identifiers, e.g. payload->>'firm' = 'Goldman Sachs' AND payload->>'action' = 'downgrades'. | |
| tickers | No | Scope to specific tickers (comma list, max 50). Mutually exclusive with universe; omit both for all tickers. | |
| universe | No | Scope to a universe slug (top_10, top_100, or a saved one). | |
| device_id | No | Registered device id from the mobile app (channel mobile_push). | |
| target_url | No | HTTPS delivery URL. Omit for in-app delivery. | |
| discord_url | No | Discord incoming-webhook URL (channel discord). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does an exceptional job. It discloses the delivery payload structure ('events.fired' with an events array), latency expectations (analyst ≤1h, corporate daily), the need for paid plans (webhook slots), and the composable filter semantics. This is rich, non-obvious behavioral context that goes well beyond what the name or schema alone would convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: it states the core purpose, explains the two filters with concrete examples, notes the paid plan requirement, describes the delivery payload, and gives a latency caveat. There is no fluff or repetition; it is structured to front-load the most important information (what and when) before finer details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create-operation tool with 10 parameters and no output schema, the description covers most essential context: purpose, event types, filter usage, delivery format, latency, and pricing. The only notable gap is that it does not describe what the tool returns upon success (e.g., a webhook ID or confirmation), which would be helpful given the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all 10 parameters (100% coverage), so the baseline is 3. The description adds meaning by explaining the conceptual distinction between q (ticker state) and event_q (event content), and why kinds is a comma-list string rather than an enum (to allow multi-kind values). This clarifies design rationale and helps the agent form correct queries, raising the score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Create an event-trigger webhook: fires when NEW events land', which clearly states the specific verb (create), resource (event-trigger webhook), and behavior (fires on new events). It enumerates event kinds (dividends, splits, insider filings, analyst actions) and includes examples, making it unmistakable what the tool does and how it differs from generic webhook creation tools like tickerbot_create_webhook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (event-driven notifications for specific corporate events) and hints at an exclusion by contrasting latency: 'NOT sub-minute like state webhooks'. However, it does not explicitly name sibling alternatives (e.g., tickerbot_subscribe_ticker) or state when not to use it, so it stops short of a fully explicit when/when-not guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_subscribe_scanAInspect
Register a webhook that fires when matches for a scan query change. Pass target_url for an https POST, or channel:"discord" + discord_url to post an embed to Discord; omit for in-app delivery in the dashboard. cadence is real-time (1m) by default; throttle to hourly or nyse_open. Use to satisfy "alert me when this happens" prompts.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | SQL WHERE expression — same grammar as scan. | |
| name | No | Human-readable label. Defaults to a truncated version of the query. | |
| cadence | No | Evaluation cadence. Default realtime; hourly/nyse_open throttle. (`1m` accepted as a deprecated alias of realtime.) | |
| channel | No | Delivery channel: `webhook` (POST to target_url), `discord` (embed to discord_url), `mobile_push` (to a registered device), or `in_app` (dashboard only). Inferred from the URL you pass if omitted. | |
| universe | No | Optional universe slug to scope the watch. | |
| device_id | No | Registered device id from the mobile app. Required when channel is "mobile_push". | |
| target_url | No | Optional https URL to POST matches to (the `webhook` channel). Omit for in-app delivery. | |
| discord_url | No | Discord incoming-webhook URL (https://discord.com/api/webhooks/…). Required when channel is "discord". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the trigger condition (matches change), default cadence (realtime/1m), throttling options (hourly or nyse_open), and delivery behavior (POST to target_url, Discord embed to discord_url, or in-app dashboard). It does not cover failure modes or auth details, but the main behavioral contract is clearly explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences and front-loaded with the core purpose. Each sentence earns its place: the first defines the action, the second explains delivery options, the third covers cadence and the common use case. It is compact without losing necessary context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is an 8-parameter tool with no output schema, the description provides solid coverage of the main delivery modes (webhook, Discord, in-app) and cadence settings. However, it omits the mobile_push/device_id path and does not hint at what the response looks like, though those are schema-described and arguably secondary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers 100% of parameters, giving baseline 3. The description adds value by explaining parameter relationships: 'Pass `target_url` for an https POST, or `channel:"discord"` + `discord_url` to post an embed to Discord; omit for in-app delivery.' This clarifies how channel, target_url, and discord_url interact beyond individual schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Register a webhook that fires when matches for a scan query change,' which clearly states the verb (register), resource (webhook), and specific trigger condition (matches for a scan query change). This distinguishes it from sibling tools like tickerbot_scan or tickerbot_subscribe_ticker, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The final sentence provides explicit when-to-use guidance: 'Use to satisfy "alert me when this happens" prompts.' It also clarifies delivery-channel choices (webhook, Discord, in-app) but does not explicitly mention alternatives or when not to use this tool, so it falls just short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_subscribe_signalAInspect
Register a webhook that fires when a signal turns true (booleans) or its value crosses a condition (numerics). Optional ticker restricts to one symbol; omit to watch the whole universe. Pass target_url for an https POST, or channel:"discord" + discord_url to post to Discord; omit for in-app.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Human-readable label. | |
| signal | Yes | Column name (e.g. golden_cross_today, rsi_14). | |
| ticker | No | Optional ticker to restrict the watch to one symbol. | |
| cadence | No | Evaluation cadence. Default realtime; hourly/nyse_open throttle. (`1m` accepted as a deprecated alias of realtime.) | |
| channel | No | Delivery channel: `webhook` (POST to target_url), `discord` (embed to discord_url), `mobile_push` (to a registered device), or `in_app` (dashboard only). Inferred from the URL you pass if omitted. | |
| universe | No | Optional universe slug. | |
| condition | No | Required for numerics: single bound like ">70" or "<=200". Ignored for booleans. | |
| device_id | No | Registered device id from the mobile app. Required when channel is "mobile_push". | |
| target_url | No | Optional https URL for the `webhook` channel; omit for in-app. | |
| discord_url | No | Discord incoming-webhook URL (https://discord.com/api/webhooks/…). Required when channel is "discord". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It explains exactly when the webhook fires (on true transition for booleans, on condition crossing for numerics) and how delivery routing works (webhook POST, Discord, in-app). It does not mention cadence throttling or lifecycle management, but the core behavior is transparent enough for safe use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core trigger behavior, then concise usage guidance. Every clause adds useful information with no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 10 parameters no output schema, the description covers the decision-critical aspects: trigger conditions, scope control, and channel routing combinations. The schema handles per-field details and enum values. Missing some context about subscription lifecycle and cadence effects, but the description is sufficient for a competent agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with descriptions, so baseline is 3. The description adds valuable cross-parameter meaning: it explains that ticker is optional and omitting it watches the whole universe, that target_url maps to webhook, and that discord_url pairs with channel:'discord'. This goes beyond the schema's per-field text and clarifies the relationship between channel and delivery fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Register a webhook') and clearly states the resource (signal subscriptions) and the trigger semantics (booleans turning true, numerics crossing a condition). It differentiates from sibling tools like subscribe_ticker, subscribe_scan, and create_webhook by focusing on signal-based conditional notifications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage direction: how to scope with optional ticker, how to choose delivery (target_url for webhook, discord_url for Discord, omit for in-app). It does not explicitly name alternative tools or say when not to use this tool, but the stated options and constraints provide sufficient guidance for selecting and invoking correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_subscribe_tickerAInspect
Register a webhook that fires when one ticker matches a condition. condition is a SQL WHERE-clause fragment scoped to that ticker (e.g. "rsi_14 > 70 AND relative_volume > 2"). Pass target_url for an https POST, or channel:"discord" + discord_url to post to Discord; omit for in-app.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Human-readable label. | |
| ticker | Yes | Symbol. | |
| cadence | No | Evaluation cadence. Default realtime; hourly/nyse_open throttle. (`1m` accepted as a deprecated alias of realtime.) | |
| channel | No | Delivery channel: `webhook` (POST to target_url), `discord` (embed to discord_url), `mobile_push` (to a registered device), or `in_app` (dashboard only). Inferred from the URL you pass if omitted. | |
| condition | Yes | SQL WHERE fragment evaluated for this ticker. | |
| device_id | No | Registered device id from the mobile app. Required when channel is "mobile_push". | |
| target_url | No | Optional https URL for the `webhook` channel; omit for in-app. | |
| discord_url | No | Discord incoming-webhook URL (https://discord.com/api/webhooks/…). Required when channel is "discord". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the core behavior: the webhook fires when the condition matches, and it explains how POST/Discord/in-app delivery works. It does not cover webhook lifecycle (e.g., persistence, cancellation, failure handling) or mention cadence, but the schema covers cadence. The description adds useful context on channel selection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: purpose first, then usage details. It is front-loaded, uses concrete examples, and avoids unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter subscription tool with no output schema and no annotations, the description covers the core use case well: condition, channel selection, and delivery destination. It omits some details (mobile_push, device_id, cadence) but those are all described in the schema. The description provides enough context for an agent to select and call the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing baseline 3. The description adds value beyond schema by giving a concrete SQL condition example and explaining how to configure delivery channel (target_url for HTTPS POST, discord_url for Discord, omit for in-app). It does not cover all parameters, but the schema descriptions are sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'Register a webhook that fires when one ticker matches a condition.' It clearly scopes to a single ticker and a condition-based trigger, differentiating it from sibling subscription tools like subscribe_signal or subscribe_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use the tool: for ticker-specific condition alerts. It explains the condition syntax, delivery channel options, and how to choose between webhook, Discord, or in-app. It does not explicitly name alternative tools or exclusions, but the scoping language ('one ticker', 'scoped to that ticker') implies it's for per-ticker conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_test_webhookAInspect
Send a real-shape webhook.fired POST to the webhook's target_url synchronously, right now. The body is byte-identical to a real fire (same signing); the test marker rides in an X-Tickerbot-Test: true header. Returns the inline outcome (delivered, http_status, elapsed_ms, error). One-shot — a failed test never retries and never auto-disables the webhook. Fails with 400 if the webhook has no target_url (in-app deliveries have nothing to fire over the wire).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and exceeds expectations. It discloses synchronous execution, byte-identical body/signing, X-Tickerbot-Test header, return fields, one-shot behavior (no retries, no auto-disable), and a 400 error for missing target_url.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet information-dense. Every sentence contributes unique value: core action, body/signing details, return fields, one-shot semantics, and error condition. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex (test webhook) but the description covers all essential aspects: request behavior, response format, error conditions, and side effects. With no output schema, it explicitly lists return fields. Complete and self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'id' is fully described in the schema (100% coverage). The description does not add parameter-specific syntax or format details, but baselines at 3 since the schema already handles it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Send a real-shape `webhook.fired` POST to the webhook's target_url synchronously, right now.' This specifies a unique verb+resource+scope, distinguishing it from sibling webhook management tools like create, patch, list, or delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool (to test a webhook) and describes behavior like one-shot, no retries, and failure conditions. It does not explicitly contrast with alternatives, but the purpose is self-evident among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_update_custom_signalAInspect
Edit one of the caller's custom signals — supply expr, description, new_name, or any combination. Providing expr recompiles it against the live column whitelist. Renaming is refused (409) while other custom signals reference the current name. Built-in signals are read-only; only custom signals the caller owns can be patched. Available on every plan.
| Name | Required | Description | Default |
|---|---|---|---|
| expr | No | New SQL WHERE expression. Re-validated on save. | |
| name | Yes | CURRENT slug — identifies which signal to edit. | |
| new_name | No | Rename the signal to this slug (snake_case, must not collide with a built-in column or another of your signals). | |
| description | No | New description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses recompilation against the live column whitelist when expr is supplied, the 409 conflict behavior for renaming, read-only status of built-in signals, and ownership restrictions. This is rich, non-obvious behavioral information that goes far beyond a basic 'update signal' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, all dense with relevant information. It front-loads the core purpose and then adds critical constraints in a structured order. There is no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an update tool with no output schema and no annotations, the description covers the key behavioral aspects: valid targets, ownership, conflict conditions, and plan availability. It doesn't describe the success response or any pagination/return format, but those are less critical for a patch operation. The combination of schema and description leaves few unanswered questions for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described, so the baseline is 3. The description adds value by stating that expr, description, and new_name can be supplied 'in any combination,' clarifying optionality beyond the single required 'name' parameter. It also explains the recompilation consequence of providing expr, which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Edit one of the caller's custom signals.' It further specifies the editable fields (expr, description, new_name) and distinguishes from create/delete operations. Sibling tools include create_custom_signal and delete_custom_signal, making this unambiguously the update operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides essential usage context: only custom signals owned by the caller can be patched, and built-in signals are read-only. It also flags a specific conflict scenario (renaming refused with 409 if referenced by other signals). While it doesn't explicitly name alternatives like 'use create_custom_signal for new signals,' the positioning among siblings and the ownership constraints give clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tickerbot_update_universeAInspect
Update one of the caller's universes. Pass name/description to relabel, tickers to replace the whole list, or add/remove to adjust subsets without replacing. System universes (top_10/top_100) cannot be edited.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Universe slug. | |
| add | No | Add these tickers (deduplicated). | |
| name | No | New label. | |
| remove | No | Remove these tickers. | |
| tickers | No | Replace the full ticker list. | |
| description | No | New notes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It reveals that add/remove adjust subsets without replacing the whole list, that tickers replaces entirely, and that system universes cannot be edited. It does not mention return values or failure modes, but covers the most critical behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, and every clause adds value. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and no annotations, the description covers all parameter modes and the key restriction on system universes. It doesn't describe the response or partial-update semantics, but the scope is well covered for an update operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents parameters. The description adds meaning by explaining how parameters relate: name/description relabel, tickers replace the whole list, add/remove adjust subsets. This provides operational insight beyond individual field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Update') and resource ('one of the caller's universes'), and distinguishes it from sibling tools by noting system universes cannot be edited. This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the different update modes (relabel via name/description, replace via tickers, adjust via add/remove) and explicitly states system universes are off-limits. While it doesn't name create_universe as an alternative, the 'Update' wording implies existing universes, providing clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
35 tool updates
v0.2.0- First observed
tickerbot_create_custom_signal - First observed
tickerbot_create_universe - First observed
tickerbot_create_webhook - First observed
tickerbot_delete_custom_signal - First observed
tickerbot_delete_universe - First observed
tickerbot_delete_webhook - First observed
tickerbot_enable_webhook - First observed
tickerbot_get_series - First observed
tickerbot_get_signals_match - First observed
tickerbot_get_ticker - First observed
tickerbot_get_ticker_bars - First observed
tickerbot_get_ticker_coverage - First observed
tickerbot_get_ticker_history - First observed
tickerbot_get_ticker_holdings - First observed
tickerbot_get_ticker_sectors - First observed
tickerbot_get_universe - First observed
tickerbot_get_webhook - First observed
tickerbot_list_events - First observed
tickerbot_list_signal_events - First observed
tickerbot_list_signals_catalog - First observed
tickerbot_list_system_universes - First observed
tickerbot_list_tickers - First observed
tickerbot_list_universes - First observed
tickerbot_list_webhook_deliveries - First observed
tickerbot_list_webhooks - First observed
tickerbot_patch_webhook - First observed
tickerbot_scan - First observed
tickerbot_search_news - First observed
tickerbot_subscribe_events - First observed
tickerbot_subscribe_scan - First observed
tickerbot_subscribe_signal - First observed
tickerbot_subscribe_ticker - First observed
tickerbot_test_webhook - First observed
tickerbot_update_custom_signal - First observed
tickerbot_update_universe
TDQS
Most tools have distinct purposes, but a few pairs could be confused: get_ticker_history vs get_series (snapshot vs series), and list_universes vs list_system_universes (the latter is a subset of the former). Also, subscribe_* tools overlap with create_webhook, though descriptions clarify the differences.
All tools share the tickerbot_ prefix and largely follow a verb_noun pattern. However, 'scan' is a bare verb without an object, 'patch_webhook' uses 'patch' while other updates use 'update_', and 'list_system_universes' duplicates functionality already in 'list_universes'.
35 tools is well over the 25+ threshold. The server's broad scope justifies many tools, but the count feels excessive, especially with redundant webhook creation routes and overlapping universe listing tools. Some consolidation is needed.
The tool set thoroughly covers the domain: data retrieval (tickers, bars, history, series, ETF data), scanning, signals, events, news, webhooks (full lifecycle), universes (full CRUD), and custom signals (full CRUD). No obvious gaps or dead ends exist for the described functionality.
Maintenance
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
Real-time market data, screeners, technical analysis & backtesting for stocks, crypto and forex.
Live market data, financial analysis, and portfolio research tools across 10,000+ tickers.
Crypto market signals and portfolio telemetry. 6 tools pay-per-call in USDC, no API key.
Live market data & technical analysis for US stocks, ETFs and crypto. Read-only, no signup.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables quantitative trading analysis with 12 tools for real-time market data, 28+ technical indicators, FinBERT-powered news sentiment analysis, and automated trading signal generation for stocks and forex.1-
- AlicenseNot gradedqualityCmaintenanceEnables access to real-time and historical market data including stocks, ETFs, forex, and cryptocurrencies, with support for time series, quotes, dividends, splits, and earnings.MIT

Rozkoduj MCPofficial
AlicenseAqualityAmaintenanceProvides AI assistants with market screening, analysis, and scoring across stocks, crypto, and forex, enabling natural language queries for trading insights.4MIT- AlicenseAqualityCmaintenanceA modular MCP server providing 64 tools across 13 modules for real-time stock and crypto market data, including scanning, technical analysis, options flow, insider trades, and personalized watchlists.391736MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/tickerbot/tickerbot-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server