Skip to main content
Glama

Query Table

query_table
Read-onlyIdempotent

Get an actual figure out of a Statistics Finland (StatFin) table of Finnish official statistics — how many Finns hold a tertiary qualification, the current consumer price index, births and deaths, employment, and the rest of the Tilastokeskus catalogue. path is "folder/table.px" using the bare 4-character table id (e.g. "vkour/15ig.px", "khi/11xs.px"); the longer "statfin_pxt.px" form found in older StatFin docs was retired upstream and is rewritten to the current form for you. Answers in ONE call: pass select with plain-English labels from the question — {"Information": "tertiary level qualification"} against "vkour/15ig.px" returns the 1,672,232 Finns who hold one — and this pack resolves them against the table's own metadata, defaults the year to the latest published and every other breakdown to its total, and reports each of those choices back in selection_resolved alongside a flattened figures list. select keys and values may be either the English label or the native Finnish code ("contentscode", "kaste5T8"). Pass body instead for a raw PxWeb query object when you already know the codes.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bodyNoRaw PxWeb query, for callers who already have the codes: {query: [{code, selection: {filter: "item", values: [...]}}], response: {format: "json-stat2"}}. Takes precedence over select. Codes come from table_meta and are native Finnish.
pathYesfolder/table.px with the bare 4-character table id, e.g. "vkour/15ig.px" or "khi/11xs.px".
selectNoDimension → value, in plain English or native codes, e.g. {"Information": "tertiary level qualification", "Year": "2024"} or {"contentscode": "kaste5T8"}. A value may be an array to take several. Unnamed dimensions default to the latest year and to each dimension's total. Omit entirely to get every measure in the table for the latest year.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed4 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "body": {
      -      "query": [
      -        {
      -          "code": "ikaryhma_10_20180101",
      -          "selection": {
      -            "filter": "item",
      -            "values": [
      -              "15-"
      -            ]
      -          }
      -        },
      -        {
      -          "code": "sukupuoli_9_20180101",
      -          "selection": {
      -            "filter": "item",
      -            "values": [
      -              "SSS"
      -            ]
      -          }
      -        },
      -        {
      -          "code": "syntypera_101_20180101",
      -          "selection": {
      -            "filter": "item",
      -            "values": [
      -              "SSS"
      -            ]
      -          }
      -        },
      -        {
      -          "code": "timeperiod_y",
      -          "selection": {
      -            "filter": "item",
      -            "values": [
      -              "2024"
      -            ]
      -          }
      -        },
      -        {
      -          "code": "contentscode",
      -          "selection": {
      -            "filter": "item",
      -            "values": [
      -              "kaste5T8"
      -            ]
      -          }
      -        }
      -      ],
      -      "response": {
      -        "format": "json-stat2"
      -      }
      -    },
      -    "path": "vkour/15ig.px"
      -  }
      -]New value: +[
      +  {
      +    "path": "vkour/15ig.px",
      +    "select": {
      +      "Information": "tertiary level qualification"
      +    }
      +  },
      +  {
      +    "path": "vkour/15ig.px",
      +    "select": {
      +      "Gender": "Females",
      +      "Year": "2023",
      +      "contentscode": "kaste5T8"
      +    }
      +  },
      +  {
      +    "body": {
      +      "query": [
      +        {
      +          "code": "ikaryhma_10_20180101",
      +          "selection": {
      +            "filter": "item",
      +            "values": [
      +              "15-"
      +            ]
      +          }
      +        },
      +        {
      +          "code": "sukupuoli_9_20180101",
      +          "selection": {
      +            "filter": "item",
      +            "values": [
      +              "SSS"
      +            ]
      +          }
      +        },
      +        {
      +          "code": "syntypera_101_20180101",
      +          "selection": {
      +            "filter": "item",
      +            "values": [
      +              "SSS"
      +            ]
      +          }
      +        },
      +        {
      +          "code": "timeperiod_y",
      +          "selection": {
      +            "filter": "item",
      +            "values": [
      +              "2024"
      +            ]
      +          }
      +        },
      +        {
      +          "code": "contentscode",
      +          "selection": {
      +            "filter": "item",
      +            "values": [
      +              "kaste5T8"
      +            ]
      +          }
      +        }
      +      ],
      +      "response": {
      +        "format": "json-stat2"
      +      }
      +    },
      +    "path": "vkour/15ig.px"
      +  }
      +]
    • changedInput schema / properties / body / description
      Previous value: -"PxWeb query: {query: [{code, selection: {filter: \"item\", values: [...]}}], response: {format: \"json-stat2\"}}. Get code/values from table_meta first — they are native Finnish."New value: +"Raw PxWeb query, for callers who already have the codes: {query: [{code, selection: {filter: \"item\", values: [...]}}], response: {format: \"json-stat2\"}}. Takes precedence over select. Codes come from table_meta and are native Finnish."
    • addedInput schema / properties / select
      Added value: +{
      +  "description": "Dimension → value, in plain English or native codes, e.g. {\"Information\": \"tertiary level qualification\", \"Year\": \"2024\"} or {\"contentscode\": \"kaste5T8\"}. A value may be an array to take several. Unnamed dimensions default to the latest year and to each dimension's total. Omit entirely to get every measure in the table for the latest year.",
      +  "type": "object"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "path",
      -  "body"
      -]New value: +[
      +  "path"
      +]
  2. Changed3 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "body": {
      -      "query": [
      -        {
      -          "code": "Vuosi",
      -          "selection": {
      -            "filter": "item",
      -            "values": [
      -              "2023"
      -            ]
      -          }
      -        }
      -      ],
      -      "response": {
      -        "format": "json-stat2"
      -      }
      -    },
      -    "path": "khi/statfin_khi_pxt_11xs.px"
      -  }
      -]New value: +[
      +  {
      +    "body": {
      +      "query": [
      +        {
      +          "code": "ikaryhma_10_20180101",
      +          "selection": {
      +            "filter": "item",
      +            "values": [
      +              "15-"
      +            ]
      +          }
      +        },
      +        {
      +          "code": "sukupuoli_9_20180101",
      +          "selection": {
      +            "filter": "item",
      +            "values": [
      +              "SSS"
      +            ]
      +          }
      +        },
      +        {
      +          "code": "syntypera_101_20180101",
      +          "selection": {
      +            "filter": "item",
      +            "values": [
      +              "SSS"
      +            ]
      +          }
      +        },
      +        {
      +          "code": "timeperiod_y",
      +          "selection": {
      +            "filter": "item",
      +            "values": [
      +              "2024"
      +            ]
      +          }
      +        },
      +        {
      +          "code": "contentscode",
      +          "selection": {
      +            "filter": "item",
      +            "values": [
      +              "kaste5T8"
      +            ]
      +          }
      +        }
      +      ],
      +      "response": {
      +        "format": "json-stat2"
      +      }
      +    },
      +    "path": "vkour/15ig.px"
      +  }
      +]
    • changedInput schema / properties / body / description
      Previous value: -"{query: [{code, selection: {filter, values}}], response: {format: \"json-stat2\"}}"New value: +"PxWeb query: {query: [{code, selection: {filter: \"item\", values: [...]}}], response: {format: \"json-stat2\"}}. Get code/values from table_meta first — they are native Finnish."
    • changedInput schema / properties / path / description
      Previous value: -"folder/table.px, e.g. \"khi/statfin_khi_pxt_11xs.px\""New value: +"folder/table.px with the bare 4-character table id, e.g. \"vkour/15ig.px\" or \"khi/11xs.px\"."
  3. Changed1 schema field changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "body": {
      +      "query": [
      +        {
      +          "code": "Vuosi",
      +          "selection": {
      +            "filter": "item",
      +            "values": [
      +              "2023"
      +            ]
      +          }
      +        }
      +      ],
      +      "response": {
      +        "format": "json-stat2"
      +      }
      +    },
      +    "path": "khi/statfin_khi_pxt_11xs.px"
      +  }
      +]
  4. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond that: the upstream path rewrite, automatic resolution of labels against table metadata, defaulting to latest year and totals for unnamed dimensions, and the `selection_resolved` feedback channel. No contradiction with annotations — the description reinforces the read-only, non-destructive nature.

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 a dense paragraph but well-organized: purpose first, then path format, then select semantics with a concrete worked example, then the body alternative. Every sentence carries operational value — the one mild cost is the extended worked example, which is verbose but illustrative. Appropriate length for a tool with two interlocking call modes and no output schema.

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 complex tool with nested body objects, dual select/body modes, no output schema, and a legacy-path quirk, the description covers the essential operational surface: path normalization, label resolution, defaulting behavior, and the selection_resolved/figures return shape. The companion table_meta sibling covers metadata discovery. Minor gap: it doesn't specify the return structure of `figures` beyond 'flattened,' which is acceptable given no output schema exists.

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%, giving a baseline of 3. The description adds substantial value beyond the schema: it explains that select values may be English labels or native Finnish codes, that array values take several items, the 'omit entirely to get every measure' behavior, and the precedence of body over select. These semantics are not merely restated in the schema, so the extra effort earns above baseline.

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

Purpose5/5

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

The description opens with a concrete verb-resource pair ('Get an actual figure out of a Statistics Finland (StatFin) table') and grounds it in recognizable examples (tertiary qualifications, CPI, births/deaths, employment). It clearly differentiates itself from siblings like table_meta, which handles metadata rather than figures, and names the bare 4-character path format that distinguishes this tool's contract.

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

Usage Guidelines4/5

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

The description explicitly routes between the two call modes: use `select` for plain-English labels (the primary path) and 'Pass `body` instead for a raw PxWeb query object when you already know the codes.' It also states the 'Answers in ONE call' guidance and notes the legacy path form is rewritten for the caller. It could more explicitly name table_meta as the sibling for code discovery, but the schema's body param does reference 'Codes come from table_meta.'

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.

TDQS

A4/5.0
Disambiguation3/5

Several tool families overlap heavily: ask_pipeworx, ask_pipeworx_beta, and ask_pipeworx_grounded serve nearly the same routing purpose (beta explicitly 'currently matches ask_pipeworx exactly'), and the five polymarket_* tools plus bet_research create a dense cluster an agent must pick through. The descriptions are unusually detailed and do differentiate them, but the boundaries between the ask_pipeworx variants and between bet_research/polymarket_edges/arbitrage remain easy to misselect.

Naming Consistency4/5

All names are lowercase snake_case and mostly follow verb_noun or domain-prefix patterns (ask_pipeworx, polymarket_edges, list_subscriptions, resolve_entity). Minor deviations exist: subjects and table_meta are bare nouns rather than verbs, the ask_pipeworx family uses an ask_ prefix while the closely related deep_research does not, and entity appears as both a prefix (entity_profile) and a suffix (resolve_entity).

Tool Count2/5

34 tools is well above the 25-tool threshold for 'too many,' and the mismatch is sharpened by the server name 'Statfin Fi': only 3 of 34 tools (query_table, subjects, table_meta) actually relate to Statistics Finland, while the rest are a sprawling multi-domain platform covering prediction markets, AI visibility, npm packages, memory, and subscriptions. The count is appropriate for a general data platform but not for the apparent StatFin scope, making the surface feel bloated and unfocused.

Completeness4/5

The platform covers the full research lifecycle: discovery (discover_tools, suggest_questions), identifier resolution (resolve_entity), lookups (ask_pipeworx, entity_profile, compare_entities), verification (validate_claim, ask_pipeworx_grounded), monitoring (subscribe, recent_alerts, recent_changes), and memory (remember/recall/forget), with no obvious dead ends. Minor gaps exist — there is no keyword search across the StatFin catalog (browse-only via subjects), and one-off tools like generate_llms_txt and scan_dependency feel bolted on rather than part of a coherent domain.