Datafordeler DAR MCP

Endereços dinamarqueses do Danmarks Adresseregister (DAR) no Datafordeleren, o substituto do DAWA: consulta por id, enumeração por rua ou código postal, busca por prefixo, coordenadas WGS84.

Documentação

datafordeler-dar-mcp

Servidor MCP para endereços dinamarqueses do Danmarks Adresseregister (DAR) no Datafordeleren, o distribuidor nacional oficial de dados.

DAWA (dawa.aws.dk, api.dataforsyningen.dk) foi encerrado em 1º de outubro de 2026 e agora retorna HTTP 410. Todas as ferramentas de endereço construídas sobre ele estão mortas. A substituição da Klimadatastyrelsen é o Datafordeleren, que é chaveado, bitemporal e prioriza GraphQL. Este servidor dá a agentes de IA (Claude, Cursor, VS Code, qualquer cliente MCP) os dados do DAR por meio de dez ferramentas pequenas e documentadas, com as coordenadas convertidas para WGS84 e os UUIDs do DAR que a DAWA também usava.

Status: v0.1, uma sonda. Existe para descobrir se alguém quer uma camada MCP mantida sobre dados públicos dinamarqueses. Estrelas, downloads npm e issues são o sinal. É deliberadamente enxuto: sem cache, sem medição, uma única fonte.

O que ele faz

FerramentaPrecisa de chave de APIFinalidade
dar_statusnãoVerificação de conectividade, caminhos de acesso configurados, contagem regressiva para o encerramento
dar_get_addressnãoUm endereço de unidade (andar/porta) por UUID
dar_get_access_addressnãoUm endereço de acesso (entrada / husnummer) por UUID
dar_list_addressesnãoUnidades em um endereço de acesso
dar_list_access_addressesnãoEnumera uma rua (município + código de via), um CEP ou uma parcela cadastral, com paginação
dar_get_streetnãoVia nomeada por UUID ou município + código de via
dar_get_postcodenãoCEP por código de 4 dígitos ou UUID
dar_search_addressessimBusca por prefixo em nomes de ruas, endereços de acesso e endereços de unidade
dar_graphqlsimPassagem direta GraphQL bruta para DAR/v2
dar_get_graphql_schemasimBusca o esquema GraphQL, compactado e filtrável

Todo resultado traz attribution (CC BY 4.0, Klimadatastyrelsen), códigos de status DAR com rótulos em inglês e pontos em EPSG:25832 e WGS84. Erros são tipados (config, bad_request, auth, not_found, rate_limited, upstream, timeout, network) e indicam o que fazer em seguida.

Instalação

Requer Node.js 20 ou mais recente.

Claude Code:

claude mcp add datafordeler-dar -- npx -y datafordeler-dar-mcp

Claude Desktop, Cursor, VS Code e outros clientes (mcp.json / claude_desktop_config.json):

{
  "mcpServers": {
    "datafordeler-dar": {
      "command": "npx",
      "args": ["-y", "datafordeler-dar-mcp"],
      "env": { "DATAFORDELER_API_KEY": "your-key-here" }
    }
  }
}

Como obter uma chave de API e por que você vai precisar dela

O acesso anônimo ao serviço REST legado funciona hoje, por isso as sete ferramentas de consulta não precisam de chave. A Klimadatastyrelsen anunciou que após 15 de janeiro de 2027 o Datafordeleren só atenderá solicitações autenticadas (chave de API ou OAuth). A busca por texto já precisa de chave porque roda no serviço GraphQL.

  1. Crie uma conta gratuita em https://datafordeler.dk (Administração do Datafordeler). Um usuário por e-mail é suficiente; MitID Erhverv é opcional.
  2. Crie um sistema de TI e adicione uma chave de API a ele.
  3. Defina DATAFORDELER_API_KEY.

Não há etapa de aprovação necessária para o DAR. Uma nova chave leva até 15 minutos para ativar; até lá, o serviço responde 401 "Unrecognized Authentication key". Os limites de taxa não são publicados; o servidor apresenta HTTP 429 como rate_limited.

Credenciais legadas opcionais (DATAFORDELER_USERNAME, DATAFORDELER_PASSWORD) são repassadas ao serviço REST se definidas.

Exemplos que um agente pode encadear

dar_get_postcode({ postcode: "1663" })
  -> postcodes[0].id = d4a3a5ad-...
dar_list_access_addresses({ postcode_id: "d4a3a5ad-...", page_size: 50 })
  -> entrances with lat/lon
dar_list_addresses({ access_address_id: "0a3f507a-d330-32b8-e044-0003ba298018" })
  -> 12 units at Oehlenschlægersgade 35
dar_get_address({ address_id: "0a3f50a0-0000-32b8-e044-0003ba298018" })
  -> "Oehlenschlægersgade 35, st. tv, 1663 København V", municipality 0101, parish Vesterbro

Com uma chave:

dar_search_addresses({ query: "rentemester", level: "street" })
  -> Rentemestervej, København (0101), id 831a760e-...
dar_list_access_addresses({ street_id: "831a760e-4e3f-42e8-a9a5-0b771f72880a" })
  -> every house number on the street, with lat/lon
dar_search_addresses({ query: "Rentemestervej 8, 2400" })
  -> "Rentemestervej 8, 2400 København NV"
dar_search_addresses({ query: "Oehlenschlægersgade 35, st", level: "address" })
  -> st. tv and st. th

O que o serviço GraphQL realmente faz

Verificado no serviço ao vivo em 01/10/2026. Vários pontos diferem do guia de transição publicado pelo Datafordeleren (v2.3, janeiro de 2025):

  • O DAR é servido em /DAR/v2. /DAR/v1, que o guia documenta, retorna 404.
  • Toda consulta de entidade deve trazer virkningstid e/ou registreringstid, ou filtrar por id_lokalId. Passe ambos definidos como agora para o estado atual; com apenas virkningstid você também recebe registros substituídos.
  • startsWith existe somente em adgangsadressebetegnelse, adressebetegnelse, vejnavn, postnr e navn, e é sensível a maiúsculas/minúsculas. Todo o resto aceita eq e in. Não há busca difusa, por substring ou ranqueada, nem autocompletar.
  • Referências são ids. Um DAR_Husnummer contém os UUIDs de sua rua, CEP e ponto de acesso; as coordenadas ficam em DAR_Adressepunkt.
  • Nomes de campos transliteram æ/ø/å como ae/oe/aa (doerbetegnelse).
  • A paginação é somente para frente: first (máx. 1000) e after.
  • As respostas são rápidas: 30 a 150 ms por consulta nos testes.

dar_search_addresses trata os argumentos de tempo, o filtro de status e a capitalização da primeira letra para você. dar_graphql passa consultas sem alterações e retorna os erros do serviço verbatim.

Dados, licença e atribuição

Fonte: Danmarks Adresseregister via Datafordeleren, Klimadatestyrelsen. Licença: CC BY 4.0 conforme os termos de uso do Datafordeleren. Você deve creditar a Klimadatastyrelsen "em um local apropriado"; o campo attribution em toda resposta existe para ser repassado. Endereços não são dados pessoais. O servidor não armazena nada e não registra nada.

Limitações conhecidas do serviço REST legado no qual esta versão se apoia: sem busca por texto, sem geocodificação reversa, sem autocompletar, paginação apenas por número de página e desligamento programado em 15 de janeiro de 2027. O substituto para tudo isso é o serviço GraphQL por trás das três ferramentas com chave.

Desenvolvimento

npm install
npm test          # build + unit tests + stdio integration tests (offline)
npm run test:live # also hits services.datafordeler.dk

Com DATAFORDELER_API_KEY definido, test:live também exercita as três ferramentas GraphQL; sem ele, esses testes são ignorados.

Estrutura: src/client.ts (busca REST e GraphQL, erros tipados), src/normalise.ts (achatamento, rótulos de status, UTM32 para WGS84), src/server.ts (registros de ferramentas), src/index.ts (ponto de entrada stdio). Os testes usam fixtures capturados do serviço ao vivo em 01/10/2026.

Feedback

Se isto for útil para você, ou se faltar algo que você precisa (outros registros, geocodificação reversa, um endpoint hospedado), abra uma issue. Issues e estrelas são como este projeto decide o que construir em seguida.

Licença

MIT. Veja LICENSE.