MCP server

# Danish property data for AI agents

An assistant that needs to check a Danish building, resolve an address or read the planning constraints on a plot should not need a bespoke integration per register. Grundfast exposes 28 read-only tools over the Model Context Protocol, on the same key and the same meter as the REST API.

One endpoint

- [POST /mcp](https://grundfast.dk/docs/mcp)

[Get started free](https://grundfast.dk/dashboard?mode=register) [Read the API reference](https://grundfast.dk/docs/api)

[Læs denne side på dansk](https://grundfast.dk/mcp-server)

In practice

## One question, four registers

The agent picks the tools; Grundfast answers each call from the official register. This is a real property and real results.

We are renovating Nyhavn 20 in Copenhagen. Anything in the registers we should know first?

tool adresse_soeg { "q": "Nyhavn 20, København" }

Nyhavn 20, 1051 København K → BFE 6033800

tool bbr_ejendom { "bfe": 6033800 }

3 buildings, main building from 1845 · building 1 fredet: true · building 2 tag: "Fibercement herunder asbest"

tool jord_omraadeklassificering { "lon": 12.5905, "lat": 55.6795 }

omraadeklassificeret: true · "Område med krav om analyser"

tool natur_byggelinjer { "lon": 12.5905, "lat": 55.6795 }

10 lines checked · inden_for: false on all

Building 1 is listed, so building work on it needs approval from the heritage authority. The roof of building 2 is registered as fibre cement that may contain asbestos — plan a survey before any roof work. The plot is in a classified soil area, so excavated soil must be analysed before it is moved. None of the ten protection lines apply.

Tool names and arguments as the server defines them; results from the registers for BFE 6033800. The question and answer stand in for your model.

Connect

## Connect in one step

A remote server over HTTP with a bearer header. It is listed in the official MCP registry as `dk.grundfast/danish-address-property-data`.

Claude Code bash

```
claude mcp add --transport http grundfast \
  https://api.grundfast.dk/mcp \
  --header "Authorization: Bearer gf_live_..."
```

mcp.json json

```
{
  "mcpServers": {
    "grundfast": {
      "type": "http",
      "url": "https://api.grundfast.dk/mcp",
      "headers": { "Authorization": "Bearer gf_live_..." }
    }
  }
}
```

Tools

## 28 tools, grouped by the job they do

Each returns the same shape as its REST endpoint. Two history tools need the Scale plan and the address-change feed needs Pro; everything else works on every plan.

### The property

- `bbr_ejendom` Buildings, units and land for a BFE, with heritage status.
- `matrikel_ejendom` Cadastral parcels and district for a BFE.
- `ejendomsvurdering` The public valuation series for a BFE.
- `geodanmark_bygninger` Building footprint polygons for a BFE.
- `dhm_bygningshoejder` Measured height of every building on a BFE.
- `bbr_historik`Scale The property as it stood on an earlier date.
- `bbr_bygningssoegning` Every standing building in a kommune or postcode matching BBR facts.

### Addresses

- `adresse_soeg` Search addresses by text; each hit carries its BFE.
- `adresse_opslag` One address by its DAR id.
- `adresse_datavask` Clean a messy address; ranked, graded candidates.
- `adgangsadresse_reverse` Nearest addresses to a coordinate.
- `adresse_aendringer`Pro New, changed and retired addresses in a kommune, postcode or ID list.
- `adresse_historik`Scale How an address has changed over time.

### Planning constraints

- `jord_omraadeklassificering` Whether a point lies in a classified soil area (§ 50 a).
- `jord_kortlaegning` Whether a point lies on land mapped as contaminated (V1 or V2), with the lokalitet.
- `jord_kortlaegning_matrikel` Whether a parcel is mapped V1/V2, and how much of it each mapped area covers.
- `natur_byggelinjer` Ten protection lines at a point, each with signed distance to its edge.
- `natur_skovbyggelinje` The forest building line (§ 17) in depth, including lifted areas.
- `plan` Zone, local plans and municipal plan frames at a point, with status and plan PDF.
- `miljoe_stoej` Road, rail, airport and industry noise bands at a point, with the mapping year.
- `plan_ejendom` The plans for a BFE plus an indicative remaining floor area, inputs echoed.
- `miljoe_screening` Pre-renovation screening per building part for asbestos, PCB, lead, PAH, chlorinated paraffins and heavy metals, from the national building atlas.

### Place and companies

- `dagi_reverse` Municipality, region, parish and districts at a point.
- `dagi_omraade` One administrative area by theme and code.
- `dhm_hoejde` Terrain and surface height at a coordinate.
- `stednavne_naer` Official place names near a coordinate.
- `orto_luftfoto_aargange` Which aerial-photo years were flown over a point.
- `cvr_virksomhed` A Danish company by CVR number.

Input schemas for every tool come back from `tools/list`; the matching REST endpoints are in the [API reference](https://grundfast.dk/docs/api).

FAQ

## Questions about the MCP server

### What is MCP?

The Model Context Protocol is an open standard for connecting AI assistants and agents to tools and data. An MCP server exposes typed tools that a model can call directly, instead of you writing glue code for every integration.

### Which clients does it work with?

Any MCP client that supports remote servers over HTTP with a bearer header — the standard remote-server shape, with nothing model-specific in it. The server is also listed in the official MCP registry as dk.grundfast/danish-address-property-data.

### Does it cost extra?

No. Every tool call is metered exactly like a REST request, against the same plan and the same key. A `gf_test_` key lets an agent explore the tools without being billed.

### Is it safe to let an agent call it?

The server is read-only: every tool is a lookup against a public register, nothing writes, and personal ownership data is not exposed. Per-key rate limits and quotas mean an agent stuck in a loop hits a limit, not a surprise invoice.

### Will the model understand Danish field names?

Generally, yes. Each tool describes its inputs and outputs in its schema, which is what a model reads to map bygninger to buildings or fredet to listed. The code-list values are the register’s own Danish text — also what an answer should quote back to an official source.

See also

- [Grundfast overview](https://grundfast.dk/en)
- [Property data API](https://grundfast.dk/en/property-data-api)
- [Danish address API](https://grundfast.dk/en/address-api)
- [Pricing](https://grundfast.dk/en/pricing)

## Give your agent the registers

Create a free key, add the server to your client, and the tools appear on the next start. A `gf_test_` key is never billed.

[Get started free](https://grundfast.dk/dashboard?mode=register) [Read the API reference](https://grundfast.dk/docs/api)

Free up to 5,000 calls a month · no card · test keys never billed · data from Klimadatastyrelsen / Datafordeler, CC BY 4.0
