MCP-Server

eatmundo

com.eatmundo/dishes
Medien & Inhalte Öffentlich und erreichbar MCP 2025-11-25

Was dieses MCP kann

Searches recipes, compares dishes across cuisines, identifies ingredient substitutions, and builds dietary weekly menus.

compare_dishes
Compare two dishes
Compare two dishes ingredient by ingredient: shared items, what is unique to each, a match score, and - for the 848 pairs that have one - 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.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['a', 'b'], 'properties': {'a': {'type': 'string', 'minLength': 2, 'description': 'First dish: slug or name.'}, 'b': {'type': 'string', 'minLength': 2, 'description': 'Second dish: slug or name.'}, 'lang': {'enum': ['en', 'tr', 'de', 'fr', 'es', 'it', 'el'], 'type': 'string', 'default': 'en', 'description': 'Language for titles, ingredient names and URLs.'}}}
Ausgabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['a', 'b', 'score', 'score_basis', 'is_graph_edge', 'stored_score', 'below_threshold', 'same_form', 'shared_ingredients', 'only_a', 'only_b', 'excluded_generics', 'paragraph', 'compare_url', 'notes', 'attribution'], 'properties': {'a': {'type': 'object', 'required': ['slug', 'title', 'country', 'country_name', 'category', 'form', 'prep_time_minutes', 'url'], 'properties': {'url': {'type': 'string'}, 'form': {'type': ['string', 'null']}, 'slug': {'type': 'string'}, 'title': {'type': 'string'}, 'country': {'type': 'string'}, 'category': {'type': 'string'}, 'country_name': {'type': 'string'}, 'prep_time_minutes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}, 'b': {'type': 'object', 'required': ['slug', 'title', 'country', 'country_name', 'category', 'form', 'prep_time_minutes', 'url'], 'properties': {'url': {'type': 'string'}, 'form': {'type': ['string', 'null']}, 'slug': {'type': 'string'}, 'title': {'type': 'string'}, 'country': {'type': 'string'}, 'category': {'type': 'string'}, 'country_name': {'type': 'string'}, 'prep_time_minutes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'score': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'only_a': {'type': 'array', 'items': {'type': 'string'}}, 'only_b': {'type': 'array', 'items': {'type': 'string'}}, 'paragraph': {'type': ['string', 'null']}, 'same_form': {'type': 'boolean'}, 'attribution': {'type': 'string'}, 'compare_url': {'type': ['string', 'null']}, 'score_basis': {'type': 'string'}, 'stored_score': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'is_graph_edge': {'type': 'boolean'}, 'below_threshold': {'type': 'boolean'}, 'excluded_generics': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Pantry staples deliberately excluded from BOTH the score and the ingredient lists above, because they match almost everything (flour/water/oil/salt/yeast for food, water/salt/sugar for drinks). They are present in the dishes - they are just not evidence of similarity.'}, 'shared_ingredients': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
find_similar_dishes
Find similar dishes
Find dishes from other cuisines that are equivalent to a given dish, from eatmundo's scored equivalence graph (11,467 edges over 1,956 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".
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['dish'], 'properties': {'dish': {'type': 'string', 'minLength': 2, 'description': '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': {'enum': ['en', 'tr', 'de', 'fr', 'es', 'it', 'el'], 'type': 'string', 'default': 'en', 'description': 'Language for titles, ingredient names and URLs.'}, 'limit': {'type': 'integer', 'default': 5, 'maximum': 20, 'minimum': 1, 'description': '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': {'type': 'string', 'maxLength': 2, 'minLength': 2, 'description': 'Restrict matches to one cuisine, ISO 3166-1 alpha-2 (e.g. "GR"). 26 countries are covered.'}, 'min_score': {'type': 'integer', 'default': 0, 'maximum': 100, 'minimum': 0, 'description': '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.'}}}
Ausgabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['source', 'resolved_by', 'total_matches', 'matches', 'score_basis', 'notes', 'attribution'], 'properties': {'notes': {'type': 'array', 'items': {'type': 'string'}}, 'source': {'type': 'object', 'required': ['slug', 'title', 'country', 'country_name', 'category', 'form', 'prep_time_minutes', 'url'], 'properties': {'url': {'type': 'string'}, 'form': {'type': ['string', 'null']}, 'slug': {'type': 'string'}, 'title': {'type': 'string'}, 'country': {'type': 'string'}, 'category': {'type': 'string'}, 'country_name': {'type': 'string'}, 'prep_time_minutes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}, 'matches': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'title', 'country', 'country_name', 'category', 'form', 'prep_time_minutes', 'url', 'score', 'below_threshold', 'same_form', 'shared_ingredients', 'shared_count', 'compare_url'], 'properties': {'url': {'type': 'string'}, 'form': {'type': ['string', 'null']}, 'slug': {'type': 'string'}, 'score': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'title': {'type': 'string'}, 'country': {'type': 'string'}, 'category': {'type': 'string'}, 'same_form': {'type': 'boolean'}, 'compare_url': {'type': ['string', 'null']}, 'country_name': {'type': 'string'}, 'shared_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'below_threshold': {'type': 'boolean'}, 'prep_time_minutes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'shared_ingredients': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'attribution': {'type': 'string'}, 'resolved_by': {'enum': ['slug', 'slug_other_language', 'text_search'], 'type': 'string'}, 'score_basis': {'type': 'string'}, 'total_matches': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
get_recipe
Get recipe
Full 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.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['slug'], 'properties': {'lang': {'enum': ['en', 'tr', 'de', 'fr', 'es', 'it', 'el'], 'type': 'string', 'default': 'en', 'description': 'Language for titles, ingredient names and URLs.'}, 'slug': {'type': 'string', 'minLength': 2, 'description': 'Recipe slug in any of the 7 languages, or a dish name (resolved by search).'}}}
Ausgabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['slug', 'title', 'country', 'country_name', 'category', 'form', 'prep_time_minutes', 'url', 'description', 'calories', 'servings', 'steps', 'faq', 'ingredients', 'image', 'match_count', 'resolved_by', 'notes', 'attribution'], 'properties': {'faq': {'type': 'array', 'items': {'type': 'object', 'required': ['question', 'answer'], 'properties': {'answer': {'type': 'string'}, 'question': {'type': 'string'}}, 'additionalProperties': False}}, 'url': {'type': 'string'}, 'form': {'type': ['string', 'null']}, 'slug': {'type': 'string'}, 'image': {'type': 'object', 'required': ['url', 'ai_generated', 'attribution'], 'properties': {'url': {'type': 'string'}, 'attribution': {'anyOf': [{'type': 'object', 'required': ['author', 'license', 'license_url', 'source_url'], 'properties': {'author': {'type': ['string', 'null']}, 'license': {'type': ['string', 'null']}, 'source_url': {'type': ['string', 'null']}, 'license_url': {'type': ['string', 'null']}}, 'additionalProperties': False}, {'type': 'null'}]}, 'ai_generated': {'type': 'boolean'}}, 'additionalProperties': False}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'steps': {'type': 'array', 'items': {'type': 'string'}}, 'title': {'type': 'string'}, 'country': {'type': 'string'}, 'calories': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'category': {'type': 'string'}, 'servings': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'attribution': {'type': 'string'}, 'description': {'type': 'string'}, 'ingredients': {'type': 'array', 'items': {'type': 'object', 'required': ['canonical', 'name', 'quantity_text', 'amount', 'unit', 'unit_class', 'base', 'base_unit', 'grams_estimate'], 'properties': {'base': {'type': ['number', 'null']}, 'name': {'type': 'string'}, 'unit': {'type': ['string', 'null']}, 'amount': {'type': ['number', 'null']}, 'base_unit': {'type': ['string', 'null']}, 'canonical': {'type': ['string', 'null']}, 'unit_class': {'type': ['string', 'null'], 'description': 'MASS, VOLUME, COUNT or VAGUE. VAGUE can appear even when quantity_text shows a number: trailing phrases like "for serving" or "for frying" mark a line as an amount we cannot pin down (0.5% of lines). Do not infer a quantity from the text when this is VAGUE.'}, 'quantity_text': {'type': ['string', 'null']}, 'grams_estimate': {'type': ['number', 'null']}}, 'additionalProperties': False}}, 'match_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'resolved_by': {'enum': ['slug', 'slug_other_language', 'text_search'], 'type': 'string'}, 'country_name': {'type': 'string'}, 'prep_time_minutes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
search_dishes
Search dishes
Search 1,956 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.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'form': {'type': 'string', 'description': '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': {'enum': ['en', 'tr', 'de', 'fr', 'es', 'it', 'el'], 'type': 'string', 'default': 'en', 'description': 'Language for titles, ingredient names and URLs.'}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 25, 'minimum': 1, 'description': 'Results per page (max 25).'}, 'query': {'type': 'string', 'description': 'Free text; needs at least 2 characters to take effect.'}, 'offset': {'type': 'integer', 'default': 0, 'maximum': 5000, 'minimum': 0, 'description': 'Rows to skip for paging. Pass back the `next_offset` from the previous response; it is null when there is no further page.'}, 'country': {'type': 'string', 'maxLength': 2, 'minLength': 2, 'description': 'ISO 3166-1 alpha-2 cuisine filter.'}, 'category': {'enum': ['FOOD', 'DESSERT', 'DRINK'], 'type': 'string', 'description': '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': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 10, 'description': '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. Unrecognised names are reported back, not ignored.'}}}
Ausgabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['total', 'offset', 'next_offset', 'items', 'unresolved_ingredients', 'notes', 'attribution'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'title', 'country', 'country_name', 'category', 'form', 'prep_time_minutes', 'url', 'description'], 'properties': {'url': {'type': 'string'}, 'form': {'type': ['string', 'null']}, 'slug': {'type': 'string'}, 'title': {'type': 'string'}, 'country': {'type': 'string'}, 'category': {'type': 'string'}, 'description': {'type': 'string'}, 'country_name': {'type': 'string'}, 'prep_time_minutes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'attribution': {'type': 'string'}, 'next_offset': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'unresolved_ingredients': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
substitute_ingredient
Find an ingredient substitute
Find 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.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['ingredient'], 'properties': {'lang': {'enum': ['en', 'tr', 'de', 'fr', 'es', 'it', 'el'], 'type': 'string', 'default': 'en', 'description': 'Language for titles, ingredient names and URLs.'}, 'limit': {'type': 'integer', 'default': 3, 'maximum': 5, 'minimum': 1, 'description': 'Max substitutes to return, best first.'}, 'context': {'enum': ['vegan', 'vegetarian', 'halal', 'dairy-free', 'pescatarian'], 'type': 'string', 'description': '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.'}, 'ingredient': {'type': 'string', 'minLength': 1, 'description': 'Ingredient name in any of the 7 site languages, or its English canonical form (e.g. "pork belly", "domuz göbeÄ\x9fi", "Schweinebauch").'}}}
Ausgabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['ingredient', 'ingredient_label', 'context', 'substitutes', 'declined', 'resolved_by', 'notes', 'attribution'], 'properties': {'notes': {'type': 'array', 'items': {'type': 'string'}}, 'context': {'type': ['string', 'null']}, 'declined': {'type': ['string', 'null'], 'description': 'Set instead of an empty substitutes array explaining why there are none - a missing reason is a bug, not a deliberate silence.'}, 'ingredient': {'type': 'string', 'description': 'Resolved canonical (English) ingredient name.'}, 'attribution': {'type': 'string'}, 'resolved_by': {'enum': ['exact', 'search'], 'type': 'string'}, 'substitutes': {'type': 'array', 'items': {'type': 'object', 'required': ['ingredient', 'label', 'kind', 'reason'], 'properties': {'kind': {'enum': ['substitute', 'adaptation'], 'type': 'string', 'description': '"substitute": swapping keeps the same dish. "adaptation": the result is a meaningfully different dish (e.g. pork belly -> beef short ribs for halal - still a rich braise, but not the same recipe). Never claim "substitute" when it is not one.'}, 'label': {'type': 'string'}, 'reason': {'type': ['string', 'null']}, 'ingredient': {'type': 'string'}}, 'additionalProperties': False}}, 'ingredient_label': {'type': 'string', 'description': 'Ingredient name translated into the requested language.'}}, 'additionalProperties': False}
weekly_menu
Build a weekly menu
Build 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.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'days': {'type': 'integer', 'default': 7, 'maximum': 7, 'minimum': 1, 'description': 'How many days to plan, 1-7.'}, 'lang': {'enum': ['en', 'tr', 'de', 'fr', 'es', 'it', 'el'], 'type': 'string', 'default': 'en', 'description': 'Language for titles, ingredient names and URLs.'}, 'mode': {'enum': ['world', 'single'], 'type': 'string', 'default': 'world', 'description': '"world" = a different cuisine each day; "single" = one country.'}, 'seed': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Same seed + same options = same menu.'}, 'budget': {'type': 'boolean', 'default': False, 'description': 'Favour weeks that reuse ingredients across days.'}, 'country': {'type': 'string', 'maxLength': 2, 'minLength': 2, 'description': 'Required when mode is "single".'}, 'exclude': {'type': 'array', 'items': {'enum': ['pork', 'beef', 'meat', 'fish', 'dairy', 'egg', 'alcohol'], 'type': 'string'}, 'description': 'Ingredient attributes to avoid entirely: pork, beef, meat, fish, dairy, egg, alcohol.'}, 'require': {'enum': ['vegetarian', 'vegan', 'pescatarian'], 'type': 'string', 'description': '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': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': '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': {'type': 'boolean', 'default': True, 'description': 'Add 2 desserts and 2 drinks (never alcoholic).'}, 'exclude_countries': {'type': 'array', 'items': {'type': 'string', 'maxLength': 2, 'minLength': 2}, 'maxItems': 30, 'description': '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.'}}}
Ausgabeschema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['days', 'desserts', 'drinks', 'shopping_list', 'pantry_assumed', 'relaxations', 'stats', 'notes', 'attribution'], 'properties': {'days': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'title', 'country', 'country_name', 'category', 'form', 'prep_time_minutes', 'url', 'day'], 'properties': {'day': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'url': {'type': 'string'}, 'form': {'type': ['string', 'null']}, 'slug': {'type': 'string'}, 'title': {'type': 'string'}, 'country': {'type': 'string'}, 'category': {'type': 'string'}, 'country_name': {'type': 'string'}, 'prep_time_minutes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'stats': {'type': 'object', 'required': ['countries', 'pool_size', 'time_limit', 'seed'], 'properties': {'seed': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'countries': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'pool_size': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'time_limit': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}}, 'additionalProperties': False}, 'drinks': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'title', 'country', 'country_name', 'category', 'form', 'prep_time_minutes', 'url'], 'properties': {'url': {'type': 'string'}, 'form': {'type': ['string', 'null']}, 'slug': {'type': 'string'}, 'title': {'type': 'string'}, 'country': {'type': 'string'}, 'category': {'type': 'string'}, 'country_name': {'type': 'string'}, 'prep_time_minutes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}}, 'desserts': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'title', 'country', 'country_name', 'category', 'form', 'prep_time_minutes', 'url'], 'properties': {'url': {'type': 'string'}, 'form': {'type': ['string', 'null']}, 'slug': {'type': 'string'}, 'title': {'type': 'string'}, 'country': {'type': 'string'}, 'category': {'type': 'string'}, 'country_name': {'type': 'string'}, 'prep_time_minutes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}}, 'attribution': {'type': 'string'}, 'relaxations': {'type': 'array', 'items': {'type': 'object', 'required': ['what', 'reason'], 'properties': {'what': {'type': 'string'}, 'reason': {'type': 'string'}}, 'additionalProperties': False}}, 'shopping_list': {'type': 'array', 'items': {'type': 'object', 'required': ['ingredient', 'used_in', 'dishes'], 'properties': {'dishes': {'type': 'array', 'items': {'type': 'string'}}, 'used_in': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'ingredient': {'type': 'string'}}, 'additionalProperties': False}}, 'pantry_assumed': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
Hinzugefügt
substitute_ingredient
25. September 2026 03:02
Hinzugefügt
weekly_menu
17. September 2026 12:34
Hinzugefügt
compare_dishes
17. September 2026 12:34
Hinzugefügt
get_recipe
17. September 2026 12:34
Hinzugefügt
search_dishes
17. September 2026 12:34
Hinzugefügt
find_similar_dishes
17. September 2026 12:34