Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
DATAFORDELER_API_KEYNoAPI key for Datafordeleren. Required for text search (dar_search_addresses) and the GraphQL tools. Anonymous access works for the seven lookup tools today, but after 15 January 2027 all requests require authentication.
DATAFORDELER_PASSWORDNoOptional legacy password passed through to the REST service if set.
DATAFORDELER_USERNAMENoOptional legacy username passed through to the REST service if set.

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": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
dar_statusA

Check connectivity to Datafordeleren (DAR) and report which access paths are configured.

Returns: whether the legacy REST service answers (and its latency), whether an API key for the GraphQL service is configured, the REST sunset date (2027-01-15; after it only API-key/OAuth access exists), and the attribution text that must accompany the data (CC BY 4.0, Klimadatastyrelsen).

Use first when a DAR call fails unexpectedly, or to decide whether text search (dar_search_addresses, needs API key) is available.

dar_get_addressA

Fetch one Danish address (adresse: a specific door/floor unit) from DAR by its UUID.

The id is the same UUID DAWA used for /adresser, so stored DAWA ids keep working. Returns the normalised address with its access address (husnummer) embedded: street, house number, municipality, postcode, parish, cadastral parcel, building id and the access point coordinates in both EPSG:25832 (x, y) and WGS84 (lat, lon).

Example: dar_get_address({ address_id: "0a3f50a0-0000-32b8-e044-0003ba298018" }) -> "Oehlenschlægersgade 35, st. tv, 1663 København V".

Not for text search: use dar_search_addresses (API key) or dar_list_access_addresses (municipality + road code).

dar_get_access_addressA

Fetch one access address (husnummer: street + house number, the entrance) from DAR by its UUID.

The id is the same UUID DAWA used for /adgangsadresser. Returns street, house number, municipality, postcode, supplementary town name, parish, cadastral parcel (jordstykke), GeoDanmark building id, and access/road point coordinates (EPSG:25832 and WGS84).

Example: dar_get_access_address({ access_address_id: "0a3f507a-d330-32b8-e044-0003ba298018" }) -> "Oehlenschlægersgade 35, 1663 København V".

To list the individual units (floors/doors) at this entrance, call dar_list_addresses with the same id.

dar_list_addressesA

List the unit addresses (floors/doors) that belong to one access address (husnummer).

Example: dar_list_addresses({ access_address_id: "0a3f507a-d330-32b8-e044-0003ba298018" }) -> 12 addresses at Oehlenschlægersgade 35 (st. tv, st. th, 1. tv, ...).

Returns compact records (id, text, floor, door, status). Fetch one with dar_get_address for full detail. A single-family house typically has exactly one address with no floor/door.

dar_list_access_addressesA

List access addresses (husnumre) filtered by one of:

  • municipality_code + road_code (kommunekode + vejkode, both 4-digit strings), e.g. "0101" + "5240" = Oehlenschlægersgade, København

  • street_id (NavngivenVej UUID, from dar_get_street or an earlier result)

  • postcode_id (Postnummer UUID, from dar_get_postcode; NOT the 4-digit postcode)

  • cadastral_parcel_id (jordstykke id, from an earlier access-address result)

This is the anonymous way to enumerate a street when no API key is set. Paginated: page (1-based) and page_size (max 100). has_more is true when a full page came back; request the next page to continue. Results include coordinates (EPSG:25832 and WGS84).

Example: dar_list_access_addresses({ municipality_code: "0101", road_code: "5240", page_size: 50 }).

Does NOT search by street name. For that use dar_search_addresses (needs DATAFORDELER_API_KEY). Danish municipality codes are 4 digits with a leading zero (København 0101, Aarhus 0751, Odense 0461, Aalborg 0851).

dar_get_streetA

Fetch a named road (NavngivenVej) by UUID, or by municipality_code + road_code.

Returns the street name, the municipality that administers it, its road codes per municipality (a street can span municipalities) and the postcodes it runs through.

Example: dar_get_street({ municipality_code: "0101", road_code: "5240" }) -> "Oehlenschlægersgade", København.

Does NOT search by name (see dar_search_addresses for text search, API key required).

dar_get_postcodeA

Fetch a Danish postcode (postnummer) by its 4-digit code or by UUID. Returns id, code, name and status.

Example: dar_get_postcode({ postcode: "1663" }) -> "København V", id d4a3a5ad-.... Use the returned id as postcode_id in dar_list_access_addresses to enumerate addresses in that postcode.

dar_search_addressesA

Find streets, access addresses or unit addresses whose official text starts with a prefix, via the Datafordeler GraphQL service. REQUIRES DATAFORDELER_API_KEY.

The service supports prefix matching only (startsWith): no fuzzy, substring or typo-tolerant search, and it is CASE-SENSITIVE. Write the prefix the way DAR writes it: "Vejnavn husnummer, postnr By". This tool upper-cases the first letter for you; the rest must match exactly, including Danish letters (æ, ø, å).

level:

  • "street": match street names (NavngivenVej), e.g. "Rentemester" -> Rentemestervej in København (0101) and Hvidovre. Returns street id, name and administering municipality code. Feed the id to dar_list_access_addresses({ street_id }) to enumerate house numbers.

  • "access_address" (default): match entrances, e.g. "Rentemestervej 8" -> Rentemestervej 8, 80, 82, ... Results are NOT ranked; an exact house number is one of several prefix matches, so add ", 2400" or pick by house_number.

  • "address": match unit addresses including floor/door, e.g. "Oehlenschlægersgade 35, st".

Returns ids and text only. Follow up with dar_get_access_address / dar_get_address for coordinates, municipality and postcode. Paginate with the returned next_cursor.

Example: dar_search_addresses({ query: "Rentemestervej 8, 2400", limit: 5 }).

dar_graphqlA

Send any GraphQL query to https://graphql.datafordeler.dk/DAR/v2. REQUIRES DATAFORDELER_API_KEY.

Entities: DAR_Adresse, DAR_Husnummer, DAR_NavngivenVej, DAR_NavngivenVejKommunedel, DAR_NavngivenVejPostnummer, DAR_Postnummer, DAR_SupplerendeBynavn, DAR_Adressepunkt, DAR_Events.

Rules the service enforces:

  • Every entity query needs virkningstid and/or registreringstid (ISO timestamp), or a where filter on id_lokalId. Pass BOTH set to the current time to get the current state; with only one you also get superseded versions.

  • Filters: where: { field: { eq | in } }. startsWith exists only on adgangsadressebetegnelse, adressebetegnelse, vejnavn, postnr and navn, and is case-sensitive. Dates and ints also take gt/gte/lt/lte. Geometry fields take spatial filters (intersects, within, contains ...) with { wkt, crs: 25832 }.

  • Paging: first (max 1000, default 100) and after (cursor); read pageInfo { endCursor hasNextPage }.

  • References are ids, not nested objects: DAR_Husnummer.navngivenVej, .postnummer and .adgangspunkt hold UUIDs; fetch coordinates from DAR_Adressepunkt { position { wkt crs } }.

  • Field names with æ/ø/å use ae/oe/aa (doerbetegnelse, virkningsaktoer).

Example: query { DAR_Husnummer(first: 5, virkningstid: "2026-10-01T12:00:00Z", registreringstid: "2026-10-01T12:00:00Z", where: { adgangsadressebetegnelse: { startsWith: "Rentemestervej 8" }, status: { eq: "3" } }) { pageInfo { endCursor hasNextPage } nodes { id_lokalId adgangsadressebetegnelse status } } }

Returns the raw { data, errors } envelope. Use dar_get_graphql_schema to discover fields.

dar_get_graphql_schemaA

Fetch the GraphQL schema (SDL) for DAR/v2. REQUIRES DATAFORDELER_API_KEY.

The full schema is about 80,000 characters, mostly Danish field documentation. By default the doc comments are stripped, which leaves a compact list of types, fields and filter inputs. Pass filter to keep only type/input/enum blocks whose name contains the text (case-insensitive), e.g. filter: "DAR_Husnummer" (type, filter input, connection) or filter: "OperationFilterInput" (available operators). Set include_docs: true to keep the field definitions and legal references. Output is truncated at 60000 characters.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.4/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct resource+action, and the descriptions explicitly cross-reference siblings (e.g. 'Not for text search: use dar_search_addresses'). The subtle get_address vs get_access_address (unit vs entrance) distinction is spelled out with examples, and search vs list vs get roles are clearly separated.

Naming Consistency4/5

Strong, predictable dar_ prefix with verb_noun structure (dar_get_street, dar_list_addresses, dar_search_addresses). Minor deviations are the noun-only dar_status and dar_graphql, but these are still readable and coherent with the set.

Tool Count5/5

10 tools is well-scoped for the DAR domain, with no redundant or filler entries. Each tool covers a distinct lookup or discovery need.

Completeness4/5

Covers connectivity, streets, addresses, access addresses, postcodes, text search, plus a raw GraphQL escape hatch and schema discovery, which fills most gaps. Minor omissions like dedicated building/history tooling are mitigated by dar_graphql.

Maintenance

ActivityMaintained
ResponsivenessNo issues