mcpField
Q
QRIS tools (offline)

QRIS tools (offline)

本地服务
github.com/EzkielynaGroup金融数据02 天前更新

关于 QRIS tools (offline)

QRIS tools 是离线 MCP 服务,用于读取、验证和处理 QRIS 支付码文本。它可将有效的静态码转换为带金额的动态码,并将有效内容渲染为 SVG;不处理或确认支付。

主要功能

  1. 01解析 QRIS 字段
  2. 02验证结构和 CRC
  3. 03为静态 QRIS 设置金额
  4. 04将有效内容渲染为 SVG
  5. 05以代码标识报告验证问题

适用场景

  1. 01查看 QRIS 文本中的商户信息
  2. 02使用或分享前检查支付码
  3. 03制作指定金额的 QRIS 码
  4. 04从有效内容生成 SVG

MCP 相关

向 MCP 客户端提供四种工具,用于解析和验证 QRIS 文本、为静态码设置金额,以及将有效内容渲染为 SVG。它只读取和改写文本,不转移或验证资金。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"ezkielynagroup-mcp-qris": {
"command": "npx",
"args": [
"-y",
"mcp-qris"
]
}
}
}
启动命令npx -y mcp-qris

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

安装包
npmmcp-qris1.0.0

工具

4

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

参数类型必填说明
qrisstring是QRIS 载荷文本(以 "000201" 开头,以 "6304" + 4 个十六进制字符结尾)。请粘贴文本,而不是图片。

详细介绍

mcp-qris

一个离线 MCP 服务,可让你的 AI 助手读取、检查并生成 QRIS 支付码(印度尼西亚的国家 QR 标准,基于 EMVCo 商户展示模式)。无需 API 密钥、无需网络、无需依赖项。

示例:“这是我店铺的静态 QRIS 文本:000201010211...6304ABCD。它有效吗?你能将它转换为金额为 Rp25.000 的动态版本,并提供 SVG 吗?”

🇮🇩 印度尼西亚语:请参阅下文。

请先阅读。 此工具只读取和重写文本。它不会转移资金,无法查看或确认付款,也未连接到任何银行或支付服务提供商。此处生成的动态 QRIS 是否有效,完全取决于作为其来源的商户静态 QRIS 是否有效。**请先用小额金额测试。**未经所有者许可,切勿粘贴或修改他人的 QRIS:修改 QRIS 以收取不属于你的款项属于欺诈行为。

  • 离线运行:单个 .mjs 文件,需要 Node.js 18+,无需 npm install,不进行网络调用,不写入文件。
  • 输入为文本:粘贴 QRIS 负载字符串(以 000201 开头)。解码照片或屏幕截图不在支持范围内;请先用任意 QR 阅读器应用扫描。
  • 如实验证:每个问题都会报告并附带代码,绝不会静默“修复”。

工具

工具功能
parse_qris将负载解码为带名称的字段:负载格式、静态 (11) / 动态 (12)、商户账户模板 26-51(GUI、商户 PAN、商户 ID、国家 ID.CO.QRIS.WWW 模板中的 NMID、商户类别 UMI/UKE/UME/UBE/URE)、MCC、货币(360 = IDR)、金额、小费/费用 (55-57)、国家/地区、商户名称/城市、邮政编码、附加数据(62:账单编号、店铺标签、终端标签等)、语言模板 (64) 和 CRC 校验。
validate_qris检查 TLV 结构、必填字段、值格式和 CRC-16/CCITT 校验和(多项式 0x1021,初始值 0xFFFF)。将每个问题作为错误或警告报告,并附带代码(例如 CRC_MISMATCH、TRUNCATED、AMOUNT_FORMAT)。
set_qris_amount将有效的静态 QRIS 转换为金额以整卢比计的动态 QRIS:将标签 01 设为 12,在货币字段后插入标签 54,可选添加小费或便利费(标签 55-57,默认关闭),并重新计算 CRC。拒绝无效输入,默认也拒绝已经是动态的输入。返回结果前会再次验证。
qris_to_svg使用内置编码器将有效的 QRIS 负载渲染为 SVG QR 码(字节模式、版本 1-40、纠错等级 L/M/Q/H,默认 M,4 模块静区)。拒绝无效的 QRIS。

所有工具均为只读(readOnlyHint: true),且采用封闭世界设置(openWorldHint: false)。

set_qris_amount 会修改什么
标签修改前(静态)修改后(动态)
01 发起点11(或缺失)12
54 交易金额不存在例如 25000
55-57 小费 / 费用不存在仅在你提出要求时添加(tip:prompt、fixed、percent)
63 CRC旧校验和重新计算

其他所有内容(商户账户、NMID、名称、城市、MCC、标签 62)都按原顺序原样复制。

安装

使用 npx(推荐): 无需安装。以下配置会运行 npx -y mcp-qris。

从源代码安装:

git clone https://github.com/EzkielynaGroup/mcp-qris.git
cd mcp-qris
node --test test/        # optional: offline tests

然后使用 "command": "node",并将 "args": ["/full/path/to/mcp-qris.mjs"] 替换为 npx 配置。

在 Windows 上,如果应用无法启动 npx,请使用 "command": "cmd",并设置 "args": ["/c", "npx", "-y", "mcp-qris"]。

Claude Desktop

进入设置 → 开发者 → 编辑配置(claude_desktop_config.json),然后完全退出并重新打开 Claude Desktop。

{
  "mcpServers": {
    "qris": {
      "command": "npx",
      "args": ["-y", "mcp-qris"]
    }
  }
}
Claude Code
claude mcp add qris -- npx -y mcp-qris

添加 --scope user,即可在每个项目中使用。使用 claude mcp list 检查。

Cursor

~/.cursor/mcp.json(所有项目)或 .cursor/mcp.json(单个项目),使用与 Claude Desktop 相同的 JSON。

OpenCode

项目中的 opencode.json,或 ~/.config/opencode/opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "qris": {
      "type": "local",
      "command": ["npx", "-y", "mcp-qris"],
      "enabled": true
    }
  }
}

配置

无需环境变量或 API 密钥。服务不会建立网络连接,也不会写入文件。

安全与限制

  • 输入最多 2,048 个字符;EMVCo 建议不超过 512 个字符,超出时会发出警告。
  • 长度按字符计数(EMVCo MPM 4.4.1.1);CRC 按 UTF-8 字节计算。
  • set_qris_amount 仅写入整卢比金额(1 至 13 位数字),金额超过 Rp10.000.000 时会发出警告。这是印度尼西亚银行条例 PADG 24/1/PADG/2022 规定的单笔 QRIS 限额(请确认是否有更新规定)。
  • 除非设置 allow_dynamic_input: true,否则会拒绝已是动态码的输入,因为动态码通常仅用于单笔交易。
  • qris_to_svg 绝不会编码无效 QRIS:损坏的码无法支付,只会让买家困惑。
  • 答案不会包含堆栈跟踪;日志仅输出到 stderr。

标准与来源

  • EMVCo,《支付系统的 EMV 二维码规范:商户展示模式》,1.1 版,2020 年 11 月(emvco.com):数据对象、ID 分配、CRC(ISO/IEC 13239,多项式 0x1021,初始值 0xFFFF)、金额和费用格式。validate_qris 中的所有字段规则均遵循此文档。CRC 和解析器均已根据其附录 B 中的示例载荷进行测试。
  • Bank Indonesia,QRIS(印度尼西亚快速响应码标准)(bi.go.id):关于实施国家支付二维码标准的 PADG 21/18/PADG/2019(及其修订版),以及 PADG 24/1/PADG/2022(单笔限额 Rp10.000.000)。
  • ASPI(Asosiasi Sistem Pembayaran Indonesia)负责维护 QRIS 技术规范。该文档仅向业内成员提供,我们无法获取。此工具中的 QRIS 专用标签(国家模板 GUI ID.CO.QRIS.WWW、其子 ID 02 中的 NMID、子 ID 03 中的商户类别 UMI/UKE/UME/UBE/URE、标签 26-45 的子 ID 01/02 中的 PAN/商户 ID)来自印度尼西亚支付服务提供商的公开文档和开源解析器,因此应视为描述性信息,而非权威信息。它们仅影响标签和警告,不会影响 CRC 或结构检查。
  • 编码器遵循 ISO/IEC 18004(QR Code):容量已根据标准字节模式表进行测试;此外,还使用两个独立解码器(macOS CoreImage 和 Vision)对 268 个生成的符号(版本 1-40、L/M/Q/H、全部 8 种掩码、UTF-8 文本)进行解码交叉验证。请参见 tools/verify-macos.mjs。

测试中的所有 QRIS 均为合成数据(虚构商户 “TOKO CONTOH”、虚构 NMID)。未包含任何真实商户的码。

常见问题

如何检查 QRIS 码是否有效? 将 QRIS 文本粘贴到 validate_qris。它会检查结构、EMVCo 必填字段以及末尾 4 个字符中的 CRC-16 校验和,并列出发现的所有问题。

如何将静态 QRIS 转换为带金额的动态 QRIS? 使用 set_qris_amount,输入你自己的静态 QRIS 和以卢比计价的金额。它会将标签 01 设为 12,添加标签 54 并重新计算 CRC;正式使用前,请先用小额进行测试支付。

更改 QRIS 中的金额会转移资金或创建付款吗? 不会。QRIS 只是付款人的应用读取的一段文本;不会向银行发送任何内容。款项仍会进入原始码中的商户账户,付款人的应用也会在付款前显示商户名称。

如何计算 QRIS 的 CRC? CRC-16/CCITT-FALSE:多项式 0x1021,初始值 0xFFFF,覆盖截至 6304(含)的所有字符,并以 4 位大写十六进制数字表示。123456789 的校验值为 29B1。

QRIS 中的 NMID 位于何处? 位于国家 QRIS 商户账户模板(通常为标签 51,GUI 为 ID.CO.QRIS.WWW)的子 ID 02 中,例如 ID10...。parse_qris 会将其作为 summary.nmid 返回。

它能读取照片中的 QRIS 吗? 不能。请使用任意二维码读取应用扫描该码,复制文本并粘贴到这里。

开发

node --test test/

19 项测试(单元测试及通过 MCP stdio 进行的端到端测试),无需联网。在 macOS 上,可以使用 tools/verify-macos.mjs 和 tools/verify-macos.swift 再次进行编码器交叉验证。欢迎提交问题和拉取请求。


印度尼西亚语

面向 AI 助手(Claude Desktop、Claude Code、Cursor、OpenCode)的离线 MCP 服务,用于读取、检查和生成 QRIS 支付码。无需 API 密钥、无需联网、无需依赖。

示例:“这是我店铺的静态 QRIS 文本:000201010211...6304ABCD。有效吗?请帮我生成面额为 Rp25.000 的动态版本和 SVG 图片。”

**请务必阅读。**此工具仅读取和重写文本。不会转移资金,无法查看或确认付款,也不会连接任何银行或 PJSP。此工具生成的动态 QRIS 只有在商户自己的静态 QRIS 有效时才有效。**请先用小额金额测试。**未经所有者许可,请勿粘贴或修改他人的 QRIS:修改 QRIS 以接收不属于您的款项属于欺诈行为。

工具

工具功能
parse_qris将 QRIS 拆解为命名字段:静态/动态、商户账户(标签 26-51,包括 NMID)、MCC、货币(360 = 印尼盾)、金额、小费/费用、商户名称/城市、邮政编码、附加数据(标签 62)和 CRC 校验结果。
validate_qris检查 TLV 结构、必填字段、值格式和 CRC-16/CCITT(0xFFFF)。报告所有问题及其代码。
set_qris_amount将有效的静态 QRIS 转换为带整数印尼盾金额的动态 QRIS:标签 01 设为 12,添加标签 54,小费/费用(标签 55-57)可选,且默认关闭,并重新计算 CRC。拒绝损坏或已是动态的 QRIS。
qris_to_svg使用内置编码器,将有效的 QRIS 生成为 QR 图片(SVG)(纠错级别 L/M/Q/H,默认为 M)。

安装:与上面的示例相同。Claude Code:claude mcp add qris -- npx -y mcp-qris。Windows:"command": "cmd","args": ["/c", "npx", "-y", "mcp-qris"]。无需环境变量或 API 密钥。

限制:输入必须为文本(而非照片);金额为 1-13 位整数印尼盾;超过 Rp10.000.000 时会发出警告(根据 PADG 24/1/PADG/2022 规定的 QRIS 单笔交易限额,请确认最新规定);拒绝已是动态的 QRIS,除非设置 allow_dynamic_input: true。

来源:结构、字段和 CRC 依据 EMVCo Merchant-Presented Mode v1.1(2020 年 11 月)规范;QRIS 依据 Bank Indonesia(PADG 21/18/PADG/2019 及其修订版、PADG 24/1/PADG/2022)。ASPI 的 QRIS 技术规范未公开,因此 QRIS 专用标签(GUI ID.CO.QRIS.WWW、子 ID 02 中的 NMID、UMI/UKE/UME/UBE/URE 标准)根据 PJSP 公开文档和开源解析器整理:请将其视为说明,而非权威标准。所有测试中的 QRIS 均为虚构示例(虚构商户“TOKO CONTOH”)。

常见问题

  • 如何检查 QRIS 是否有效? 将 QRIS 文本粘贴到 validate_qris;此工具会检查结构、必填字段和末尾 4 个字符中的 CRC。
  • 如何将静态 QRIS 转换为带金额的动态 QRIS? 使用 set_qris_amount 处理您自己的静态 QRIS,然后用小额金额测试付款。
  • 修改 QRIS 金额会转移资金吗? 不会。QRIS 只是文本;资金仍会进入原始代码中已有的商户账户,付款应用也会在付款前显示商户名称。
  • NMID 在哪里? 位于国家 QRIS 模板中(通常是标签 51,GUI 为 ID.CO.QRIS.WWW),即子 ID 02。

许可证

MIT。请参阅 LICENSE。QRIS 是 Bank Indonesia 和 ASPI 的标准;EMV 是 EMVCo 的商标。本项目独立开发,与 Bank Indonesia、ASPI、EMVCo 或任何支付服务提供商均无关联。


由 Ezkielyna 制作,这是一家面向印度尼西亚开发者的独立 AI API 网关(支持使用 QRIS 付款)。

评论

支持 Markdown

第一次接触 MCP?

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

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