关于 Danish annual reports (CVR)
此 MCP 服务从丹麦商业管理局读取企业公开的 XBRL 年报,提供当期及历史财务数据和报告标记事实,并说明缺项或冲突,不对数据进行猜测。
主要功能
- 01按名称或 CVR 搜索企业
- 02列出已发布申报文件
- 03获取当期及上年数据
- 04比较多年财务历史
- 05读取报告标记事实
- 06区分集团与母公司数据
适用场景
- 01查看丹麦企业最新财务状况
- 02比较不同年度的报告数据
- 03提取年报中的标记明细
MCP 相关
向 MCP 客户端提供五个只读工具,用于搜索企业、浏览申报文件及获取财务数据或报告标记事实。通过 stdio 运行;按企业名称搜索还需 CVR 凭据。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y dk-regnskab-mcpCVR_USEROptional. CVR register system-to-system username, only needed for search_company.CVR_PASSWORD密钥Optional. CVR register system-to-system password, only needed for search_company.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
5收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| limit | integer | 否 | 返回的公司数量上限。 |
| query | string | 是 | 公司名称或其部分内容,例如 "Carlsberg" 或 "lego a/s"。8 位 CVR 编号可用于查询相应公司。 |
详细介绍
dk-regnskab-mcp
为 Claude(或任何 MCP 客户端)提供丹麦公司的已发布年度报告:从丹麦商业管理局(Erhvervsstyrelsen)的 XBRL 申报文件中直接读取最新年度及上一年度的关键数据。无需 API 密钥。
适用于小型公司(丹麦 GAAP)和上市公司(IFRS/ESEF,可追溯至 2015 年),能区分集团报告中的集团与母公司数据,并解释数据缺失之处,而非妄加猜测。已针对约 300 份真实申报文件进行在线测试。
“CVR 24256790 去年的营收和权益是多少?与之前相比有何变化?”
快速开始
需要 Node.js 22.18 或更高版本。无需 API 密钥。
Claude Code
claude mcp add dk-regnskab -- npx -y dk-regnskab-mcp
Claude Desktop:将以下内容添加到 claude_desktop_config.json:
{
"mcpServers": {
"dk-regnskab": { "command": "npx", "args": ["-y", "dk-regnskab-mcp"] }
}
}
Cursor:将同一代码块放入 ~/.cursor/mcp.json(或项目中的 .cursor/mcp.json)。其他 MCP 客户端:通过标准输入/输出运行 npx -y dk-regnskab-mcp。
从源代码运行
git clone https://github.com/mikkelmanniche-dk/dk-regnskab-mcp
cd dk-regnskab-mcp && npm install && npm run build
claude mcp add dk-regnskab -- node /absolute/path/to/dk-regnskab-mcp/dist/index.js
工具
| 工具 | 输入 | 返回内容 |
|---|---|---|
search_company | query(名称或 CVR 编号),可选的 limit | 匹配的公司及其 CVR 编号、状态、公司类型、行业、地址和员工规模范围;优先显示活跃、名称完全匹配和规模较大的公司。需要 CVR 凭据,详见下文 |
list_filings | cvr,可选的 limit(1–50)、可选的 year | 已发布的申报文件,按时间从新到旧排列,并附文档链接 |
get_financials | cvr,可选的 year(报告期结束年份),可选的 scope(group 或 parent) | 公司名称、期间、货币、审计师、关键数据(本年度和上一年度)、是否为集团报告、数据缺失说明、源文档 URL |
get_financials_history | cvr,可选的 years(1–15),可选的 scope | 每个报告年度的关键数据,按时间从新到旧排列 |
get_report_facts | cvr,可选的 year、scope、match(概念名称的一部分)、limit | 年度报告中标记的所有数值和文本,例如员工成本或股息 |
所有工具均为只读,会声明输出架构并返回结构化内容。
关键数据:营收、毛利润、营业利润、税前利润、年度利润、平均员工人数、总资产、流动资产、现金、权益、负债。
公司名称搜索(可选)
search_company 使用 CVR 注册库,该服务需要系统对系统凭据。凭据免费:向丹麦商业管理局申请,然后将其传递给服务:
claude mcp add dk-regnskab -e CVR_USER=... -e CVR_PASSWORD=... -- npx -y dk-regnskab-mcp
其他所有功能均无需凭据。请注意,注册库与申报文件索引一样,只通过纯 HTTP 响应,因此凭据将以未加密方式发送。这些凭据仅提供对公开公司数据的只读访问权限。
工作原理
flowchart LR
C[Claude / MCP client] -- stdio --> S[dk-regnskab-mcp]
S -- "search by CVR" --> I[(distribution.virk.dk<br/>filing index)]
S -- "download XBRL (gzip)" --> D[(Filing documents)]
S --> P[Parse contexts & facts<br/>by namespace, not prefix]
P --> F[Key figures + notes]
它处理的陷阱
真实的丹麦申报文件比分类体系所暗示的更加杂乱。此解析器是基于实际申报文件构建的:
- 维度事实不是总额。 一份申报文件可能先报告一次总权益,又按组成部分(股本、留存收益)分别报告。这里只使用无维度上下文,因此股本绝不会被报告为权益。
- 数值冲突。 有些申报文件会针对同一事实和期间报告两个不同的数值(例如,员工人数为 0 和 1)。此时会留空并附注,而不是猜测。
- 缺少收入通常合规。 大多数小型公司(B 类申报公司)可以省略收入,改为报告毛利。结果会对此作出说明。
- 不同申报文件中的命名空间前缀各不相同,因此会按命名空间 URI 匹配概念。
- 文档经过 gzip 压缩,却没有标明。 会通过魔数检测。
- 名为 "AARSRAPPORT" 的文档不一定包含相关数值。 会解析申报文件中的每个 XML 文档,并采用产生数值最多的那个。
- 集团报告包含两套数值。 母公司的报告通常也包含合并集团的数据,而丹麦 GAAP 和 IFRS 对这两者的标记方式恰好相反。默认返回集团数据;
scope: "parent"则只返回母公司数据。混淆两者可能会把集团亏损误当成母公司盈利。 - 资产负债平衡检查。 如果所选范围内的资产总额不等于负债和权益之和,结果会对此作出说明。
- 全年数据旁边还有第四季度数据。 某些年度报告还会标记 Q4,且结束日期与全年相同。此时采用期间较长的数据。
- 三代 IFRS。 ESEF(自 2021 年起)、更早的丹麦 IFRS 扩展分类体系(收入标记为
NetSales),以及 2016 年以前申报文件中使用的 2011 IFRS 分类体系。这三种都能读取。 - 货币依据数值本身确定。 Maersk 以 USD 报告,但申报文件的其他位置也会提及 DKK。
- 旧报告可能排在列表较后位置。 上市公司每年会发布 4–5 份申报文件,因此会在索引中筛选指定的
year,而不是只查结果的第一页。包含年度报告文档的中期报告会被跳过。 - 公司详情可能位于关联文档中,有些申报者还会在公司名称中放入 HTML。这两种情况都能处理。
限制
- 按名称搜索需要 CVR 凭据(免费,但需要申请)。没有凭据时,请自行查找 CVR 编号,例如在 datacvr.virk.dk 上查询。
- 仅支持提交机器可读年度报告的公司。独资企业和其他一些公司类型不在支持范围内。
- 仅限申报者标记的内容:
get_report_facts返回已标记的报表和详情,不包括附注中的未标记文本或管理层审查内容。 - IFRS 申报文件不会标记员工人数(该信息以文本形式写在附注中),因此这些公司的
employees为空。 - 申报文件索引仅支持纯 HTTP,因此服务必须在本地或服务器端运行,不能在浏览器中运行。
- 数据条款: 这些申报文件是丹麦商业管理局的公开数据。请根据你的使用场景查阅其使用条款;本项目不对这些条款作任何声明。
基于真实申报文件测试
npm run measure 会针对最近一年提交申报文件的约 300 家公司,以及一组固定的大型公司(LEGO、Arla、Carlsberg、Maersk、Novo Nordisk、较早年份的 IFRS 申报文件,以及同时包含两种范围的集团报告),运行真实工具流程。此命令需要网络连接,且不属于 npm test 的一部分。
运行于 2026 年 9 月 25 日(v0.3.0):查询 311 次,解析 309 份,2 家公司没有 XBRL 年度报告,0 个错误,0 处资产负债不平衡,每次查询的中位耗时为 118 ms。
开发
npm test # parser tests against synthetic fixtures (no network)
npm run measure # live check against real filings (network)
npm run typecheck
npm run build
npm run ci # typecheck + test + build, som CI
合并前请运行 npm run ci;它与 .github/workflows/ci.yml 中的流程一致。CI 在 Node 22 和 24 上进行测试;本地则使用你当前安装的 Node 版本运行。
路线图
- 通过 CVR 登记册搜索公司名称
- 一次调用获取多年历史记录
- 已发布到 npm 和官方 MCP Registry
许可证
MIT。由 Mikkel Manniche 构建。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。