Skip to main content
Glama

Grab_search_menu_items

Read-only

Search GrabFood menu items (dishes, drinks) across restaurants, e.g. to compare what "es kopi susu" or "nasi goreng" costs in an area. Filters are ANDed. Defaults to cheapest first.

Prices are in the restaurant's currency, not converted; mixing countries mixes currencies. When country is set, stats gives min/avg/max price over all matches. Items with a null price (source data error) are excluded from price sorts and stats.

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.

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").

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, stats? }. Each item includes its category and restaurant.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
areaNoAddress substring: neighbourhood, kecamatan, kota, street.
cityNoGrab city, exact name. See Grab_list_areas.
pageNo
limitNo
queryYesItem name substring.
sortByNoprice
alcoholNo
countryNoISO country code, uppercase. Only these countries have data.
postcodeNoPostcode prefix.
priceMaxNo
priceMinNo
sortOrderNoasc
discountedNotrue = has a discounted price.
vegetarianNo
restaurantIdNoGrab merchant id, e.g. 6-C2ABCDEF.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, so the safety profile is covered. The description nonetheless adds substantial behavioral context: filters are ANDed, default sort is cheapest first, prices are unconverted (mixed currencies when mixing countries), null-priced items are excluded from sorts/stats, data freshness (fetchedAt Jun–Sep 2026), and coverage counts. This goes well beyond the annotations.

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?

Long but well-structured with a dedicated 'How to target a place' list and a returns line. Nearly every sentence carries actionable detail, though the coverage statistics are somewhat tangential to invoking the tool.

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?

There is no output schema, and the description supplies the return shape ({ data, total, page, limit, stats? }), the stats semantics (min/avg/max when country is set), and the per-item fields (category, restaurant). An agent has everything needed to call and interpret the result.

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 coverage is only 47% across 15 params, so the description must compensate and largely does: it explains the non-obvious semantics of city/area/postcode, plus the weak-reliability caveat for vegetarian/alcohol. It leaves some params (restaurantId, discounted, priceMin/priceMax, explicit sortBy/sortOrder) to the schema, which is 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?

States a specific verb and resource ('Search GrabFood menu items (dishes, drinks) across restaurants'), adds a concrete use case, and is clearly distinguishable from Grab_search_restaurants and Grab_get_restaurant.

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

Usage Guidelines5/5

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

Explicit routing guidance: when to use city vs area vs postcode, the pitfalls of each ('Kemang' also matches 'Kemanggisan'), and a pointer to Grab_list_areas for the city list. It also warns when dietary flags should be distrusted and suggests name searching as an alternative.

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.