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
| Ferramenta | Precisa de chave de API | Finalidade |
|---|---|---|
dar_status | não | Verificação de conectividade, caminhos de acesso configurados, contagem regressiva para o encerramento |
dar_get_address | não | Um endereço de unidade (andar/porta) por UUID |
dar_get_access_address | não | Um endereço de acesso (entrada / husnummer) por UUID |
dar_list_addresses | não | Unidades em um endereço de acesso |
dar_list_access_addresses | não | Enumera uma rua (município + código de via), um CEP ou uma parcela cadastral, com paginação |
dar_get_street | não | Via nomeada por UUID ou município + código de via |
dar_get_postcode | não | CEP por código de 4 dígitos ou UUID |
dar_search_addresses | sim | Busca por prefixo em nomes de ruas, endereços de acesso e endereços de unidade |
dar_graphql | sim | Passagem direta GraphQL bruta para DAR/v2 |
dar_get_graphql_schema | sim | Busca 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.
- Crie uma conta gratuita em https://datafordeler.dk (Administração do Datafordeler). Um usuário por e-mail é suficiente; MitID Erhverv é opcional.
- Crie um sistema de TI e adicione uma chave de API a ele.
- 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
virkningstide/ouregistreringstid, ou filtrar porid_lokalId. Passe ambos definidos como agora para o estado atual; com apenasvirkningstidvocê também recebe registros substituídos. startsWithexiste somente emadgangsadressebetegnelse,adressebetegnelse,vejnavn,postnrenavn, e é sensível a maiúsculas/minúsculas. Todo o resto aceitaeqein. Não há busca difusa, por substring ou ranqueada, nem autocompletar.- Referências são ids. Um
DAR_Husnummercontém os UUIDs de sua rua, CEP e ponto de acesso; as coordenadas ficam emDAR_Adressepunkt. - Nomes de campos transliteram æ/ø/å como ae/oe/aa (
doerbetegnelse). - A paginação é somente para frente:
first(máx. 1000) eafter. - 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.