Barbaro
Read published house pizza facts and calculate dough and ingredient balance.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"barbaro": {
"url": "https://barbaropizza.com/mcp"
}
}
}Remote endpoints
https://barbaropizza.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (11)
🟢search_pizzas(q, limit, offset)
Search published house pizzas. Returns public catalog data with source links and credits.
Input Schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 120,
"default": "",
"description": "Literal, case-insensitive substring of published names, descriptions or resolved ingredient names. Surrounding whitespace is trimmed."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "Decimal integer page size. Leading zeros, signs and fractions are rejected."
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 500,
"default": 0,
"description": "Decimal integer result offset. Leading zeros, signs and fractions are rejected."
}
},
"additionalProperties": false
}🟢get_pizza(id)
Read a published house pizza by UUID or slug. Returns public catalog data with source links and credits.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^(?:[a-z0-9]+(?:-[a-z0-9]+)*|[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12})$",
"description": "Canonical UUID or lowercase slug. UUIDs are case-insensitive; UUID-shaped identifiers resolve only as canonical IDs and cannot be slugs."
}
},
"required": [
"id"
],
"additionalProperties": false
}🟢read_menu
Read published menu sections and their pizza IDs. Returns public catalog data with source links and credits.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢search_ingredients(q, course, limit, offset)
Search published ingredient facts. Returns public catalog data with source links and credits.
Input Schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 120,
"default": "",
"description": "Literal, case-insensitive name substring. Surrounding whitespace is trimmed."
},
"course": {
"type": "string",
"enum": [
"Sauce",
"Cheese",
"Toppings",
"Finishes"
],
"description": "One exact normalized course. No legacy-station fallback."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "Decimal integer page size. Leading zeros, signs and fractions are rejected."
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 500,
"default": 0,
"description": "Decimal integer result offset. Leading zeros, signs and fractions are rejected."
}
},
"additionalProperties": false
}🟢get_ingredient(id)
Read a published ingredient by UUID. Returns public catalog data with source links and credits.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$",
"description": "Canonical ingredient UUID only, case-insensitive. Ingredient slugs are not globally unique."
}
},
"required": [
"id"
],
"additionalProperties": false
}🟢search_flours(q, limit, offset)
Search published flour facts. Returns public catalog data with source links and credits.
Input Schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 120,
"default": "",
"description": "Literal, case-insensitive name or brand substring. Surrounding whitespace is trimmed."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "Decimal integer page size. Leading zeros, signs and fractions are rejected."
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 500,
"default": 0,
"description": "Decimal integer result offset. Leading zeros, signs and fractions are rejected."
}
},
"additionalProperties": false
}🟢get_flour(id)
Read a published flour by UUID or slug. Returns public catalog data with source links and credits.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^(?:[a-z0-9]+(?:-[a-z0-9]+)*|[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12})$",
"description": "Canonical UUID or lowercase slug. UUIDs are case-insensitive; UUID-shaped identifiers resolve only as canonical IDs and cannot be slugs."
}
},
"required": [
"id"
],
"additionalProperties": false
}🟢calculate_dough(units, sizing, hydration, flours, salt, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"units": {
"type": "string",
"const": "g"
},
"sizing": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"mode": {
"const": "flour"
},
"flourGrams": {
"type": "number",
"minimum": 1,
"maximum": 100000
}
},
"required": [
"mode",
"flourGrams"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"mode": {
"const": "balls"
},
"ballCount": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"ballGrams": {
"type": "number",
"minimum": 50,
"maximum": 2000
}
},
"required": [
"mode",
"ballCount",
"ballGrams"
]
}
]
},
"hydration": {
"type": "number",
"minimum": 0,
"maximum": 200
},
"flours": {
"type": "array",
"maxItems": 12,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^(?!blend$|__proto__$|constructor$|prototype$)[A-Za-z0-9][A-Za-z0-9_-]*$"
},
"pct": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"bigaPct": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"source": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"type": {
"const": "catalog"
},
"ref": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^(?:[a-z0-9]+(?:-[a-z0-9]+)*|[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12})$"
}
},
"required": [
"type",
"ref"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"type": {
"const": "custom"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
}
},
"required": [
"type",
"name"
]
}
]
}
},
"required": [
"id",
"pct",
"bigaPct",
"source"
]
}
},
"salt": {
"type": "number",
"minimum": 0,
"maximum": 10,
"default": 0
},
"oil": {
"type": "number",
"minimum": 0,
"maximum": 30,
"default": 0
},
"sugar": {
"type": "number",
"minimum": 0,
"maximum": 30,
"default": 0
},
"honey": {
"type": "number",
"minimum": 0,
"maximum": 30,
"default": 0
},
"dmp": {
"type": "number",
"minimum": 0,
"maximum": 30,
"default": 0
},
"ndmp": {
"type": "number",
"minimum": 0,
"maximum": 30,
"default": 0
},
"nonfatDryMilk": {
"type": "number",
"minimum": 0,
"maximum": 30,
"default": 0
},
"ascorbicAcid": {
"type": "number",
"minimum": 0,
"maximum": 1,
"default": 0
},
"prefIsd": {
"type": "number",
"minimum": 0,
"maximum": 20,
"default": 0,
"description": "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."
},
"prefIdy": {
"type": "number",
"minimum": 0,
"maximum": 20,
"default": 0,
"description": "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."
},
"finalIsd": {
"type": "number",
"minimum": 0,
"maximum": 20,
"default": 0,
"description": "Final-mix instant sourdough mass as a percentage of total flour. No stage-basis conversion is required."
},
"finalIdy": {
"type": "number",
"minimum": 0,
"maximum": 20,
"default": 0,
"description": "Final-mix instant dry yeast mass as a percentage of total flour. No stage-basis conversion is required."
},
"starterPrefPct": {
"type": "number",
"minimum": 0,
"maximum": 200,
"default": 0,
"description": "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."
},
"starterFinalPct": {
"type": "number",
"minimum": 0,
"maximum": 200,
"default": 0,
"description": "Final-mix sourdough starter mass (including its flour and water) as a percentage of total flour. No stage-basis conversion is required."
},
"pff": {
"type": "number",
"minimum": 0,
"maximum": 100,
"default": 0
},
"bigaHydration": {
"type": "number",
"minimum": 0,
"maximum": 200,
"default": 50,
"description": "Preferment water as a percentage of preferment flour."
},
"reserveWaterPct": {
"type": "number",
"minimum": 0,
"maximum": 100,
"default": 5
},
"starterHydrationPct": {
"type": "number",
"minimum": 40,
"maximum": 200,
"default": 100,
"description": "Starter water as a percentage of starter flour, not total flour or starter mass."
},
"starterFlourSource": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"default": "blend",
"description": "blend or a supplied flour row ID. Inactive starter normalizes to blend and 100% hydration."
},
"buffer": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"mode": {
"enum": [
"off",
"recommended"
]
}
},
"required": [
"mode"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"mode": {
"const": "custom"
},
"grams": {
"type": "number",
"minimum": 0,
"maximum": 10000
}
},
"required": [
"mode",
"grams"
]
}
],
"default": {
"mode": "off"
}
}
},
"required": [
"units",
"sizing",
"hydration",
"flours"
],
"additionalProperties": false,
"description": "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."
}🟢calculate_balance(ingredientIds)
Calculate six balance contribution totals and meters for unique published ingredient IDs. Not nutrition or ingredient weights. No persistence.
Input Schema
{
"type": "object",
"properties": {
"ingredientIds": {
"type": "array",
"maxItems": 40,
"uniqueItems": true,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 36,
"pattern": "^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$"
}
}
},
"required": [
"ingredientIds"
],
"additionalProperties": false
}🟢plan_bake(timeZone, availableFrom, bakeStartAt, method, stages)
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.
Input Schema
{
"type": "object",
"properties": {
"timeZone": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[A-Za-z_]+(?:/[A-Za-z0-9_+.-]+)*$"
},
"availableFrom": {
"type": "string",
"minLength": 1,
"maxLength": 25,
"pattern": "^[1-9][0-9]{3}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}(?::00)?(?:Z|[+-][0-9]{2}:[0-9]{2})$"
},
"bakeStartAt": {
"type": "string",
"minLength": 1,
"maxLength": 25,
"pattern": "^[1-9][0-9]{3}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}(?::00)?(?:Z|[+-][0-9]{2}:[0-9]{2})$"
},
"method": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"stages": {
"type": "array",
"minItems": 1,
"maxItems": 16,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
},
"minMinutes": {
"type": "integer",
"minimum": 0,
"maximum": 43200
},
"maxMinutes": {
"type": "integer",
"minimum": 0,
"maximum": 43200
}
},
"required": [
"id",
"label",
"minMinutes",
"maxMinutes"
]
}
}
},
"required": [
"timeZone",
"availableFrom",
"bakeStartAt",
"method",
"stages"
],
"additionalProperties": false,
"description": "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."
}🟢shopping_list(batches, pizzas)
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. No persistence.
Input Schema
{
"type": "object",
"properties": {
"batches": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$"
},
"dough": {
"type": "object",
"additionalProperties": false,
"properties": {
"units": {
"type": "string",
"const": "g"
},
"sizing": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"mode": {
"const": "flour"
},
"flourGrams": {
"type": "number",
"minimum": 1,
"maximum": 100000
}
},
"required": [
"mode",
"flourGrams"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"mode": {
"const": "balls"
},
"ballCount": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"ballGrams": {
"type": "number",
"minimum": 50,
"maximum": 2000
}
},
"required": [
"mode",
"ballCount",
"ballGrams"
]
}
]
},
"hydration": {
"type": "number",
"minimum": 0,
"maximum": 200
},
"flours": {
"type": "array",
"maxItems": 12,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^(?!blend$|__proto__$|constructor$|prototype$)[A-Za-z0-9][A-Za-z0-9_-]*$"
},
"pct": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"bigaPct": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"source": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"type": {
"const": "catalog"
},
"ref": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^(?:[a-z0-9]+(?:-[a-z0-9]+)*|[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12})$"
}
},
"required": [
"type",
"ref"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"type": {
"const": "custom"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "\\S"
}
},
"required": [
"type",
"name"
]
}
]
}
},
"required": [
"id",
"pct",
"bigaPct",
"source"
]
}
},
"salt": {
"type": "number",
"minimum": 0,
"maximum": 10,
"default": 0
},
"oil": {
"type": "number",
"minimum": 0,
"maximum": 30,
"default": 0
},
"sugar": {
"type": "number",
"minimum": 0,
"maximum": 30,
"default": 0
},
"honey": {
"type": "number",
"minimum": 0,
"maximum": 30,
"default": 0
},
"dmp": {
"type": "number",
"minimum": 0,
"maximum": 30,
"default": 0
},
"ndmp": {
"type": "number",
"minimum": 0,
"maximum": 30,
"default": 0
},
"nonfatDryMilk": {
"type": "number",
"minimum": 0,
"maximum": 30,
"default": 0
},
"ascorbicAcid": {
"type": "number",
"minimum": 0,
"maximum": 1,
"default": 0
},
"prefIsd": {
"type": "number",
"minimum": 0,
"maximum": 20,
"default": 0,
"description": "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."
},
"prefIdy": {
"type": "number",
"minimum": 0,
"maximum": 20,
"default": 0,
"description": "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."
},
"finalIsd": {
"type": "number",
"minimum": 0,
"maximum": 20,
"default": 0,
"description": "Final-mix instant sourdough mass as a percentage of total flour. No stage-basis conversion is required."
},
"finalIdy": {
"type": "number",
"minimum": 0,
"maximum": 20,
"default": 0,
"description": "Final-mix instant dry yeast mass as a percentage of total flour. No stage-basis conversion is required."
},
"starterPrefPct": {
"type": "number",
"minimum": 0,
"maximum": 200,
"default": 0,
"description": "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."
},
"starterFinalPct": {
"type": "number",
"minimum": 0,
"maximum": 200,
"default": 0,
"description": "Final-mix sourdough starter mass (including its flour and water) as a percentage of total flour. No stage-basis conversion is required."
},
"pff": {
"type": "number",
"minimum": 0,
"maximum": 100,
"default": 0
},
"bigaHydration": {
"type": "number",
"minimum": 0,
"maximum": 200,
"default": 50,
"description": "Preferment water as a percentage of preferment flour."
},
"reserveWaterPct": {
"type": "number",
"minimum": 0,
"maximum": 100,
"default": 5
},
"starterHydrationPct": {
"type": "number",
"minimum": 40,
"maximum": 200,
"default": 100,
"description": "Starter water as a percentage of starter flour, not total flour or starter mass."
},
"starterFlourSource": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"default": "blend",
"description": "blend or a supplied flour row ID. Inactive starter normalizes to blend and 100% hydration."
},
"buffer": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"mode": {
"enum": [
"off",
"recommended"
]
}
},
"required": [
"mode"
]
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"mode": {
"const": "custom"
},
"grams": {
"type": "number",
"minimum": 0,
"maximum": 10000
}
},
"required": [
"mode",
"grams"
]
}
],
"default": {
"mode": "off"
}
}
},
"required": [
"units",
"sizing",
"hydration",
"flours"
],
"description": "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."
}
},
"required": [
"id",
"dough"
]
}
},
"pizzas": {
"type": "array",
"maxItems": 20,
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"ref": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^(?:[a-z0-9]+(?:-[a-z0-9]+)*|[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12})$"
},
"count": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": [
"ref",
"count"
]
}
}
},
"required": [
"batches"
],
"additionalProperties": false,
"description": "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."
}Community
Evidence