# io.github.aneal99/datafordeler-dar-mcp (npm · datafordeler-dar-mcp)

Danish addresses from Datafordeleren's DAR register, the replacement for DAWA.

- Trust score: 81/100 (high trust)
- Change this week: +1
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- npm · `datafordeler-dar-mcp`: 81/100 (this document), [markdown](https://verifymcp.io/servers/aneal99-datafordeler-dar-mcp/datafordeler-dar-mcp.md), [page](https://verifymcp.io/servers/aneal99-datafordeler-dar-mcp/datafordeler-dar-mcp)

## Channel facts

- Registry: `npm`
- Package: `datafordeler-dar-mcp`
- Version: `0.1.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 0 of 3 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 34 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 66/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2523 tokens (~252/item across 10 items; 10 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 100/100
  - No destabilizing schema changes in the last 30 days.
- **Tool Coverage**: 94/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 81% of tool parameters carry a description.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "dar_graphql" implies "send" and declares readOnlyHint instead, contradicting what its own name says it does.
  - An AI judge read all 10 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the io.github.aneal99/datafordeler-dar-mcp server?

io.github.aneal99/datafordeler-dar-mcp runs locally as an npm package, launched with npx -y datafordeler-dar-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add aneal99-datafordeler-dar-mcp -- npx -y datafordeler-dar-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "aneal99-datafordeler-dar-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "datafordeler-dar-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "aneal99-datafordeler-dar-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "datafordeler-dar-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add aneal99-datafordeler-dar-mcp -- npx -y datafordeler-dar-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "aneal99-datafordeler-dar-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "datafordeler-dar-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add aneal99-datafordeler-dar-mcp --command npx --arg -y --arg datafordeler-dar-mcp
```

### Hermes

```yaml
mcp_servers:
  aneal99-datafordeler-dar-mcp:
    command: "npx"
    args: ["-y", "datafordeler-dar-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "aneal99-datafordeler-dar-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "datafordeler-dar-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add aneal99-datafordeler-dar-mcp -t stdio -c npx -a -y datafordeler-dar-mcp
```

### Other

```json
{
  "mcpServers": {
    "aneal99-datafordeler-dar-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "datafordeler-dar-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-01 (score 81, +1)

- [security] Stability: 0.97 → pass

### 2026-10-29 (score 80, +1)

No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-27 (score 79, +1)

No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-25 (score 78, +1)

No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-23 (score 77, +1)

No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-21 (score 76, +1)

No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-19 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-17 (score 74, +1)

No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (10)

### `dar_status` (~122 tokens)

DAR connection status

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_address` (~213 tokens)

Get address by id

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).

Input parameters:

- `address_id` (string, required): DAR/DAWA address UUID (id_lokalId of an Adresse).

### `dar_get_access_address` (~197 tokens)

Get access address by id

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.

Input parameters:

- `access_address_id` (string, required): DAR/DAWA access-address UUID (id_lokalId of a Husnummer).

### `dar_list_addresses` (~179 tokens)

List addresses at an access address

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.

Input parameters:

- `access_address_id` (string, required): DAR/DAWA access-address UUID.
- `status` (string): "current" returns only status 3 (gældende) records; "all" includes preliminary, discontinued and cancelled.

### `dar_list_access_addresses` (~428 tokens)

List access addresses by street, postcode or parcel

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).

Input parameters:

- `cadastral_parcel_id` (string): Jordstykke id.
- `municipality_code` (string): Kommunekode, 4 digits, e.g. "0101".
- `page` (integer): 1-based page number.
- `page_size` (integer)
- `postcode_id` (string): Postnummer UUID (not the 4-digit code).
- `road_code` (string): Vejkode within the municipality, 4 digits, e.g. "5240".
- `status` (string): "current" returns only status 3 (gældende) records; "all" includes preliminary, discontinued and cancelled.
- `street_id` (string): NavngivenVej UUID.

### `dar_get_street` (~147 tokens)

Get street (named road)

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).

Input parameters:

- `municipality_code` (string)
- `road_code` (string)
- `street_id` (string): NavngivenVej UUID.

### `dar_get_postcode` (~116 tokens)

Get postcode

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.

Input parameters:

- `postcode` (string): 4-digit postcode, e.g. "8000".
- `postcode_id` (string): Postnummer UUID.

### `dar_search_addresses` (~429 tokens)

Search streets and addresses by text prefix (API key)

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 }).

Input parameters:

- `after` (string): Cursor from a previous result's next_cursor, for the next page.
- `level` (string)
- `limit` (integer)
- `only_current` (boolean): Keep only status 3 (gældende) records.
- `query` (string, required): Text prefix, e.g. "Rentemestervej 8" or, for level "street", "Rentemester".

### `dar_graphql` (~502 tokens)

Run a raw DAR GraphQL query (API key)

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.

Input parameters:

- `query` (string, required): GraphQL query document.
- `variables` (object): Optional GraphQL variables object.

### `dar_get_graphql_schema` (~190 tokens)

Get DAR GraphQL schema (API key)

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.

Input parameters:

- `filter` (string): Substring of a type name to keep, e.g. "DAR_Adresse".
- `include_docs` (boolean): Keep the """doc comment""" blocks (Danish definitions, legal sources).

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/aneal99-datafordeler-dar-mcp/datafordeler-dar-mcp#diagnostics

## Score history

- 2026-11-05: 81
- 2026-11-04: 81
- 2026-11-03: 81
- 2026-11-02: 81
- 2026-11-01: 81
- 2026-10-31: 80
- 2026-10-30: 80
- 2026-10-29: 80
- 2026-10-28: 79
- 2026-10-27: 79
- 2026-10-26: 78
- 2026-10-25: 78
- 2026-10-24: 77
- 2026-10-23: 77
- 2026-10-22: 76
- 2026-10-21: 76
- 2026-10-20: 75
- 2026-10-19: 75
- 2026-10-18: 74
- 2026-10-17: 74
- 2026-10-16: 73
- 2026-10-15: 73
- 2026-10-14: 73
- 2026-10-13: 67
- 2026-10-12: 67
- 2026-10-11: 67
- 2026-10-07: 67
- 2026-10-05: 67
- 2026-10-04: 67
- 2026-10-03: 67

## Common questions

### What is the io.github.aneal99/datafordeler-dar-mcp server?

io.github.aneal99/datafordeler-dar-mcp is listed in the public MCP registry as io.github.aneal99/datafordeler-dar-mcp. Danish addresses from Datafordeleren's DAR register, the replacement for DAWA. This page covers its npm package (datafordeler-dar-mcp).

### Is the io.github.aneal99/datafordeler-dar-mcp server safe to use?

io.github.aneal99/datafordeler-dar-mcp scores 81 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.github.aneal99/datafordeler-dar-mcp server expose?

io.github.aneal99/datafordeler-dar-mcp exposes 10 tools: dar_status, dar_get_address, dar_get_access_address, dar_list_addresses, dar_list_access_addresses, and 5 more. Their descriptions and schemas cost roughly 2,523 tokens of context every time the server is loaded.

### Is the io.github.aneal99/datafordeler-dar-mcp server still maintained?

io.github.aneal99/datafordeler-dar-mcp is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the io.github.aneal99/datafordeler-dar-mcp server under?

io.github.aneal99/datafordeler-dar-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/datafordeler-dar-mcp
- Socket report: https://socket.dev/npm/package/datafordeler-dar-mcp
- Repository: https://github.com/aneal99/datafordeler-dar-mcp
- Changelog RSS feed: https://verifymcp.io/servers/aneal99-datafordeler-dar-mcp/datafordeler-dar-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/aneal99-datafordeler-dar-mcp/datafordeler-dar-mcp.json
- HTML version of this page: https://verifymcp.io/servers/aneal99-datafordeler-dar-mcp/datafordeler-dar-mcp
