Skip to main content
Glama
Tdh25

CBS Open Data MCP Server

by Tdh25

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_catalogsA

Fetch all available CBS catalogs.

Returns: dict[str, Any]: Count and list of catalogs.

query_datasetsA

Search datasets with OData filtering, sorting, and pagination.

RECOMMENDATION: use filter with contains() instead of search. The CBS $search often returns irrelevant results. Example: filter="contains(Title,'warmte')" or filter="contains(Title,'energie') and contains(Title,'verbruik')".

Args: catalog: Catalog identifier, typically CBS. select: OData $select. filter: OData $filter -- use contains() for title search. orderby: OData $orderby. top: OData $top. skip: OData $skip. count: OData $count. search: OData $search (UNRELIABLE -- use filter instead). expand: OData $expand. exclude_discontinued: Prepend a default filter to exclude discontinued datasets.

Returns: dict[str, Any]: Query info and dataset results.

get_dimensionsA

Fetch all dimensions for a dataset.

Args: catalog: Catalog identifier. dataset: Dataset identifier.

Returns: dict[str, Any]: Table of dimensions and labels per dimension.

get_dimension_valuesA

Fetch values for a specific dimension.

WARNING: this endpoint returns 404 on most CBS datasets. Prefer get_dimensions(), which already resolves all dimension codes and labels via the reliable {dim}Codes endpoints.

Args: catalog: Catalog identifier. dataset: Dataset identifier. dimension: Dimension identifier. select: OData $select. filter: Additional OData $filter. orderby: OData $orderby. top: OData $top.

Returns: dict[str, Any]: Count and dimension values.

get_observationsA

Fetch observations with automatic pagination.

Automatically follows @odata.nextLink to retrieve all pages. With resolve_labels=True, dimension and measure codes are replaced with human-readable labels.

Args: catalog: Catalog identifier. dataset: Dataset identifier. filters: Dimension filters (key=dimension, value=code). paginate: Fetch all pages (True) or just one page (False). resolve_labels: Replace codes with labels (True) or keep raw codes (False, faster). limit: Maximum number of observations (safety limit).

Returns: dict[str, Any]: Observation result.

query_observationsB

Query observations with advanced OData options.

Args: catalog: Catalog identifier. dataset: Dataset identifier. select: OData $select. filter: OData $filter. orderby: OData $orderby. top: OData $top. skip: OData $skip. count: OData $count. search: OData $search. expand: OData $expand.

Returns: dict[str, Any]: Query info and observation results.

get_metadataA

Fetch the OData metadata document (EDM schema).

Note: This returns the catalog-wide schema, not dataset-specific metadata. Use get_dataset_info() for metadata of a single dataset.

Returns: dict[str, str]: Metadata as an XML string.

get_dataset_infoA

Fetch metadata for a single specific dataset.

Returns title, description, status, last modification date, and more. Use this to quickly check whether a dataset is relevant.

Args: catalog: Catalog identifier. dataset: Dataset identifier (e.g. '85523NED').

Returns: dict[str, Any]: Dataset metadata.

get_measure_codesA

Fetch measure code definitions for a dataset.

Measures are the columns containing actual measurement values in observations. Each measure has an Identifier (code) and Title (label).

Args: catalog: Catalog identifier. dataset: Dataset identifier.

Returns: dict[str, Any]: Count and list of measure codes.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.7/5.0

Scored across 9 tools

Disambiguation3/5

Tools generally target distinct resources, but there is clear overlap between get_dimensions and get_dimension_values (the latter is explicitly discouraged), and between get_observations and query_observations which both fetch observations with different options. Descriptions help clarify, but an agent could still be confused about which to use.

Naming Consistency4/5

Most tools follow a get_* verb_noun pattern (get_catalogs, get_metadata, get_dimensions). Two tools use query_* (query_datasets, query_observations), which is a minor deviation but still consistent in style. Names are readable and predictable.

Tool Count5/5

With 9 tools, the server is well-scoped for a statistical data API. Each tool serves a distinct aspect of data access: catalogs, metadata, dataset search, dimensions, observations, and measures, with no unnecessary bloat.

Completeness4/5

The core workflow is covered: discover catalogs, search datasets, get dataset info, fetch dimensions, observations, and measure codes. Minor gaps include the non-functional get_dimension_values (mitigated by get_dimensions) and no explicit way to download a full dataset in one call, but agents can compose queries to achieve this.

Maintenance

ActivityInactive
ResponsivenessNo issues