Skip to main content
Glama

Invokely official statistics

Get a time series

get_series
Read-onlyIdempotent

Get the time series of an indicator for one place, oldest to newest, from one source so the points are comparable. Use it for trends: "evolution of the CPI by month", "population of Mataró since 2015". Example: {"indicator": "cpi_annual_change", "place": "España", "from": "2023-01"}. Returns {indicator, place, frequency, points: [[period, value], ...], total_points, truncated?, flags?: {period: status}, gaps?, gap_notes?, source, other_frequencies?, longer_history?, note?, projections_available?}. gaps lists periods the source did not publish; gap_notes gives the publisher's reason when known. Projections (for example population to 2050) are never mixed into points. Pass include_projections: true to get them in a separate projections block {label, vintage, points, source}; always say a projected figure is a projection. Every plan gets the full history. One call returns up to 5,000 points: the latest ones, or the first ones from "from" when you pass it. truncated says when the series was cut; pass from and to to page through it. transform works as in get_value, on every point: {"indicator": "registered_unemployment", "place": "España", "from": "2023-01", "transform": "yoy"}, {"indicator": "unemployment_rate", "place": "Texas", "transform": "rolling_mean", "window": 3}. points hold the results; point_inputs[period] lists the [role, period, value] inputs of each point; transform.inputs names the series behind each role with its source; transform.gaps lists the periods that could not be computed and why. Not combinable with include_projections. With as_of the points are the series as Invokely held it then, plus vintages {period: {version, known_since}}, revised_later {period: current value} for points changed since, vintage_coverage_starts and not_on_record (periods whose value then was not kept). Projections are never returned with as_of.

Input Schema

NameRequiredDescriptionDefault
toNoOptional last period, inclusive.
baseNoindex: the period equal to 100, for example "2015" or "2020-01" (a year of a monthly series is the average of its months). real: the year whose prices values are expressed in, for example "2024".
fromNoOptional first period, inclusive. Same formats as period.
as_ofNoOptional point in time, UTC: a date ("2026-10-03", meaning the end of that day) or a date and time with a zone ("2026-10-03T14:30:00Z"). Returns the figures as Invokely held them at that instant, for backtests, audits and reproducible runs. Must not be in the future.
placeYesPlace name or id. Examples: "Mataró", "Barcelona", "provincia de Barcelona", "Cataluña", "España", "Germany", "EU", "es-mun-08121", "08121" (INE code), "ES51" (NUTS), "Texas", "Travis County, Texas", "us-county-48453", "fips:48453" (US county FIPS), "Austin, TX", "us-place-4805000", "fips:4805000" (US city GEOID).
windowNorolling_mean only: number of periods averaged, 2 to 12. Default 3.
countryNoOptional ISO 3166-1 alpha-2 code to disambiguate the place, for example "ES" or "US".
frequencyNoOptional. Force a frequency when the indicator exists in several (for example monthly and annual unemployment).
indicatorYesIndicator id from search_indicators, for example "population", "registered_unemployment_rate", "unemployment_rate", "cpi_annual_change", "net_income_per_person".
transformNoOptional calculation done by the server, with every input cited. pct_change: % change from the previous period. yoy: % change from the same period a year earlier (12 months, 4 quarters or 1 year back). diff, yoy_diff: the same changes as differences, in the indicator unit (percentage points for rates). index: value / value in base x 100 (needs base). rolling_mean: average of the last window periods. per_capita, per_1000, per_100k: a total (population, births, GDP, emissions) divided by the population of the same place and year. real: a money amount at current prices adjusted for inflation with the consumer price index of the place's country in the same currency (base: price year, default the latest complete year). share_of_parent: a total as % of the parent place (county of its state, state of the nation, region of its country). Per person and share transforms refuse rates, shares, indices, medians and per person values, and share_of_parent also refuses net balances such as net migration; pct_change, yoy and index refuse percentages.
citation_styleNoOptional. Adds source.citations with the citation in this style (APA 7, MLA 9, Chicago author-date, Harvard, BibTeX or RIS), or in all six with "all". The publisher is the author. Leave it out to keep the response short.
include_projectionsNoAlso return the publisher projections after the last observed period, kept apart from points. Default false.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • addedInput schema / properties / as_of
      Added value: +{
      +  "description": "Optional point in time, UTC: a date (\"2026-10-03\", meaning the end of that day) or a date and time with a zone (\"2026-10-03T14:30:00Z\"). Returns the figures as Invokely held them at that instant, for backtests, audits and reproducible runs. Must not be in the future.",
      +  "maxLength": 32,
      +  "type": "string"
      +}
    • addedInput schema / properties / base
      Added value: +{
      +  "description": "index: the period equal to 100, for example \"2015\" or \"2020-01\" (a year of a monthly series is the average of its months). real: the year whose prices values are expressed in, for example \"2024\".",
      +  "maxLength": 10,
      +  "type": "string"
      +}
    • addedInput schema / properties / citation_style
      Added value: +{
      +  "description": "Optional. Adds source.citations with the citation in this style (APA 7, MLA 9, Chicago author-date, Harvard, BibTeX or RIS), or in all six with \"all\". The publisher is the author. Leave it out to keep the response short.",
      +  "enum": [
      +    "apa",
      +    "mla",
      +    "chicago",
      +    "harvard",
      +    "bibtex",
      +    "ris",
      +    "all"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / transform
      Added value: +{
      +  "description": "Optional calculation done by the server, with every input cited. pct_change: % change from the previous period. yoy: % change from the same period a year earlier (12 months, 4 quarters or 1 year back). diff, yoy_diff: the same changes as differences, in the indicator unit (percentage points for rates). index: value / value in base x 100 (needs base). rolling_mean: average of the last window periods. per_capita, per_1000, per_100k: a total (population, births, GDP, emissions) divided by the population of the same place and year. real: a money amount at current prices adjusted for inflation with the consumer price index of the place's country in the same currency (base: price year, default the latest complete year). share_of_parent: a total as % of the parent place (county of its state, state of the nation, region of its country). Per person and share transforms refuse rates, shares, indices, medians and per person values, and share_of_parent also refuses net balances such as net migration; pct_change, yoy and index refuse percentages.",
      +  "enum": [
      +    "pct_change",
      +    "yoy",
      +    "diff",
      +    "yoy_diff",
      +    "index",
      +    "rolling_mean",
      +    "per_capita",
      +    "per_1000",
      +    "per_100k",
      +    "real",
      +    "share_of_parent"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / window
      Added value: +{
      +  "description": "rolling_mean only: number of periods averaged, 2 to 12. Default 3.",
      +  "maximum": 12,
      +  "minimum": 2,
      +  "type": "integer"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / place / description
      Previous value: -"Place name or id. Examples: \"Mataró\", \"Barcelona\", \"provincia de Barcelona\", \"Cataluña\", \"España\", \"Germany\", \"EU\", \"es-mun-08121\", \"08121\" (INE code), \"ES51\" (NUTS), \"Texas\", \"Travis County, Texas\", \"us-county-48453\", \"fips:48453\" (US county FIPS)."New value: +"Place name or id. Examples: \"Mataró\", \"Barcelona\", \"provincia de Barcelona\", \"Cataluña\", \"España\", \"Germany\", \"EU\", \"es-mun-08121\", \"08121\" (INE code), \"ES51\" (NUTS), \"Texas\", \"Travis County, Texas\", \"us-county-48453\", \"fips:48453\" (US county FIPS), \"Austin, TX\", \"us-place-4805000\", \"fips:4805000\" (US city GEOID)."
  3. First observed

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only declare a safe read, but the description discloses far more: a 5,000-point cap with truncation semantics, paging via from/to, how gaps and gap_notes are reported, that projections are kept out of points unless include_projections is passed, and the full as_of vintage model (vintages, revised_later, vintage_coverage_starts, not_on_record). This is exactly the kind of behavior an agent cannot infer from readOnly/idempotent hints.

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

Conciseness4/5

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

Purpose is front-loaded and nearly every sentence carries distinct information (limits, gaps, projections, transform, as_of). It is long, but for a 12-parameter tool with no output schema the return-shape enumeration and feature notes are load-bearing rather than padding.

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

Completeness5/5

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

Given a complex tool with 12 parameters and no output schema, the description covers the return envelope (indicator, place, frequency, points, total_points, truncated, gaps, source, other_frequencies, projections) plus the paging, projection and as_of behaviors an agent must know to call it correctly. Nothing material is left to guesswork.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3 and the schema already documents each parameter. The description goes beyond per-parameter docs by explaining cross-parameter interaction ('transform works as in get_value, on every point', window usage, transform.inputs/gaps, transform not combinable with include_projections, no projections under as_of) and giving concrete example payloads.

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

Purpose4/5

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

The opening sentence states a precise verb+resource+scope: 'Get the time series of an indicator for one place, oldest to newest, from one source so the points are comparable.' The 'one place, one source, oldest to newest' framing lets an agent distinguish this from a single-value lookup, though it never names the sibling get_value explicitly, so it stops just short of full sibling differentiation.

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

Usage Guidelines4/5

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

It gives concrete trigger contexts ('Use it for trends: evolution of the CPI by month, population of Mataró since 2015') and states combination rules ('Not combinable with include_projections', projections never returned with as_of, pass from/to to page). It does not spell out when to prefer get_value or compare instead, so alternatives remain implicit.

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.

Resources