snapp-mcp
An MCP server that lets AI agents use Snappfood (restaurant delivery) and SnappMarket (grocery delivery) in Iran. Agents can search dishes and groceries, compare prices across restaurants and stores, read menus and reviews, and find live deals.
It is read-only: it cannot log in, add to a basket or place an order.
Unofficial. Not affiliated with or endorsed by Snapp. It uses the same public endpoints as the snappfood.ir and snapp.market web apps, which can change without notice.
Example prompts
- "Cheapest pizza delivered to Vanak Square right now, including delivery fee."
- "Which restaurants near me in Shiraz have free delivery and a rating above 4?"
- "Show today's FoodParty deals with more than 40% off."
- "Where can I buy low-fat milk cheapest near Jordan, Tehran?"
- "Is restaurant 947evd's minimum order above 200,000 Toman? Any coupons?"
Requirements
- uv (provides
uvx), or Python 3.10+ with pip. - An Iranian IP address. Snappfood's firewall rejects most foreign IPs (HTTP 403). Run the server on
a machine in Iran with VPN off, or point
SNAPP_MCP_PROXYat a proxy in Iran. SnappMarket is less strict.
Install
Claude Code
claude mcp add snapp -- uvx snapp-mcp
Claude Desktop
Add to claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"snapp": {
"command": "uvx",
"args": ["snapp-mcp"]
}
}
}
Cursor
Add the same block to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project).
VS Code (Copilot agent mode)
Add to .vscode/mcp.json:
{
"servers": {
"snapp": {
"type": "stdio",
"command": "uvx",
"args": ["snapp-mcp"]
}
}
}
Any other MCP client
Run uvx snapp-mcp (or pip install snapp-mcp then snapp-mcp) as a stdio server.
Tools
Every food and grocery tool takes lat / long: menus, prices and delivery fees depend on the delivery point.
Get them with find_location or list_cities first.
Location
| Tool | What it does |
|---|---|
find_location |
Place name or address to coordinates |
reverse_geocode |
Coordinates to street / neighbourhood names |
list_cities |
Served cities with center coordinates |
Snappfood (restaurants)
| Tool | What it does |
|---|---|
food_search |
Search dishes by name with price, discount and restaurant (one fast call) |
food_find_cheapest |
Scan nearby menus and FoodParty for the lowest total price (food + packaging + delivery) |
food_restaurants |
List 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 of a restaurant |
food_party_deals |
FoodParty flash deals still in stock, with the deal window |
food_meal_for_one |
Single-person meals (≤ 299k Toman, free delivery) |
food_discounted_vendors |
Restaurants running discounts now, plus live "Gem" deals |
SnappMarket (groceries)
| 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 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 of a store |
All tools are annotated readOnlyHint: true. Results are compact JSON (structured content), so they do not use up the agent's context.
Conventions
- Prices are in Toman (1 Toman = 10 Rial).
- Ratings are normalized to 0-5, like the apps show.
nullmeans not rated yet. - Persian queries match best:
پیتزا,کباب,شیر. - True cost of a food order:
price - discount + packaging + delivery fee - coupon. The basket must also reach the restaurant's minimum order.
Configuration
| Variable | Default | Meaning |
|---|---|---|
SNAPP_MCP_PROXY |
unset | HTTP proxy URL for all requests, e.g. http://user:pass@host:port. System proxy variables are ignored on purpose, because a foreign VPN exit gets blocked. |
Troubleshooting
- "blocked the request (HTTP 403)": your IP is outside Iran. Turn off the VPN, or set
SNAPP_MCP_PROXYto a proxy in Iran. uvxnot found in Claude Desktop: use the full path touvxascommand.- Empty FoodParty / Gem results: these deals only run in time windows.
active: falsemeans no window is live. - Debug with the MCP Inspector:
npx @modelcontextprotocol/inspector uvx snapp-mcp.
Development
git clone https://github.com/sepehr071/snapp-mcp && cd snapp-mcp
uv sync
uv run pytest # offline tests against recorded responses
uv run pytest -m live # hits the real APIs (needs an Iranian IP)
uv run ruff check .
Releases: bump the version in pyproject.toml and server.json, then push a v* tag.
GitHub Actions publishes to PyPI (trusted publishing) and to the MCP Registry.
License
MIT
Metadata
Release files for snapp-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| snapp_mcp-0.1.0.tar.gz | 105.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| snapp_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 129.7 kB
Release files / snapp_mcp-0.1.0.tar.gz
| Download URL | snapp_mcp-0.1.0.tar.gz |
|---|---|
| Size | 105.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fa209db8a7d0fbac3f4dda17818ed4623721d6afd5b80fcb1de609c5136761de
|
|
BLAKE2b-256 checksum How to use checksums |
5510acf7d2749a77b2f25fb45a56aea6e63e6ed9032c7259128b60ef629a0ae1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency logRelease files / snapp_mcp-0.1.0-py3-none-any.whl
| Download URL | snapp_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 23.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2ef9e3d448ea00ff7079e114546fbbc516990dbdf8989aca5b5b31fe754ebdb6
|
|
BLAKE2b-256 checksum How to use checksums |
5dd87198c5641607fc4a1c30ee1ab9709bafd8547709360712f366e38ee22754
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency log