Skip to main content
Glama
bsosik1

Sushimaster

by bsosik1

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_providers

List available food delivery apps

resolve_location

Resolve an address / lat,lon to coordinates

search_venues

Find restaurants (rating 0–10, ETA, free-delivery flags, promotions)

search_items

Find dishes with prices in cents; filter by price, rating, free delivery

get_venue_menu

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_at and 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

sushimaster

CLI for quick testing (resolve / venues / items / menu)

sushimaster-mcp

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-mcp

Claude Code configuration (claude mcp add):

claude mcp add sushimaster -- /path/to/sushimaster/.venv/bin/sushimaster-mcp

Or 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 --version

  • uv — check with uv --version

  • git — check with git --version

1. Clone and install

git clone <repository-url> sushimaster
cd sushimaster
uv sync --extra dev        # creates .venv/ and installs the package

This 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-mcp

Then 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-mcp

Claude Desktop — add the same mcpServers entry to claude_desktop_config.json (Claude → Settings → Developer → Edit config), then restart Claude Desktop.

Do not use uv run or python -m as the command — 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

list_providers

Available apps

resolve_location

Address / lat,lon → coordinates

address

search_venues

Restaurants

query, address, apps, free_delivery, min_rating, limit

search_items

Dishes

query, address, max_price_cents, min_rating, free_delivery, sort, limit

get_venue_menu

Restaurant menu

provider, venue_id, address

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_id from search results can be passed straight to get_venue_menu.

  • Read the warnings array — 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 APIs

6. Troubleshooting

Symptom

Fix

sushimaster-mcp: command not found

Run uv sync --extra dev again; check the path from step 1

MCP server listed as failed

Restart the agent; verify the absolute path has no symlinks/quotes

No module named 'yaml' / unrelated plugin errors

PYTHONPATH from another toolchain (e.g. ROS) leaks in — run PYTHONPATH= uv run pytest

Tools return empty providers

SUSHIMASTER_PROVIDERS env var may be filtering them — unset it or list the apps explicitly

No results for a city

The app may not cover that city (Glovo is limited to larger cities in Poland) — try resolve_location first

Configuration (environment variables)

Variable

Default

Description

SUSHIMASTER_CACHE_TTL

600

Result cache TTL in seconds

SUSHIMASTER_PROVIDERS

empty (all)

Active providers, comma-separated, e.g. wolt,glovo

SUSHIMASTER_REQUEST_INTERVAL

0.35

Minimum interval between API requests (seconds)

SUSHIMASTER_TIMEOUT

15

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 adapter

Adding a new provider

  1. Create src/sushimaster/providers/<name>.py subclassing BaseProvider.

  2. Set name / display_name and 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

  3. Optionally implement geocode() and check_availability().

  4. Register the class with the @register decorator and add the module import in providers/__init__.py (importing the module runs the decorator).

  5. 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 the isFreeDeliveryFee flag 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 PYTHONPATH set (e.g. ROS), run pytest with PYTHONPATH= 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 tools
get_venue_menuA

Fetches a restaurant menu.

Parameters: provider - app ("wolt" or "glovo") venue_id - restaurant identifier from search_venues results address - an address or "lat,lon" (or provide latitude+longitude)

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNo
latitudeNo
providerYes
venue_idYes
longitudeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must disclose behavior on its own. It only says 'Fetches a restaurant menu' without mentioning return format, error cases, or how optional parameters behave. Given the presence of an output schema, some detail is expected, but the limited description leaves most behavioral aspects undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, with a clear purpose statement followed by a parameter list. The phrasing around address is slightly awkward, but every sentence contributes useful information without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the five parameters and no schema descriptions, the tool description covers the core inputs and links to search_venues, but it omits details about output format, optional parameter behavior, and how latitude/longitude should be provided together. This is adequate for a simple fetch tool but leaves some gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds value by specifying allowed provider values ('wolt' or 'glovo'), the source of venue_id ('from search_venues results'), and the flexible address format ('lat,lon' or 'latitude+longitude'). However, it does not fully clarify the separate latitude and longitude parameters or distinguish required vs optional fields, so it only partially compensates for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Fetches a restaurant menu' with a specific verb and resource. It distinguishes from siblings like search_venues and search_items by focusing on the menu retrieval action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context for usage by noting that venue_id comes from 'search_venues results', implying the correct sequence. It does not explicitly exclude alternatives, but the guidance is clear enough for a simple retrieval tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_providersA

Returns the list of available food delivery apps.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It states 'Returns', which signals a read-only operation with no side effects, but it does not disclose whether authentication is needed, ordering, or other behavioral aspects. The simplicity of the tool makes this acceptable but not fully transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no filler, front-loading the action and resource. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is intentionally simple with no parameters and an output schema present. The description fully covers the tool's purpose, and additional behavioral details are unnecessary given the output schema handles return value specifics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so parameter semantics are not relevant. Per the rubric, a baseline of 4 is appropriate for 0-parameter tools. The description does not need to explain any input details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Returns' and identifies the resource as 'list of available food delivery apps'. This clearly distinguishes it from sibling tools like search_venues and get_venue_menu, which focus on searching or menus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating the tool returns available food delivery apps, but it does not explicitly state when to use it or mention alternatives. Since the tool has zero parameters, the context is clear enough to infer use before searching for venues or items, but explicit guidance is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_locationA

Resolves an address (e.g. 'Warszawa, Marszałkowska 98') or 'lat,lon' to coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states that input is resolved to coordinates, but omits potential failure modes, output format details, whether network calls are involved, or any limitations. This is minimal disclosure beyond the core function.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the action and provides examples without any extraneous wording. It is concise and immediately understandable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter tool with an output schema present, the description covers the essential purpose and input flexibility. It lacks explicit usage guidelines and behavioral details, but these are secondary given the tool's simplicity and the presence of an output schema. Overall, it is fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema simply defines 'address' as a string with no description. The tool description adds substantial meaning by clearly stating the parameter can be either a human-readable address or a 'lat,lon' pair, with a concrete example. This fully compensates for the schema's lack of parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb 'Resolves' with a clear resource ('an address ... or 'lat,lon'') and the outcome ('to coordinates'). Concrete examples ('Warszawa, Marszałkowska 98') and the explicit 'lat,lon' format make the purpose unmistakable and distinguish it from sibling tools that list providers, search venues, search items, or get venue menus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the usage scenario by showing acceptable input formats, but it does not explicitly state when to use this tool versus alternatives or mention exclusions. For example, it does not say whether to use this before search_venues or if you already have coordinates to use elsewhere. This is adequate but lacks clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
appsNo
sortNoprice
limitNo
queryYes
addressNo
latitudeNo
longitudeNo
min_ratingNo
free_deliveryNo
max_price_centsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden of disclosing behavior. It does not state whether the operation is read-only, whether authentication is needed, or what happens if no results match. It only explains parameters, not the tool's general behavior or return conventions. This is a significant gap for a tool that likely performs external queries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of one precise sentence followed by a clear, well-formatted parameter list. Every line adds value by explaining a parameter, with no redundant fluff. It is both concise and easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with 10 parameters and an output schema, the description covers the input semantics reasonably well but lacks broader contextual details such as typical use cases, filtering behavior, pagination, or any caveats about location-based searches. It is adequate for a straightforward search tool but does not fully orient an agent on how to interpret results or handle edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description is the only source of parameter meaning. It adds useful details: examples for max_price_cents (5000 = 50 PLN), a scale for min_rating (0-10), explanation of free_delivery (True = restaurants with free delivery only), and the list of sort options. It also mentions latitude/longitude as an alternative to an address. However, it does not elaborate on the 'apps' parameter beyond saying 'list of apps,' and latitude/longitude are not listed as distinct named parameters, though they are referenced.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Searches for dishes matching the query.' This clearly distinguishes it from sibling tools like search_venues (which searches venues) and get_venue_menu (which retrieves a menu). The example 'pizza margherita' further reinforces the intended use.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for searching dishes, which gives clear context for when to use it, but it does not explicitly state when not to use it or mention alternatives. No exclusions or comparisons to siblings are provided, so the guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
appsNo
limitNo
queryYes
addressNo
latitudeNo
longitudeNo
min_ratingNo
free_deliveryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It discloses some traits (apps defaults to all, limit is 'per provider'), but lacks information on permissions, pagination, rate limits, error handling, or how conflicting address and latitude/longitude inputs are resolved. This is insufficient for a search tool with 8 parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the purpose. The parameter list is structured clearly with one line per parameter, each accompanied by a practical example. No redundant content or unnecessary detail is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the search semantics and most parameters, and the output schema handles return values. However, it lacks usage guidelines and omits explicit mention of the latitude/longitude parameters. For a tool with this complexity, the description is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides meaningful semantics for query, address (including 'lat,lon' format), apps, free_delivery, min_rating, and limit with examples. However, latitude and longitude are only implied through 'or provide latitude+longitude' and are not explicitly named, leaving a minor gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Searches for restaurants matching the query' with a concrete example ('pizza'). This distinguishes it from sibling tools like search_items (items) and get_venue_menu (menus), making the resource and verb specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is provided on when to use this tool versus alternatives. There is no mention of using search_items for item-level searches or list_providers for provider discovery. The parameter explanations imply usage but do not state exclusions or preferred contexts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedget_venue_menu
    • First observedlist_providers
    • First observedresolve_location
    • First observedsearch_items
    • First observedsearch_venues

TDQS

A4.1/5.0

Scored across 5 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An 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.
    29 npm
    13
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An 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.
    8 npm
    2
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A 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.
    4
    2
    MIT