Zovo Meal Planner MCP
An MCP server that converts weekly meal plans into merged grocery lists grouped by store section. It handles unit conversions, scales recipes, removes already-owned items, and outputs printable PDFs, CSVs, and text files.
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://meal-planner.zovo.one/mcpWhat its tools do
2 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (2)
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
- Plan weekly dinners and generate a consolidated grocery list
- Scale recipes to specific serving sizes
- Group ingredients by store sections like produce or dairy
- Export meal plans as printable PDFs or CSV files
Source and maintenance
Protocol and capabilities
- Server
- meal-planner 1.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 2 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
2 advertised
generate_meal_plan — Generate meal plan and grocery list
Use this when the user wants a weekly meal plan, a meal planner template filled in, or a grocery list from their meal plan or meal prep. First turn what the user pasted (a plan, recipe, spreadsheet or e-mail) into meals: one entry per day and slot with its name, recipe servings and ingredient lines, one meal per day for lines like "Mon-Fri lunch". Put the original text in plan only when you cannot do that. If you propose the meals, pass them the same way. The tool parses quantities and units, scales servings to the number of people, merges the same ingredient across the week (volume with volume, weight with weight, not volume to weight), groups the list by store section, removes items the user already has, and returns a PDF (week grid plus checklist), CSV and text. Does not give nutrition, calorie or diet advice and does not order groceries.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"plan": {
"anyOf": [
{
"anyOf": [
{
"type": "array",
"items": {}
},
{
"type": "string"
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
]
},
{
"type": "null"
}
],
"description": "Fallback when you cannot build meals: the week as the user wrote it. Easiest: a list of meals, e.g. [{\"day\":\"Monday\",\"meal\":\"Dinner\",\"name\":\"Chicken stir fry\",\"servings\":4,\"ingredients\":[\"1 lb chicken thighs\",\"2 cups rice\",\"1/2 onion, diced\",\"salt to taste\"]}]. Also accepted: a list of days each with \"meals\", an object keyed by day and meal, or pasted text (markdown with **Monday** or ### Monday headings and \"- Dinner: Tacos (1 lb beef, 8 tortillas)\" lines, a markdown or spreadsheet table, or a recipe copied from a website)."
},
"meals": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
},
{
"type": "object",
"properties": {
"day": {
"type": [
"string",
"number",
"null"
],
"description": "Weekday, e.g. \"Monday\". For a line like \"Mon-Fri lunch\" send one meal per day."
},
"name": {
"type": [
"string",
"number",
"null"
],
"description": "Meal name, e.g. \"Beef tacos\""
},
"slot": {
"type": [
"string",
"number",
"null"
],
"description": "Meal slot, e.g. \"Breakfast\", \"Lunch\", \"Dinner\", \"Snack\""
},
"servings": {
"type": [
"string",
"number",
"null"
],
"description": "Servings the recipe makes as written, e.g. 4"
},
"ingredients": {
"anyOf": [
{
"anyOf": [
{
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "null"
},
{
"type": "object",
"properties": {
"name": {
"type": [
"string",
"number",
"null"
],
"description": "Ingredient name, e.g. \"ground beef\""
},
"unit": {
"type": [
"string",
"number",
"null"
],
"description": "Unit, e.g. \"lb\", \"cup\", \"g\", \"can\"; empty for a count"
},
"quantity": {
"type": [
"string",
"number",
"null"
],
"description": "Amount, e.g. 1.5 or \"1 1/2\""
}
},
"additionalProperties": {}
}
]
}
},
{
"type": "string"
}
]
},
{
"type": "null"
}
],
"description": "Ingredient lines, e.g. [\"1 lb ground beef\", \"8 corn tortillas\"] or [{\"name\":\"ground beef\",\"quantity\":1,\"unit\":\"lb\"}]"
}
},
"additionalProperties": {}
}
]
}
}
]
},
{
"type": "null"
}
],
"description": "Preferred. The week as structured meals you build from what the user pasted: one entry per meal and day, e.g. [{\"day\":\"Monday\",\"slot\":\"Dinner\",\"name\":\"Tacos\",\"servings\":4,\"ingredients\":[\"1 lb ground beef\",\"8 corn tortillas\"]}]. Expand \"Mon-Fri\" or \"Mon & Wed\" into one meal per day."
},
"title": {
"type": [
"string",
"null"
],
"description": "Title printed on the PDF, e.g. \"Family dinners\". Default \"Weekly meal plan\" or \"Grocery list\". Longer than 80 characters is shortened."
},
"units": {
"type": [
"string",
"null"
],
"description": "How to show merged amounts: \"us\" (cups, tbsp, oz, lb), \"metric\" (ml, l, g, kg) or \"auto\" (default: the system most lines use). Volume is never converted to weight."
},
"people": {
"type": [
"number",
"string",
"null"
],
"description": "Servings to cook for each meal, e.g. 4 or \"4 people\". Each meal with a recipe yield (servings) is scaled to this number; meals without a yield are used as written. Default: no scaling."
},
"week_of": {
"type": [
"string",
"null"
],
"description": "Optional label for the week, e.g. \"Nov 2, 2026\". Printed as given; longer than 40 characters is shortened."
},
"page_size": {
"type": [
"string",
"null"
],
"description": "PDF paper: \"letter\" (default) or \"a4\"."
},
"already_have": {
"anyOf": [
{
"anyOf": [
{
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
},
{
"type": "string"
}
]
},
{
"type": "null"
}
],
"description": "Items already in the kitchen to leave off the list, as a list or comma-separated text, e.g. [\"salt\", \"olive oil\", \"rice\"]. A section name such as \"spices\" removes that whole section."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title",
"people",
"meals_count",
"days",
"meals",
"items_count",
"sections",
"already_have_removed",
"unparsed_lines",
"notes",
"units",
"downloads"
],
"properties": {
"days": {
"type": "array",
"items": {
"type": "string"
}
},
"meals": {
"type": "array",
"items": {
"type": "object",
"required": [
"day",
"meal",
"name",
"servings"
],
"properties": {
"day": {
"type": "string"
},
"meal": {
"type": "string"
},
"name": {
"type": "string"
},
"servings": {
"type": "string"
}
},
"additionalProperties": false
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": "string"
},
"units": {
"type": "string"
},
"people": {
"type": [
"number",
"null"
]
},
"sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"section",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"quantity",
"meals"
],
"properties": {
"name": {
"type": "string"
},
"meals": {
"type": "number"
},
"quantity": {
"type": "string"
}
},
"additionalProperties": false
}
},
"section": {
"type": "string"
}
},
"additionalProperties": false
}
},
"downloads": {
"type": "object",
"required": [
"pdf",
"csv",
"txt"
],
"properties": {
"csv": {
"type": "string"
},
"pdf": {
"type": "string"
},
"txt": {
"type": "string"
}
},
"additionalProperties": false
},
"items_count": {
"type": "number"
},
"meals_count": {
"type": "number"
},
"unparsed_lines": {
"type": "array",
"items": {
"type": "string"
}
},
"already_have_removed": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}{
"title": "Generate meal plan and grocery list",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}generate_grocery_list — Generate grocery list from recipes
Use this when the user wants one combined grocery list or shopping list from several recipes or a pasted list of ingredients, without a weekly grid. First turn what the user pasted (a list, recipe, store order, receipt or e-mail) into items with name, quantity and unit, plus meal and servings for recipe lines; leave out prices, totals, headers and e-mail text. Put the original text in recipes only when you cannot do that. Merges the same ingredient with unit conversion inside one dimension, scales servings, groups by store section, leaves off items the user already has, and keeps unreadable lines as written. Returns a printable checklist PDF, CSV and text. Does not give nutrition or diet advice.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"items": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "null"
},
{
"type": "object",
"properties": {
"meal": {
"type": [
"string",
"number",
"null"
],
"description": "Recipe or meal it belongs to, e.g. \"Tacos\" (optional)"
},
"name": {
"type": [
"string",
"number",
"null"
],
"description": "Ingredient or product, e.g. \"eggs\""
},
"unit": {
"type": [
"string",
"number",
"null"
],
"description": "Unit, e.g. \"lb\", \"gallon\", \"g\"; empty for a count"
},
"quantity": {
"type": [
"string",
"number",
"null"
],
"description": "Total amount, e.g. 24"
},
"servings": {
"type": [
"string",
"number",
"null"
],
"description": "Servings that recipe makes, e.g. 4 (optional)"
}
},
"additionalProperties": {}
}
]
}
}
]
},
{
"type": "null"
}
],
"description": "Preferred for a pasted list, order, receipt or e-mail: one entry per ingredient with the amount you read, e.g. [{\"name\":\"eggs\",\"quantity\":24},{\"name\":\"whole milk\",\"quantity\":1,\"unit\":\"gallon\"},{\"name\":\"ground beef\",\"quantity\":1,\"unit\":\"lb\",\"meal\":\"Tacos\",\"servings\":4}]. Leave out prices, totals, store names, headers and e-mail text."
},
"title": {
"type": [
"string",
"null"
],
"description": "Title printed on the PDF, e.g. \"Family dinners\". Default \"Weekly meal plan\" or \"Grocery list\". Longer than 80 characters is shortened."
},
"units": {
"type": [
"string",
"null"
],
"description": "How to show merged amounts: \"us\" (cups, tbsp, oz, lb), \"metric\" (ml, l, g, kg) or \"auto\" (default: the system most lines use). Volume is never converted to weight."
},
"people": {
"type": [
"number",
"string",
"null"
],
"description": "Servings to cook for each meal, e.g. 4 or \"4 people\". Each meal with a recipe yield (servings) is scaled to this number; meals without a yield are used as written. Default: no scaling."
},
"recipes": {
"anyOf": [
{
"anyOf": [
{
"type": "array",
"items": {}
},
{
"type": "string"
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
]
},
{
"type": "null"
}
],
"description": "Fallback, or recipes with their servings. Recipes or ingredient lines, e.g. [{\"name\":\"Tacos\",\"servings\":4,\"ingredients\":[\"1 lb ground beef\",\"8 corn tortillas\",\"1 cup shredded cheddar\"]},{\"name\":\"Guacamole\",\"ingredients\":\"3 avocados; 1 lime; 1/4 cup cilantro\"}], or plain text: one ingredient per line, a comma list (\"milk, eggs, 2 lb ground turkey\"), a checklist, a table with Item and Qty columns, or a whole recipe page (title, Serves line, Ingredients; directions are skipped)."
},
"week_of": {
"type": [
"string",
"null"
],
"description": "Optional label for the week, e.g. \"Nov 2, 2026\". Printed as given; longer than 40 characters is shortened."
},
"page_size": {
"type": [
"string",
"null"
],
"description": "PDF paper: \"letter\" (default) or \"a4\"."
},
"already_have": {
"anyOf": [
{
"anyOf": [
{
"type": "array",
"items": {
"type": [
"string",
"null"
]
}
},
{
"type": "string"
}
]
},
{
"type": "null"
}
],
"description": "Items already in the kitchen to leave off the list, as a list or comma-separated text, e.g. [\"salt\", \"olive oil\", \"rice\"]. A section name such as \"spices\" removes that whole section."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title",
"people",
"meals_count",
"days",
"meals",
"items_count",
"sections",
"already_have_removed",
"unparsed_lines",
"notes",
"units",
"downloads"
],
"properties": {
"days": {
"type": "array",
"items": {
"type": "string"
}
},
"meals": {
"type": "array",
"items": {
"type": "object",
"required": [
"day",
"meal",
"name",
"servings"
],
"properties": {
"day": {
"type": "string"
},
"meal": {
"type": "string"
},
"name": {
"type": "string"
},
"servings": {
"type": "string"
}
},
"additionalProperties": false
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": "string"
},
"units": {
"type": "string"
},
"people": {
"type": [
"number",
"null"
]
},
"sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"section",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"quantity",
"meals"
],
"properties": {
"name": {
"type": "string"
},
"meals": {
"type": "number"
},
"quantity": {
"type": "string"
}
},
"additionalProperties": false
}
},
"section": {
"type": "string"
}
},
"additionalProperties": false
}
},
"downloads": {
"type": "object",
"required": [
"pdf",
"csv",
"txt"
],
"properties": {
"csv": {
"type": "string"
},
"pdf": {
"type": "string"
},
"txt": {
"type": "string"
}
},
"additionalProperties": false
},
"items_count": {
"type": "number"
},
"meals_count": {
"type": "number"
},
"unparsed_lines": {
"type": "array",
"items": {
"type": "string"
}
},
"already_have_removed": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}{
"title": "Generate grocery list from recipes",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
meal-planner-widget — Zovo Meal Planner view
Interactive view for Zovo Meal Planner.
ui://widget/meal-planner-v1-1.0.0-e9774dbb49a9e473f8fe28833ff149bd714ac0cac7f65aae80d8240e2c422ff8.htmlmeal-planner-widget-legacy — Zovo Meal Planner view (previous versions)
ui://widget/meal-planner-{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
- 570 ms
- 95th percentile latency
- 570 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 570 ms · metadata changed · 2 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-meal-planner-mcp https://meal-planner.zovo.one/mcpCodex
codex mcp add zovo-meal-planner-mcp --url https://meal-planner.zovo.one/mcpCursor
{
"mcpServers": {
"zovo-meal-planner-mcp": {
"url": "https://meal-planner.zovo.one/mcp"
}
}
}Cline
{
"mcpServers": {
"zovo-meal-planner-mcp": {
"type": "streamableHttp",
"url": "https://meal-planner.zovo.one/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"zovo-meal-planner-mcp": {
"type": "http",
"url": "https://meal-planner.zovo.one/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http zovo-meal-planner-mcp https://meal-planner.zovo.one/mcpClaude Desktop
https://meal-planner.zovo.one/mcpWindsurf
{
"mcpServers": {
"zovo-meal-planner-mcp": {
"serverUrl": "https://meal-planner.zovo.one/mcp"
}
}
}Let your agent find its tools
Find servers like Zovo Meal Planner MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.