RecipeScale

Scale recipes, convert kitchen units and merge shopping lists. Free.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
100%
Naming quality
85%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,070Tokens (tool definitions)
~4.9 KBTypical response size
Moderate attention impact (1.62% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "recipe-scale": {
      "url": "https://recipe-scale.magicteams.ai/mcp"
    }
  }
}

Remote endpoints

https://recipe-scale.magicteams.ai/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢scale_recipe(ingredients, from_servings, to_servings)

Scale every ingredient in a recipe from one serving count to another (0.1x to 20x), with kitchen-friendly fraction hints; items without a quantity pass through unchanged. Use when cooking for more or fewer people. Do NOT use to change units (use convert_units) or to combine several recipes' ingredients (use merge_shopping_list).

Input Schema

{
  "type": "object",
  "properties": {
    "ingredients": {
      "type": "array",
      "minItems": 1,
      "description": "Recipe ingredients, e.g. [{\"item\":\"flour\",\"quantity\":2,\"unit\":\"cup\"},{\"item\":\"salt\",\"note\":\"to taste\"}]",
      "items": {
        "type": "object",
        "properties": {
          "item": {
            "type": "string",
            "description": "Ingredient name, e.g. 'flour'"
          },
          "quantity": {
            "type": "number",
            "minimum": 0,
            "description": "Amount, non-negative; omit for items like 'salt to taste'"
          },
          "unit": {
            "type": "string",
            "description": "Unit such as cup, tbsp, g, or a free count label like 'clove' or 'egg'"
          },
          "note": {
            "type": "string",
            "description": "Text shown instead of an amount when quantity is omitted, e.g. 'to taste' (default 'as needed')"
          }
        },
        "required": [
          "item"
        ]
      }
    },
    "from_servings": {
      "type": "number",
      "exclusiveMinimum": 0,
      "description": "Servings the recipe is written for, positive, e.g. 4"
    },
    "to_servings": {
      "type": "number",
      "exclusiveMinimum": 0,
      "description": "Servings wanted, positive; to_servings / from_servings must be 0.1-20, e.g. 10"
    }
  },
  "required": [
    "ingredients",
    "from_servings",
    "to_servings"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "from_servings": {
      "type": "number",
      "description": "Servings the recipe was written for"
    },
    "to_servings": {
      "type": "number",
      "description": "Servings scaled to"
    },
    "factor": {
      "type": "number",
      "description": "Scaling factor to_servings / from_servings (4 significant digits)"
    },
    "ingredients": {
      "type": "array",
      "description": "Scaled ingredients, in input order",
      "items": {
        "type": "object",
        "properties": {
          "item": {
            "type": "string",
            "description": "Ingredient name"
          },
          "original": {
            "type": "string",
            "description": "Original amount as text, or the pass-through note"
          },
          "scaled": {
            "type": [
              "number",
              "null"
            ],
            "description": "Scaled quantity (2 decimals); null when no quantity was given"
          },
          "scaled_display": {
            "type": "string",
            "description": "Scaled amount with unit and fraction hint, e.g. '2 1/2 cups (2.5)'"
          },
          "scaled_flag": {
            "type": "boolean",
            "description": "true when the ingredient was scaled, false when passed through"
          }
        },
        "required": [
          "item",
          "original",
          "scaled",
          "scaled_display",
          "scaled_flag"
        ]
      }
    },
    "note": {
      "type": "string",
      "description": "Explanation of the scaling applied"
    }
  },
  "required": [
    "from_servings",
    "to_servings",
    "factor",
    "ingredients",
    "note"
  ]
}
🟢convert_units(value, from, to, ingredient)

Convert one cooking amount between units: within volume or weight exactly, or between volume and weight using a built-in density for flour, sugar, brown sugar, butter, water, milk, rice, oats, cocoa or honey. Use for questions like 'how many grams is 2 cups of flour'. Do NOT use to change serving counts (use scale_recipe).

Input Schema

{
  "type": "object",
  "properties": {
    "value": {
      "type": "number",
      "minimum": 0,
      "description": "Amount to convert, zero or positive, e.g. 2"
    },
    "from": {
      "type": "string",
      "description": "Unit to convert from, e.g. 'cup'. Supported: tsp, tbsp, cup, fl_oz, ml, l, pint, quart, gallon (volume); g, kg, oz, lb (weight); each (count). Common spellings like 'cups', 'grams', 'tablespoon' also work"
    },
    "to": {
      "type": "string",
      "description": "Unit to convert to, e.g. 'g'; same supported units as from"
    },
    "ingredient": {
      "type": "string",
      "description": "Ingredient name, required only for volume <-> weight; must contain one of flour, sugar, brown sugar, butter, water, milk, rice, oats, cocoa, honey (e.g. 'all-purpose flour')"
    }
  },
  "required": [
    "value",
    "from",
    "to"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "value": {
      "type": "number",
      "description": "Amount that was converted"
    },
    "from": {
      "type": "string",
      "description": "Canonical source unit, e.g. 'cup'"
    },
    "to": {
      "type": "string",
      "description": "Canonical target unit, e.g. 'g'"
    },
    "result": {
      "type": "number",
      "description": "Converted amount (4 significant digits)"
    },
    "display": {
      "type": "string",
      "description": "Readable conversion, e.g. '2 cups flour = 250 g (approx.)'"
    },
    "method": {
      "type": "string",
      "enum": [
        "linear",
        "density"
      ],
      "description": "'linear' for same-dimension, 'density' for volume <-> weight"
    },
    "density_note": {
      "type": "string",
      "description": "Density used (density method only)"
    }
  },
  "required": [
    "value",
    "from",
    "to",
    "result",
    "display",
    "method"
  ]
}
🟢merge_shopping_list(lists)

Combine several shopping or ingredient lists into one, summing the same item across lists (volumes and weights converted to a friendly unit) and noting which list each came from. Use when shopping for several recipes or meals at once. Do NOT use to resize one recipe (use scale_recipe) or price it (use cost_per_serving).

Input Schema

{
  "type": "object",
  "properties": {
    "lists": {
      "type": "array",
      "minItems": 1,
      "description": "Shopping lists to merge (at least one item overall), e.g. [{\"name\":\"Pancakes\",\"items\":[{\"item\":\"milk\",\"quantity\":1,\"unit\":\"cup\"}]}]",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "List label shown in from_lists, e.g. 'Saturday dinner'; default 'list N'"
          },
          "items": {
            "type": "array",
            "description": "Items on this list",
            "items": {
              "type": "object",
              "properties": {
                "item": {
                  "type": "string",
                  "description": "Item to buy, e.g. 'eggs'"
                },
                "quantity": {
                  "type": "number",
                  "minimum": 0,
                  "description": "Amount, non-negative; omit for non-numeric items (listed in skipped_no_quantity)"
                },
                "unit": {
                  "type": "string",
                  "description": "Unit such as cup, tbsp, g, kg, or a free label like 'can'; omit for plain counts"
                }
              },
              "required": [
                "item"
              ]
            }
          }
        },
        "required": [
          "items"
        ]
      }
    }
  },
  "required": [
    "lists"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "merged": {
      "type": "array",
      "description": "One line per item and unit kind, with summed quantities",
      "items": {
        "type": "object",
        "properties": {
          "item": {
            "type": "string",
            "description": "Item name (first spelling seen)"
          },
          "quantity": {
            "type": "number",
            "description": "Summed quantity (2 decimals)"
          },
          "unit": {
            "type": "string",
            "description": "Display unit, e.g. 'cup', 'g', 'each' or a free label"
          },
          "display": {
            "type": "string",
            "description": "Readable amount with unit"
          },
          "from_lists": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Names of the lists this item came from"
          }
        },
        "required": [
          "item",
          "quantity",
          "unit",
          "display",
          "from_lists"
        ]
      }
    },
    "skipped_no_quantity": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Items given without a quantity, kept as notes"
    },
    "note": {
      "type": "string",
      "description": "Summary of the merge and its limits"
    }
  },
  "required": [
    "merged",
    "skipped_no_quantity",
    "note"
  ]
}
🟢cost_per_serving(ingredients, servings, currency)

Total the cost of a recipe's ingredients and work out the cost per serving and per 10 servings. Use when budgeting a dish, pricing meal prep or comparing recipes on cost. Do NOT use to resize the recipe (use scale_recipe first, then price the scaled amounts here).

Input Schema

{
  "type": "object",
  "properties": {
    "ingredients": {
      "type": "array",
      "minItems": 1,
      "description": "Priced ingredients, e.g. [{\"item\":\"chicken\",\"cost\":8.5},{\"item\":\"rice\",\"cost\":1.2}]",
      "items": {
        "type": "object",
        "properties": {
          "item": {
            "type": "string",
            "description": "Ingredient name"
          },
          "cost": {
            "type": "number",
            "minimum": 0,
            "description": "Cost of the amount used in the recipe, 0 or more, in the given currency"
          }
        },
        "required": [
          "item",
          "cost"
        ]
      }
    },
    "servings": {
      "type": "number",
      "exclusiveMinimum": 0,
      "description": "How many servings the recipe makes, positive, e.g. 4"
    },
    "currency": {
      "type": "string",
      "description": "Currency code for display only, e.g. 'EUR'; default USD"
    }
  },
  "required": [
    "ingredients",
    "servings"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "currency": {
      "type": "string",
      "description": "Currency code used in the results (upper case)"
    },
    "total_cost": {
      "type": "number",
      "description": "Sum of all ingredient costs"
    },
    "servings": {
      "type": "number",
      "description": "Servings the recipe makes"
    },
    "per_serving": {
      "type": "number",
      "description": "Cost per serving, rounded to cents"
    },
    "per_ten_servings": {
      "type": "number",
      "description": "Cost for 10 servings, rounded to cents"
    },
    "note": {
      "type": "string",
      "description": "Plain-language cost summary"
    }
  },
  "required": [
    "currency",
    "total_cost",
    "servings",
    "per_serving",
    "per_ten_servings",
    "note"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools
verifiedversion not recorded4 tools