snapp-mcp
A read-only MCP server for searching Snappfood restaurants and SnappMarket groceries in Iran, comparing real prices, menus, fees, deals and reviews near a delivery point.
Resolve locations: turn addresses or landmarks into coordinates, reverse-geocode coordinates, and list served cities with center points.
Search dishes and restaurants: find dishes by name near a point, browse/filter restaurants (free delivery, discounts, coupons, ratings), and open full menus with prices, packaging and availability.
Calculate true food costs: find the cheapest dish including discount, packaging and delivery; check delivery fees, ETAs, minimum orders and coupons.
Read restaurant quality signals: recent customer reviews with ordered items and vendor replies.
Catch food deals: list active FoodParty flash deals, single-person cheap meals, and discounted restaurants/Gem deals.
Search groceries: search products across SnappMarket stores, find cheapest in-stock offers, list stores delivering to a point, and get store fees, hours, coupons and ratings.
Browse grocery catalogs: view store categories, search or browse products inside a store, and get individual product details and prices.
Catch grocery deals: list Market Party flash deals sorted by biggest discount.
Check store quality: read a grocery store’s most relevant customer reviews.
Safe by design: all tools are read-only; no login, basket, ordering or payment.
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., "@snapp-mcp Cheapest pizza delivered to Vanak Square, delivery included?"
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.
snapp-mcp: Snappfood and SnappMarket MCP server for AI agents
Let your AI agent shop around on Snappfood and SnappMarket (اسنپ‌فود و اسنپ‌مارکت). An unofficial, read-only MCP server for Snappfood (restaurant delivery) and SnappMarket (groceries) in Iran: search dishes and groceries, compare real prices across hundreds of restaurants and stores, read menus and reviews, and catch today's flash deals, all from Claude, Cursor or Copilot.
For AI agents · Why · What it can do · Quick start · Tools · How it works · Good to know · FAQ · Configuration · فارسی · Development
For AI agents
What: unofficial MCP server (model context protocol) for Snappfood (snappfood.ir, restaurant delivery) and SnappMarket (snapp.market, groceries) in Iran. Queries in Persian match best; prices in Toman.
Install:
uvx snapp-mcporclaude mcp add snapp -- uvx snapp-mcp. Transport: stdio. Needs uv (Python 3.10+).Auth: none, no API key or account. Snappfood only accepts Iranian IPs: run it from Iran without a VPN, or set
SNAPP_MCP_PROXYto an HTTP proxy that exits in Iran. System proxy settings are ignored.Access: read-only. No login, basket, orders or payment, so no confirmation is needed before calling any tool. All 21 tools carry
readOnlyHint: true.Tools: 21:
find_location,reverse_geocode,list_cities, thenfood_*(9) andmarket_*(9). Most food and market tools needlatandlong(notfood_reviews,market_reviews,market_product,list_cities). Typical sequence:find_location->food_find_cheapest->food_order_costs(groceries:market_find_cheapest->market_store_info).Units: prices in Toman (1 Toman = 10 Rial), ratings 0-5.
Use when: comparing the real total (food + packaging + delivery) of dishes or groceries near an address in Iran.
Do not use when: the user wants to order or pay, or is outside Iran with no Iranian IP or proxy (Snappfood answers HTTP 403).
Output: compact JSON. Null and empty fields are omitted (a missing
rating= not rated); review and description texts are cut to 400 characters (passfull_text: truetofood_reviews,market_reviewsormarket_productfor the whole text). Restaurant and storevendor_codevalues pass between tools. FoodParty and Gem deals only run in time windows.Machine-readable:
server.jsonand the iran-mcp catalog (TOOLS.md,servers.json,llms.txt).
Related MCP server: DigiSnap-MCP
Why
Snappfood shows you one restaurant at a time. Finding the cheapest pizza that actually reaches your door
means opening dozens of menus, adding packaging and delivery fees in your head, and checking each
restaurant's minimum order. An agent with snapp-mcp does that in seconds:
You: Cheapest pizza delivered to Vanak Square right now, including delivery?
Agent: calls
find_location(query="میدان ونک")→food_find_cheapest(query="پیتزا", lat=35.7577, long=51.4095)
Total
Dish
Restaurant
Breakdown
296,400
پیتزا سوسیس مینی + نوشابه
پیتزاتو (گاندی)
food 296,400 · free delivery
410,000
پیتزا اسمارت وجی لاور
پیتزا دومینوز (جردن)
food 360,000 + delivery 50,000
464,000
پیتزا پپرونی اسلایسی
تله پیتزا (سعادت آباد)
food 315,000 + delivery 149,000
The Pizzato combo is cheapest overall. Want me to check its minimum order and coupons with
food_order_costs?
Real tool output from 2026-10-02; prices change all the time. Prices are in Toman.
What it can do
Search dishes and grocery products by name near any address in Iran
Find the true cheapest option: food price after discount + packaging + delivery, checked against live menus
Browse restaurants and stores with filters: free delivery, discount, coupon, rating, distance
Read full menus, store catalogs, minimum orders, delivery fees, ETAs and coupons
Catch deals: FoodParty flash deals, meals for one, Gem hunts, Market Party
Check quality with customer reviews before recommending anything
Read-only by design: no login, no basket, no orders, no payment
Example prompts:
"Which restaurants near Tajrish have free delivery and at least 4.5 stars?"
"Show FoodParty deals with more than 40% off near me."
"Where is low-fat milk cheapest near Jordan, Tehran? Include delivery."
"Find a meal for one under 200k Toman with free delivery near Enghelab Square."
ارزان‌ترین کباب نزدیک میدان آزادی شیراز با هزینه ارسال؟
امروز در فودپارتی نزدیک ونک چه تخفیف‌هایی هست؟
ارزان‌ترین شیر کم‌چرب نزدیک میدان ونک را از اسنپ‌مارکت پیدا کن.
Quick start
You need uv and an Iranian IP address (Snappfood blocks most foreign IPs; see FAQ). No API key or account.
claude mcp add snapp -- uvx snapp-mcpSettings → Developer → Edit Config, then add:
{
"mcpServers": {
"snapp": { "command": "uvx", "args": ["snapp-mcp"] }
}
}Click Install in Cursor above, or add the Claude Desktop block to ~/.cursor/mcp.json (or .cursor/mcp.json in a project).
Click Install in VS Code above, or add to .vscode/mcp.json:
{
"servers": {
"snapp": { "type": "stdio", "command": "uvx", "args": ["snapp-mcp"] }
}
}codex mcp add snapp -- uvx snapp-mcpOr in ~/.codex/config.toml:
[mcp_servers.snapp]
command = "uvx"
args = ["snapp-mcp"]Add to ~/.gemini/settings.json:
{
"mcpServers": {
"snapp": { "command": "uvx", "args": ["snapp-mcp"] }
}
}Add the Claude Desktop block to ~/.codeium/windsurf/mcp_config.json.
It's a standard stdio MCP server: run uvx snapp-mcp, or pip install snapp-mcp and run snapp-mcp.
Tools
Every food and grocery tool takes lat / long, because menus, prices and delivery fees depend on the
delivery point. The agent gets them from find_location or list_cities first.
Tool | What it does |
| Address, landmark or street → coordinates |
| Coordinates → street / neighbourhood names |
| Every served city with its center point |
Tool | What it does |
| Search dishes by name; price sorts are re-checked against live menus |
| Scan nearby menus + FoodParty for the lowest total price (food + packaging + delivery) |
| Restaurants with filters (free delivery, discount, coupon) and sorting |
| One restaurant's full menu with prices, packaging fees and availability |
| Delivery fee, ETA, minimum order and coupons of one restaurant |
| Customer reviews, with what they ordered and the restaurant's reply |
| FoodParty flash deals still in stock, with the deal window |
| Single-person meals up to 299k Toman with free delivery |
| Restaurants running discounts now, plus live Gem deals |
Tool | What it does |
| Search a product across stores, grouped by store |
| Cheapest in-stock offers for a product, one flat list |
| Stores delivering to a point, by delivery fee or rating |
| Delivery fee, minimum order, opening hours and coupons of a store |
| Search inside a store, or browse it by category |
| Product categories and their ids |
| One product's details and price in a store |
| Market Party flash deals, biggest discount first |
| Customer comments on a store |
All 21 tools are annotated readOnlyHint: true and return compact structured JSON, so they don't flood the agent's context.
How it works
AI agent (Claude, Cursor, Copilot, ...)
│
│ MCP over stdio
▼
snapp-mcp (runs on your machine, uses your IP)
│
│ HTTPS
├──────▶ snappfood.ir restaurants
└──────▶ snapp.market groceriessnapp-mcp runs locally and calls the same public endpoints the Snappfood and SnappMarket web apps use,
with a Chrome-like TLS and header profile, at most 2 requests at a time and small random delays (150-600 ms).
Identical GET requests are cached for 60 seconds, and failed GETs (timeout, network error, 5xx, 429) are retried up to twice with backoff.
It only talks to a fixed allowlist of Snapp hosts and caps response bodies at 5 MB.
The only POST it makes fetches SnappMarket's anonymous token (the public web-app client credentials), which the store and product endpoints need.
There's no hosted server in between, no API key, and nothing about you is sent anywhere else.
Good to know
Prices are in Toman (1 Toman = 10 Rial). Ratings are normalized to 0–5 (the APIs use 0-10); a missing
ratingmeans not rated yet (null/empty fields are omitted).True cost of a food order = price − discount + packaging + delivery − coupon, and the basket must reach the restaurant's minimum order.
food_find_cheapestandfood_order_costsgive the agent every piece of that.Prices are checked live. Search-index prices go stale, so
food_searchprice sorts andfood_find_cheapestre-read live menus and drop dishes that are gone, unavailable or sides (sauce, drink, ...).Persian queries match best (
پیتزا,کباب,شیر). Name filters treat Arabic ي/ك and half-space vs space as equal.Deals run in windows. FoodParty and Gem only run at certain times; outside them the tools return
active: falseorgem: null.Text is cut. Review and description texts are limited to 400 characters unless you ask for
full_text.Location needed. Menus, prices and fees depend on the delivery point, so almost every tool needs
latandlong.Iranian IP. Snappfood's firewall only accepts Iranian IP addresses (HTTP 403 otherwise, and some exits get TLS resets); SnappMarket is less strict. Set
SNAPP_MCP_PROXYif you must run from abroad.Not included: login, OTP, basket, orders, payment, wallet, posting reviews and saving addresses. The server never calls those endpoints.
FAQ
Yes: snapp-mcp is an unofficial MCP server with 21 read-only tools for dishes, menus, groceries, delivery fees and
deals. It calls the same public endpoints the Snappfood and SnappMarket web apps use; no API key is needed.
Add the server with claude mcp add snapp -- uvx snapp-mcp (or the matching config in
Quick start for Claude Desktop, Cursor, VS Code and others), then ask for a dish near an address, in Persian or English.
It is unofficial and not affiliated with Snapp. It is read-only (no login, basket or payment), runs on your machine,
and is free under the MIT license. Outside Iran, Snappfood blocks most IPs, so use an Iranian IP or SNAPP_MCP_PROXY.
Snappfood's firewall only accepts Iranian IP addresses. Run the server on a machine in Iran with the VPN off.
If you must use a VPN, set SNAPP_MCP_PROXY to an HTTP proxy that exits in Iran (several, comma-separated, are fine). Normal system proxy variables
are ignored on purpose, because a foreign VPN exit would get blocked. SnappMarket is less strict.
No, and that's deliberate. It has no login and never touches the basket, order or payment endpoints. The agent finds the best option; you tap order in the app.
Those deals only run in time windows. active: false or gem: null means no window is live right now.
They come live from the Snapp APIs in Toman, and the price sorts re-read each restaurant's current menu, but prices, stock and delivery fees change quickly. Treat them as accurate for the moment of the call, and check the final total in the app before ordering.
Menus, prices, availability and delivery fees all depend on the delivery point. The agent turns an address or landmark into lat/long with find_location, or uses a city center from list_cities.
Use the full path to uvx (where uvx on Windows, which uvx on macOS/Linux) as command.
npx @modelcontextprotocol/inspector uvx snapp-mcpConfiguration
Variable | Required | Default | Meaning |
| no | unset | HTTP proxy for every request, e.g. |
If Snapp answers with a bot-check page, the server can solve it with a headless browser: install snapp-mcp[browser] (e.g. uvx --from 'snapp-mcp[browser]' snapp-mcp), then run patchright install chromium. Off by default.
فارسی: سرور MCP اسنپ‌فود و اسنپ‌مارکت
snapp-mcp یک سرور MCP غیررسمی و فقط‌خواندنی برای اسنپ‌فود (سفارش آنلاین غذا از رستوران) و اسنپ‌مارکت (خرید آنلاین سوپرمارکت و مواد غذایی) در ایران است. این سرور به دستیار هوش مصنوعی شما (Claude، Cursor، Copilot و ...) اجازه می‌دهد در اسنپ‌فود و اسنپ‌مارکت جستجو کند، قیمت واقعی غذا و کالا را بین صدها رستوران و فروشگاه مقایسه کند، منو و نظرات را بخواند و تخفیف‌های فعال (فودپارتی، جم، مارکت‌پارتی) را پیدا کند.
فقط خواندنی است: وارد حساب نمی‌شود، سبد خرید نمی‌سازد و سفارش ثبت نمی‌کند.
قیمت نهایی را با بسته‌بندی، هزینه ارسال و حداقل سفارش حساب می‌کند.
قیمت‌ها به تومان و امتیازها از ۰ تا ۵ هستند.
روی سیستم خود شما اجرا می‌شود و به هیچ سرور واسطی داده نمی‌فرستد.
نیازی به کلید API یا حساب کاربری ندارد.
نصب در Claude Code:
claude mcp add snapp -- uvx snapp-mcpبعد بپرسید: «ارزان‌ترین پیتزا با هزینه ارسال نزدیک میدان ونک کجاست؟»
نکته: سرور باید روی سیستمی با IP ایران و بدون VPN اجرا شود، چون اسنپ‌فود درخواست‌های خارج از ایران را مسدود می‌کند. اگر ناچار به VPN هستید، متغیر SNAPP_MCP_PROXY را روی یک پروکسی HTTP با خروجی ایران بگذارید.
عبارت‌های پرجستجو: اسنپ‌فود، اسنپ‌مارکت، سفارش آنلاین غذا، ارزان‌ترین غذا، مقایسه قیمت غذا، فودپارتی، تخفیف رستوران، هزینه ارسال، منوی رستوران، سوپرمارکت آنلاین، قیمت مواد غذایی، دستیار هوش مصنوعی، سرور MCP فارسی.
Development
git clone https://github.com/sepehr071/snapp-mcp && cd snapp-mcp
uv sync
uv run python -m pytest # offline, against recorded responses
uv run python -m pytest -m live # real APIs (needs an Iranian IP)
uv run ruff check .Tools live in src/snapp_mcp/food.py, market.py and location.py; each is a typed async function with a docstring
that tells the agent when to use it. Issues and PRs are welcome, especially new tools and fixes for API changes.
Releases: bump the version in pyproject.toml and server.json, then push a v* tag. GitHub Actions tests,
publishes to PyPI and the MCP Registry, and creates the GitHub Release.
Related servers
iran-mcp: catalog of all Iranian-service MCP servers
okala-mcp: grocery prices and deals across stores
tapsifood-mcp: food delivery search and menus on another Iranian platform
digikala-mcp: Digikala product search and prices
torob-mcp: price comparison across Iranian shops
Listed on mcpfarsi.ir, the Persian MCP marketplace
Disclaimer
Unofficial and not affiliated with or endorsed by Snapp. It is read-only: it only reads the public endpoints of the snappfood.ir and snapp.market web apps, which can change without notice. Please keep request rates reasonable.
Author
Built and maintained by Sepehr Radmard (سپهر رادمرد). Connect on LinkedIn or follow @sepehr071 on GitHub for more MCP servers for Iranian websites, all listed in iran-mcp. If this saves you time, a star on the repo helps other people find it.
License
If this saves you clicks, a star helps others find it.
Available Tools
21 toolsfind_locationFind locationARead-onlyIdempotent
Turn a place name or address into latitude/longitude.
Biased toward near_lat/near_long (default Tehran): pass a city center for other cities.
Inputs: query (required), limit, near_lat, near_long.
food_discounted_vendorsDiscounted restaurantsARead-onlyIdempotent
List restaurants running a discount now, plus the short "Gem" hunt discount if one is live.
Vendor-level only: food_menu has prices.
Inputs: lat (required), long (required).
food_find_cheapestFind cheapest dishARead-onlyIdempotent
Find the cheapest way to get a dish: scans menus of nearby open restaurants plus FoodParty deals.
Ranks by total = food price after discount + packaging + delivery fee; check min_order. Slower than food_search.
Inputs: lat (required), long (required), query (required), limit, +1 more.
food_meal_for_oneMeals for oneARead-onlyIdempotent
List single-person meals (at most 299k Toman, free delivery), cheapest first.
Check min_order.
Inputs: lat (required), long (required), limit, max_price.
food_order_costsOrder costsARead-onlyIdempotent
Get the extra costs and conditions of ordering from one restaurant.
Delivery fee, ETA, minimum order and coupons (basket total needed, first-order only). Packaging is in food_menu.
Inputs: lat (required), long (required), vendor_code (required).
food_party_dealsFoodParty dealsARead-onlyIdempotent
List today's FoodParty flash deals (deep discounts, limited stock, time window) still in stock.
Deals run only inside starts/ends; outside it the list is empty.
Inputs: lat (required), long (required), sort, limit, +1 more.
food_restaurantsList restaurantsBRead-onlyIdempotent
List restaurants delivering to a point, with rating, delivery fee, ETA and coupon info.
Also finds a vendor code by name. No dish prices: use food_menu.
Inputs: lat (required), long (required), page, sort, +5 more.
food_reviewsRestaurant reviewsBRead-onlyIdempotent
Read recent customer reviews of a restaurant (rating, text, what they ordered, vendor reply).
Inputs: vendor_code (required), page, full_text.
food_searchSearch dishesARead-onlyIdempotent
Search dishes by name near a delivery point, with price, discount and restaurant.
relevance is one fast index call; cheapest / biggest_discount confirm prices on live menus. For the cheapest X across many menus use food_find_cheapest.
Inputs: lat (required), long (required), query (required), sort, +3 more.
list_citiesList citiesARead-onlyIdempotent
List cities Snappfood serves, with id, names and center coordinates.
Centers work as a rough delivery point.
Inputs: query.
market_categoriesGrocery categoriesARead-onlyIdempotent
List SnappMarket product categories and sub-categories with their ids.
Ids work as category_id / subcategory_id in market_store_products. 99999999 is the kalabarg e-coupon category.
Inputs: lat (required), long (required).
market_find_cheapestFind cheapest groceriesARead-onlyIdempotent
Find the cheapest in-stock offers for a grocery product near the point.
Scans open delivering stores; one flat list by final price. Check delivery_fee and min_order.
Inputs: lat (required), long (required), query (required), limit, +1 more.
market_party_dealsGrocery party dealsARead-onlyIdempotent
List current SnappMarket "market party" flash deals near the point, biggest discount first.
An order holds at most capacity_per_order deal items; segment 'new_user' is for new customers only.
Inputs: lat (required), long (required), limit.
market_productGrocery product detailsBRead-onlyIdempotent
Get one product's details and price in one store.
Inputs: product_id (required), vendor_code (required), full_text.
market_reviewsGrocery store reviewsBRead-onlyIdempotent
Read a store's 30 most relevant customer comments, rating 0-5. No paging.
Inputs: vendor_code (required), full_text.
market_searchSearch groceriesARead-onlyIdempotent
Search a grocery product across all SnappMarket stores delivering to the point.
Stores (open or not) with up to ~5 matching products each. For one flat cheapest-first list use market_find_cheapest.
Inputs: lat (required), long (required), query (required), page, +1 more.
market_store_infoGrocery store detailsARead-onlyIdempotent
Get one store's delivery fee, minimum order, opening hours, rating and coupons for the point.
Basket cost = sum(final prices) + delivery_fee - coupon, and must reach min_order. is_applicable is false when logged out.
Inputs: lat (required), long (required), vendor_code (required).
market_store_productsBrowse a grocery storeARead-onlyIdempotent
Browse or search the products of one store.
query: search the store (wins over category ids).
category_id (+ optional subcategory_id): that category's products.
neither: the store's categories and sub-categories with ids.
Inputs: lat (required), long (required), vendor_code (required), page, +3 more.
market_storesList grocery storesARead-onlyIdempotent
List SnappMarket stores delivering to the point, with delivery fee, minimum order and rating.
Inputs: lat (required), long (required), page, sort.
reverse_geocodeDescribe coordinatesBRead-onlyIdempotent
Describe coordinates in words (point of interest, street, neighbourhood).
Inputs: lat (required), long (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 21 tools
The food_ and market_ prefixes plus location-oriented names separate most tools clearly. A few adjacent pairs (food_search vs food_find_cheapest, market_stores vs market_store_info, market_search vs market_find_cheapest) need the descriptions to distinguish, but the descriptions explicitly contrast them.
Names are consistently snake_case and grouped with food_, market_, or location verbs. The pattern is not strictly verb_noun throughout (e.g., food_menu, food_party_deals), but it is predictable and readable.
At 21 tools the surface is heavy for one MCP server, though the food and grocery domains explain much of the breadth. Several niche discovery tools could be folded into filters, making the set feel borderline oversized.
The server covers location lookup, restaurant/menu/cost/review discovery, grocery search, store products, categories, and deals thoroughly. Gaps are mostly around ordering/account flows and a few direct detail endpoints, which are minor for a read-only discovery toolset.
Maintenance
Related MCP Connectors
Search live store shelves, verify delivery windows, and run instant AI agent checkouts.
Recipe search, ingredient matching, nutrition filters and a private cookbook for any AI agent.
Find local shops, read live menus and free times, and order or book on the user's behalf.
Directory of APIs, merchants, and tools AI agents can actually use.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables LLMs to search products, fetch detailed specifications, and browse categories from SnappShop in real-time.MIT
- FlicenseCqualityBmaintenanceEnables AI clients to search, fetch and cross-compare products, prices, sellers, offers, availability and specifications between Digikala and SnappShop, with tools for finding the best price or best-value offer using explicit filters and explainable reasoning. It also supports remote Streamable HTTP deployment so the same capabilities can be registered as a custom connector in clients such as Grok.11-
- AlicenseAqualityBmaintenanceEnables AI agents to search products on Iran's marketplace of independent shops with price, category, shipping and discount filters, find the cheapest in-stock offers, and read product details, shops, categories and customer reviews. It is read-only and needs no authentication, so it can be used straight from Claude, Cursor or Copilot.7215 PyPIMIT
- AlicenseAqualityBmaintenanceEnables AI agents to search dishes and restaurants across Tapsi Food in Iran, inspect live menus and reviews, compare delivery fees and minimum orders, and find flash deals using location-based queries. It is read-only with no authentication and returns compact JSON with prices in Toman.11155 PyPIMIT