Skip to main content
Glama

Grab_search_restaurants

Read-only

Search GrabFood restaurants. Filters are ANDed. Defaults to most rating votes (a rough popularity signal), or nearest first when near is set.

How to target a place:

  • city: Grab's service region, exact name (case-insensitive). Regions are coarse: "Jakarta" is all of Jabodetabek (incl. Bogor, Depok, Tangerang, Bekasi), "Bali" is the whole island. Call Grab_list_areas for the list.

  • area: substring of the full address, which holds street, kelurahan, kecamatan, kota and postcode, e.g. "Kemang", "Kebayoran Baru", "Denpasar", "Sleman". Also matches Grab's delivery zone label. Use this for neighbourhoods. It is a plain substring: "Kemang" also matches "Kemanggisan", so add a street or pair it with postcode or city.

  • postcode: prefix, e.g. "121" for South Jakarta 121xx.

  • near: lat/lng radius. Only Singapore and ~8% of Indonesian restaurants have coordinates; the rest never match.

cuisine matches Grab's cuisine labels by substring ("chicken" → Fried Chicken, Chicken Satay, …); matchedCuisines lists them. sellsItem finds restaurants with a menu item whose name contains the text (slower, ~1s); combined with alcohol true, that same item must match. rating is 0–5; restaurants without ratings sort last. Dietary flags come from Grab and are weak: isVegetarian is set on about half of all items, drinks included, so almost every restaurant "has a vegetarian item"; isAlcohol is set on only ~57k of 34M items, so also search item names ("bir", "beer", "wine", "arak").

Menu stats filters use figures precomputed per restaurant: minItems (menu size), medianPriceMin/Max (typical dish price in the local currency, so set country), ratios 0–1 as shares of the restaurant's items (minVegetarianRatio 0.5 = at least half its items are tagged vegetarian), minWeeklyOpenHours (168 = 24/7), joinedAfter/joinedBefore (oldest menu item, roughly when it joined Grab) and menuUpdatedAfter (newest menu item).

Coverage: ~1M restaurants: Indonesia 711k (164 Grab cities), Malaysia 119k, Vietnam 92k, Philippines 53k, Cambodia 15k, Singapore 4.5k, Myanmar 3k. Menus were fetched between Jun and Sep 2026 (fetchedAt per restaurant).

Returns { data, total, page, limit }. Each row includes a Grab url, openingHours ({ mon: "10:00-14:00, 17:00-22:00", … } in local time, closed days left out), and distanceKm when near is set.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
areaNoAddress substring: neighbourhood, kecamatan, kota, street.
cityNoGrab city, exact name. See Grab_list_areas.
nearNoOnly restaurants within radiusKm of this point.
pageNo
chainNoChain name substring.
limitNo
queryNoSubstring on name or chain name.
sortByNo
alcoholNotrue = has an alcohol item, false = has none.
countryNoISO country code, uppercase. Only these countries have data.
cuisineNoCuisine label substring.
serviceNoNot reported for Cambodia, Myanmar and ~10% of Indonesia.
minItemsNoMinimum menu items.
minVotesNo
postcodeNoPostcode prefix.
minRatingNo
sellsItemNoMenu item name substring.
sortOrderNo
joinedAfterNoOldest menu item created on/after this date (YYYY-MM-DD).
joinedBeforeNoOldest menu item created before this date (YYYY-MM-DD).
medianPriceMaxNoMedian item price, local currency.
medianPriceMinNoMedian item price, local currency.
minBadgedItemsNoItems with a Grab popularity badge (most ordered, most liked, signature dish).
menuUpdatedAfterNoNewest menu item created on/after this date (YYYY-MM-DD).
minDiscountedRatioNoShare of items on discount.
minVegetarianRatioNoShare of items tagged vegetarian.
minWeeklyOpenHoursNo
minAvgDiscountRatioNoAverage price cut on discounted items (0.25 = 25% off).
minHealthTaggedRatioNoShare of items with a health tag (low carb, high protein, …).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare read-only and closed-world safety, but the description adds substantial behavioral context beyond that: per-country data coverage, menu fetch dates, weakness of dietary flags, substring matching quirks, and return format including distanceKm. This is exactly the kind of extra context that helps an agent set expectations.

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?

Despite its length, the description is front-loaded with purpose and default sort, then organized into scannable sections with bullet points. Every sentence adds practical value for a tool with 29 parameters, and nothing is redundant.

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?

Given the tool's complexity (29 params, nested objects, no output schema), the description covers return format, pagination, data recency, and coverage limits. An agent has everything needed to call it correctly and interpret results.

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?

With 76% schema coverage, the description compensates heavily by explaining semantics of location targeting (city vs area vs postcode), cuisine substring matching, sellsItem performance, menu stats filters, and dietary flag limitations. Many parameters receive meaning beyond their 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?

States a specific verb ('Search') and resource ('GrabFood restaurants'), and immediately defines default sorting behavior. It distinguishes from sibling Grab_list_areas by directing to it for city lists, and the scope is clearly restaurant search rather than menu item search.

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?

Provides extensive guidance on how to target locations (city vs area vs postcode vs near) and when each filter is effective, including caveats like near only working in Singapore and 8% of Indonesian restaurants. However, it does not explicitly state when to choose this tool over siblings Grab_get_restaurant or Grab_search_menu_items.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.