{
  "name": "Cookidoo MCP",
  "version": 1,
  "generatedFrom": "server.py",
  "tools": [
    {
      "name": "connect_to_cookidoo",
      "signature": "connect_to_cookidoo()",
      "category": "authentication",
      "description": "Authenticate with Cookidoo using the configured account."
    },
    {
      "name": "get_recipe_details",
      "signature": "get_recipe_details(recipe_id: str)",
      "category": "recipes",
      "description": "Read the metadata and ingredients of an official Cookidoo recipe."
    },
    {
      "name": "get_custom_recipe_details",
      "signature": "get_custom_recipe_details(recipe_id: str)",
      "category": "recipes",
      "description": "Read a private custom recipe, including its full ingredients and preparation steps."
    },
    {
      "name": "get_shopping_list_ingredients",
      "signature": "get_shopping_list_ingredients(recipe_id: str | None = None, include_owned: bool = false, include_additional_items: bool = true)",
      "category": "shopping",
      "description": "Return normalized shopping-list items, optionally grouped for one recipe."
    },
    {
      "name": "get_meal_plan_week",
      "signature": "get_meal_plan_week(date: str)",
      "category": "planning",
      "description": "Read the rolling seven-day meal-planning window that contains the supplied ISO date."
    },
    {
      "name": "add_recipes_to_meal_plan",
      "signature": "add_recipes_to_meal_plan(date: str, recipe_ids: str, recipe_source: str = \"auto\", dry_run: bool = false)",
      "category": "planning",
      "description": "Add one or more official or custom recipes to a date in My Week."
    },
    {
      "name": "remove_recipe_from_meal_plan",
      "signature": "remove_recipe_from_meal_plan(date: str, recipe_id: str, recipe_source: str = \"auto\", dry_run: bool = false)",
      "category": "planning",
      "description": "Remove a recipe occurrence from a specific day."
    },
    {
      "name": "move_recipe_in_meal_plan",
      "signature": "move_recipe_in_meal_plan(recipe_id: str, from_date: str, to_date: str, recipe_source: str = \"auto\", dry_run: bool = false)",
      "category": "planning",
      "description": "Move one recipe occurrence between two dates."
    },
    {
      "name": "copy_recipe_to_custom",
      "signature": "copy_recipe_to_custom(recipe_id: str, servings: int = 4, dry_run: bool = false)",
      "category": "recipes",
      "description": "Copy an official recipe into the account so its full content can be translated or adapted."
    },
    {
      "name": "generate_recipe_structure",
      "signature": "generate_recipe_structure(name: str, ingredients: list[str], steps: list[str], servings: int = 4, prep_time: int = 30, total_time: int = 60, hints: str = \"\")",
      "category": "authoring",
      "description": "Generate a valid starter payload for a custom recipe."
    },
    {
      "name": "validate_guided_recipe_structure",
      "signature": "validate_guided_recipe_structure(recipe_json: str)",
      "category": "guided-cooking",
      "description": "Validate guided-cooking annotations, ranges, and the required separation of ingredients from machine actions."
    },
    {
      "name": "calculate_annotation_position",
      "signature": "calculate_annotation_position(text: str, marker: str, occurrence: int = 1)",
      "category": "guided-cooking",
      "description": "Calculate the UTF-16 offset and length Cookidoo expects for an annotation marker."
    },
    {
      "name": "update_custom_recipe_steps",
      "signature": "update_custom_recipe_steps(recipe_id: str, steps_json: str, dry_run: bool = false)",
      "category": "authoring",
      "description": "Replace only the preparation steps of an existing custom recipe."
    },
    {
      "name": "update_custom_recipe_ingredients",
      "signature": "update_custom_recipe_ingredients(recipe_id: str, ingredients_json: str, dry_run: bool = false)",
      "category": "authoring",
      "description": "Replace only the ingredient list of an existing custom recipe."
    },
    {
      "name": "upload_custom_recipe_image",
      "signature": "upload_custom_recipe_image(recipe_id: str, image_path: str, dry_run: bool = false)",
      "category": "media",
      "description": "Upload a user-owned local image and assign it to a custom recipe."
    },
    {
      "name": "upload_custom_recipe",
      "signature": "upload_custom_recipe(recipe_json: str, dry_run: bool = false)",
      "category": "authoring",
      "description": "Create a complete custom recipe from a validated JSON payload."
    }
  ]
}
