Zovo Recipe Card Maker MCP
This MCP server allows users to generate printable recipe cards in various sizes (4x6, 3x5, 5x7, A6) from text input. It supports scaling ingredients while maintaining kitchen fractions, converting between metric and US units, and handling long recipes across multiple cards. The output is a PDF with cut lines or single cards per page.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://recipe-cards.zovo.one/mcpWhat its tools do
1 tool, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (1)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Generate a 4x6 recipe card for banana bread
- Double a pancake recipe and print on 3x5 cards
- Turn family recipes into cards with custom headers
Source and maintenance
Protocol and capabilities
- Server
- recipe-cards 1.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 1 advertised
- Resources
- 1 advertised
- Resource templates
- 1 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
1 advertised
generate_recipe_cards — Generate recipe cards
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.
{
"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."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"kind",
"recipes",
"card_size",
"card_inches",
"orientation",
"paper",
"cards_per_page",
"card_count",
"page_count",
"units",
"accent",
"notes",
"inputs",
"downloads"
],
"properties": {
"kind": {
"type": "string"
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"paper": {
"type": "string"
},
"units": {
"type": "string"
},
"accent": {
"type": "string"
},
"inputs": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"recipes": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"servings",
"scaled_servings",
"factor",
"ingredients",
"steps",
"changed",
"approx",
"not_scaled",
"cards",
"font_pt"
],
"properties": {
"cards": {
"type": "number"
},
"steps": {
"type": "number"
},
"title": {
"type": "string"
},
"approx": {
"type": "number"
},
"factor": {
"type": "string"
},
"changed": {
"type": "number"
},
"font_pt": {
"type": "number"
},
"servings": {
"type": [
"string",
"null"
]
},
"not_scaled": {
"type": "array",
"items": {
"type": "string"
}
},
"ingredients": {
"type": "array",
"items": {
"type": "string"
}
},
"scaled_servings": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}
},
"card_size": {
"type": "string"
},
"downloads": {
"type": "object",
"required": [
"pdf"
],
"properties": {
"pdf": {
"type": "string"
}
},
"additionalProperties": false
},
"card_count": {
"type": "number"
},
"page_count": {
"type": "number"
},
"card_inches": {
"type": "string"
},
"orientation": {
"type": "string"
},
"recipes_count": {
"type": "object",
"required": [
"shown",
"total"
],
"properties": {
"shown": {
"type": "number"
},
"total": {
"type": "number"
}
},
"additionalProperties": false
},
"cards_per_page": {
"type": "number"
}
},
"additionalProperties": false
}{
"title": "Generate recipe cards",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
recipe-cards-widget — Zovo Recipe Card Maker view
Interactive view for Zovo Recipe Card Maker.
ui://widget/recipe-cards-v1-1.0.0-a7a9f17dc31115d704e8f9eee6a30bb058186013c401c5f1996b25846f4187d5.htmlrecipe-cards-widget-legacy — Zovo Recipe Card Maker view (previous versions)
ui://widget/recipe-cards-{version}.html30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 588 ms
- 95th percentile latency
- 588 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 588 ms · metadata changed · 1 tool(s), 1 resource(s), 1 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http zovo-recipe-card-maker-mcp https://recipe-cards.zovo.one/mcpCodex
codex mcp add zovo-recipe-card-maker-mcp --url https://recipe-cards.zovo.one/mcpCursor
{
"mcpServers": {
"zovo-recipe-card-maker-mcp": {
"url": "https://recipe-cards.zovo.one/mcp"
}
}
}Cline
{
"mcpServers": {
"zovo-recipe-card-maker-mcp": {
"type": "streamableHttp",
"url": "https://recipe-cards.zovo.one/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"zovo-recipe-card-maker-mcp": {
"type": "http",
"url": "https://recipe-cards.zovo.one/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http zovo-recipe-card-maker-mcp https://recipe-cards.zovo.one/mcpClaude Desktop
https://recipe-cards.zovo.one/mcpWindsurf
{
"mcpServers": {
"zovo-recipe-card-maker-mcp": {
"serverUrl": "https://recipe-cards.zovo.one/mcp"
}
}
}Let your agent find its tools
Find servers like Zovo Recipe Card Maker MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.