eatmundo
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Cross-cuisine dish equivalence with shared-ingredient evidence: 1,956 dishes, 26 cuisines.
| Author | com.eatmundo |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 2364 ms |
| Last measured | 2026-10-26 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"eatmundo": {
"url": "https://www.eatmundo.com/api/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (6)
find_similar_dishesread-onlyFind dishes from other cuisines that are equivalent to a given dish, from eatmundo's scored equivalence graph (over 10,000 edges across nearly 2,000 recipes from 26 countries). Every edge is evidence-based - shared canonical ingredients - not a language-model guess, and every edge crosses country lines. Use it for "what is the Greek counterpart of lahmacun, and why".
Parameters:
dish(required) — string — Dish to start from: an eatmundo slug (e.g. "lahmacun") or a plain name ("rice pudding"). Names are resolved through site search; check resolved_by in the result.lang— string — Language for titles, ingredient names and URLs.limit— integer — How many matches to return, best score first. The default of 5 is enough to see whether a cuisine has one clear counterpart or several competing ones.country— string — Restrict matches to one cuisine, ISO 3166-1 alpha-2 (e.g. "GR"). 26 countries are covered.min_score— integer — Minimum match score. Defaults to 0 on purpose: 320 dishes only have below-threshold nearest matches, and a default of 50 would silently return nothing for them.
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
search_dishesread-onlySearch nearly 2,000 dishes from 26 cuisines by text, country, category, preparation technique, or canonical ingredient. Every ingredient in the corpus is linked to a canonical entity, so an ingredient filter also catches translations and spelling variants. Use it to get a slug for the other tools.
Parameters:
form— string — Preparation technique. One of: soup, stew, stir-fry, grill-roast, fritter, dumpling, stuffed-vegetable, flatbread-pastry, noodle, rice, cold-salad, dip-spread, pickle-ferment, egg, sandwich-wrap, porridge-mash, casserole-bake, cured-preserved, composed-plate, meat-salad, pancake-batter, marinated-cooked, syrup-pastry, fried-dough-sweet, cake, cookie, custard-pudding, sweet-pie-tart, fruit-dessert, frozen, confection, sweet-porridge, glutinous-dumpling, sweet-bread, layered-assembly, filled-pastry, sweet-pancake, starch-gel, hot-infusion, cold-cooler, juice, smoothie-shake, hot-milk-drink, fermented-drink, alcoholic-mixed, alcoholic-brew.lang— string — Language for titles, ingredient names and URLs.limit— integer — Results per page (max 25).query— string — Free text; needs at least 2 characters to take effect.offset— integer — Rows to skip for paging. Pass back the `next_offset` from the previous response; it is null when there is no further page.country— string — ISO 3166-1 alpha-2 cuisine filter.category— string — Dish type. DRINK covers both alcoholic and non-alcoholic; DESSERT is separate from FOOD, so a query for a sweet dish returns nothing under FOOD.ingredients— array — Canonical ingredient names (e.g. ["tomato","garlic"]). A dish matches if it has ANY of them, but results are ranked by how many it has, then by how large a share of the dish's ingredient list they make up (matched / total ingredient lines - among equal matches, dishes with shorter lists come first). Unrecognised names are reported back, not ignored.
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
get_reciperead-onlyFull recipe for one dish: steps, FAQ, image credit, and ingredients with PARSED quantities (amount, unit, and a normalised base in grams or millilitres where the quantity is measurable). Count-based lines like "3 onions" carry a gram estimate only where a per-item weight is known. Pass servings to rescale the ingredient quantities; the steps keep the original amounts. adaptations lists the diets (vegan, vegetarian, halal, dairy-free, pescatarian) the dish can be fully converted to, with each swap marked substitute (same dish) or adaptation (a different dish).
Parameters:
slug(required) — string — Recipe slug in any of the 7 languages, or a dish name (resolved by search).lang— string — Language for titles, ingredient names and URLs.servings— integer — Rescale ingredient quantities to this many servings. The dish's own count is returned as original_servings. Steps are NOT rescaled: they keep the amounts of the original recipe.
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
compare_dishesread-onlyCompare two dishes ingredient by ingredient: shared items, what is unique to each, a match score, and - for the pairs that have one (nearly 900) - an editorial comparison paragraph in the requested language. Works for any two dishes in the corpus, whether or not they are an edge in the equivalence graph.
Parameters:
a(required) — string — First dish: slug or name.b(required) — string — Second dish: slug or name.lang— string — Language for titles, ingredient names and URLs.
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
weekly_menuread-onlyBuild a menu of up to 7 dinners, either one cuisine per day ("world") or all from one country. Honours diet exclusions (pork, beef, meat, fish, dairy, egg, alcohol), vegetarian/vegan/pescatarian requirements, a prep-time ceiling and a budget mode that reuses ingredients. When a constraint cannot be met it is relaxed and the relaxation is reported, never hidden.
Parameters:
days— integer — How many days to plan, 1-7.lang— string — Language for titles, ingredient names and URLs.mode— string — "world" = a different cuisine each day; "single" = one country.seed— integer — Same seed + same options = same menu.budget— boolean — Favour weeks that reuse ingredients across days.country— string — Required when mode is "single".exclude— array — Ingredient attributes to avoid entirely: pork, beef, meat, fish, dairy, egg, alcohol.require— string — Diet every dish must satisfy. This is a WHITELIST and differs from `exclude`, which only removes single ingredient attributes: "vegan" is not the same as excluding meat.time_limit— integer — Max prep time in minutes; closed set (30/45/60). The generator relaxes it automatically if too few cuisines qualify, and reports that in relaxations.include_extras— boolean — Add 2 desserts and 2 drinks (never alcoholic).exclude_countries— array — Cuisines to keep out of the plan, ISO 3166-1 alpha-2. Only meaningful when mode is "world"; excluding too many leaves the generator with too few cuisines to fill the week.
Hints: read-only yes · destructive not declared · idempotent no · open-world no
substitute_ingredientread-onlyFind what can replace a single ingredient, optionally under a dietary constraint (vegan, vegetarian, halal, dairy-free, pescatarian). Each result is marked "substitute" (same dish) or "adaptation" (result is a meaningfully different dish) - most swaps forced by a diet exclusion are adaptations, and the tool says so rather than overselling a swap as if the dish stayed the same. Precomputed and model-verified, not generated on the fly.
Parameters:
ingredient(required) — string — Ingredient name in any of the 7 site languages, or its English canonical form (e.g. "pork belly", "domuz göbeği", "Schweinebauch").lang— string — Language for titles, ingredient names and URLs.limit— integer — Max substitutes to return, best first.context— string — Dietary constraint the substitute must satisfy. Omit for the single best general substitute with no diet filter. Other constraints (gluten-free, allergen-free) are not supported - the corpus has no gluten/allergen data, so the tool would have to guess, and it does not.
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.