关于 Rupiah tools
Rupiah tools 是离线 MCP 服务,提供印尼数字转文字、印尼盾格式化与解析,以及依据 2025 年起规则的增值税计算。它采用精确的十进制运算,并说明有歧义的数字格式,适用于收据和财务计算。
主要功能
- 01将数字转换为印尼语文字
- 02格式化印尼盾金额
- 03解析多种印尼盾文本格式
- 04按金额或总额计算增值税
- 05采用精确十进制运算
适用场景
- 01将印尼盾金额转为收据文字
- 02规范从文本中提取的金额
- 03计算增值税及含税总额
- 04从含税总额反算税前价格
MCP 相关
向 MCP 客户端提供四种工具,用于将数字转成印尼语文字、格式化和解析印尼盾金额,以及计算印度尼西亚增值税。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
4收录的工具列表 · 更新于 2 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| sen | boolean | 否 | 当 rupiah=true 时:将最多 2 位小数读作 sen(“…… rupiah lima puluh sen”),而不是读作“koma”。 |
| angka | number|string | 是 | JSON 数字,或“1250000”、“Rp1.250.000,50”或“1,5 jt”等文本。非常大的数字(>= 2^53)请以文本形式发送。 |
| huruf | enum | 否 | 字母大小写:kecil(小写)、awal(首字母大写)、judul(标题式大小写)、besar(大写)。kecil | awal | judul | besar |
| rupiah | boolean | 否 | 追加“rupiah”。 |
| kata_negatif | enum | 否 | 负数使用的词。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/12 | 11% |
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 付款)。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。