proupiqr
v1.0.0
Published
Free UPI QR, payment link and Indian merchant calculators, plus an MCP stdio bridge.
Maintainers
Readme
proupiqr
Free UPI payment links, scannable QR codes and Indian merchant calculators in your terminal. A thin HTTP client for Pro UPI QR, with a stdio MCP bridge for Claude Desktop, Cursor and other MCP clients. No API key, account or build step. Node.js 18 or later.
Install
npx proupiqr gst 12000 18 --inter-state
# Or install globally:
npm i -g proupiqr
proupiqr --help
proupiqr --versionCommands
Examples below were checked against the local Tools API before publication. Output blocks are real excerpts; most answers also include links to the matching free browser tools. No calculations or SaaS implementation are bundled in this package.
Payment link
proupiqr link shop@upi "My Shop" --amount 499 --note "Order 1"UPI payment link for My Shop (shop@upi), ₹499.00, note "Order 1":
upi://pay?pa=shop%40upi&pn=My+Shop&cu=INR&am=499.00&tn=Order+1Omit --amount to let the payer choose. Opening a UPI link starts a UPI app on a phone, not on a computer.
Terminal QR and PNG
proupiqr qr shop@upi "My Shop" --amount 499 --note "Order 1" --size 512 --out qr.pngPrints a scannable, small terminal QR followed by:
UPI QR code for My Shop (shop@upi), ₹499.00, note "Order 1". Any UPI app can scan it: PhonePe, Google Pay, Paytm, BHIM and bank apps.
Payment link: upi://pay?pa=shop%40upi&pn=My+Shop&cu=INR&am=499.00&tn=Order+1--out saves the API's PNG (the example produced a 512×512, 3,537-byte PNG). It overwrites the given file if present. --size is 200–1000 pixels, default 512. The terminal QR is rendered locally from the returned upi_uri using the MIT-licensed qrcode package. --json suppresses the terminal rendering but still saves --out.
Read a UPI link
proupiqr read 'upi://pay?pa=shop@upi&pn=My%20Shop&am=499&cu=INR'This link pays My Shop at shop@upi.
- Payee UPI ID: shop@upi
- Payee name: My Shop
- Amount: ₹499.00 (fixed)
- Currency: INR
Checks: well-formed; any UPI app can read it.Format checks cannot establish who owns a UPI ID. Check the name in your payment app before paying. You never need a UPI PIN to receive money.
Explain a UPI error
proupiqr error U30U30: Debit failed at the remitter bank
What it means: The payer's bank could not complete the debit. This is a remitter-side failure, not a daily-limit code (see Z7, Z8, ZU, U03 for limits).
Where it failed: Payer's bank (Bank down)
Money: Debit possible — check UTR. If debited: auto-reversal by T+1 (P2P) or T+5 (P2M)GST
proupiqr gst 12000 18 --inter-state₹12,000.00 plus 18% GST, between states:
- Taxable value: ₹12,000.00
- IGST 18%: ₹2,160.00
- Total GST: ₹2,160.00
- Total: ₹14,160.00--inclusive extracts GST from an inclusive price. Without --inter-state, the answer splits CGST and SGST.
MSMED late-payment interest
proupiqr msmed 10000 2026-01-01 --credit-days 45 --paid-on 2026-04-01Payment deadline: 2026-02-15 (45 days after 2026-01-01).
Paid 2026-04-01: 45 days late.
Interest: ₹216.40 at 17.25% a year (3 × the RBI Bank Rate of 5.75% as of 7 Oct 2026), compounded monthly.
Total due: ₹10,216.40 (₹10,000.00 + interest).Dates are YYYY-MM-DD. Omit --paid-on for today. The API defaults --credit-days to 45 (the statutory maximum); without a written agreement the deadline is 15 days after acceptance. The server supplies current rules; this is a calculation, not legal advice.
UPI MDR
proupiqr mdr 5000 --category standard --gst-registered₹5,000.00 UPI payment:
- MDR: ₹20.00 (₹5,000.00 × 0.4% = ₹20.00)
- GST on MDR (18%): ₹3.60, usually claimable as input tax credit
- Merchant keeps: ₹4,980.00 after the credit
MDR is not a tax, and merchants may not add it to the customer's bill.Categories: standard (default), essential, capital, p2p. Add --small-merchant for a small P2PM merchant. Rate rules are supplied by the API, not hard-coded in this CLI.
Rupees in words
proupiqr words 125050.50₹1,25,050.50: One Lakh Twenty Five Thousand Fifty Rupees and Fifty Paise OnlyFind a browser tool
proupiqr find rent receipt for HRAFree tools for "rent receipt for HRA":
- Rent receipt generator: HRA-ready monthly receipts with amount in words and a stamp box. https://www.proupiqr.in/rent-receipt-generator/?utm_source=mcp&utm_medium=toolThe API returns up to five matching tools by default.
JSON, errors and configuration
proupiqr gst 12000 18 --inter-state --json
PROUPIQR_API_BASE=http://127.0.0.1:4545 proupiqr words 125050.50--json prints the raw {ok, tool, text, data, image?} response without decoration. Monetary input strings are forwarded unchanged, preserving paise precision. On an API error it prints the raw error response to stdout and the actionable error message to stderr.
| Exit | Meaning | | --- | --- | | 0 | Success | | 1 | Tool/API validation error, or local output-file error | | 2 | Usage/configuration error | | 3 | Network, timeout or malformed HTTP JSON response |
The base defaults to https://www.proupiqr.in. REST requests use /api/tools/<tool_name>/ with the required trailing slash. Requests time out after 30 seconds; there are no automatic retries. Public REST limit: 120 calls/minute per network address. No API key required. PROUPIQR_API_BASE changes where inputs are sent, so only point it at a trusted server.
MCP: Claude Desktop / Cursor
proupiqr mcp translates newline-delimited JSON-RPC on stdin into POST requests to /mcp/, then writes one JSON reply per stdout line. It remembers the negotiated protocol version, forwards it in MCP-Protocol-Version, and keeps notifications/empty HTTP 202 responses silent. Network failures become JSON-RPC errors for requests. Diagnostics use stderr only.
Add this to Claude Desktop's claude_desktop_config.json or Cursor's MCP configuration:
{
"mcpServers": {
"proupiqr": {
"command": "npx",
"args": ["-y", "proupiqr", "mcp"]
}
}
}Restart the client after editing. If npx is not on the desktop app's PATH, use its absolute path (on Windows, use npx.cmd). For reproducible setups, pin the version in the args: ["-y", "[email protected]", "mcp"].
The remote server is stateless and unauthenticated. Local verification negotiated 2025-11-25, listed all nine tools, and calculated IGST ₹2,160.00 / total ₹14,160.00 through tools/call; the initialized notification produced no stdout line. Clients that support remote HTTP directly can connect to https://www.proupiqr.in/mcp/ instead.
Privacy
Inputs are sent to proupiqr.in to compute the answer and are not stored by the service. The CLI stores nothing except a PNG you explicitly request with --out; your shell history and terminal/client logs may retain arguments and output. Nothing moves money: the payer must approve any payment in their own UPI app. Never send a UPI PIN, OTP or other secret. See the privacy policy.
Website · Tools API documentation · MCP documentation · Source
Development
cd packages/cli
npm ci
npm test
npm pack --dry-runTests use ephemeral local fake HTTP servers, not production. The package contains only this thin client, its MIT license and documentation; there is no proprietary server or calculation code.
Publishing (owner only)
Wait until the public REST API is deployed, create/push the public proupiqr/integrations repository, and confirm repository metadata matches it. Then:
cd packages/cli
npm ci
npm test
npm pack --dry-run
npm login
npm publish --access publicUse the npm account that will own proupiqr, with 2FA enabled. This package has not been published by the build agent.
For subsequent releases, prefer GitHub Actions trusted publishing with provenance, not a long-lived npm token: the workflow is .github/workflows/publish-cli.yml at the repository root. Create/authorize the npm GitHub environment; configure the npm package's trusted publisher for owner proupiqr, repository integrations, workflow publish-cli.yml and environment npm. The template grants id-token: write and runs npm publish --access public --provenance on a matching cli-v<version> tag. The repository must be public for public provenance. The first release may need the manual login/publish above before package-level trusted publishing can be configured.
MIT — Copyright (c) 2026 Kunal Siyag.
