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
get_payment_optionsis the only source of methods. Offer exactly whatdata.allMethods(orplatforms.mobile/desktop.methods,cod) returns; never invent a method. Food: pass the sameaddressIdused forget_food_cartso the picker can place directly.- 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).
- Pass the user's pick byte-for-byte. UPI app →
paymentMethod: "UPI"+intentApp: <method.id>. Desktop scan-QR →paymentMethod: "UPI"+generateUPIQR: true, nointentApp. Cash →paymentMethod: "Cash"(only whencod.available). Swiggy Money →paymentMethod: "SwiggyPay"only if a method with that group is returned.paymentMethodis always the group name, never an app id. PENDING_PAYMENTis not an order. Say "Complete the payment in your UPI app — I'll confirm your order once payment succeeds." Never say placed/confirmed/successful untilconfirm_ordersucceeds (orcheck_payment_statusreportsconfirmed: true). Only then use the brandedmessage("Swiggy order placed successfully").- Widget hosts (Claude Desktop, ChatGPT, Cursor…): do not poll. The confirmation widget polls
check_payment_statusand auto-finalizes. Call it once only if the user asks "did my payment go through?". Callconfirm_orderyourself only if the result says auto-confirm could not run. - 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 fromdata, do not parsemessage). Then pollcheck_payment_statuseverypollingIntervalInMs, capped atmaxTimeToPollForInMs. Never tight-loop: it is a long-poll and hammering it stresses the payment cache. - Echo identifiers; never reconstruct them.