mcpField
R
Rupiah tools

Rupiah tools

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

关于 Rupiah tools

Rupiah tools 是离线 MCP 服务,提供印尼数字转文字、印尼盾格式化与解析,以及依据 2025 年起规则的增值税计算。它采用精确的十进制运算,并说明有歧义的数字格式,适用于收据和财务计算。

主要功能

  1. 01将数字转换为印尼语文字
  2. 02格式化印尼盾金额
  3. 03解析多种印尼盾文本格式
  4. 04按金额或总额计算增值税
  5. 05采用精确十进制运算

适用场景

  1. 01将印尼盾金额转为收据文字
  2. 02规范从文本中提取的金额
  3. 03计算增值税及含税总额
  4. 04从含税总额反算税前价格

MCP 相关

向 MCP 客户端提供四种工具,用于将数字转成印尼语文字、格式化和解析印尼盾金额,以及计算印度尼西亚增值税。

配置

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

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

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

安装包
npmmcp-rupiah1.0.0

工具

4

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

参数类型必填说明
senboolean否当 rupiah=true 时:将最多 2 位小数读作 sen(“…… rupiah lima puluh sen”),而不是读作“koma”。
angkanumber|string是JSON 数字,或“1250000”、“Rp1.250.000,50”或“1,5 jt”等文本。非常大的数字(>= 2^53)请以文本形式发送。
hurufenum否字母大小写:kecil(小写)、awal(首字母大写)、judul(标题式大小写)、besar(大写)。kecil | awal | judul | besar
rupiahboolean否追加“rupiah”。
kata_negatifenum否负数使用的词。minus | negatif

详细介绍

mcp-rupiah

一个 MCP 服务,为你的 AI 助手提供印尼盾和印尼数字工具:terbilang(将数字转换为印尼语文字)、印尼盾格式化、解析 Rp 1.250.000,- 或 1,5 jt 这类杂乱金额,以及遵循 2025 年及以后规则的印尼增值税(PPN)计算器。离线运行,十进制计算精确,无需 API 密钥,也没有依赖项。

示例:“为这张收据写出 Rp1.500.250 的 terbilang,并计算总额 Rp5.550.000 中包含多少 PPN?”

🇮🇩 印度尼西亚语:请查看下文。

  • 单文件,无依赖项:Node.js 18+,无需 npm install,无需联网,也不会写入文件。
  • 精确:所有计算都使用 BigInt 十进制数和分数,因此不会出现 0.1 + 0.2 这类浮点误差。非常大的数字可以作为文本发送。
  • 诚实:对于有歧义的输入(1,500 是一点五还是一千五百?),按印尼语习惯解读,并在答案中说明解读方式。

工具

工具功能示例
terbilang数字 → 印尼语文字。最大支持 999 kuadriliun(< 10^18),支持带 koma 的小数、负数(minus)、可选的 rupiah 后缀和 sen,以及字母大小写格式(kecil、awal、judul、besar)。正确遵循 se- 规则:sepuluh、sebelas、seratus、seribu(但使用 satu juta)。1500250 → satu juta lima ratus ribu dua ratus lima puluh
format_rupiah数字 → Rp1.234.567,89(千位用句点分隔,小数用逗号分隔)。选项:小数位数(0-4 位或自动)、带/不带 Rp、Rp 后加空格、,- 后缀、紧凑格式 Rp1,2 jt / Rp1,2 juta。舍入规则为远离零方向的四舍五入。1250000(紧凑格式)→ Rp1,3 jt
parse_rupiah杂乱文本 → 数字。支持 Rp、Rp.、IDR、rupiah、,-、,00、单位 rb/ribu/k、jt/juta、M/miliar/milyar/b/bn、T/triliun、kuadriliun、英文格式 1,234,567.89、会计格式 (Rp1.000),以及文字金额(dua juta lima ratus ribu rupiah、seribu rupiah lima puluh sen)。选择第一个带 Rp 标记的金额,并列出其他候选金额。Total: Rp 1.250.000,- (incl. PPN) → 1250000
hitung_ppn根据税前价格、DPP nilai lain 计算印尼增值税,或根据含 PPN 的总额反推。返回售价、DPP、PPN、总额、所用规则及其法律依据。1000000 → PPN Rp110.000,总额 Rp1.110.000

所有工具均为只读(readOnlyHint: true),并且仅限封闭世界(openWorldHint: false)。数字可以是 JSON 数字或文本;对于大于或等于 2^53 的值,请以文本形式发送。

hitung_ppn 使用的 PPN(VAT)规则

自 2025 年 1 月 1 日起,法律规定的 PPN 税率为 12%(UU 7/2021 《税收法规协调法》)。财政部长随后发布了法规 PMK 131 Tahun 2024(于 2024 年 12 月 31 日发布,自 2025 年 1 月 1 日起生效),将计算方式分为以下几类:

kategori商品/服务公式实际税率
nonmewah(默认)除奢侈品以外的所有应税商品和服务(PMK 131/2024 第 3 条)PPN = 12% × 其他计税基础(DPP nilai lain),其中 DPP nilai lain = 售价/替代价值/进口价值的 11/1211%
mewah需缴纳 PPnBM 的奢侈品(第 2 条),例如某些机动车、豪宅、飞机和游艇PPN = 12% × 售价/进口价值12%
custom其他情况(特殊方案)你的 tarif_persen ×(faktor_dpp × 价格),faktor_dpp 默认值为 1由你选择

计算示例(nonmewah,价格 Rp1.000.000):DPP nilai lain = 11/12 × 1.000.000 = Rp916.666,67;PPN = 12% × 916.666,67 = Rp110.000;总计 Rp1.110.000。

从总额计算(dari: "total"):价格 = 总额 ÷ 1.11,因此 Rp1.110.000 → 价格 Rp1.000.000,PPN Rp110.000。

本工具不会模拟以下情况(这是有意为之;请使用 kategori: "custom" 并传入自己的税率/系数):

  • 由其他法规规定的 PPN 特定金额及其他 nilai lain 计税基础(已汇总于 PMK 11 Tahun 2025)、由政府承担的 PPN(DTP)、免税商品/服务,以及 PPnBM 本身。
  • 较早时期的规定:2025 年之前,税率为 11%(自 2022 年 4 月 1 日起),此前为 10%。对售予最终消费者的奢侈品,自 2025 年 2 月 1 日起适用完整的 12% 税率;本工具不模拟 2025 年 1 月的过渡期。
  • 发票舍入规则(e-Faktur):本工具不会模拟这些规则;默认显示到分;如果需要,可通过 pembulatan(bawah、terdekat、atas)将 PPN 舍入到整卢比。

来源(核实日期:2026 年 11 月 11 日):

  • PMK 131 Tahun 2024 及 DJP 文章 “PMK 131/2024:PPN 税率十一十二”,2025 年 1 月 6 日,pajak.go.id。
  • DJP 关于 PMK 11/2025 的新闻稿(DPP nilai lain 和 PPN 特定金额),pajak.go.id。
  • DDTCNews,2025 年 8 月 17 日:财政部确认,2026 年奢侈品适用 12% 税率,其他商品适用 12% × 11/12,news.ddtc.co.id。
  • DDTCNews,2026 年 9 月 10 日:财政部长表示,一般 PPN 税率维持在 12%,news.ddtc.co.id。

如果规则发生变化,kategori: "custom" 仍可继续使用,同时更新默认值。本工具仅用于辅助计算,不构成税务建议。

安装

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

从源码安装:

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

然后使用 "command": "node" 和 "args": ["/full/path/to/mcp-rupiah.mjs"],代替 npx。

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

Claude Desktop

进入 Settings → Developer → Edit Config(claude_desktop_config.json),然后完全退出并重新打开 Claude Desktop。

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

添加 --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": {
    "rupiah": {
      "type": "local",
      "command": ["npx", "-y", "mcp-rupiah"],
      "enabled": true
    }
  }
}

配置

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

文本输入的读取规则

  • . 是千位分隔符,, 是小数标记(印度尼西亚格式):1.250.000,50 = 1250000.5。
  • 如果两者都出现,最后一个是小数标记,因此英文格式的 1,234,567.89 也可用(答案会注明)。
  • 单独的 , 始终是小数标记:1,500 = 1.5(并附注)。单独的 . 后面恰好跟着三位数字时是千位分隔符:1.500 = 1500;否则是小数点:1.5 = 1.5。
  • M 表示 miliar(10^9),与印度尼西亚语中的用法相同;小写 m 也会被读取为 miliar,并附注(表示百万请写 jt)。
  • 纯数字字符串("1234.5")和科学计数法("1.5e3")都会被读取为数字。

限制

  • terbilang 可为小于 10^18 的数字(最高至 999 kuadriliun)命名,小数最多支持 20 位。
  • 文本输入长度上限为 2,000 个字符。
  • 大于 2^53 的 JSON 数字会被拒绝,因为其精度已经丢失;请以文本形式发送。

常见问题

如何用印度尼西亚语写出 Rp1.500.000 的 terbilang? Satu juta lima ratus ribu rupiah. 调用 terbilang 并设置 rupiah: true;在收据(kuitansi)上显示 Satu Juta Lima Ratus Ribu Rupiah,请添加 huruf: "judul"。

应该写 "seribu" 还是 "satu ribu","seratus" 还是 "satu ratus"? 1,000 是 seribu,100 是 seratus,在较大的数字中也一样(seratus satu ribu、satu juta seribu)。从百万开始使用 satu:satu juta、satu miliar。

2025 年和 2026 年的 PPN 12% 如何计算? 对于大多数商品和服务:12% × DPP nilai lain,其中 DPP nilai lain = 价格的 11/12,因此 PPN 实际上是价格的 11%(PMK 131/2024)。只有受 PPnBM 约束的奢侈品才按全价缴纳 12%。

如何从含 PPN 的总额中得出未含 PPN 的价格? 对于非奢侈品,除以 1.11(价格 = 总额 ÷ 1.11,PPN = 总额 − 价格)。hitung_ppn 设置 dari: "total" 后会精确计算。

如何将数字格式化为 Rupiah,例如 Rp1.234.567,89? 使用 format_rupiah:千位用句点分隔,小数用逗号分隔,Rp 后不加空格(遵循印度尼西亚语拼写规则)。设置 ringkas: true 可得到 Rp1,2 jt 等简写形式。

如何将 "1,5 jt" 或 "Rp 1.250.000,-" 转换为数字? parse_rupiah 返回 1500000 和 1250000。它也能读取以文字写出的金额。

开发

node --test test/

包含 18 组测试(单元测试包括覆盖 300 多个数字的 terbilang → words-parser 往返测试,以及针对 MCP stdio 的端到端测试),可离线运行。欢迎提交问题和拉取请求。


印度尼西亚语

MCP 服务包含面向 AI 助手(Claude Desktop、Claude Code、Cursor、OpenCode)的印尼盾和印度尼西亚数字工具:数字转文字、印尼盾格式化、从杂乱文本中读取金额,以及符合 2025 年及以后规则的 PPN 计算器。离线运行,精确十进制运算,无需 API 密钥,无依赖。

示例:“请将 Rp1.500.250 写成收据上的文字,并计算总额 Rp5.550.000 的 PPN。”

工具

工具功能
terbilang数字 → 文字:最高可达 999 千万亿,小数用“koma”表示,负数用“minus”表示,可添加“rupiah”和“sen”后缀,并选择大小写(小写/首字母大写/标题式/全大写)。正确处理 sepuluh、sebelas、seratus、seribu 等规则(但使用 satu juta)。
format_rupiah数字 → Rp1.234.567,89;小数位数为 0-4 或自动,可带或不带 Rp,可添加 ,- 后缀,也可简写为 Rp1,2 jt / Rp1,2 juta。
parse_rupiah文本 → 数字:Rp 1.250.000,-、1,5 jt、IDR 50k、2,5 M、(Rp1.000)、英式格式 1,234,567.89 和文字金额(dua juta lima ratus ribu rupiah)。歧义会在 catatan 中说明。
hitung_ppn根据未税价格、其他计税基础 DPP,或含 PPN 的总额反推计算 PPN。显示销售价格、DPP、PPN、总额、适用规则和法律依据。

PPN 规则(自 2025 年 1 月 1 日起,PMK 131 Tahun 2024):

  • 非奢侈品(默认 nonmewah):PPN = 12% × 其他计税基础 DPP,其他计税基础 DPP = 11/12 × 销售价格/对价/进口价值 → 实际税率为 11%。示例:价格 Rp1.000.000 → DPP Rp916.666,67 → PPN Rp110.000 → 总额 Rp1.110.000。
  • 属于 PPnBM 征税对象的奢侈品(mewah):PPN = 12% × 销售价格 → 实际税率为 12%(自 2025 年 2 月 1 日起适用于向最终消费者的零售销售)。不计算 PPnBM。
  • 特殊方案(特定税额 PPN、除 11/12 外的其他计税基础、PPN DTP、免税商品/服务、2025 年前的时期):使用 kategori: "custom" 并自行设置 tarif_persen 和 faktor_dpp。
  • 来源:PMK 131/2024;DJP 文章《PMK 131/2024:十一除以十二的 PPN 税率》(2025 年 1 月 6 日);DJP 关于 PMK 11/2025 的新闻稿;DDTCNews,2025 年 8 月 17 日和 2026 年 9 月 10 日(一般税率仍为 12%)。核查日期:2026 年 11 月 11 日。此工具仅用于计算,不构成税务建议。

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

文本读取规则:句点表示千位分隔符,逗号表示小数点。1.500 读取为 1500,1,500 读取为 1.5(并附注说明)。M = 十亿。非常大的数字(≥ 2^53)请以文本形式传入。

问答

  • Rp1.500.000 的文字形式是什么? “Satu juta lima ratus ribu rupiah”(terbilang 设置 rupiah: true,收据场景可设置 huruf: "judul")。
  • 是 seribu 还是 satu ribu? 1.000 = seribu,100 = seratus;百万及以上使用 satu:satu juta。
  • 如何计算 2025/2026 年的 12% PPN? 通常为 12% × 11/12 × 价格,即价格的 11%;奢侈品按全额价格的 12% 计算。
  • 如何从含税总额反推未税价格? 对于非奢侈品:价格 = 总额 ÷ 1,11(hitung_ppn 设置 dari: "total")。

许可证

MIT。参见 LICENSE。


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

评论

支持 Markdown

第一次接触 MCP?

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

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