pizza-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pizza-mcpCalculate dough for 6 250g balls, 62% hydration, 70% tipo 00 + 30% whole wheat, 22h fridge +2h room"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pizza-mcp
Server MCP per calcolare le dosi dell'impasto della pizza con il metodo diretto. A partire da numero e peso dei panetti, idratazione, farine e programma di lievitazione restituisce i grammi di ogni farina, acqua, sale e lievito, con le percentuali del fornaio.
Si può usare in due modi, con lo stesso codice e lo stesso tool:
in locale via stdio (Node.js), per Claude Code, Claude Desktop o qualsiasi client MCP;
su Cloudflare Workers come endpoint MCP remoto Streamable HTTP, senza server da mantenere.
Cosa fa
Calcola il peso totale dell'impasto dai panetti (
panetti × peso).Usa le percentuali del fornaio: la farina totale è 100%, mentre acqua, sale e lievito sono percentuali sul peso della farina.
Gestisce una o più farine con le rispettive percentuali (se la somma non è 100, normalizza automaticamente).
Stima il lievito in base a ore e temperatura, anche con una parte di lievitazione in frigorifero.
Supporta lievito fresco, secco attivo e istantaneo, con conversione automatica.
Restituisce sia un riepilogo leggibile in italiano sia un oggetto JSON strutturato.
Related MCP server: Jueshan Paipan MCP
Installazione
Richiede Node.js 18 o superiore.
npm install
npm run buildConfigurazione in locale (stdio)
Registra il server con il percorso assoluto di dist/index.js (sostituisci C:\percorso\pizza-mcp con la cartella in cui hai clonato il progetto):
claude mcp add pizza-mcp -- node "C:\percorso\pizza-mcp\dist\index.js"Per renderlo disponibile in tutti i progetti aggiungi --scope user:
claude mcp add --scope user pizza-mcp -- node "C:\percorso\pizza-mcp\dist\index.js"In alternativa, aggiungi al file .mcp.json del progetto:
{
"mcpServers": {
"pizza-mcp": {
"command": "node",
"args": [
"C:\\percorso\\pizza-mcp\\dist\\index.js"
]
}
}
}Se il client non avvia il server su Windows, prova la variante con cmd:
claude mcp add pizza-mcp -- cmd /c node "C:\percorso\pizza-mcp\dist\index.js"Deploy su Cloudflare Workers
Il Worker espone un endpoint MCP Streamable HTTP stateless su /mcp: ogni richiesta crea un server e un trasporto nuovi, quindi non servono Durable Objects né sessioni. Il tool è puro e non conserva stato.
Accedi a Cloudflare (una volta sola):
npx wrangler loginProva il Worker in locale:
npm run dev:workerIl server risponde su
http://localhost:8788(/healthper lo stato,/mcpper MCP).Pubblica:
npm run deployWrangler stampa l'URL pubblico, del tipo
https://pizza-mcp.<sottodominio>.workers.dev.Collega l'endpoint remoto a Claude Code:
claude mcp add --transport http pizza-mcp https://pizza-mcp.<sottodominio>.workers.dev/mcp
L'endpoint è pubblico e senza autenticazione: chiunque conosca l'URL può chiamare il tool di calcolo. Se ti serve, puoi aggiungere un controllo su Authorization nel fetch di src/worker.ts o proteggere l'endpoint con Cloudflare Access.
Per cambiare nome del Worker, porta o compatibility date modifica wrangler.jsonc.
Tool: calculate_dough
Parametri
Parametro | Tipo | Default | Descrizione |
| intero ≥ 1 | obbligatorio | Numero di panetti |
| numero > 0 | obbligatorio | Peso di ogni panetto in grammi |
| 30–120 |
| Idratazione in % sulla farina |
| 0–10 |
| Sale in % sulla farina |
| array | una farina al 100% | Elenco |
|
|
| Tipo di lievito |
| 0–10 | — | Se indicato, forza la % di lievito (del tipo scelto) e ignora il modello tempo/temperatura |
| 0–240 |
| Ore a temperatura ambiente |
| −5–45 |
| Temperatura ambiente in °C |
| 0–360 |
| Ore in frigorifero |
| −5–15 |
| Temperatura del frigo in °C |
Per una lievitazione solo in frigo indica fridge_hours e lascia room_hours: 0 (o aggiungi 1–2 ore a temperatura ambiente per l'appretto).
Esempio
Calcola l'impasto per 6 panetti da 250 g, 62% di idratazione, 70% Tipo 00 e 30% farina integrale, 22 ore in frigo a 4 °C più 2 ore a 20 °C, con lievito fresco.
Il server restituisce (estratto):
Ingrediente | Grammi | % sulla farina |
Farina (totale) | 909,7 | 100% |
↳ Tipo 00 W300 | 636,8 | 70% |
↳ Farina integrale | 272,9 | 30% |
Acqua | 564 | 62% |
Sale | 22,7 | 2,5% |
Lievito di birra fresco | 3,54 | 0,39% |
Totale impasto: 1500 g (6 × 250 g). Lievitazione: 22 h a 4 °C + 2 h a 20 °C ≈ 9,3 h equivalenti a 20 °C.
Output
Il tool restituisce due contenuti testuali: un riepilogo Markdown in italiano e il risultato completo in JSON. Il JSON include anche:
targetDoughGramsedoughGrams(verifica del peso totale);percentuali del fornaio e grammi per ogni farina;
yeast.source(modeloppureoverride), grammi e percentuale di lievito, equivalente in lievito fresco;fermentation.effectiveHoursAt20C,averageTemperatureFactoremodelClamped;warningscon avvisi su idratazione, sale, appretto, fermentazioni estreme e lievito da pesare con precisione.
Modello di calcolo
Percentuali e peso
Con farina totale = 100%:
peso_impasto = panetti × peso_panetto
farina = peso_impasto / (1 + idratazione/100 + sale/100 + lievito/100)
acqua = farina × idratazione/100
sale = farina × sale/100
lievito = farina × lievito/100Dividendo il peso dell'impasto per la somma delle percentuali (incluso il lievito) si ottiene una ricetta che torna esattamente al peso dei panetti desiderato.
Stima del lievito
Il modello normalizza l'attività del lievito a 20 °C con un fattore Q10 = 2: ogni 10 °C in più raddoppia la velocità di fermentazione, ogni 10 °C in meno la dimezza.
ore_equivalenti = Σ (ore_i × 2^((T_i − 20)/10))
lievito_fresco_% = 3,6 / ore_equivalentiLa stima viene limitata tra 0,05% e 4% di lievito fresco; se viene applicato un limite il risultato contiene un avviso.
Valori indicativi:
Lievitazione | Lievito fresco stimato |
8 h a 20 °C | ~0,45% |
24 h a 20 °C | ~0,15% |
48 h a 20 °C | ~0,08% |
24 h a 4 °C + 2 h a 20 °C | ~0,36% |
48 h a 4 °C + 2 h a 20 °C | ~0,20% |
72 h a 4 °C + 2 h a 20 °C | ~0,14% |
Conversioni usate:
1 g di lievito secco attivo ≈ 2,5 g di lievito fresco;
1 g di lievito istantaneo ≈ 3 g di lievito fresco.
Limiti
Il modello è una stima: usa la temperatura ambiente, non la temperatura reale dell'impasto, e non tiene conto della forza della farina, della temperatura dell'acqua o dell'umidità. Regola il risultato in base alla tua esperienza; puoi forzare la percentuale con
yeast_percent.Il calcolo riguarda il metodo diretto. Non è pensato per biga, poolish, lievito madre o altri prefermenti.
I grammi di lievito molto piccoli richiedono una bilancia con precisione di 0,1 g (il tool lo segnala).
Sviluppo
npm test # test unitari del motore di calcolo
npm run smoke # test end-to-end del server stdio (richiede npm run build)
npm run dev # avvia il server stdio da sorgente con tsx
npm run dev:worker # avvia il Worker in locale su http://localhost:8788
npm run smoke:worker # test end-to-end dell'endpoint HTTP (con dev:worker attivo)
npm run typecheck # controllo dei tipi senza generare file
npm run deploy # pubblica su Cloudflare WorkersLa logica di calcolo è in src/calc.ts, la formattazione del riepilogo in src/format.ts, la registrazione del tool in src/server.ts, l'entry point stdio in src/index.ts e l'entry point Cloudflare in src/worker.ts.
Licenza
MIT
Available Tools
1 toolcalculate_doughCalcola dosi impasto pizzaARead-onlyIdempotent
Calcola tutte le dosi dell'impasto della pizza con il metodo diretto: grammi di ogni farina, acqua, sale e lievito, con le percentuali del fornaio.
Parametri principali: numero e peso dei panetti, idratazione desiderata, una o più farine con le rispettive percentuali, ore e temperatura di lievitazione (a temperatura ambiente e/o in frigorifero) e tipo di lievito.
Il lievito viene stimato con un modello tempo/temperatura: percentuale di lievito fresco = 3,6 / ore equivalenti a 20 °C, con attività che raddoppia ogni 10 °C. Se conosci già la percentuale di lievito, puoi forzarla con yeast_percent. Le percentuali di farina, acqua, sale e lievito sono tutte sul peso della farina (farina totale = 100%).
| Name | Required | Description | Default |
|---|---|---|---|
| balls | Yes | Numero di panetti da preparare. | |
| flours | No | Una o più farine con la percentuale sul totale della farina. Default: un'unica farina al 100%. | |
| room_hours | No | Ore di lievitazione a temperatura ambiente (default 24; usa 0 se fai tutto in frigo). Per l'appretto dopo il frigo usa 1-2 ore. | |
| yeast_type | No | Tipo di lievito: fresh = fresco (default), dry = secco attivo, instant = istantaneo. | |
| fridge_hours | No | Ore di lievitazione in frigorifero (default 0, cioè nessun frigo). Se usi il frigo, aggiungi 1-2 ore a temperatura ambiente per l'appretto. | |
| salt_percent | No | Sale in percentuale sul peso della farina (default 2,5). Il valore tipico è 2-3%. | |
| ball_weight_g | Yes | Peso di ciascun panetto in grammi (es. 250). | |
| yeast_percent | No | Opzionale: forza la percentuale di lievito (del tipo scelto) sul peso della farina, ignorando il modello tempo/temperatura. | |
| hydration_percent | No | Idratazione desiderata in percentuale sul peso della farina (default 62). Es. 62 per il 62%. | |
| room_temperature_c | No | Temperatura ambiente in °C (default 20). | |
| fridge_temperature_c | No | Temperatura del frigorifero in °C (default 4). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, idempotent, non-destructive calculation. The description adds meaningful behavioral detail beyond annotations by disclosing the yeast estimation model, the 10 °C doubling rule, and the fact that yeast_percent overrides that model.
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 front-loaded with the purpose and then structured into parameter summary, yeast model, and percentage basis. It is somewhat lengthy but most content earns its place; the main parameter summary mildly repeats schema information.
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 an 11-parameter calculator with no output schema, the description covers purpose, key parameters, percentage conventions, and the yeast estimation/override behavior. It also indicates the calculation results in grams of each ingredient, so an agent has enough context to invoke 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 coverage is 100%, so the schema already documents each parameter thoroughly. The description still adds conceptual meaning by summarizing the key inputs and clarifying that all percentages are relative to total flour weight, with total flour equal to 100%.
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 and resource: calculating all pizza dough doses using the direct method, producing grams of each flour, water, salt, and yeast with baker's percentages. It is immediately clear what the tool does and what outputs are conceptually provided.
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 explains the main inputs and gives a clear conditional usage rule: if the yeast percentage is already known, use yeast_percent to override the time/temperature model. There are no sibling tools to differentiate against, and no explicit 'when not to use' guidance, but the operational context is clear.
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.
1 tool update
v1.0.0- First observed
calculate_dough
TDQS
Scored across 1 tool
There is only one tool, so there is no possibility of misselection or overlapping purpose. Its purpose (compute pizza dough ingredient doses with baker's percentages) is unambiguous.
The single name calculate_dough follows a clear verb_noun snake_case convention. With one tool there is no internal inconsistency, though the pattern cannot be stress-tested across a set.
The domain is a single self-contained calculation, so one comprehensive tool is proportionate rather than artificially split. It is slightly thin in that the yeast model, fermentation scheduling, and flour handling are all fused into one call instead of being composable pieces.
The tool covers the core dough lifecycle inputs: flour blends and percentages, hydration, salt, yeast type, yeast forcing, fermentation time/temperature, and ball count/weight. Minor gaps exist, such as no reverse calculation (given yeast %, derive timing), no unit or temperature-scale conversion, and no output of a full step-by-step schedule.
Maintenance
Related MCP Connectors
Flour-first dough plans: yeast, hydration, schedule from flour you own. No API key for plan tools.
Read published house pizza facts and calculate dough and ingredient balance.
Sourdough baking: dough calculators, a bake planner, The Sourdough Framework and your bake journal
Peptide reference and exact math: reconstitution units, blends, supply, dose ranges by origin.
61
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceTracks caffeine decay and predicts safe bedtimes using a half-life model. No external integrations needed, intake is passed as parameters.MIT
- AlicenseNot gradedqualityBmaintenanceProvides precise Chinese metaphysics chart calculation (Bazi, Ziwei, Qimen) with true solar time correction, outputting structured JSON and Markdown for AI integration.3MIT
- AlicenseAqualityBmaintenanceEnables deterministic recipe and portion math with USDA-sourced macros, gram conversions, cooked yields, and per-eater portions.12MIT
- AlicenseAqualityCmaintenanceProvides pet nutrition tools for AI agents, enabling cup-to-grams conversion, RER/MER calorie calculations, and ideal weight lookup by breed with source URLs.4MIT