Skip to main content
Glama

tickerbot_get_series

Any signals for any tickers on one shared time grid — up to 50 tickers by 25 columns per call. One flat row per ticker per interval step, cursor-paged backward. transitions_only: true with boolean signals returns only the rows where a boolean flipped.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
toNoLatest timestamp (inclusive), `YYYY-MM-DD` or ISO.
asofNoPoint-in-time read: ONE row per ticker — the state at that instant — rather than a range. `YYYY-MM-DD` or a full ISO timestamp, the same meaning `asof` carries on `/v2/tickers`, `/v2/scan` and `/v2/signals`. Cannot be combined with `from`/`to` or `cursor` (400) — a point and a window are contradictory, and `limit` has no meaning under it. It also resolves WHICH COMPANY held the symbol at that instant: a ticker that changed hands returns the row of whoever traded it then, so `tickers=SHLD&asof=2010-06-30` returns Sears Holdings' price and `asof=2026-01-01` returns the Global X defence ETF. Returns the most recent row at or before the instant, so a date inside a trading gap gives the last row before it. At `interval=1q` the anchor is the date the quarter was REPORTED (earnings release / filing), not fiscal period end — you get the latest quarter that was public knowledge at the instant, with restatements after it excluded.
fromNoEarliest timestamp (inclusive), `YYYY-MM-DD` or ISO. Intraday requests default to a recent window (`1m`: 7 days, `1h`: 60 days) — the cursor keeps walking further back window-by-window, or pass `from` to widen it up front.
limitNoGrid steps per page (shared across tickers). Max 1000 — an over-cap `limit` is clamped to 1000 (house convention, `limit=10000` means "max"). Separately, tickers × limit may not exceed 25,000 rows per page — over THAT cap is an explicit 400.
cursorNoOpaque cursor from the previous response — every ticker pages backward in lockstep on the shared grid, no per-ticker gaps or duplicates.
tickerNoSingle-symbol form — `/v2/series?ticker=AAPL` is ticker history in its canonical spelling. Exactly one of `ticker` or `tickers` is required.
columnsNoUp to 25 columns (POST accepts an array): OHLCV names, signals, and your custom signals, freely mixed. Omitted → the ticker-history default set (price, change_1d_pct, relative_volume, market_cap), intersected with what the interval carries. At `1q`, `columns` is required and quarterly-only. `fields` accepted as an alias.
tickersNoComma-separated symbols, up to 50 (POST accepts a JSON array). Exactly one of `tickers` or `ticker` is required; when both are passed, `ticker` wins — so sending both silently narrows the request to one symbol.
intervalNoGrid granularity. `1w` resamples the daily tier weekly (Monday-keyed); `1q` is the fiscal-quarter grid.1d
transitions_onlyNoOnly rows where a boolean signal changed state. Accepted spellings: `true`/`1`/`yes` and `false`/`0`/`no` (case-insensitive) — anything else is a 400, never silently off. Requires at least one boolean signal (built-in boolean or custom signal); each returned row carries `transitions: {column: "enter"|"exit"}`, and `_meta` lists the driving columns. Strict truth: only literal `true` is "on", so `null → true` is an enter and `true → null` an exit (a backfill boundary reads as an edge). Edges need a prior observation — on the oldest page of a walk the first row has no predecessor and yields no edge. A flip is dated by the state table and does not move with the column list: one recorded on a non-trading carry row keeps that date, with any bar columns `null` on that row (no bar exists there).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
_metaYesPer-column `sources` (`bars`, `state`, or `custom` for your own signals; `earnings`/`statements` at 1q) and per-ticker `coverage`, plus `non_trading_days_dropped` / `transitions_only` / `from_defaulted` when they apply.
as_ofYesServer time this response was assembled (ISO 8601).
countYesRows per ticker in this page.
seriesYesKeyed by ticker: an array of flat rows, chronological, each keyed `t` plus the columns you asked for.
columnsYesColumns in the response, echoed.
tickersYesSymbols in the response, echoed.
intervalYesThe grid granularity served.
next_cursorYesOpaque token for the next page; `null` on the last page. Pass it back as `cursor`.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "_meta": {
      +      "description": "Per-column `sources` (`bars`, `state`, or `custom` for your own signals; `earnings`/`statements` at 1q) and per-ticker `coverage`, plus `non_trading_days_dropped` / `transitions_only` / `from_defaulted` when they apply.",
      +      "type": "object"
      +    },
      +    "as_of": {
      +      "description": "Server time this response was assembled (ISO 8601).",
      +      "type": "string"
      +    },
      +    "columns": {
      +      "description": "Columns in the response, echoed.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "count": {
      +      "description": "Rows per ticker in this page.",
      +      "type": "number"
      +    },
      +    "interval": {
      +      "description": "The grid granularity served.",
      +      "type": "string"
      +    },
      +    "next_cursor": {
      +      "description": "Opaque token for the next page; `null` on the last page. Pass it back as `cursor`.",
      +      "type": "string"
      +    },
      +    "series": {
      +      "description": "Keyed by ticker: an array of flat rows, chronological, each keyed `t` plus the columns you asked for.",
      +      "type": "object"
      +    },
      +    "tickers": {
      +      "description": "Symbols in the response, echoed.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "as_of",
      +    "interval",
      +    "tickers",
      +    "columns",
      +    "count",
      +    "next_cursor",
      +    "_meta",
      +    "series"
      +  ],
      +  "type": "object"
      +}
  2. Changed13 schema fields changed
    • addedInput schema / properties / asof
      Added value: +{
      +  "description": "Point-in-time read: ONE row per ticker — the state at that instant — rather than a range. `YYYY-MM-DD` or a full ISO timestamp, the same meaning `asof` carries on `/v2/tickers`, `/v2/scan` and `/v2/signals`. Cannot be combined with `from`/`to` or `cursor` (400) — a point and a window are contradictory, and `limit` has no meaning under it. It also resolves WHICH COMPANY held the symbol at that instant: a ticker that changed hands returns the row of whoever traded it then, so `tickers=SHLD&asof=2010-06-30` returns Sears Holdings' price and `asof=2026-01-01` returns the Global X defence ETF. Returns the most recent row at or before the instant, so a date inside a trading gap gives the last row before it. At `interval=1q` the anchor is the date the quarter was REPORTED (earnings release / filing), not fiscal period end — you get the latest quarter that was public knowledge at the instant, with restatements after it excluded.",
      +  "type": "string"
      +}
    • changedInput schema / properties / columns / description
      Previous value: -"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)."New value: +"Up to 25 columns (POST accepts an array): OHLCV names, signals, and your custom signals, freely mixed. Omitted → the ticker-history default set (price, change_1d_pct, relative_volume, market_cap), intersected with what the interval carries. At `1q`, `columns` is required and quarterly-only. `fields` accepted as an alias."
    • changedInput schema / properties / cursor / description
      Previous value: -"Opaque cursor from a prior response — pages older."New value: +"Opaque cursor from the previous response — every ticker pages backward in lockstep on the shared grid, no per-ticker gaps or duplicates."
    • changedInput schema / properties / from / description
      Previous value: -"Earliest timestamp (inclusive), YYYY-MM-DD or ISO."New value: +"Earliest timestamp (inclusive), `YYYY-MM-DD` or ISO. Intraday requests default to a recent window (`1m`: 7 days, `1h`: 60 days) — the cursor keeps walking further back window-by-window, or pass `from` to widen it up front."
    • addedInput schema / properties / interval / default
      Added value: +"1d"
    • changedInput schema / properties / interval / description
      Previous value: -"Grid granularity. `1w` weekly, `1q` fiscal-quarterly (fundamentals)."New value: +"Grid granularity. `1w` resamples the daily tier weekly (Monday-keyed); `1q` is the fiscal-quarter grid."
    • addedInput schema / properties / limit / default
      Added value: +252
    • changedInput schema / properties / limit / description
      Previous value: -"Rows per page. Max 1000. Default 252."New value: +"Grid steps per page (shared across tickers). Max 1000 — an over-cap `limit` is clamped to 1000 (house convention, `limit=10000` means \"max\"). Separately, tickers × limit may not exceed 25,000 rows per page — over THAT cap is an explicit 400."
    • changedInput schema / properties / ticker / description
      Previous value: -"Single symbol (alias of `tickers`, wins when both are set). One of ticker/tickers is required."New value: +"Single-symbol form — `/v2/series?ticker=AAPL` is ticker history in its canonical spelling. Exactly one of `ticker` or `tickers` is required."
    • changedInput schema / properties / tickers / description
      Previous value: -"Comma-separated symbols, max 50, all sharing one time grid. One of ticker/tickers is required."New value: +"Comma-separated symbols, up to 50 (POST accepts a JSON array). Exactly one of `tickers` or `ticker` is required; when both are passed, `ticker` wins — so sending both silently narrows the request to one symbol."
    • changedInput schema / properties / to / description
      Previous value: -"Latest timestamp (inclusive; a bare date means through that day)."New value: +"Latest timestamp (inclusive), `YYYY-MM-DD` or ISO."
    • changedInput schema / properties / transitions_only / description
      Previous value: -"Only rows where a boolean signal changed value (requires at least one boolean signal). Each row carries `transition_drivers` naming the booleans that flipped."New value: +"Only rows where a boolean signal changed state. Accepted spellings: `true`/`1`/`yes` and `false`/`0`/`no` (case-insensitive) — anything else is a 400, never silently off. Requires at least one boolean signal (built-in boolean or custom signal); each returned row carries `transitions: {column: \"enter\"|\"exit\"}`, and `_meta` lists the driving columns. Strict truth: only literal `true` is \"on\", so `null → true` is an enter and `true → null` an exit (a backfill boundary reads as an edge). Edges need a prior observation — on the oldest page of a walk the first row has no predecessor and yields no edge. A flip is dated by the state table and does not move with the column list: one recorded on a non-trading carry row keeps that date, with any bar columns `null` on that row (no bar exists there)."
    • removedInput schema / required
      Removed value: -[]
  3. Changed1 schema field changed
    • changedInput schema / properties / transitions_only / description
      Previous value: -"Only rows where a boolean column changed value (requires at least one boolean column). Each row carries `transition_drivers` naming the flags that flipped."New value: +"Only rows where a boolean signal changed value (requires at least one boolean signal). Each row carries `transition_drivers` naming the booleans that flipped."
  4. Added

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It discloses cursor-paged backward behavior and transitions_only semantics, which are useful. However, it does not explicitly state read-only nature, error handling, rate limits, or other behavioral traits beyond the core retrieval and paging. It covers key behaviors but leaves some gaps.

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

Conciseness5/5

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

The description is three concise sentences, front-loading the core capability and then adding the paging and transitions nuance. Every sentence contributes value without redundancy, and it is well-structured for quick comprehension.

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

Completeness4/5

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

The description gives a strong executive summary of the tool's purpose and key behaviors, while the extensive schema descriptions cover all 10 parameters. The output schema exists to define returns. Some nuances like asof semantics are left to the schema, but the description is complete enough as an overview for a complex tool.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter is fully documented in the schema. The description itself adds no parameter-level detail beyond what the schema provides, so the baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific resource (signals for tickers) and a distinctive capability: retrieving any signals for any tickers on a shared time grid, with paging and transitions. This clearly differentiates it from siblings like get_bars (likely single-ticker) by emphasizing multi-ticker alignment and cross-sectional behavior.

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

Usage Guidelines3/5

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

The description implies a multi-ticker signal use case but does not explicitly contrast with alternatives or state when to use this tool versus others. It does not mention 'for single-ticker history, use get_bars' or any exclusion criteria, leaving the when-to-use inference to the agent.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.