Plan a week of meals and turn it into one grocery list grouped by store section.
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 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.
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 printed on the PDF, e.g. "Family dinners". Default "Weekly meal plan" or "Grocery list". Longer than 80 characters is shortened.
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.
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.
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).
Optional label for the week, e.g. "Nov 2, 2026". Printed as given; longer than 40 characters is shortened.
PDF paper: "letter" (default) or "a4".
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.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http meal-planner https://meal-planner.zovo.one/mcp
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.
| Argument | Type | Description |
|---|---|---|
| items | any | 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 | string | null | Title printed on the PDF, e.g. "Family dinners". Default "Weekly meal plan" or "Grocery list". Longer than 80 characters is shortened. |
| units | string | null | 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 | number | string | null | 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 | any | 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 | string | null | Optional label for the week, e.g. "Nov 2, 2026". Printed as given; longer than 40 characters is shortened. |
| page_size | string | null | PDF paper: "letter" (default) or "a4". |
| already_have | any | 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#",
"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."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| plan | any | 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 | any | 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 | string | null | Title printed on the PDF, e.g. "Family dinners". Default "Weekly meal plan" or "Grocery list". Longer than 80 characters is shortened. |
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.
| units | string | null | 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 | number | string | null | 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 | string | null | Optional label for the week, e.g. "Nov 2, 2026". Printed as given; longer than 40 characters is shortened. |
| page_size | string | null | PDF paper: "letter" (default) or "a4". |
| already_have | any | 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#",
"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."
}
}
}