Skip to main content
Glama

Time Series

time_series
Read-onlyIdempotent

Twelve Data OHLC time series for a stock, forex, crypto, or ETF symbol. Requires symbol and interval (e.g. '1min', '1h', '1day'). Returns timestamped open/high/low/close + volume.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
orderNoSort order: "asc" or "desc" (default desc, newest first).
symbolYesTicker/symbol. Stocks e.g. "AAPL", "MSFT"; forex "EUR/USD"; crypto "BTC/USD"; ETFs "SPY". Comma-separate for a batch (e.g. "AAPL,MSFT"). Market indices (SPX, N225, …) need a Grow-or-higher Twelve Data key passed via _apiKey — the shared key cannot quote them.
end_dateNoOptional end of range, "YYYY-MM-DD" or "YYYY-MM-DD HH:MM:SS".
exchangeNoOptional exchange filter (e.g. "NASDAQ", "NYSE", "Binance").
intervalYesBar interval: 1min, 5min, 15min, 30min, 45min, 1h, 2h, 4h, 1day, 1week, or 1month.
timezoneNoOptional timezone, e.g. "America/New_York" or "UTC".
outputsizeNoNumber of data points to return (1–5000, default 30).
start_dateNoOptional start of range, "YYYY-MM-DD" or "YYYY-MM-DD HH:MM:SS".

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
codeNoResponse code
statusNoResponse status
messageNoResponse message

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / symbol / description
      Previous value: -"Ticker/symbol. Stocks e.g. \"AAPL\", \"MSFT\"; forex \"EUR/USD\"; crypto \"BTC/USD\"; ETFs \"SPY\"; indices \"IXIC\". Comma-separate for a batch (e.g. \"AAPL,MSFT\")."New value: +"Ticker/symbol. Stocks e.g. \"AAPL\", \"MSFT\"; forex \"EUR/USD\"; crypto \"BTC/USD\"; ETFs \"SPY\". Comma-separate for a batch (e.g. \"AAPL,MSFT\"). Market indices (SPX, N225, …) need a Grow-or-higher Twelve Data key passed via _apiKey — the shared key cannot quote them."
  2. Changed1 schema field changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "interval": "1h",
      -    "symbol": "AAPL"
      -  },
      -  {
      -    "interval": "1d",
      -    "symbol": "EURUSD"
      -  }
      -]New value: +[
      +  {
      +    "interval": "1h",
      +    "symbol": "AAPL"
      +  },
      +  {
      +    "interval": "1d",
      +    "symbol": "EURUSD"
      +  },
      +  {
      +    "interval": "1day",
      +    "outputsize": 20,
      +    "symbol": "SPY"
      +  }
      +]
  3. Changed8 schema fields changed
    • addedInput schema / properties / end_date
      Added value: +{
      +  "description": "Optional end of range, \"YYYY-MM-DD\" or \"YYYY-MM-DD HH:MM:SS\".",
      +  "type": "string"
      +}
    • addedInput schema / properties / exchange
      Added value: +{
      +  "description": "Optional exchange filter (e.g. \"NASDAQ\", \"NYSE\", \"Binance\").",
      +  "type": "string"
      +}
    • addedInput schema / properties / interval
      Added value: +{
      +  "description": "Bar interval: 1min, 5min, 15min, 30min, 45min, 1h, 2h, 4h, 1day, 1week, or 1month.",
      +  "type": "string"
      +}
    • addedInput schema / properties / order
      Added value: +{
      +  "description": "Sort order: \"asc\" or \"desc\" (default desc, newest first).",
      +  "type": "string"
      +}
    • addedInput schema / properties / outputsize
      Added value: +{
      +  "description": "Number of data points to return (1–5000, default 30).",
      +  "type": "number"
      +}
    • addedInput schema / properties / start_date
      Added value: +{
      +  "description": "Optional start of range, \"YYYY-MM-DD\" or \"YYYY-MM-DD HH:MM:SS\".",
      +  "type": "string"
      +}
    • addedInput schema / properties / symbol
      Added value: +{
      +  "description": "Ticker/symbol. Stocks e.g. \"AAPL\", \"MSFT\"; forex \"EUR/USD\"; crypto \"BTC/USD\"; ETFs \"SPY\"; indices \"IXIC\". Comma-separate for a batch (e.g. \"AAPL,MSFT\").",
      +  "type": "string"
      +}
    • addedInput schema / properties / timezone
      Added value: +{
      +  "description": "Optional timezone, e.g. \"America/New_York\" or \"UTC\".",
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • removedInput schema / additionalProperties
      Removed value: -true
  5. Changed2 schema fields changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "interval": "1h",
      +    "symbol": "AAPL"
      +  },
      +  {
      +    "interval": "1d",
      +    "symbol": "EURUSD"
      +  }
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "code": {
      +      "description": "Response code",
      +      "type": "number"
      +    },
      +    "message": {
      +      "description": "Response message",
      +      "type": "string"
      +    },
      +    "status": {
      +      "description": "Response status",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  6. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context: batch support via comma-separated symbols, the market-index limitation requiring a Grow-or-higher key, and the default output size of 30. These go beyond the schema and annotations.

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

Conciseness4/5

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

The description is two sentences, front-loaded with the core purpose and required parameters, then the return payload. It is efficient and readable. It loses one point because the symbol parameter's rich caveats (batch, index key) live only in the schema, not in the description, so the description alone is slightly less complete than it could be.

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

Completeness4/5

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

For a read-only data-retrieval tool with an output schema, annotations, and 100% schema coverage, the description is largely complete. It covers asset classes, required params, and return shape. The only notable omission is that it doesn't mention the batch/index-key caveat in the description itself, though the schema covers it. Given the tool's complexity (8 params, multiple asset types), a 4 is fair.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 8 parameters thoroughly. The description adds the batch-symbol behavior and the index-key caveat, which are valuable, but most parameter meaning is already in the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Returns'), a clear resource (OHLC time series), and the asset classes covered (stock, forex, crypto, ETF). It also names the two required parameters (symbol, interval) and the return payload (timestamped OHLC + volume), which distinguishes it from siblings like quote, price, and technical_indicator.

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

Usage Guidelines4/5

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

The description implies when to use it: whenever OHLC history for a symbol is needed, and the schema examples show typical usage. It does not explicitly name alternatives or exclusions (e.g., 'use quote for current price'), but the asset-class coverage and interval/date-range parameters make the context clear. A small gap: no explicit statement about 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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.