Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
HOSTNoHost to bind when using SSE or streamable-http transport. Defaults to 127.0.0.1; set to 0.0.0.0 to expose externally.127.0.0.1
PORTNoPort to bind when using SSE or streamable-http transport.
LOG_LEVELNoLog level for the JSON stderr logs.
ALLOWED_ORIGINSNoComma-separated list of browser origins allowed for HTTP deployments. Unset means no browser client is permitted.
LINDAS_MCP_TRANSPORTNoTransport mode. Accepts 'stdio' (default), 'sse' or 'streamable-http'.stdio

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
search_cubesA

Find statistical data cubes in LINDAS by topic.

The entry point. Returns cube URIs you then pass to get_cube_structure. By default only the newest published version of each cube is returned; set latest_only=False to see every version.

Check truncated before you conclude anything from the result. returned alone cannot tell a complete answer from a first page.

  • truncated: false — cubes holds every cube that matched. You may say so.

  • truncated: true — more cubes matched than you got back, or that could not be ruled out cheaply. Do NOT report the result as the complete set, and do NOT answer "there are N cubes about X" from returned.

On truncated: true, widen in this order:

  1. Raise limit (up to 100) and search again — usually enough.

  2. Still truncated at 100? Narrow instead of paging: add creator_uri from list_publishers to ask one federal body at a time.

  3. Set latest_only=False if you specifically need historical versions. It widens rather than narrows — every version becomes its own hit — so use it to inspect a cube's history, not to escape truncation.

total_matched carries the exact number when one is available and null otherwise. null is not an error and not zero: with latest_only=true the count the store can give cheaply counts cube versions, while this tool returns version-collapsed cubes (measured: 127 versions collapse to 35 cubes for "wald"), so no comparable number exists. truncated is still reliable there — prefer it over guessing from total_matched.

Args: query: Topic term, e.g. "Wald", "Abfluss", "Energie". Matched against cube names and descriptions in the chosen language. language: Language for names and descriptions. creator_uri: Restrict to one publishing body (from list_publishers). limit: Maximum cubes to return (1-100). latest_only: Collapse versions to the newest per cube.

get_cube_structureA

Read a cube's dimensions and measures — what the cube contains.

Tells you which dimensions you can filter on (KeyDimension), which values are measured (MeasureDimension), and which dimensions carry code lists. It also returns the licence, which is frequently a Fedlex URI you can resolve with fedlex-mcp.

Call this to understand a cube before reading it, and to write a run_sparql query against it. It is NOT a prerequisite for readable data: query_cube_observations fetches the structure itself and resolves labels on its own. Note that this result reports only whether a dimension has a code list (has_codelist), not the list's entries — so calling it first does not help you decode raw codes either.

Args: cube_uri: A cube URI from search_cubes. language: Language for dimension names and description.

query_cube_observationsA

Read the actual data points of a cube, with codes resolved to labels.

This is phase 2. Values are returned keyed by human-readable dimension names, and coded dimension values (e.g. region "1805") are replaced by their labels (e.g. "Alpennordhang") unless you turn that off.

For large cubes this reads only the first limit observations. LINDAS has no cheap way to filter observations server-side by arbitrary dimension value, so heavy analytical slicing belongs in run_sparql.

Args: cube_uri: A cube URI from search_cubes. language: Language for labels. limit: Maximum observations to return (1-500). resolve_labels: Replace coded values with human labels.

list_publishersA

List the federal bodies that publish cubes, with cube counts.

Returns creator URIs you can pass to search_cubes to restrict a search to one authority.

resolve_municipalityA

Resolve a Swiss municipality to its LINDAS URI and BFS number.

The BFS commune number is the join key across the whole portfolio: the same number identifies the municipality in swiss-statistics-mcp, zurich-opendata-mcp and any cube that references a place. In LINDAS the URI is literally ld.admin.ch/municipality/.

Args: name_or_bfs: A municipality name ("Zürich") or a BFS number ("261"). language: Language for the name.

run_sparqlA

Run a raw SPARQL SELECT query. Advanced escape hatch — use sparingly.

Prefer the structured tools. This exists for analytical queries the guarded tools cannot express (cross-cube joins, aggregations, custom filters).

Guardrails, learned from probing: LINDAS times out on unanchored scans, so always anchor on a known class such as ?x a <https://cube.link/Cube>. A bare SELECT * WHERE { ?s ?p ?o } will time out. This tool caps the result at 500 rows and the runtime at 30 seconds.

Args: query: A complete SPARQL SELECT query, including its own PREFIX lines.

api_statusA

Check whether the LINDAS SPARQL endpoint is reachable.

Returns an evaluable status even on failure, so an agent can tell "no data matched" apart from "the endpoint is down".

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.6/5.0

Scored across 7 tools

Disambiguation5/5

Each tool owns a clearly distinct step in the workflow: discover cubes, list publishers, inspect structure, read observations, resolve municipalities, check status, or run raw SPARQL. Even the structurally related tools are easy to tell apart because their responsibilities are explicitly separated.

Naming Consistency4/5

Six of seven tool names follow a clear verb_noun snake_case pattern like search_cubes, list_publishers, and get_cube_structure. api_status is the only outlier, being a noun phrase rather than a verb-led name, but the overall style remains predictable.

Tool Count5/5

Seven tools is well-scoped for a read-only statistical data cube server: discovery, structure inspection, data reading, publisher filtering, municipality resolution, status checking, and a raw SPARQL escape hatch. Each tool earns its place without redundancy.

Completeness4/5

The set covers the core cube workflow well: search, publisher filtering, structure inspection, observation reading, and key resolution. Minor gaps like first-class code-list entry enumeration or direct version-history browsing are not offered as dedicated tools, though run_sparql and search flags provide workarounds.

Maintenance

ActivityActive
ResponsivenessUnresponsive