Sushimaster
Provides tools for searching restaurants and dishes on Glovo, including prices, ratings, delivery estimates, free delivery flags, and full venue menus.
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., "@Sushimaster Find a pizza under 50 PLN with free delivery in Warsaw."
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.
Sushimaster
MCP tool for AI agents (Claude Code, Claude Desktop, Codex) that finds deals in food delivery apps. Ask your agent "find a pizza under 50 PLN with free delivery" and it will search Wolt and Glovo, compare prices, ratings, delivery estimates and promotions, and return a ready recommendation with a link.
The problem it solves
Related MCP server: OrderFood MCP
Features
MCP tool | Description |
| List available food delivery apps |
| Resolve an address / |
| Find restaurants (rating 0–10, ETA, free-delivery flags, promotions) |
| Find dishes with prices in cents; filter by price, rating, free delivery |
| Fetch a full restaurant menu (discounted items included) |
No login, no API keys — data comes from the public Wolt and Glovo endpoints.
Prices are normalized to cents (int), ratings to a 0–10 scale.
Every result is tagged with
fetched_atand a per-provider report (responded?, latency, warnings) so the agent can attribute the data honestly.Results are cached (TTL) with single-flight protection.
Requirements
Python 3.10+
uv (for installation and running)
Installation
cd sushimaster
uv sync --extra dev # create .venv and install dependencies (+ dev tools)This installs two console commands into .venv/bin/:
Command | Purpose |
| CLI for quick testing (resolve / venues / items / menu) |
| MCP server (stdio transport) |
To call them as plain sushimaster … / sushimaster-mcp, either activate the
virtualenv (source .venv/bin/activate) or add .venv/bin to your PATH.
Alternatively, use uv run sushimaster … from the project directory.
Usage
CLI (quick testing without MCP)
sushimaster resolve "Warszawa, Marszałkowska 98"
sushimaster venues "pizza" "52.2297,21.0122" --apps wolt,glovo --free-delivery
sushimaster items "pizza margherita" "Warszawa" --max-price 5000 --min-rating 8
sushimaster menu glovo "dodo-pizza-waw" "52.2297,21.0122"MCP server (stdio)
sushimaster-mcpClaude Code configuration (claude mcp add):
claude mcp add sushimaster -- /path/to/sushimaster/.venv/bin/sushimaster-mcpOr in ~/.claude.json:
{
"mcpServers": {
"sushimaster": {
"command": "/path/to/sushimaster/.venv/bin/sushimaster-mcp",
"args": []
}
}
}Once connected, try: "Find a pizza under 50 PLN with free delivery in Warsaw."
Instructions for agents
This section is written for AI agents (Claude Code, Codex, Claude Desktop) that need to install and use Sushimaster. Follow the steps in order.
0. Prerequisites
Python 3.10+ — check with
python3 --versionuv — check with
uv --versiongit— check withgit --version
1. Clone and install
git clone <repository-url> sushimaster
cd sushimaster
uv sync --extra dev # creates .venv/ and installs the packageThis produces two executables in .venv/bin/: sushimaster (CLI) and
sushimaster-mcp (MCP server). Remember the absolute path to
sushimaster-mcp — you will need it in step 2. Get it with:
echo "$(pwd)/.venv/bin/sushimaster-mcp"2. Register the MCP server
Pick the section matching your agent.
Claude Code (project-scoped, recommended):
claude mcp add sushimaster -- /absolute/path/to/sushimaster/.venv/bin/sushimaster-mcpThen restart Claude Code and verify with /mcp — the sushimaster server
should be listed as connected with 5 tools.
Claude Code (alternative — .mcp.json in the project root, committed to
the repo):
{
"mcpServers": {
"sushimaster": {
"command": "/absolute/path/to/sushimaster/.venv/bin/sushimaster-mcp",
"args": []
}
}
}Codex:
codex mcp add sushimaster -- /absolute/path/to/sushimaster/.venv/bin/sushimaster-mcpClaude Desktop — add the same mcpServers entry to
claude_desktop_config.json (Claude → Settings → Developer → Edit config),
then restart Claude Desktop.
Do not use
uv runorpython -mas thecommand— the installed script is self-contained and avoids spawning an extra process.
3. Verify the installation
From the shell:
/absolute/path/to/sushimaster/.venv/bin/sushimaster resolve "Warszawa"Expected: JSON with lat, lon, label and country_code: "PL".
From the agent, ask: "list your available tools" or call list_providers.
Expected: [{"name": "wolt", "display_name": "Wolt"}, {"name": "glovo", "display_name": "Glovo"}].
Then run an end-to-end query:
"Find a pizza margherita under 40 PLN in Warsaw and list the results with prices."
4. Tool reference for agents
Tool | Purpose | Key parameters |
| Available apps | — |
| Address / |
|
| Restaurants |
|
| Dishes |
|
| Restaurant menu |
|
Conventions the agent should follow when answering users:
Prices are in cents — divide by 100 for PLN (e.g.
3699→ 36.99 zł).Ratings are 0–10.
Always mention the source app (Wolt/Glovo) and the delivery flag (
free_delivery) for each recommendation.venue_idfrom search results can be passed straight toget_venue_menu.Read the
warningsarray — it may explain partial data (e.g. Wolt menu previews) or failed providers.
5. Run the tests
cd sushimaster
uv run pytest # offline tests on frozen API fixtures
uv run pytest -m live # optional: live tests against real APIs6. Troubleshooting
Symptom | Fix |
| Run |
MCP server listed as failed | Restart the agent; verify the absolute path has no symlinks/quotes |
|
|
Tools return empty |
|
No results for a city | The app may not cover that city (Glovo is limited to larger cities in Poland) — try |
Configuration (environment variables)
Variable | Default | Description |
|
| Result cache TTL in seconds |
| empty (all) | Active providers, comma-separated, e.g. |
|
| Minimum interval between API requests (seconds) |
|
| HTTP request timeout (seconds) |
Project structure
src/sushimaster/
├── server.py # MCP server (FastMCP) + tool definitions
├── service.py # orchestration: caching, filtering, dedup, reports
├── geo.py # address → coordinates (multi-provider resolution)
├── models.py # shared, normalized schema (Venue, MenuItem, …)
├── cache.py # TTL cache with single-flight
└── providers/
├── base.py # BaseProvider — the contract for new providers
├── wolt.py # Wolt adapter
└── glovo.py # Glovo adapterAdding a new provider
Create
src/sushimaster/providers/<name>.pysubclassingBaseProvider.Set
name/display_nameand implement the three abstract methods:search_venues(query, location, *, limit) -> list[Venue]search_items(query, location, *, limit) -> list[MenuItem]get_venue_menu(venue_id, location) -> MenuFetchResult
Optionally implement
geocode()andcheck_availability().Register the class with the
@registerdecorator and add the module import inproviders/__init__.py(importing the module runs the decorator).Done — caching, filtering, dedup and the MCP tools pick it up automatically.
Every provider gets, for free: HTTP with retry/backoff and error mapping
(429 → RateLimitError), an enforced minimum interval between requests,
price parsing (_to_cents handles "36,99 zł", 3699, 36.99) and rating
normalization (_normalize_rating maps "98%" → 9.8).
The full contract is documented in the providers/base.py docstring.
Known limitations
Full Wolt menus require a web session; the adapter returns dish previews from the restaurant list and always reports this as a warning. Glovo provides complete menus.
Wolt delivery fees are calculated dynamically at the basket level — the adapter exposes approximation flags (
delivery_price_highlight, Wolt+). Glovo returns the real fee and theisFreeDeliveryFeeflag directly.Personal promotions (discount codes, Wolt+/Prime prices) require an authenticated session and are not visible to this tool.
Glovo coverage in Poland is limited to larger cities.
Privacy & data handling
The tool only reads public data (venues, menus, prices) from provider APIs.
It performs no authentication and stores no user data on disk.
The in-memory result cache holds only public search results and expires automatically (TTL).
No telemetry, no tracking, no third-party services — geocoding is done through the providers' own endpoints.
Tests
uv run pytest # offline tests on frozen API responses (fixtures)
uv run pytest -m live # live tests against the real APIs (1s request interval)Offline tests use fixtures from tests/fixtures/ — real API responses captured
during development, so parser regressions are caught without the network.
To regenerate fixtures, capture fresh API responses and replace the files.
Note: in environments with
PYTHONPATHset (e.g. ROS), run pytest withPYTHONPATH=to avoid loading unrelated plugins.
Disclaimer
Sushimaster is an unofficial project. It is not affiliated with, endorsed by, or sponsored by Wolt or Glovo. The provider endpoints are public but undocumented and may change or require authentication at any time; use the tool at your own risk and respect each platform's terms of service and rate limits (the built-in request pacing is there to help with that).
Available Tools
5 toolslist_providersA
Returns the list of available food delivery apps.
Inputs: no named parameters. Returns: result
resolve_locationA
Resolves an address (e.g. 'Warszawa, Marszałkowska 98') or 'lat,lon' to coordinates.
Inputs: address (required). Returns: object
search_itemsA
Searches for dishes matching the query (e.g. 'pizza margherita').
Parameters: query - text query address - an address or "lat,lon" (or provide latitude+longitude) max_price_cents - maximum price in cents (e.g. 5000 = 50 PLN) min_rating - minimum restaurant rating (0-10) free_delivery - True = restaurants with free delivery only sort - "price" | "price_desc" | "rating" apps - list of apps limit - maximum number of results
Inputs: query (required), apps, sort, limit, +6 more. Returns: object
search_venuesA
Searches for restaurants matching the query (e.g. 'pizza').
Parameters: query - text query (e.g. "pizza", "sushi") address - an address or "lat,lon" (or provide latitude+longitude) apps - list of apps, e.g. ["wolt", "glovo"]; defaults to all free_delivery - True = free delivery only min_rating - minimum rating (0-10) limit - maximum number of results (per provider when querying)
Inputs: query (required), apps, limit, address, +4 more. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool serves a distinct purpose: listing providers, resolving locations, searching restaurants, searching dishes, and fetching menus. There is no overlap in functionality, and the parameters are tailored to each operation.
All tool names follow a consistent verb_noun pattern: list_providers, resolve_location, search_venues, search_items, get_venue_menu. The verbs are specific and the nouns clearly indicate the resource.
With 5 tools, the server is well-scoped for food delivery discovery. Each tool covers a necessary step in the workflow without redundancy or bloat.
The tool surface covers the full discovery lifecycle: identify available apps, resolve a location, search for venues or items, and retrieve a venue menu. No obvious missing operations exist for the stated purpose.
Maintenance
Related MCP Connectors
Unlock the power of food transparency with our Open Food Facts MCP server. Easily look up any food
Per-restaurant MCP servers: menu, hours, delivery terms; live example below
DoorDash MCP server for ChatGPT, Claude and any AI agent: search stores, read store menu, add item to cart, preview order total with fees, submit order, list past orders, get order status and reorder a past order in your own DoorDash account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to DoorDash yourself; Cotlet does not store your password and you need no DoorDash API key. About the official DoorDash API: DoorDash has no public API for ordering as a consumer (checked 27 Oct 2026). Its public APIs, Drive and Marketplace, are for merchants and delivery partners. Setup and FAQ: https://cotlet.dev/integrations/doordash-api-mcp-server
Furgonetka MCP Server is an extension for LLMs (such as Claude) that integrates AI assistants with Poland's most popular courier brokerage platform. The server enables models to interact directly with services from various couriers (including InPost, DPD, DHL, UPS, and Poczta Polska) through a single, unified interface. With this integration, your AI stops just "writing about logistics" and starts actually managing it.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI assistants to order food from TGO Yemek by browsing restaurants, managing carts, and completing checkouts. It allows users to handle address selection and order tracking directly through natural language interactions.16 npm12MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI agents to discover restaurants and place food delivery orders on Uber Eats and Thuisbezorgd (Just Eat Takeaway). It provides tools for restaurant discovery and order management through normalized platform APIs.7 npm4MIT
- AlicenseAqualityDmaintenanceA thin MCP server that exposes Wolt's public consumer endpoints to AI agents, enabling discovery of nearby venues and fetching their menus with live prices and deal signals.2MIT
- AlicenseAqualityDmaintenanceMCP server for Chipotle — let AI agents find locations, browse menus, build custom orders, and checkout for pickup or delivery.1850 npmMIT