Barbaro
Server Details
Read published house pizza facts and calculate dough and ingredient balance.
- Status
- Healthy
- Uptime
- 99.9% over 23 days
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
TDQS
Scored across 11 tools
Each tool targets a clearly distinct action+resource: reads (get_flour/ingredient/pizza, read_menu), searches (search_flours/ingredients/pizzas), and distinct computations (calculate_balance, calculate_dough, plan_bake, shopping_list). The get_* vs search_* split is well-delineated, and calculate_balance vs calculate_dough are separated by explicit description of what they operate on. No two tools appear to do the same thing.
The set predominantly follows a snake_case verb_noun pattern (calculate_*, get_*, search_*, read_menu, plan_bake). Minor deviations: 'shopping_list' is a bare noun with no verb, and 'read' vs 'get' are used for the same read action on different resources. Still highly predictable overall.
Eleven tools is well within a healthy range and each earns its place, covering reads, searches, computations, planning, and list generation. No redundant or filler tools are present for the apparent scope of a pizza/baking catalog and formula service.
The surface covers the core lifecycle of a read-only catalog plus calculation: fetching, searching, balance/dough computation, bake planning, and shopping lists. Gaps are minor (e.g., no explicit menu-item or catalog-wide enumeration beyond read_menu, and no persistence by design). For a stateless catalog/formula service the coverage is solid.
Available Tools
11 toolscalculate_balanceCalculate ingredient balanceARead-onlyIdempotentInspect
Calculate six balance contribution totals and meters for unique published ingredient IDs. Not nutrition or ingredient weights. No persistence.
| Name | Required | Description | Default |
|---|---|---|---|
| ingredientIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is known. The description adds useful behavioral context by stating 'No persistence' and emphasizing that this is a calculation over unique published ingredient IDs, with no indication of any contradiction with 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 three short sentences with the main action front-loadedaren't followed by concise clarifications. There is no redundant restatement of the title or schema, and every sentence adds value.
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 single-parameter, annotation-covered calculation tool, the description is nearly complete: it names the input domain, the output shape, and side-effect behavior. However, no output schema exists and the description does not define what 'meters' are or list exact return fields, leaving a small gap for response interpretation.
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?
The input schema only documents an array of UUID strings with uniqueness and maxItems constraints; it does not describe the domain meaning. The description compensates by explaining that the IDs are ingredient IDs, must be published, and are used to produce six balance contribution totals and meters.
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 uses a specific verb ('Calculate') and resource ('six balance contribution totals and meters') and scopes it to 'unique published ingredient IDs'. It also explicitly excludes what it is not ('Not nutrition or ingredient weights'), making the tool's purpose easy to distinguish from sibling tools like get_ingredient or search_ingredients.
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 conveys when to use the tool: when you need balance contribution totals and meters for unique published ingredient IDs. It includes exclusions ('Not nutrition or ingredient weights. No persistence.'), though it does not explicitly name an alternative sibling tool or state when another tool should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_doughCalculate doughARead-onlyIdempotentInspect
Calculate a dough formula from explicit gram sizing, percentages and published or custom flours. Returns quantities, warnings, source information and a Dough continuation link. No persistence.
| Name | Required | Description | Default |
|---|---|---|---|
| dmp | No | ||
| oil | No | ||
| pff | No | ||
| ndmp | No | ||
| salt | No | ||
| honey | No | ||
| sugar | No | ||
| units | Yes | ||
| buffer | No | ||
| flours | Yes | ||
| sizing | Yes | ||
| prefIdy | No | Instant dry yeast mass as a percentage of total flour, not preferment flour. Convert a Dough preferment-page percentage with pagePercent * effectiveBigaFlour / totalFlour, using actual allocated preferment flour from results. Only without an allocation shortfall is pagePercent * pff / 100 equivalent. A zero actual preferment-flour weight makes its stage percentage unavailable. Example with full allocation: 1.60 * 15 / 100 = 0.24, giving 4.8 g at 2000 g total flour. | |
| prefIsd | No | Instant sourdough mass as a percentage of total flour, not preferment flour. Convert a Dough preferment-page percentage with pagePercent * effectiveBigaFlour / totalFlour, using actual allocated preferment flour from results. Only without an allocation shortfall is pagePercent * pff / 100 equivalent. A zero actual preferment-flour weight makes its stage percentage unavailable. Example with full allocation: 1.60 * 15 / 100 = 0.24, giving 4.8 g at 2000 g total flour. | |
| finalIdy | No | Final-mix instant dry yeast mass as a percentage of total flour. No stage-basis conversion is required. | |
| finalIsd | No | Final-mix instant sourdough mass as a percentage of total flour. No stage-basis conversion is required. | |
| hydration | Yes | ||
| ascorbicAcid | No | ||
| bigaHydration | No | Preferment water as a percentage of preferment flour. | |
| nonfatDryMilk | No | ||
| starterPrefPct | No | Preferment sourdough starter mass (including its flour and water) as a percentage of total flour, not preferment flour. Convert a Dough preferment-page percentage with pagePercent * effectiveBigaFlour / totalFlour, using actual allocated preferment flour from results. Only without an allocation shortfall is pagePercent * pff / 100 equivalent. A zero actual preferment-flour weight makes its stage percentage unavailable. Example with full allocation: 1.60 * 15 / 100 = 0.24, giving 4.8 g at 2000 g total flour. | |
| reserveWaterPct | No | ||
| starterFinalPct | No | Final-mix sourdough starter mass (including its flour and water) as a percentage of total flour. No stage-basis conversion is required. | |
| customAdjustments | No | Optional baker-named final-mix ingredients, up to 8, each a percentage of total flour. They count by weight only: they add to batch weight and ball sizing, never to hydration or flour absorption. Row IDs are c followed by five lowercase letters or digits, unique within the formula. Names are sent trimmed, 1 to 40 characters, unique ignoring case, and may not repeat one of Dough's own ingredient names such as Water, Salt, Oil or Sugar, or contain control, hidden or bidirectional characters or a web address. Any refused row fails the whole request. | |
| starterFlourSource | No | blend or a supplied flour row ID. Inactive starter normalizes to blend and 100% hydration. | blend |
| starterHydrationPct | No | Starter water as a percentage of starter flour, not total flour or starter mass. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, destructiveHint false, and closed-world behavior. The description adds useful return-content information (quantities, warnings, source information, a Dough continuation link) and states 'No persistence,' which goes beyond the structured fields. No contradiction.
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 tight sentences, front-loaded with the core action, followed by return information and a persistence note. Every sentence earns its place and there is no filler.
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?
Given a 25-parameter tool with no output schema, the description gives a brief return summary but omits key behavioral constraints such as fixed temperature assumptions, buffer requirements, and flour-mode ball-target behavior. Those details appear only in the schema description, making the tool description minimally adequate but not rich.
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?
The description only broadly gestures at 'gram sizing, percentages and published or custom flours.' With 25 parameters and only 40% schema description coverage, it fails to compensate for undocumented parameters like dmp, pff, buffer, oil, salt, and many others. The schema carries the burden, but the description adds almost no parameter meaning.
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 uses a specific verb ('Calculate') and resource ('dough formula'), and names the input basis (explicit gram sizing, percentages, published or custom flours). This clearly identifies the domain apart from siblings like calculate_balance, get_flour, or plan_bake.
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?
No when-to-use or when-not-to-use guidance is provided, and no alternatives or prerequisites are mentioned. The agent must infer usage solely from the capability statement, with no routing help among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flourRead a published flour by UUID or slugARead-onlyIdempotentInspect
Read a published flour by UUID or slug. Returns public catalog data with source links and credits.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Canonical UUID or lowercase slug. UUIDs are case-insensitive; UUID-shaped identifiers resolve only as canonical IDs and cannot be slugs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that the result is public catalog data with source links and credits, which is useful but limited; it does not address missing identifiers, access restrictions, or error 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?
Two short sentences with no filler. The core operation and identifier format are front-loaded, and the return-content note earns its place by indicating what the agent can expect.
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 single-parameter, read-only lookup tool with strong annotations and a fully documented schema, the description is complete enough for correct invocation. The absence of an output schema is adequately compensated by the note about public catalog data with source links and credits.
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 coverage is 100%, and the input schema already describes the id parameter in detail, including UUID vs slug constraints and resolution behavior. The description merely repeats 'by UUID or slug' without adding meaning beyond what the schema provides, so the baseline score of 3 applies.
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 uses a specific verb ('Read') and a clear resource ('published flour'), and it identifies the identifier forms (UUID or slug) plus the return payload. It does not explicitly name or differentiate from sibling tools like search_flours, though the lookup-by-identifier framing implies the distinction.
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?
Usage context is implied: use this tool to fetch a specific published flour when you already have its UUID or slug. However, there is no explicit guidance about when not to use it or when to prefer a sibling like search_flours, leaving the routing decision mostly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ingredientRead a published ingredient by UUIDARead-onlyIdempotentInspect
Read a published ingredient by UUID. Returns public catalog data with source links and credits.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Canonical ingredient UUID only, case-insensitive. Ingredient slugs are not globally unique. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds valuable context about the response contents (source links and credits) and the 'public catalog' scope, which goes beyond the annotations. No contradiction is present.
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 concise sentences with no filler. The action is front-loaded, and the return-value note is brief but informative. 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?
With no output schema, the description gives a high-level idea of the response ('source links and credits') which is sufficient for an agent to know what to expect. It does not cover error cases or availability, but for a simple read tool with strong annotations, this is adequate.
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%: the schema already documents that 'id' must be a canonical UUID (case-insensitive) and explains why slugs are not valid. The description simply repeats 'by UUID' without adding further parameter meaning, so 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 uses a specific verb ('Read') and resource ('published ingredient by UUID') and notes the return content ('public catalog data with source links and credits'). This clearly distinguishes it from sibling tools like search_ingredients (which search by criteria) and get_flour/get_pizza (different resource types).
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 a UUID is available, but does not explicitly state when to prefer this over search_ingredients or get_flour. There is no mention of alternatives or exclusions, leaving the agent to infer the appropriate context from the parameter requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pizzaRead a published house pizza by UUID or slugARead-onlyIdempotentInspect
Read a published house pizza by UUID or slug. Returns public catalog data with source links and credits.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Canonical UUID or lowercase slug. UUIDs are case-insensitive; UUID-shaped identifiers resolve only as canonical IDs and cannot be slugs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile with readOnlyHint, idempotentHint, and destructiveHint, so the bar for additional behavioral disclosure is lower. The description adds that the data is public and includes source links and credits, but it does not describe error behavior, not-found handling, or any further response structure.
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?
Two short sentences with no wasted words. The identifier mechanism is front-loaded, and the return summary follows immediately, making the definition easy to scan.
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 one-parameter read-only tool, the definition covers how to identify the target and what kind of data will be returned. The lack of an output schema is partially compensated by the return-value hint, though a more explicit statement about not-found or error responses would make it fully complete.
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?
The schema description coverage is 100% and the id parameter is already well documented with a pattern, length constraints, and semantics. The description's 'by UUID or slug' restates the schema rather than adding new meaning, so it stays at the baseline for fully-covered parameters.
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 ('Read'), a specific resource ('published house pizza'), and the accepted identifier forms ('UUID or slug'). This clearly differentiates it from sibling search and list tools, which operate over collections rather than a single identified pizza.
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 intended usage is clear: call this when you already have a UUID or slug and want the public catalog record for one published pizza. It does not explicitly name alternatives like search_pizzas for discovery or read_menu for menu-level reads, but the context is unambiguous enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_bakePlan a bakeBRead-onlyIdempotentInspect
Caller-provided sequential, contiguous stages ending when the first pizza enters the oven. Offset-bearing whole-minute instants must match the IANA zone. No fermentation prediction. Unique stage IDs, positive total duration, minimum <= maximum, available horizon and summed maxima <= 30 days. Windows are marginal, not independently selectable. No persistence.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | ||
| stages | Yes | ||
| timeZone | Yes | ||
| bakeStartAt | Yes | ||
| availableFrom | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description adds substantial behavioral detail: stages must be sequential and contiguous, ending at oven entry, time offsets must match the IANA zone, no fermentation prediction, unique stage IDs, duration bounds, and no persistence. These constraints go beyond annotations and help the agent understand expected input invariants, though the actual output behavior is not disclosed.
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 concise, with no filler, and front-loads the core concept of caller-provided stages ending at oven entry. The subsequent constraint list is dense but purposeful. It is not overly long, and every phrase adds information, though the structure is a run-on list rather than a clear paragraph.
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?
Given the tool's complexity (5 parameters, nested stages, no output schema), the description is incomplete. It does not explain what the plan actually is or what the tool returns, nor does it clarify the meaning of 'method'. It focuses on input constraints but omits output semantics and usage context. For a non-trivial planning tool, this is a significant gap.
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?
With schema description coverage at 0%, the description must compensate. It adds meaning to some parameters: stages are implied by 'sequential, contiguous stages', bakeStartAt is implied as the oven-entry time, availableFrom as the horizon, and timeZone via the IANA requirement. However, it does not explain 'method' at all, and the constraints are terse rather than explanatory. It partially compensates but leaves 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?
The title and description indicate this tool plans a bake by scheduling sequential stages that end when the first pizza enters the oven. It is distinguishable from sibling search/read/calculation tools, though the description reads more as a constraint list than an explicit statement of function. A clearer verb like 'generate a bake timeline' would strengthen clarity.
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 provides no explicit guidance on when to use this tool versus alternatives. It mentions constraints like 'No fermentation prediction' and 'Windows are marginal, not independently selectable' but does not state that the tool should be used for bake planning or that it should not be used for other purposes. No sibling tools are referenced as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_floursSearch published flour factsARead-onlyIdempotentInspect
Search published flour facts. Returns public catalog data with source links and credits.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Literal, case-insensitive name or brand substring. Surrounding whitespace is trimmed. | |
| limit | No | Decimal integer page size. Leading zeros, signs and fractions are rejected. | |
| offset | No | Decimal integer result offset. Leading zeros, signs and fractions are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is covered. The description adds value by disclosing that results come from public catalog data and include source links and credits, but it does not explain pagination behavior, result shape, or any other runtime traits.
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?
Two concise, front-loaded sentences with no filler. The scope ('Search published flour facts') is stated first, followed by the useful return-behavior line about public data, source links, and credits.
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 low-complexity search tool with no required parameters, the schema covers inputs and annotations cover safety. The description covers the return value at a high level, which is important because there is no output schema. A small gap remains: the exact structure of the catalog results is not described.
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 all three parameters (q, limit, offset) are already fully documented in the input schema. The description does not add new parameter-level meaning beyond what the schema provides, so 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 clearly states a specific verb and resource: search published flour facts. It also distinguishes itself from siblings by noting it returns 'public catalog data with source links and credits,' which separates it from get_flour and the other search tools.
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?
No guidance is given on when to use this tool versus alternatives like get_flour, search_ingredients, or search_pizzas. The word 'Search' implies usage, but there is no explicit when/when-not or reference to a sibling that fetches a single flour.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ingredientsSearch published ingredient factsARead-onlyIdempotentInspect
Search published ingredient facts. Returns public catalog data with source links and credits.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Literal, case-insensitive name substring. Surrounding whitespace is trimmed. | |
| limit | No | Decimal integer page size. Leading zeros, signs and fractions are rejected. | |
| course | No | One exact normalized course. No legacy-station fallback. | |
| offset | No | Decimal integer result offset. Leading zeros, signs and fractions are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, and idempotent, so the description doesn't need to repeat safety. It adds that the tool 'Returns public catalog data with source links and credits', which gives a bit of return-context but nothing further on behavior. No contradiction.
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?
Two short sentences: the action and the return type are stated immediately, no filler or redundant repetition.
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?
No output schema exists, so the description compensates by indicating the return holds public catalog data with links and credits. It doesn't cover pagination or result structure, but parameters are well-documented in schema and the tool is a straightforward read-only search.
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 coverage is 100% with each parameter already described. The description adds no extra meaning to parameters, so the baseline of 3 applies.
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?
Description uses a specific verb 'Search' with a clear resource 'published ingredient facts' and adds return content. It implicitly distinguishes from sibling search_flours and search_pizzas by covering all ingredients rather than a particular category.
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?
No guidance on when to use this tool versus alternatives. It doesn't state that it is the general ingredient search or mention exclusions like 'use search_flours for flour-specific queries'. The context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pizzasSearch published house pizzasARead-onlyIdempotentInspect
Search published house pizzas. Returns public catalog data with source links and credits.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Literal, case-insensitive substring of published names, descriptions or resolved ingredient names. Surrounding whitespace is trimmed. | |
| limit | No | Decimal integer page size. Leading zeros, signs and fractions are rejected. | |
| offset | No | Decimal integer result offset. Leading zeros, signs and fractions are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds that it returns public catalog data with source links and credits, providing behavioral context about the response content. No contradiction.
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 short sentences, front-loaded with the action and outcome. No filler or redundant information; 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?
The description covers the essential purpose and return content. Without an output schema, it mentions the key output elements (public data, source links, credits). It omits details like pagination behavior, but given the rich parameter schema and annotations, the description is adequate for an agent 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%, so all three parameters (q, limit, offset) are fully documented in the schema. The description adds no parameter-specific meaning beyond what the schema provides, so baseline 3 applies.
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 clearly states the action ('Search published house pizzas') with a specific resource, and distinguishes it from siblings like search_flours and search_ingredients. It also specifies what it returns (public catalog data with source links and credits), adding precision.
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 for searching pizzas but does not explicitly mention when to prefer this tool over siblings like get_pizza or read_menu. It lacks explicit exclusions or alternative routing, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shopping_listMake a shopping listCRead-onlyIdempotentInspect
One to eight uniquely identified, already-sized Dough requests. Optional unique published house pizza references and counts annotate topping needs only; they do not multiply dough. Custom flours and custom ingredients retain batch/row identity and are never merged across batches; a custom ingredient item's id is custom::. Ready starter is separate from fresh ingredients. Topping quantities are unknown. No persistence.
| Name | Required | Description | Default |
|---|---|---|---|
| pizzas | No | ||
| batches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered; 'No persistence' largely duplicates that. The description does add non-obvious behavior: pizza references 'annotate topping needs only; they do not multiply dough', custom ingredients are 'never merged across batches', and the custom id format โ genuinely useful rules an agent could not infer.
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 text is a dense run of clipped fragments ('Ready starter is separate from fresh ingredients. Topping quantities are unknown. No persistence.') that reads like schema notes rather than an agent-facing preamble. It is neither front-loaded with a purpose statement nor organized into scannable guidance.
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 tool with a deeply nested schema, 0% description coverage, and no output schema, the description should explain what comes back and how batches/flours/pizzas combine. It gestures at a few rules but omits the return shape (a list of ingredients with quantities?) and the topping-need model, leaving critical gaps.
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 0%, so the description must carry weight, and it does explain that pizzas are topping annotations rather than dough multipliers and gives the custom ingredient id syntax custom:<batchId>:<rowId>. However, it never explains the 'batches' structure or the relationship between batches, flours, and the resulting list, leaving much of the parameter semantics opaque.
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 never states what the tool produces โ no verb like 'compute', 'aggregate', or 'return' a shopping list appears. Instead it opens with a restatement of the batches constraint ('One to eight uniquely identified, already-sized Dough requests'), which is parameter semantics rather than purpose. Only the name and title hint that a shopping list is generated, and nothing distinguishes it from siblings like calculate_dough or plan_bake.
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?
There is no statement of when to call this versus calculate_dough, plan_bake, or read_menu, and no prerequisites or ordering guidance. A reader learns constraints ('Topping quantities are unknown', 'No persistence') but not when this tool is the right choice.
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.
2 tool updates
- Changed
calculate_dough2 fields changed- changed
Input schema / descriptionPrevious value: -"Percentages refer to total flour, except bigaHydration and starterHydrationPct. Flour rows are ratios, including empty/zero blends. Unique row IDs required. Named starter source must be a supplied row. Preferment leavening requires positive pff. No temperature inputs; preparation fixes DDT at 72 F and friction at 15 F. Buffer defaults off and non-off buffer requires balls sizing. Flour mode has no ball target: prepared ballCount/ballWeight are zero, ballsTotal is zero, bufferG is the whole batch and pizzaSize is unavailable. The 100000 g flour bound applies to direct flour inputs, not the balls solver result."New value: +"Percentages refer to total flour, except bigaHydration and starterHydrationPct. Flour rows are ratios, including empty/zero blends. Unique row IDs required. Named starter source must be a supplied row. Preferment leavening requires positive pff. No temperature inputs; preparation fixes DDT at 72 F and friction at 15 F. Buffer defaults off and non-off buffer requires balls sizing. Flour mode has no ball target: prepared ballCount/ballWeight are zero, ballsTotal is zero, bufferG is the whole batch and pizzaSize is unavailable. The 100000 g flour bound applies to direct flour inputs, not the balls solver result. Custom ingredients count by weight only and never in hydration." - added
Input schema / properties / customAdjustmentsAdded value: +{ + "description": "Optional baker-named final-mix ingredients, up to 8, each a percentage of total flour. They count by weight only: they add to batch weight and ball sizing, never to hydration or flour absorption. Row IDs are c followed by five lowercase letters or digits, unique within the formula. Names are sent trimmed, 1 to 40 characters, unique ignoring case, and may not repeat one of Dough's own ingredient names such as Water, Salt, Oil or Sugar, or contain control, hidden or bidirectional characters or a web address. Any refused row fails the whole request.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "maxLength": 6, + "minLength": 1, + "pattern": "^c[0-9a-z]{5}$", + "type": "string" + }, + "name": { + "maxLength": 40, + "minLength": 1, + "pattern": "^\\S(?:[\\s\\S]*\\S)?$", + "type": "string" + }, + "pct": { + "maximum": 100, + "minimum": 0, + "type": "number" + } + }, + "required": [ + "id", + "name", + "pct" + ], + "type": "object" + }, + "maxItems": 8, + "type": "array" +}
- Changed
shopping_list3 fields changed- changed
Input schema / descriptionPrevious value: -"One to eight uniquely identified, already-sized Dough requests. Optional unique published house pizza references and counts annotate topping needs only; they do not multiply dough. Custom flours retain batch/row identity. Ready starter is separate from fresh ingredients. Topping quantities are unknown."New value: +"One to eight uniquely identified, already-sized Dough requests. Optional unique published house pizza references and counts annotate topping needs only; they do not multiply dough. Custom flours and custom ingredients retain batch/row identity and are never merged across batches; a custom ingredient item's id is custom:<batchId>:<rowId>. Ready starter is separate from fresh ingredients. Topping quantities are unknown." - changed
Input schema / properties / batches / items / properties / dough / descriptionPrevious value: -"Percentages refer to total flour, except bigaHydration and starterHydrationPct. Flour rows are ratios, including empty/zero blends. Unique row IDs required. Named starter source must be a supplied row. Preferment leavening requires positive pff. No temperature inputs; preparation fixes DDT at 72 F and friction at 15 F. Buffer defaults off and non-off buffer requires balls sizing. Flour mode has no ball target: prepared ballCount/ballWeight are zero, ballsTotal is zero, bufferG is the whole batch and pizzaSize is unavailable. The 100000 g flour bound applies to direct flour inputs, not the balls solver result."New value: +"Percentages refer to total flour, except bigaHydration and starterHydrationPct. Flour rows are ratios, including empty/zero blends. Unique row IDs required. Named starter source must be a supplied row. Preferment leavening requires positive pff. No temperature inputs; preparation fixes DDT at 72 F and friction at 15 F. Buffer defaults off and non-off buffer requires balls sizing. Flour mode has no ball target: prepared ballCount/ballWeight are zero, ballsTotal is zero, bufferG is the whole batch and pizzaSize is unavailable. The 100000 g flour bound applies to direct flour inputs, not the balls solver result. Custom ingredients count by weight only and never in hydration." - added
Input schema / properties / batches / items / properties / dough / properties / customAdjustmentsAdded value: +{ + "description": "Optional baker-named final-mix ingredients, up to 8, each a percentage of total flour. They count by weight only: they add to batch weight and ball sizing, never to hydration or flour absorption. Row IDs are c followed by five lowercase letters or digits, unique within the formula. Names are sent trimmed, 1 to 40 characters, unique ignoring case, and may not repeat one of Dough's own ingredient names such as Water, Salt, Oil or Sugar, or contain control, hidden or bidirectional characters or a web address. Any refused row fails the whole request.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "maxLength": 6, + "minLength": 1, + "pattern": "^c[0-9a-z]{5}$", + "type": "string" + }, + "name": { + "maxLength": 40, + "minLength": 1, + "pattern": "^\\S(?:[\\s\\S]*\\S)?$", + "type": "string" + }, + "pct": { + "maximum": 100, + "minimum": 0, + "type": "number" + } + }, + "required": [ + "id", + "name", + "pct" + ], + "type": "object" + }, + "maxItems": 8, + "type": "array" +}
4 tool updates
- Changed
calculate_dough1 field changed- added
Input schema / properties / units / typeAdded value: +"string"
- Added
plan_bake - Changed
search_ingredients1 field changed- added
Input schema / properties / course / typeAdded value: +"string"
- Added
shopping_list
9 tool updates
- First observed
calculate_balance - First observed
calculate_dough - First observed
get_flour - First observed
get_ingredient - First observed
get_pizza - First observed
read_menu - First observed
search_flours - First observed
search_ingredients - First observed
search_pizzas
Related MCP Connectors
Flour-first dough plans: yeast, hydration, schedule from flour you own. No API key for plan tools.
The brain for restaurant costs, pricing, and true profit (read/edit menu, recipes, costs).
Read-only kitchen costing, recipe scaling, UK GP, starter menus, and prep lists for chefs.
61Construction quantities from cited calculators, takeoffs, a planner and house drawings. No prices.
281
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables deterministic recipe and portion math with USDA-sourced macros, gram conversions, cooked yields, and per-eater portions.12MIT
- FlicenseAqualityDmaintenanceSeed oil (PUFA) data for 500+ US restaurant chains: letter grades, the oil each chain fries in, cleanest menu items, and rankings. Zero-dependency Python stdio server backed by the free hosted Seed Oil Tracker endpoint, no key or account needed.3-
- FlicenseNot gradedqualityDmaintenanceYour digital kitchen, powered by AI. Track what you have, discover what you can cook, and get guided through every recipe โ step by step, timer by timer.-
- AlicenseAqualityBmaintenanceEnables interactive recipe costing and menu-item pricing with deterministic math, including waste and margin calculations, and distinguishes whether figures came from the calculator or the model.2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.