swiggy-mcp-payments

Installation
SKILL.md

swiggy-mcp-payments

cart ready → get_payment_options → place-order (paymentMethod …) → PENDING_PAYMENT { paasId, orderId, bridgeUrl, pollingIntervalInMs, maxTimeToPollForInMs }
           → check_payment_status (long-poll ~19 s)  → confirm_order → PLACED  → track

Place-order tools: Food place_food_order, Instamart checkout, Dineout book_table (paid deal, after create_cart). The three payment tools have the same name and shape on every server.

Rules

  1. get_payment_options is the only source of methods. Offer exactly what data.allMethods (or platforms.mobile/desktop.methods, cod) returns; never invent a method. Food: pass the same addressId used for get_food_cart so the picker can place directly.
  2. Never ask which device the user is on and never ask for a UPI ID/VPA. The picker/QR handle it; UPI Collect and saved VPAs are not surfaced (NPCI compliance).
  3. Pass the user's pick byte-for-byte. UPI app → paymentMethod: "UPI" + intentApp: <method.id>. Desktop scan-QR → paymentMethod: "UPI" + generateUPIQR: true, no intentApp. Cash → paymentMethod: "Cash" (only when cod.available). Swiggy Money → paymentMethod: "SwiggyPay" only if a method with that group is returned. paymentMethod is always the group name, never an app id.
  4. PENDING_PAYMENT is not an order. Say "Complete the payment in your UPI app — I'll confirm your order once payment succeeds." Never say placed/confirmed/successful until confirm_order succeeds (or check_payment_status reports confirmed: true). Only then use the branded message ("Swiggy order placed successfully").
  5. Widget hosts (Claude Desktop, ChatGPT, Cursor…): do not poll. The confirmation widget polls check_payment_status and auto-finalizes. Call it once only if the user asks "did my payment go through?". Call confirm_order yourself only if the result says auto-confirm could not run.
  6. Headless clients (no widget): you own the loop. Give the user data.bridgeUrl (opens a scan-or-tap page: QR on desktop, app button on mobile; present for both intent and QR choices — read it from data, do not parse message). Then poll check_payment_status every pollingIntervalInMs, capped at maxTimeToPollForInMs. Never tight-loop: it is a long-poll and hammering it stresses the payment cache.
  7. Echo identifiers; never reconstruct them.
Installs
2
GitHub Stars
1
First Seen
3 days ago
swiggy-mcp-payments — hktitan/swiggy-cli