mcpField
B
BNR exchange rates

BNR exchange rates

本地服务
foreverworks.github.io金融数据1今天更新

关于 BNR exchange rates

BNR exchange rates 是只读 MCP 服务,用于查询罗马尼亚国家银行的参考汇率,并将金额换算为 RON 或从 RON 换算。它涵盖 2005 年以来的日期,保留公布的十进制汇率,并计算 ANAF 使用的年度平均汇率。

主要功能

  1. 01查询 2005 年以来指定日期的汇率
  2. 02将金额换算为 RON 或从 RON 换算
  3. 03获取多种货币及日期范围内的汇率
  4. 04计算 ANAF 年度平均汇率
  5. 05保留 BNR 的十进制精度

适用场景

  1. 01查询发票日期适用的汇率
  2. 02将外币金额换算为 RON
  3. 03获取一段时期内的汇率
  4. 04查询外币收入的年度平均汇率

MCP 相关

该 MCP 服务提供只读工具,用于健康检查、汇率查询、金额换算、多汇率查询和年度平均值计算。它读取 BNR 的公开 XML 文件,无需账户或 API 密钥。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"com-foreverworks-bnr": {
"command": "npx",
"args": [
"-y",
"@foreverworks/mcp-bnr"
]
}
}
}
启动命令npx -y @foreverworks/mcp-bnr

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@foreverworks/mcp-bnr0.1.0

工具

5

收录的工具列表 · 更新于 3 天前

参数类型必填说明
yearinteger是日历年份,例如 2023。
currencystring是ISO 4217 代码:EUR、USD、GBP、CHF 等(XAU 表示黄金,XDR 表示 SDR);不区分大小写。

详细介绍

BNR 汇率图标 BNR 汇率 MCP 服务

通过 AI 助手查询罗马尼亚国家银行的参考汇率:自 2005 年以来任意一天的生效汇率,以及 BNR 发布该汇率的日期;兑换为 RON 或从 RON 兑换的金额;一次查询多种货币的汇率或一段时间内的定盘汇率;以及 ANAF 在 D212 中用于折算外国收入的年度平均汇率。它只读取数据:没有工具会写入数据,也不会处理money。汇率保留 BNR 的原始精度(4.2440,而非 4.244)。

你不需要任何东西:无需账户,也无需密钥。该服务读取 curs.bnr.ro 上的 BNR 公开 XML 文件。

你可以这样提问

  • “2025 年 3 月 14 日 BNR 的欧元汇率是多少?”
  • “将一张日期为 2026 年 10 月 3 日、金额为 1,250.50 EUR 的发票按该日期之前 BNR 发布的最新汇率兑换为列伊。”
  • “今天 10,000 HUF 等于多少 RON?”
  • “列出 2026 年 9 月每个银行日的 BNR EUR 和 USD 汇率。”
  • “我的 2025 年 D212 应使用哪个年度平均 USD 汇率?”

安装

在 VS Code 中安装 在 Cursor 中安装 下载 Claude Desktop 版

使用 Claude Code:

claude mcp add bnr -- npx -y @foreverworks/mcp-bnr

Claude Desktop(Settings、Developer、Edit Config)和大多数其他客户端都以 JSON 格式读取相同的命令:

{
  "mcpServers": {
    "bnr": {
      "command": "npx",
      "args": ["-y", "@foreverworks/mcp-bnr"]
    }
  }
}

每个客户端都会在 Node 22.19 或更高版本上运行已发布的软件包。无需设置。

从克隆的仓库安装
git clone https://github.com/foreverworks/mcps.git && cd mcps
npm ci && npm run build
claude mcp add bnr -- node "$PWD/servers/bnr/dist/index.js"

在 JSON 配置中,命令为 node,其唯一参数是 servers/bnr/dist/index.js 的完整路径。若要通过 HTTP 在多个客户端之间共享同一个运行实例,请参阅 docs/deploying.md。

配置

无需单独配置。所有服务共用的变量见 docs/configuration.md;受 MCP_EGRESS_ALLOW 限制的进程必须允许访问 curs.bnr.ro。无论主机的时区如何,日期都采用布加勒斯特日期,因此“今天”指布加勒斯特的今天。

工具

所有工具均为只读:不会更改任何内容。

工具访问权限功能
health读取检查 BNR 是否有响应:返回最新定盘汇率的日期和所含货币数量;如果该汇率已超过五天,则发出警告。
rate读取查询某一天(默认今天)的生效汇率:返回当天的 BNR 定盘汇率,或此前最后一个银行日的汇率,并附上日期(published_on)和倍数。
convert读取按照指定的舍入规则,将金额(十进制字符串)按某一天的生效汇率兑换为 RON 或从 RON 兑换;若当天没有汇率,则使用此前的最新汇率,并返回汇率及其日期。
rates读取查询多种货币在某一天的生效汇率,或查询最长 366 天的时间窗口内 BNR 发布的所有定盘汇率;每种货币分别作为一个序列返回。
annual_average读取查询 ANAF 使用的年度平均汇率:BNR 十二个月度平均汇率的均值,并附上各月平均值和天数。

故障排除

input。 该问题无法按要求回答,且未获取任何数据:日期晚于今天或早于 2005 年、时间范围超过 366 天或超过 2,000 条汇率(请减少货币种类或缩短时间范围),或换算时没有 RON 一方(请换算两次并说明两种汇率)。消息中会说明具体原因。

not_found:“BNR publishes no ... rate here; it publishes ...”。 BNR 不发布该货币的汇率;消息中会列出 BNR 发布的货币。

not_found:“BNR has no rates file for ... yet”。 年度文件会在发布首次定盘价时出现,因此 1 月初的新年文件还没有自己的汇率:rate 和 convert 会采用 12 月的最后一个定盘价,但新年时间范围内的 rates 及其 annual_average 会等到首次定盘价发布后才提供。

api。 BNR 的服务器未响应,即使重试后仍然如此(状态码 0 表示未能连接)。请几分钟后重试。

drift。 BNR 返回的内容不是其汇率 XML,例如 HTML 页面或格式发生变化。服务器不会猜测;请报告此问题。

工作原理

数据来源

BNR 在 curs.bnr.ro 发布静态 XML,这是其“Curs XML”页面列出的主机(读取日期:2026-10-18):/nbrfxrates.xml 是最新定盘价,/files/xml/years/nbrfxrates<year>.xml 则包含某一年的所有定盘价,包括当前年份(约 300 KB)。汇率表示每单位 RON,或 HUF、JPY、KRW 等少数货币每 100 单位 RON(其 multiplier)。

旧的 www.bnr.ro 地址会返回 HTML 主页,状态码为 200,只检查状态码的读取程序会误以为这是一个没有汇率的年份。此处任何不是 BNR 汇率文档的响应都会报错为 drift,非纯十进制数值的汇率也会如此处理。

获取数据。 过去年份的文件不会变化,因此每个进程只获取一次。当前年份的文件和最新定盘价会缓存十分钟;首次读取时年份仍为当前年份的文件也会缓存十分钟,以便该年份结束后重新从最终文件读取年度平均值。遇到 5xx、429 或连接中断时,最多重试三次。

某日适用的汇率

BNR 每个银行工作日约在布加勒斯特时间 13:00 发布一次定盘价。某日的汇率就是该日的定盘价;周末、公共假日或当天定盘价发布前,采用此前最近一次定盘价(1 月初则采用 12 月的最后一个定盘价)。每个答复都包含 published_on,即所用定盘价的发布日期,因此你可以说明所依据的发布数据;如果在当天定盘价发布前查询当天汇率,答复还会附带说明这一情况的 note。

换算金额

convert 接收十进制字符串形式的金额,因此 1250.50 会按原样参与计算。换算为 RON:金额 × 汇率 / 倍数;从 RON 换算:金额 × 倍数 / 汇率(按每 100 HUF 兑换 1.2354 RON 计算,10000 HUF 等于 123.54 RON)。精确结果只舍入一次,舍入到 places 位(0 到 8 位,默认 2 位),默认采用四舍五入(半数远离零,符合发票舍入规则);除非 rounding 设为 half-even。

rate_rule 用于选择定盘价,答复会说明所采用的规则:

  • in_force(默认值)与 rate 返回的汇率一致:当天的定盘价,或最近一个银行工作日的定盘价。
  • last_before 是严格早于该日期的最近一次定盘价。罗马尼亚《财政法典》规定,外币发票应按增值税到期日“之前 BNR 公布的最后一个汇率”换算,因此,日期为星期五的发票采用星期四的定盘价,日期为星期一的发票采用星期五的定盘价。

答复会附带 BNR 公布的汇率、倍数、日期,以及一行可直接粘贴到文档中的 meaning:“100 EUR = 509.10 RON,依据 BNR 公布的 EUR 汇率 5.0910 RON/1 EUR,发布日期为 2026-10-16(于 2026-10-16 生效),按四舍五入保留 2 位小数”。

一次查询多个汇率

rates 会为每种货币返回一个序列(最多 50 种指定货币,或 BNR 发布的所有货币),每个序列都包含其乘数和定盘价,按时间从早到晚排列。指定 date(或不指定,表示今天)时,序列包含该日生效的汇率,并以其定盘日期标注;指定 from 和 to(默认为今天)时,则包含窗口内的每个定盘价,包含起止日期;若没有序列,会附注说明。窗口最多为 366 天和 2,000 个汇率(大约相当于一年内七种货币,或两个月内所有货币),因此结果仍然易于阅读。BNR 曾发布、但在窗口内没有定盘价的货币会列在 absent 中;若 BNR 在读取的年份内从未发布某种货币,则会拒绝查询,并列出 BNR 确实发布过的货币代码。

年平均汇率

D212 按照“罗马尼亚国家银行公布的年度平均汇率”将外币收入换算。BNR 发布的年度平均值(“年度序列——平均值”)是十二个月平均值的平均数(每个月的平均值又是该月每日汇率的平均数),精确到四位小数,而不是全年每日汇率的平均值(2022 年 USD:4.6885,而非 4.6923)。服务会以精确小数计算每个月的平均值和年度平均值,并将每个结果仅舍入一次,采用四舍五入到四位小数。

这与 BNR 发布的数值一致:USD 2020 年为 4.2440、2021 年为 4.1604、2022 年为 4.6885、2023 年为 4.5743,EUR 2022 年为 4.9315;无论是否先对月平均值进行舍入,结果都一致。若某年尚未结束,则会返回截至目前各月的结果,并标记 complete: false。npx tsx scripts/smoke.ts 会针对实时文件重复执行 USD 校验。

限制

  • 仅限 BNR 参考汇率,不包括 ECB 或商业银行的汇率。
  • 从 2005 年开始,这是 BNR 的 XML 序列起始年份。
  • 不提供交叉汇率。 BNR 不发布两种其他货币之间的汇率,因此换算时其中一种货币必须是 RON。
  • 若一个月内乘数发生变化,年度平均值计算会以 drift 失败,而不是按两种基数分别计算该月平均值;读取的文件中尚未发生过这种情况。若乘数在不同月份之间发生变化,则会返回 warning。

其他 BNR 服务

搜索日期:2026-10-18。BNR 没有发布 MCP 服务,社区中存在一个服务:

  • npm 上的 @pipeworx/mcp-bnr-ro(0.1.2,2026-09),通过 Pipeworx 网关提供,与大约 30 个共享元工具并列。它的两个工具分别返回最新定盘价或某一年的定盘价,且每个汇率都是 JavaScript 数字(4.2440 会以 4.244 返回);两者都不会选取某一天生效的汇率,也不会计算年度平均值。

2026-10-21 的第二次搜索又发现了两个可将金额换算为 RON 的工具:

  • PyPI 上的 anafpy MCP 工具。
  • PyPI 上的 bnr-converter-mcp-server,它也会取某个日期之前的最后一个汇率,但金额使用 Python 浮点数,并通过浮点数进行舍入。

一些库也会读取相同的 XML,但不使用 MCP:npm 上的 curs-bnr、bnr-exchange-rate 等;PyPI 上的 bnrxrate 和 anafpy 的 BNR 客户端;以及 Packagist 上的 itrack/cursbnr 和 peterlupu/curs-bnr。

开发这个服务,是为了实现这些工具都做不到的功能:它直接从 BNR 读取数据,运行位置由调用方决定;保留每个汇率在 BNR 中的原始写法;返回任意日期生效的汇率,包括周末、节假日和 13:00 之前的时段;按指定的舍入规则以精确小数进行换算;并按 BNR 发布、ANAF 使用的方式计算年度平均值。

评论

支持 Markdown

第一次接触 MCP?

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

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