# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [1.0.0] – 2026-04-17 ### Added - `tests/` directory with integration tests (moved from root) - `LICENSE` (MIT, Marcus van Elst) - Date validation (ISO `YYYY-MM-DD`) for all meal-plan tools - `_err()` helper — all tools now return `{"error": "..."}` JSON on failure ### Changed - Version is now a single source of truth in `pyproject.toml`; `__init__.py` reads it via `importlib.metadata` - `create_server()` exported via `__all__` in `__init__.py` - `clear_list` reports partial failures: `{"deleted_count": N, "failed_count": M, "failed_ids": [...]}` - All tool functions have explicit `-> str` return-type annotations - Unified error format: every tool returns `{"error": "message"}` JSON ### Removed - ~50 debug/probe artefact files (`probe_*.py`, `debug_*.py`, `*.txt` outputs) --- ## [0.11.x] – Meal Planner write access ### [0.11.8] - Documented `isRecipe` flag behaviour in `get_recipe_box` ### [0.11.7] - `get_recipe_box` — returns only real recipes (`isRecipe=true`) - Parser fix: `ingredients_parsed` built from free-text, not the API list ### [0.11.6] - `clear_list` — bulk-delete all tasks in a list within one session ### [0.11.5] - `add_meal_note` — add note + serving count to a meal plan slot ### [0.11.4] - `delete_meal_plan_entry` — delete `dish/` and `meal/` entries ### [0.11.3] - `add_meal_to_meal_plan` — structured output (fixed `a00.r.r` array shape) ### [0.11.2] - `add_meal_to_meal_plan` — add free-text meal entry ### [0.11.1] - `add_recipe_to_meal_plan` — structured output after response verified ### [0.11.0] - `add_recipe_to_meal_plan` — add recipe from recipe box to meal plan --- ## [0.10.x] – Meal Planner read access ### [0.10.3] - `get_meal_plan` — `is_from_recipe_box` field via `recipeList[].isRecipe` ### [0.10.2] - `get_meal_plan` — merges `mealList[]` (free-text notes + servings) ### [0.10.1] - `get_meal_plan` — structured output after `mplistinterval` response verified ### [0.10.0] - `get_meal_plan` — read-only, raw JSON (Premium feature) --- ## [0.9.x] – Task recurrency + reminders ### [0.9.1] - Fix `reminder` mapping (`reminderUnit`/`reminderValue`; `value=0` is valid) ### [0.9.0] - `get_tasks` returns `recurrency`, `recurrency_interval`, `rrule`, `reminder` --- ## [0.8.x] – Recipe categories + misc fixes ### [0.8.3] - `OTHER` list type documented and supported; `FW_DEBUG=1` logs unknown task fields ### [0.8.2] - `get_lists()` without scope returns all circles ### [0.8.1] - Fix recipe category handling ### [0.8.0] - `get_recipe_categories` — list available recipe categories - `create_recipe` / `update_recipe` accept `category_ids` --- ## [0.7.x] – Circle management ### [0.7.5] - Primary-circle guard in `update_circle` (`isFirstFamily` check) ### [0.7.4] - `update_circle` — rename a circle ### [0.7.3] - `update_list` — rename, change emoji/colour ### [0.7.2] - `delete_circle` ### [0.7.1] - `get_lists` scope fix; `create_list` with `circle_id`; `delete_list` scope ### [0.7.0] - `create_circle`, `add_member_to_circle` --- ## [0.6.x] – Recipe box ### [0.6.1] - `update_recipe` + fix newline handling in `create_recipe` ### [0.6.0] - `get_recipes`, `get_recipe`, `create_recipe`, `delete_recipe` --- ## [0.5.x] – List management ### [0.5.3] - Category auto-assign hint in `create_task` docstring ### [0.5.2] - Quantity convention documented in `create_task` docstring ### [0.5.1] - `emoji` + `color` in `get_lists` / `create_list` ### [0.5.0] - `create_list`, `delete_list` --- ## [0.4.x] – Category management + task fields - `create_category`, `delete_category` - `create_task` / `update_task` support `due_date`, `assignee`, `list_id` --- ## [0.3.x] – Task write access - `create_task`, `update_task`, `toggle_task`, `delete_task` --- ## [0.2.x] – Activity feed - `get_activities`, `like_post` --- ## [0.1.0] – Initial release - `get_circles`, `get_members`, `get_lists`, `get_tasks`, `get_categories` - Session strategy: login → API calls → logout per tool invocation - OS keyring credential storage - MCP server via FastMCP [1.0.0]: https://gitea.gecheckt.de/marcus/mcp-familywall/compare/v0.11.8...v1.0.0