
Security News
PHP Foundation Says Chainguard Broke Security Embargo Ahead of Emergency Patches
The PHP Foundation says Chainguard broke a security embargo ahead of critical RCE patches, as leaks disrupted the coordinated release.
snapp-mcp
Advanced tools
Unofficial read-only MCP server for Snappfood and SnappMarket: search food and groceries, compare prices, find deals.
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
uvx snapp-mcp or claude mcp add snapp -- uvx snapp-mcp. Transport: stdio. Needs uv (Python 3.10+).SNAPP_MCP_PROXY to an HTTP proxy that exits in Iran. System proxy settings are ignored.readOnlyHint: true.find_location, reverse_geocode, list_cities, then food_* (9) and market_* (9). Most food and market tools need lat and long (not food_reviews, market_reviews, market_product, list_cities).
Typical sequence: find_location -> food_find_cheapest -> food_order_costs (groceries: market_find_cheapest -> market_store_info).rating = not rated); review and description texts are cut to 400 characters (pass full_text: true to food_reviews, market_reviews or market_product for the whole text). Restaurant and store vendor_code values pass between tools. FoodParty and Gem deals only run in time windows.server.json and the
awesome-iran-mcp catalog (TOOLS.md, servers.json, llms.txt).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.
Example prompts:
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-mcp
Settings → 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-mcp
Or 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.
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 |
|---|---|
find_location | Address, landmark or street → coordinates |
reverse_geocode | Coordinates → street / neighbourhood names |
list_cities | Every served city with its center point |
| Tool | What it does |
|---|---|
food_search | Search dishes by name; price sorts are re-checked against live menus |
food_find_cheapest | Scan nearby menus + FoodParty for the lowest total price (food + packaging + delivery) |
food_restaurants | Restaurants with filters (free delivery, discount, coupon) and sorting |
food_menu | One restaurant's full menu with prices, packaging fees and availability |
food_order_costs | Delivery fee, ETA, minimum order and coupons of one restaurant |
food_reviews | Customer reviews, with what they ordered and the restaurant's reply |
food_party_deals | FoodParty flash deals still in stock, with the deal window |
food_meal_for_one | Single-person meals up to 299k Toman with free delivery |
food_discounted_vendors | Restaurants running discounts now, plus live Gem deals |
| Tool | What it does |
|---|---|
market_search | Search a product across stores, grouped by store |
market_find_cheapest | Cheapest in-stock offers for a product, one flat list |
market_stores | Stores delivering to a point, by delivery fee or rating |
market_store_info | Delivery fee, minimum order, opening hours and coupons of a store |
market_store_products | Search inside a store, or browse it by category |
market_categories | Product categories and their ids |
market_product | One product's details and price in a store |
market_party_deals | Market Party flash deals, biggest discount first |
market_reviews | 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.
AI agent (Claude, Cursor, Copilot, ...)
│
│ MCP over stdio
▼
snapp-mcp (runs on your machine, uses your IP)
│
│ HTTPS
├──────▶ snappfood.ir restaurants
└──────▶ snapp.market groceries
snapp-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.
rating means not rated yet (null/empty fields are omitted).food_find_cheapest and food_order_costs give the agent every piece of that.food_search price sorts and food_find_cheapest re-read live menus and drop dishes that are gone, unavailable or sides (sauce, drink, ...).پیتزا, کباب, شیر). Name filters treat Arabic ي/ك and half-space vs space as equal.active: false or gem: null.full_text.lat and long.SNAPP_MCP_PROXY if you must run from abroad.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.
uvx is not foundUse the full path to uvx (where uvx on Windows, which uvx on macOS/Linux) as command.
npx @modelcontextprotocol/inspector uvx snapp-mcp
| Variable | Required | Default | Meaning |
|---|---|---|---|
SNAPP_MCP_PROXY | no | unset | HTTP proxy for every request, e.g. http://user:pass@host:port. A comma-separated list is used one at a time: the next proxy takes over when one is blocked (403/429) or cannot connect |
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.
snapp-mcp یک سرور MCP غیررسمی و فقطخواندنی برای اسنپفود (سفارش آنلاین غذا از رستوران) و اسنپمارکت (خرید آنلاین سوپرمارکت و مواد غذایی) در ایران است. این سرور به دستیار هوش مصنوعی شما (Claude، Cursor، Copilot و ...) اجازه میدهد در اسنپفود و اسنپمارکت جستجو کند، قیمت واقعی غذا و کالا را بین صدها رستوران و فروشگاه مقایسه کند، منو و نظرات را بخواند و تخفیفهای فعال (فودپارتی، جم، مارکتپارتی) را پیدا کند.
نصب در Claude Code:
claude mcp add snapp -- uvx snapp-mcp
بعد بپرسید: «ارزانترین پیتزا با هزینه ارسال نزدیک میدان ونک کجاست؟»
نکته: سرور باید روی سیستمی با IP ایران و بدون VPN اجرا شود، چون اسنپفود درخواستهای خارج از ایران را مسدود میکند. اگر ناچار به VPN هستید، متغیر SNAPP_MCP_PROXY را روی یک پروکسی HTTP با خروجی ایران بگذارید.
عبارتهای پرجستجو: اسنپفود، اسنپمارکت، سفارش آنلاین غذا، ارزانترین غذا، مقایسه قیمت غذا، فودپارتی، تخفیف رستوران، هزینه ارسال، منوی رستوران، سوپرمارکت آنلاین، قیمت مواد غذایی، دستیار هوش مصنوعی، سرور MCP فارسی.
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.
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.
If this saves you clicks, a star helps others find it.
FAQs
Unofficial read-only MCP server for Snappfood and SnappMarket: search food and groceries, compare prices, find deals.
We found that snapp-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
The PHP Foundation says Chainguard broke a security embargo ahead of critical RCE patches, as leaks disrupted the coordinated release.

Security News
PHP releases emergency patches for two critical RCE vulnerabilities as agencies urge organizations to take unpatched sites offline.

Threat Research
/Security News
A supply chain attack compromised LiteLLM 1.107.0 on PyPI and Docker, spreading malware that steals cloud credentials, developer secrets, and AI provider keys.