eatmundo
Server Details
Cross-cuisine dish equivalence with shared-ingredient evidence: 1,956 dishes, 26 cuisines.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
TDQS
Scored across 5 tools
Each tool targets a distinct action: search, fetch recipe, compare two dishes, find equivalents, and plan a menu. There is no overlap in purpose, so an agent can easily select the correct tool.
All tools follow a consistent verb_noun pattern with lowercase and underscores (e.g., search_dishes, get_recipe). This makes the set highly predictable and easy to navigate.
With only 5 tools, the server is tightly scoped to its culinary exploration and planning domain. Each tool has a clear role, and no tool feels extraneous or missing.
The tool surface covers the core workflows: finding dishes, retrieving full recipes, comparing dishes, discovering cross-cuisine equivalents, and generating weekly menus. This is a complete set for the stated purpose, with no obvious dead ends.
Available Tools
5 toolscompare_dishesCompare two dishesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | First dish: slug or name. | |
| b | Yes | Second dish: slug or name. | |
| lang | No | Language for titles, ingredient names and URLs. | en |
Output Schema
| Name | Required | Description |
|---|---|---|
| a | Yes | |
| b | Yes | |
| notes | Yes | |
| score | Yes | |
| only_a | Yes | |
| only_b | Yes | |
| paragraph | Yes | |
| same_form | Yes | |
| attribution | Yes | |
| compare_url | Yes | |
| score_basis | Yes | |
| stored_score | Yes | |
| is_graph_edge | Yes | |
| below_threshold | Yes | |
| excluded_generics | Yes | 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 | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description only needs to add behavioral color: it lists the exact comparison facets, mentions that only 848 pairs have the editorial paragraph, and notes the language parameter. This adds meaning beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences with no filler. The first sentence front-loads the verb, resource, and output list; the second clarifies scope with an exact note about the equivalence graph and the 848-pair limitation. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Along with a 100%-covered schema and an output schema, the description is effectively complete for invocation: the input semantics are covered, the result is described, and the nonzero-analytics caveat is disclosed. A minor gap is not explaining behavior when a dish is not found, but that is not central to selecting and invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are fully documented in the schema. The description adds a small amount of semantics by mentioning 'in the requested language,' which maps to lang, but does not meaningfully extend the meaning of the a or b parameters. A baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Compare two dishes ingredient by ingredient') and lists concrete outputs: shared items, unique items, match score, and an optional editorial paragraph in the requested language. It also distinguishes itself from the likely alternative find_similar_dishes by noting it works for any two dishes in the corpus, regardless of the equivalence graph.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the use case, but it does not explicitly say when to prefer this over siblings like find_similar_dishes, search_dishes, or get_recipe. It explains that it covers arbitrary pairs, so an agent can infer the main scenario, but there are no when-not-to-use or alternative-routing directions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_similar_dishesFind similar dishesARead-onlyIdempotentInspect
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".
| Name | Required | Description | Default |
|---|---|---|---|
| dish | Yes | 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 | No | Language for titles, ingredient names and URLs. | en |
| limit | No | 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 | No | Restrict matches to one cuisine, ISO 3166-1 alpha-2 (e.g. "GR"). 26 countries are covered. | |
| min_score | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| source | Yes | |
| matches | Yes | |
| attribution | Yes | |
| resolved_by | Yes | |
| score_basis | Yes | |
| total_matches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds meaningful behavioral context: results come from a scored equivalence graph, edges are based on shared canonical ingredients rather than language-model guesses, and all edges cross country lines. This helps the agent trust and interpret the output beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three focused sentences, each earning its place: the first states the core function, the second establishes provenance and trustworthiness, and the third gives a concrete usage prompt. The content is front-loaded and free of fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with a high-quality input schema and an output schema available, the description covers everything needed for correct selection and invocation. It explains the data source, scope, evidence basis, and typical use case without redundantly repeating schema details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter descriptions themselves are detailed (including min_score's non-obvious default rationale). The tool description adds no parameter-specific meaning beyond the overall equivalence-graph context, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Find dishes from other cuisines that are equivalent to a given dish') tied to a concrete resource ('eatmundo's scored equivalence graph'). It clearly differentiates this tool from siblings by emphasizing cross-country equivalence and evidence-based edges, so an agent can distinguish it from compare_dishes or search_dishes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete usage example ('what is the Greek counterpart of lahmacun') and implicitly scopes the tool to cross-cuisine comparisons. It does not explicitly name sibling tools or state when not to use it, but the intended use case is clear enough for confident selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recipeGet recipeARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language for titles, ingredient names and URLs. | en |
| slug | Yes | Recipe slug in any of the 7 languages, or a dish name (resolved by search). |
Output Schema
| Name | Required | Description |
|---|---|---|
| faq | Yes | |
| url | Yes | |
| form | Yes | |
| slug | Yes | |
| image | Yes | |
| notes | Yes | |
| steps | Yes | |
| title | Yes | |
| country | Yes | |
| calories | Yes | |
| category | Yes | |
| servings | Yes | |
| attribution | Yes | |
| description | Yes | |
| ingredients | Yes | |
| match_count | Yes | |
| resolved_by | Yes | |
| country_name | Yes | |
| prep_time_minutes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so safety is covered. The description adds substantial behavioral detail beyond that: it explains that quantities are PARSED with amount, unit, and a normalized base in grams/millilitres, and how count-based lines are handled with gram estimates. This informs the agent about the output structure and precision, which is valuable context not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose ('Full recipe for one dish') and then elaborates on the key detail of parsed quantities. Every clause adds value—no redundancy or filler. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values in full, but it adds valuable context about the normalized quantities and gram estimates. The tool is simple (get recipe by slug) and the description covers the essential behavior. There are no obvious missing pieces an agent would need to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both 'lang' (with enum and default) and 'slug' (with explanation of language and resolution by search) are fully documented in the schema. The tool description adds no additional parameter semantics, so a baseline 3 is appropriate. The description doesn't need to compensate for any schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: get the full recipe for a single dish, listing the exact components (steps, FAQ, image credit, ingredients with parsed quantities). This clearly distinguishes it from siblings like search_dishes (finding dishes) and compare_dishes (comparing).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you have a slug or dish name and need a complete recipe, use this tool. It doesn't explicitly contrast with alternatives or state when not to use it, but the sibling names and the description's focus on a single dish give enough contextual cue. A clear 'use this for a specific dish' statement is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_dishesSearch dishesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| form | No | 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 | No | Language for titles, ingredient names and URLs. | en |
| limit | No | Results per page (max 25). | |
| query | No | Free text; needs at least 2 characters to take effect. | |
| offset | No | Rows to skip for paging. Pass back the `next_offset` from the previous response; it is null when there is no further page. | |
| country | No | ISO 3166-1 alpha-2 cuisine filter. | |
| category | No | 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 | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| notes | Yes | |
| total | Yes | |
| offset | Yes | |
| attribution | Yes | |
| next_offset | Yes | |
| unresolved_ingredients | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds valuable behavioral context: canonical ingredient linking catches translations/variants, unrecognized ingredients are reported back, and category semantics (DRINK covers both, DESSERT separate from FOOD) are disclosed. This goes beyond the annotations and helps the agent predict behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero waste. The first sentence front-loads the core purpose and scope, and the second adds the key behavioral nuance and the practical use case (getting a slug). Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 8 parameters, 100% schema coverage, and an output schema, the description is largely complete. It covers the main search dimensions, the canonical ingredient behavior, and the slug use case. It doesn't mention pagination or the next_offset field, but the schema already documents that, so the description need not repeat it. A 4 is fair given the richness of the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 8 parameters. The description adds a few semantic details not in the schema: the canonical ingredient matching behavior and the category note about DESSERT vs FOOD. However, most parameter meaning is already in the schema, so the description's added value is moderate. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search'), a precise resource ('1,956 dishes from 26 cuisines'), and enumerates the search dimensions (text, country, category, preparation technique, canonical ingredient). It also distinguishes itself from siblings by noting it returns a slug for other tools, which is a clear differentiator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use this tool: to search dishes and get a slug for other tools. It does not explicitly name alternatives or state when not to use it, but the sibling list and the slug mention imply its role as the entry point. A 4 is appropriate because the usage context is clear but exclusions are not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- Changed
find_similar_dishes1 field changed- added
Input schema / properties / limit / descriptionAdded value: +"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."
- Changed
search_dishes3 fields changed- added
Input schema / properties / category / descriptionAdded value: +"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." - added
Input schema / properties / limit / descriptionAdded value: +"Results per page (max 25)." - added
Input schema / properties / offset / descriptionAdded value: +"Rows to skip for paging. Pass back the `next_offset` from the previous response; it is null when there is no further page."
- Changed
weekly_menu3 fields changed- added
Input schema / properties / days / descriptionAdded value: +"How many days to plan, 1-7." - added
Input schema / properties / exclude_countries / descriptionAdded value: +"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." - added
Input schema / properties / require / descriptionAdded value: +"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."
1 tool update
- Changed
compare_dishes2 fields changed- added
Output schema / properties / excluded_genericsAdded value: +{ + "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.", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "a", - "b", - "score", - "score_basis", - "is_graph_edge", - "stored_score", - "below_threshold", - "same_form", - "shared_ingredients", - "only_a", - "only_b", - "paragraph", - "compare_url", - "notes", - "attribution" -]New value: +[ + "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" +]
5 tool updates
- First observed
compare_dishes - First observed
find_similar_dishes - First observed
get_recipe - First observed
search_dishes - First observed
weekly_menu
Related MCP Connectors
SymMap v2 — Traditional Chinese Medicine association graph from symmap.org
Nutrition for 910 plant foods across 11 national datasets, plus GB/EU & US claim checking
ConceptNet MCP — open multilingual word/phrase relation graph
Norwegian open-source community wiki (2,290 articles, 2008-2022) as a signed KCP knowledge web.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceRecommends dishes from a global cuisine knowledge base based on user preferences (keywords, cuisine, price, etc.) via weighted random selection with bias correction and diversity.-
- AlicenseAqualityDmaintenanceThe match graph for AI. Search 100K+ capabilities across 13K+ AI artifacts.1041 npm2MIT
- AlicenseBqualityDmaintenanceMCP server for searching research grants across NSF (US), ERC (EU), and KRF/NRF (Korea) via a unified interface. NIH excluded—covered by existing connectors.37 npmMIT
- AlicenseNot gradedqualityBmaintenanceMCP server providing a local learning graph for the Korean vocational high school curriculum (2022 revised), including 8,425 achievement standards, topics, and 10 tools for searching standards, topics, prerequisites, and learning roadmaps.27 npm2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.