关于 datafordeler-dar-mcp
datafordeler-dar-mcp 是一个 MCP 服务,可通过 Datafordeleren 访问丹麦官方 DAR 地址登记数据,面向 AI Agent 和 MCP 客户端。它同时提供地址查询工具和需要密钥的 GraphQL 访问。
主要功能
- 01查询单元地址和入口地址
- 02按街道或邮政编码列出地址
- 03使用 API 密钥搜索地址记录
- 04透传 DAR GraphQL 查询
- 05将坐标转换为 WGS84
适用场景
- 01通过 DAR UUID 获取地址
- 02列出某条街道或邮政编码区域内的入口
- 03按街道名称前缀搜索丹麦地址
MCP 相关
该服务提供十种工具,用于 DAR 地址和街道查询、邮政编码数据、搜索、状态检查及 GraphQL 访问。七种基于 REST 的查询工具无需密钥;搜索和 GraphQL 工具需要 Datafordeleren API 密钥。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
10收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
datafordeler-dar-mcp
用于从 Danmarks Adresseregister (DAR) 获取丹麦地址的 MCP 服务,数据来自官方国家数据分发平台 Datafordeleren。
DAWA(dawa.aws.dk、api.dataforsyningen.dk)已于 2026 年 10 月 1 日关闭,目前会返回 HTTP 410。所有基于它构建的地址工具都已失效。Klimadatastyrelsen 的替代方案是 Datafordeleren,它采用密钥验证、双时态数据模型,并以 GraphQL 为核心。此服务通过十个小巧且附有文档的工具,为 AI Agent(Claude、Cursor、VS Code 以及任何 MCP 客户端)提供 DAR 数据,并将坐标转换为 WGS84,同时保留 DAWA 也使用过的 DAR UUID。
状态:v0.1,试验版。 此项目旨在了解是否有人需要一个维护中的丹麦公共数据 MCP 层。星标数、npm 下载量和问题反馈都是参考信号。它刻意保持轻量:不缓存、不计量,仅使用一个数据源。
功能
| 工具 | 是否需要 API 密钥 | 用途 |
|---|---|---|
dar_status | 否 | 连通性检查、已配置的访问途径、服务关闭倒计时 |
dar_get_address | 否 | 按 UUID 获取一个单元地址(楼层/门牌) |
dar_get_access_address | 否 | 按 UUID 获取一个出入地址(入口/门牌号) |
dar_list_addresses | 否 | 获取一个出入地址下的单元地址 |
dar_list_access_addresses | 否 | 按市镇 + 道路代码、邮政编码或地籍地块枚举出入地址,支持分页 |
dar_get_street | 否 | 按 UUID 或市镇 + 道路代码获取命名道路 |
dar_get_postcode | 否 | 按 4 位代码或 UUID 获取邮政编码 |
dar_search_addresses | 是 | 按前缀搜索街道名称、出入地址和单元地址 |
dar_graphql | 是 | 直接透传到 DAR/v2 的原始 GraphQL 请求 |
dar_get_graphql_schema | 是 | 获取 GraphQL 架构,支持压缩和筛选 |
每个结果都包含 attribution(CC BY 4.0,Klimadatastyrelsen)、带英文标签的 DAR 状态代码,以及 EPSG:25832 和 WGS84 坐标点。错误类型明确(config、bad_request、auth、not_found、rate_limited、upstream、timeout、network),并会说明后续操作。
安装
需要 Node.js 20 或更高版本。
Claude Code:
claude mcp add datafordeler-dar -- npx -y datafordeler-dar-mcp
Claude Desktop、Cursor、VS Code 和其他客户端(mcp.json /
claude_desktop_config.json):
{
"mcpServers": {
"datafordeler-dar": {
"command": "npx",
"args": ["-y", "datafordeler-dar-mcp"],
"env": { "DATAFORDELER_API_KEY": "your-key-here" }
}
}
}
获取 API 密钥,以及为何需要它
目前可以匿名访问旧版 REST 服务,因此七个查询工具无需密钥。Klimadatastyrelsen 已宣布,2027 年 1 月 15 日之后,Datafordeleren 只会处理经过身份验证的请求(API 密钥或 OAuth)。文本搜索已经需要密钥,因为它使用 GraphQL 服务。
- 在 https://datafordeler.dk(Datafordeler Administration)创建免费账户。使用电子邮件注册即可;MitID Erhverv 为可选项。
- 创建一个 IT 系统,并为其添加 API 密钥。
- 设置
DATAFORDELER_API_KEY。
DAR 无需经过审批。新密钥最多需要 15 分钟才能激活;在此之前,服务会返回 401“Unrecognized Authentication key”。目前尚未公布速率限制;服务会将 HTTP 429 映射为 rate_limited。
如果设置了可选的旧版凭据(DATAFORDELER_USERNAME、DATAFORDELER_PASSWORD),这些凭据会透传给 REST 服务。
Agent 可串联使用的示例
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
使用密钥:
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
GraphQL 服务的实际功能
已于 2026-10-01 对照在线服务核实。有几点与 Datafordeleren 发布的迁移指南(v2.3,2025 年 1 月)不同:
- DAR 位于
/DAR/v2。指南中记载的/DAR/v1会返回 404。 - 每个实体查询都必须带上
virkningstid和/或registreringstid,或按id_lokalId筛选。要获取当前状态,请将两者都设为当前时间;如果只传virkningstid,也会得到已被取代的登记。 - 只有
adgangsadressebetegnelse、adressebetegnelse、vejnavn、postnr和navn支持startsWith,且区分大小写。其他字段均使用eq和in。不支持模糊搜索、子串搜索或排名搜索,也没有自动补全。 - 引用使用 ID。
DAR_Husnummer保存其街道、邮政编码和出入点的 UUID;坐标位于DAR_Adressepunkt。 - 字段名中的 æ/ø/å 分别转写为 ae/oe/aa(
doerbetegnelse)。 - 仅支持向前翻页:
first(最大值为 1000)和after。 - 响应速度很快:测试中每次查询耗时 30 到 150 毫秒。
dar_search_addresses 会为你处理时间参数、状态筛选和首字母大小写。dar_graphql 会原样传递查询,并逐字返回服务的错误。
数据、许可与署名
来源:通过 Datafordeleren 获取的 Danmarks Adresseregister,Klimadatastyrelsen。
许可:根据 Datafordeleren 的使用条款,采用 CC BY 4.0。你必须在“适当的位置”署名 Klimadatastyrelsen;每个响应中的 attribution 字段就是为转交署名信息而提供的。地址不属于个人数据。该服务不存储任何内容,也不记录任何日志。
此版本依赖的旧版 REST 服务有以下已知限制:不支持文本搜索、反向地理编码或自动补全;仅能按页码分页;并计划于 2027 年 1 月 15 日关闭。三个带密钥的工具背后的 GraphQL 服务可替代上述所有功能。
开发
npm install
npm test # build + unit tests + stdio integration tests (offline)
npm run test:live # also hits services.datafordeler.dk
设置 DATAFORDELER_API_KEY 后,test:live 也会测试三个 GraphQL 工具;未设置时会跳过这些测试。
项目结构:src/client.ts(REST 和 GraphQL 请求、类型化错误)、src/normalise.ts(扁平化、状态标签、UTM32 转 WGS84)、src/server.ts(工具注册)、src/index.ts(stdio 入口)。
测试使用的是 2026-10-01 从在线服务捕获的样本数据。
反馈
如果你觉得这个项目有用,或者发现缺少你需要的功能(其他登记簿、反向地理编码、托管端点),请提交 issue。Issue 和 Star 会影响项目接下来要开发的内容。
许可证
MIT。请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。