Make printable recipe cards from your own recipes as a print-ready PDF.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use this when the user wants printable recipe cards ("recipe card", "recipe cards printable", "4x6 recipe card", "recipe card template", "3x5 recipe cards", "print my recipe on a card") or wants a recipe doubled, halved or scaled to a number of servings for printing. If the user pastes or uploads a recipe (text, a web page or a photo of a card), first copy its title, servings, ingredient lines and steps into recipes, keeping amounts as written, then call. Builds a PDF of 4x6, 3x5, 5x7, half-letter or A6 cards, up to 4 per Letter or A4 sheet with cut lines or one per page, scales amounts with fractions kept as fractions, converts units only when asked, and continues long recipes on a second card instead of shrinking text below 8 pt. Returns the scaled ingredient lines, card counts and a PDF link. Does not find or invent recipes, does not compute nutrition, and does not change cooking times.
Optional footer name, printed as "From the kitchen of <name>", e.g. "Grandma Rose".
Accent colour: hex like #C2410C or a name (terracotta, red, rose, berry, purple, blue, navy, teal, green, sage, olive, mustard, brown, slate, black). Default terracotta.
letter (default; 2 to 4 cards per sheet with cut lines), a4, or card (one card per page at true size, for card stock). Default a4 for A6 cards.
Scale every recipe by this factor instead: 2 (double), 0.5 (half), 1.5 or "3/4". Amounts stay fractions, e.g. 3/4 cup x 2 = 1 1/2 cups.
Only when sending one recipe without the recipes list: its steps.
Only when sending one recipe without the recipes list: its name.
keep (default, amounts as written), metric (ml, l, g, kg) or us (cups, tbsp, tsp, oz, lb). Converts volume to volume and weight to weight only.
The recipes, one object each with title, servings, ingredients and steps. If the user pasted or photographed a recipe, copy its title, servings, ingredient lines and steps into these fields first; keep amounts exactly as written.
Same as servings: the target number of servings, e.g. 12.
Scale every recipe to this many servings, e.g. 12. Each recipe needs its own servings to scale from.
4x6 (default), 3x5, 5x7, half-letter (5.5x8.5 in) or a6.
Only when sending one recipe without the recipes list: its ingredient lines.
landscape (default for 4x6, 3x5, 5x7) or portrait (default for half-letter and A6).
Fallback: a whole recipe pasted as plain text (title on the first line, then Ingredients and Instructions sections). Use recipes when you can.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http recipe-cards https://recipe-cards.zovo.one/mcp
Use this when the user wants printable recipe cards ("recipe card", "recipe cards printable", "4x6 recipe card", "recipe card template", "3x5 recipe cards", "print my recipe on a card") or wants a recipe doubled, halved or scaled to a number of servings for printing. If the user pastes or uploads a recipe (text, a web page or a photo of a card), first copy its title, servings, ingredient lines and steps into recipes, keeping amounts as written, then call. Builds a PDF of 4x6, 3x5, 5x7, half-letter or A6 cards, up to 4 per Letter or A4 sheet with cut lines or one per page, scales amounts with fractions kept as fractions, converts units only when asked, and continues long recipes on a second card instead of shrinking text below 8 pt. Returns the scaled ingredient lines, card counts and a PDF link. Does not find or invent recipes, does not compute nutrition, and does not change cooking times.
| Argument | Type | Description |
|---|---|---|
| from | string | Optional footer name, printed as "From the kitchen of <name>", e.g. "Grandma Rose". |
| color | string | Accent colour: hex like #C2410C or a name (terracotta, red, rose, berry, purple, blue, navy, teal, green, sage, olive, mustard, brown, slate, black). Default terracotta. |
| paper | string | letter (default; 2 to 4 cards per sheet with cut lines), a4, or card (one card per page at true size, for card stock). Default a4 for A6 cards. |
| scale | any | Scale every recipe by this factor instead: 2 (double), 0.5 (half), 1.5 or "3/4". Amounts stay fractions, e.g. 3/4 cup x 2 = 1 1/2 cups. |
| steps | any | Only when sending one recipe without the recipes list: its steps. |
| title | string | Only when sending one recipe without the recipes list: its name. |
| units | string | keep (default, amounts as written), metric (ml, l, g, kg) or us (cups, tbsp, tsp, oz, lb). Converts volume to volume and weight to weight only. |
| recipes | any | The recipes, one object each with title, servings, ingredients and steps. If the user pasted or photographed a recipe, copy its title, servings, ingredient lines and steps into these fields first; keep amounts exactly as written. |
| scale_to | any | Same as servings: the target number of servings, e.g. 12. |
| servings | any | Scale every recipe to this many servings, e.g. 12. Each recipe needs its own servings to scale from. |
| card_size | string | 4x6 (default), 3x5, 5x7, half-letter (5.5x8.5 in) or a6. |
| ingredients | any | Only when sending one recipe without the recipes list: its ingredient lines. |
| orientation | string | landscape (default for 4x6, 3x5, 5x7) or portrait (default for half-letter and A6). |
| recipe_text | string | Fallback: a whole recipe pasted as plain text (title on the first line, then Ingredients and Instructions sections). Use recipes when you can. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"from": {
"type": "string",
"maxLength": 80,
"description": "Optional footer name, printed as \"From the kitchen of <name>\", e.g. \"Grandma Rose\"."
},
"color": {
"type": "string",
"maxLength": 20,
"description": "Accent colour: hex like #C2410C or a name (terracotta, red, rose, berry, purple, blue, navy, teal, green, sage, olive, mustard, brown, slate, black). Default terracotta."
},
"paper": {
"type": "string",
"maxLength": 20,
"description": "letter (default; 2 to 4 cards per sheet with cut lines), a4, or card (one card per page at true size, for card stock). Default a4 for A6 cards."
},
"scale": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"maxLength": 20
}
],
"description": "Scale every recipe by this factor instead: 2 (double), 0.5 (half), 1.5 or \"3/4\". Amounts stay fractions, e.g. 3/4 cup x 2 = 1 1/2 cups."
},
"steps": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 1000
},
"maxItems": 60
},
{
"type": "string",
"maxLength": 12000
}
],
"description": "Only when sending one recipe without the recipes list: its steps."
},
"title": {
"type": "string",
"maxLength": 120,
"description": "Only when sending one recipe without the recipes list: its name."
},
"units": {
"type": "string",
"maxLength": 20,
"description": "keep (default, amounts as written), metric (ml, l, g, kg) or us (cups, tbsp, tsp, oz, lb). Converts volume to volume and weight to weight only."
},
"recipes": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"ingredients"
],
"properties": {
"notes": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
],
"description": "Optional tip printed after the steps."
},
"scale": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"maxLength": 20
}
]
},
{
"type": "null"
}
],
"description": "Optional factor for this recipe only, e.g. 2, 0.5 or \"1 1/2\"."
},
"steps": {
"anyOf": [
{
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 1000
},
"maxItems": 60
},
{
"type": "string",
"maxLength": 12000
}
]
},
{
"type": "null"
}
],
"description": "Method steps in order, one sentence or paragraph each, without numbers, e.g. [\"Heat the oven to 350°F.\", \"Mash the bananas.\"]."
},
"title": {
"type": "string",
"maxLength": 120,
"description": "Recipe name, e.g. \"Grandma's Banana Bread\"."
},
"scale_to": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"maxLength": 20
}
]
},
{
"type": "null"
}
],
"description": "Optional target servings for this recipe only, e.g. 12."
},
"servings": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"maxLength": 40
}
]
},
{
"type": "null"
}
],
"description": "How many the recipe as written serves or makes, e.g. 8 or \"makes 24 cookies\". Needed for scaling to servings."
},
"cook_time": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "null"
}
],
"description": "Optional, e.g. \"1 hr\"."
},
"prep_time": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "null"
}
],
"description": "Optional, e.g. \"15 min\"."
},
"ingredients": {
"anyOf": [
{
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 400
},
{
"type": "object",
"required": [
"item"
],
"properties": {
"qty": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"maxLength": 20
}
]
},
{
"type": "null"
}
]
},
"item": {
"type": "string",
"maxLength": 300
},
"note": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
]
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 30
},
{
"type": "null"
}
]
}
}
}
]
},
"maxItems": 80
},
{
"type": "string",
"maxLength": 6000
}
],
"description": "Ingredient lines exactly as written, one per item, e.g. [\"1 1/2 cups flour\", \"2 large eggs\", \"salt to taste\"]. A line ending with a colon (\"For the glaze:\") prints as a sub-heading."
}
}
},
"maxItems": 20
},
{
"type": "object",
"required": [
"title",
"ingredients"
],
"properties": {
"notes": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
],
"description": "Optional tip printed after the steps."
},
"scale": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"maxLength": 20
}
]
},
{
"type": "null"
}
],
"description": "Optional factor for this recipe only, e.g. 2, 0.5 or \"1 1/2\"."
},
"steps": {
"anyOf": [
{
"anyOf": [
{
"type": "array",
"items": {
"type": "string",
"maxLength": 1000
},
"maxItems": 60
},
{
"type": "string",
"maxLength": 12000
}
]
},
{
"type": "null"
}
],
"description": "Method steps in order, one sentence or paragraph each, without numbers, e.g. [\"Heat the oven to 350°F.\", \"Mash the bananas.\"]."
},
"title": {
"type": "string",
"maxLength": 120,
"description": "Recipe name, e.g. \"Grandma's Banana Bread\"."
},
"scale_to": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"maxLength": 20
}
]
},
{
"type": "null"
}
],
"description": "Optional target servings for this recipe only, e.g. 12."
},
"servings": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"maxLength": 40
}
]
},
{
"type": "null"
}
],
"description": "How many the recipe as written serves or makes, e.g. 8 or \"makes 24 cookies\". Needed for scaling to servings."
},
"cook_time": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "null"
}
],
"description": "Optional, e.g. \"1 hr\"."
},
"prep_time": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "null"
}
],
"description": "Optional, e.g. \"15 min\"."
},
"ingredients": {
"anyOf": [
{
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 400
},
{
"type": "object",
"required": [
"item"
],
"properties": {
"qty": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"maxLength": 20
}
]
},
{
"type": "null"
}
]
},
"item": {
"type": "string",
"maxLength": 300
},
"note": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
]
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 30
},
{
"type": "null"
}
]
}
}
}
]
},
"maxItems": 80
},
{
"type": "string",
"maxLength": 6000
}
],
"description": "Ingredient lines exactly as written, one per item, e.g. [\"1 1/2 cups flour\", \"2 large eggs\", \"salt to taste\"]. A line ending with a colon (\"For the glaze:\") prints as a sub-heading."
}
}
},
{
"type": "string",
"maxLength": 20000
}
],
"description": "The recipes, one object each with title, servings, ingredients and steps. If the user pasted or photographed a recipe, copy its title, servings, ingredient lines and steps into these fields first; keep amounts exactly as written."
},
"scale_to": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"maxLength": 20
}
],
"description": "Same as servings: the target number of servings, e.g. 12."
},
"servings": {
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"maxLength": 20
}
],
"description": "Scale every recipe to this many servings, e.g. 12. Each recipe needs its own servings to scale from."
},
"card_size": {
"type": "string",
"maxLength": 20,
"description": "4x6 (default), 3x5, 5x7, half-letter (5.5x8.5 in) or a6."
},
"ingredients": {
"anyOf": [
{
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 400
},
{
"type": "object",
"required": [
"item"
],
"properties": {
"qty": {
"anyOf": [
{
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"maxLength": 20
}
]
},
{
"type": "null"
}
]
},
"item": {
"type": "string",
"maxLength": 300
},
"note": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
]
},
"unit": {
"anyOf": [
{
"type": "string",
"maxLength": 30
},
{
"type": "null"
}
]
}
}
}
]
},
"maxItems": 80
},
{
"type": "string",
"maxLength": 6000
}
],
"description": "Only when sending one recipe without the recipes list: its ingredient lines."
},
"orientation": {
"type": "string",
"maxLength": 20,
"description": "landscape (default for 4x6, 3x5, 5x7) or portrait (default for half-letter and A6)."
},
"recipe_text": {
"type": "string",
"maxLength": 20000,
"description": "Fallback: a whole recipe pasted as plain text (title on the first line, then Ingredients and Instructions sections). Use recipes when you can."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 8, 2026.