mcpField
D
Danish annual reports (CVR)

Danish annual reports (CVR)

本地服务
github.com金融数据14 周前更新

关于 Danish annual reports (CVR)

此 MCP 服务从丹麦商业管理局读取企业公开的 XBRL 年报,提供当期及历史财务数据和报告标记事实,并说明缺项或冲突,不对数据进行猜测。

主要功能

  1. 01按名称或 CVR 搜索企业
  2. 02列出已发布申报文件
  3. 03获取当期及上年数据
  4. 04比较多年财务历史
  5. 05读取报告标记事实
  6. 06区分集团与母公司数据

适用场景

  1. 01查看丹麦企业最新财务状况
  2. 02比较不同年度的报告数据
  3. 03提取年报中的标记明细

MCP 相关

向 MCP 客户端提供五个只读工具,用于搜索企业、浏览申报文件及获取财务数据或报告标记事实。通过 stdio 运行;按企业名称搜索还需 CVR 凭据。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"mikkelmanniche-dk-dk-regnskab": {
"command": "npx",
"args": [
"-y",
"dk-regnskab-mcp"
],
"env": {
"CVR_USER": "<CVR_USER>",
"CVR_PASSWORD": "<CVR_PASSWORD>"
}
}
}
}
启动命令npx -y dk-regnskab-mcp
需要配置的环境变量
CVR_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmdk-regnskab-mcp0.3.2

工具

5

收录的工具列表 · 更新于 2 周前

参数类型必填说明
limitinteger否返回的公司数量上限。
querystring是公司名称或其部分内容,例如 "Carlsberg" 或 "lego a/s"。8 位 CVR 编号可用于查询相应公司。

详细介绍

dk-regnskab-mcp

CI Release License: MIT

为 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_companyquery(名称或 CVR 编号),可选的 limit匹配的公司及其 CVR 编号、状态、公司类型、行业、地址和员工规模范围;优先显示活跃、名称完全匹配和规模较大的公司。需要 CVR 凭据,详见下文
list_filingscvr,可选的 limit(1–50)、可选的 year已发布的申报文件,按时间从新到旧排列,并附文档链接
get_financialscvr,可选的 year(报告期结束年份),可选的 scope(group 或 parent)公司名称、期间、货币、审计师、关键数据(本年度和上一年度)、是否为集团报告、数据缺失说明、源文档 URL
get_financials_historycvr,可选的 years(1–15),可选的 scope每个报告年度的关键数据,按时间从新到旧排列
get_report_factscvr,可选的 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 构建。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。