Was dieses MCP kann
Searches recipes, compares dishes across cuisines, identifies ingredient substitutions, and builds dietary weekly menus.
Tools
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}
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}
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}
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}
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}
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}
Letzte Tool-Änderungen
Ähnliche MCP-Server
Andreax
Offers pay-per-call AI services for inference, agent and workflow design, OCR and transcription, code generation and review, clas…
Social Fetch
Retrieves public content and metadata from social networks, music services, Facebook Marketplace, events, profiles, posts, commen…
Hermoso
Supports ad research, competitor analysis, video and static ad creation, campaign policy checks, content publishing, and performa…
ElevenLabs
Manages ElevenLabs speech, voices, pronunciation dictionaries, podcasts, dubbing, audio projects, workspaces, and related media r…
John's Essentials
Analyzes and converts documents, images, audio, video, archives, data files, and other media formats, with PDF chat and file insp…
MiOffice — AI-Powered Workspace Studio
Provides browser-based tools for processing PDFs, images, video, and audio, including generation, enhancement, conversion, transc…
BlitzReels Video Editor
Creates and edits short-form videos, including timelines, captions, transitions, AI-generated visuals, music, voiceovers, sound e…
Heista
Analyzes video advertising, builds brand intelligence profiles, researches markets, and generates advertising scripts and creativ…