Swiggy Deal Finder
Finds the cheapest nearby options for a dish on Swiggy by probing cart and applying coupons, returning ranked results based on final payable amount.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Swiggy Deal FinderFind the cheapest biryani deals near my home address"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Swiggy Deal Finder
Swiggy Deal Finder is an MCP connector that finds the cheapest nearby option for a dish on your own Swiggy account, ranked by final post-coupon payable amount.
It is designed for discovery only:
no order placement
read + controlled cart mutation for pricing probes
automatic cart cleanup after each pricing probe
What this project does
Given a dish and a selected saved delivery address, the connector:
Finds open restaurants within 7 km.
Matches menu items for the requested dish.
Prices top candidates by probing Swiggy cart + coupon application.
Returns ranked options by:
lowest final payable amount (
to_pay)highest rating as tie-breaker
The MCP server exposes these tools:
get_locations()list_dish_variants(dish, address_id, category?)find_deals(dish, address_id, top_n=5, portion="regular", category?)
Related MCP server: MealOS
Architecture overview
Core modules (src/swiggy_deal_finder):
server.py
MCP entrypoint (FastMCP), tool definitions, lifespan-managed persistent Swiggy client.live_client.py
Real Swiggy adapter overmcp-remote(spawned vianpx), wraps MCP tool calls.service.py
Orchestration pipeline (DealFinder) for candidate discovery → pricing → ranking.candidates.py
Restaurant/menu discovery, dish-token matching, distance/open filters, portion filtering.pricing.py
Cart safety guard + coupon probe cycle. Handles empty-cart precondition and cart flush.ranking.py
Final ordering logic (final_to_payasc, rating desc).swiggy_client.py
Protocol and pure parsers for Swiggy responses.models.py
Pydantic domain models.main.py
Minimal FastAPI app (/health) for service health checks.
Safety invariants
The project enforces a few critical rules:
Never places an order.
Refuses pricing if the cart is already non-empty.
Never flushes a cart it did not create.
Always flushes probe cart items after pricing completes (or on failure path after entry).
Uses fresh cart reads for truth after coupon application.
Prerequisites
Python
>= 3.14(as defined inpyproject.toml)uvfor environment managementNode.js /
npx(used to spawnmcp-remote)A Swiggy account with saved delivery addresses
Setup
Install dependencies:
uv sync --devCreate environment file:
cp .env.example .envFill required values in
.env:Swiggy MCP/OAuth values (as available in your environment)
Vertex/Gemini values for model access
APP_SECRET_KEY(required)
Validate connectivity:
uv run python scripts/check_env.py
Running locally
1) FastAPI health app
uv run uvicorn swiggy_deal_finder.main:app --reloadHealth endpoint:
GET /health→{"status":"ok"}
2) MCP server (for Claude Desktop / MCP clients)
uv run python -m swiggy_deal_finder.serverThis starts the MCP connector and keeps one persistent authenticated Swiggy session for tool calls.
Typical MCP usage flow
Call
get_locations()and choose anaddress_id.If dish is generic (e.g.
dosa,pizza,biryani), calllist_dish_variants(...)first.Call
find_deals(...)with the selected specific dish.Present ranked results to the user.
Notes:
categoryshould be a broad cuisine/category term when dish search is too specific.portion="regular"excludes mini/half-style servings unless user explicitly asks.
Scripts
Repository scripts:
scripts/check_env.py
Validates env load + Swiggy MCP reachability + Vertex/Gemini reachability.scripts/smoke_live.py
Read-only live smoke test against Swiggy MCP bridge.scripts/demo.py
Runs the full deal-finder engine from CLI.scripts/check_server.py
End-to-end MCP server check by spawning connector and invoking tools.
See also: DEMO.md for local Claude Desktop demo wiring details.
Development commands
Lint:
uv run ruff check .Tests:
uv run pytestTesting scope
Tests in tests/ cover:
parser and config behavior
candidate filtering and matching
pricing/cart guard behavior
ranking logic
server tool behavior
live-client adapter contract assumptions
Troubleshooting
uv: command not found
Installuvfrom https://docs.astral.sh/uv/installation/ and ensure it is in your PATH.No results for a specific dish phrase
Retry with a broadercategory(e.g.dosa,biryani,roll) and then match exact dish via menu scan.Cart-not-empty response from
find_deals
Clear your cart in Swiggy app before pricing; this is a deliberate safety check.No saved addresses
Add delivery addresses in your Swiggy app first.
This server cannot be deployed
Maintenance
Related MCP Connectors
5 lakh+ Indian restaurants: menus with prices, timings, phones and dish search. Free, no API key.
81Order food from Cordering white-label restaurants: browse menus, confirm, then place an order.
Where to buy a whole grocery list today: local prices, per-unit and cross-store comparison.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI assistants like Claude to analyze your Swiggy order history, providing personalized insights on food habits, spending, and recommendations.5MIT
- FlicenseNot gradedqualityDmaintenanceEnables users to plan meals and place orders across Swiggy Food, Instamart, and Dineout directly from Claude Desktop conversations.-
- AlicenseNot gradedqualityBmaintenanceAggregates Swiggy's food delivery, Instamart groceries, and Dineout table booking services into one MCP server, letting AI agents search, order, and book via a single OAuth token.MIT
- FlicenseNot gradedqualityBmaintenanceEnables searching and comparing product prices across major Indian quick-commerce and e-commerce platforms, ranking results by landed price, returning product links, storing price history, and providing 15–30 day price direction forecasts with best-buy recommendations.-