feat(tasks): add recurrency, rrule, reminder fields to get_tasks (v0.9.0)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-17 09:02:44 +02:00
parent af2cfc8728
commit 6d9f358e76
5 changed files with 54 additions and 7 deletions
+3 -3
View File
@@ -24,7 +24,7 @@ und wird in Claude Desktop eingebunden.
## Aktueller Stand
### Implementierte Tools (v0.8.3)
### Implementierte Tools (v0.9.0)
| Kategorie | Tools |
|---|---|
@@ -54,9 +54,9 @@ und wird in Claude Desktop eingebunden.
- v0.8.0: Rezept-Kategorien (get_recipe_categories, create_recipe + category_ids, update_recipe + category_ids) ✓
- v0.8.1: Bugfixes (recipe categories) ✓
- v0.8.2: get_lists() ohne scope → alle Kreise ✓
- v0.8.3: OTHER-Listentyp dokumentiert + create_list unterstützt ihn; FW_DEBUG=1 loggt unbekannte Task-Felder (Vorbereitung Wiederholungen) ✓ ← aktuell
- v0.8.3: OTHER-Listentyp dokumentiert + create_list unterstützt ihn; FW_DEBUG=1 loggt unbekannte Task-Felder (Vorbereitung Wiederholungen) ✓
- v0.8.x: mpadditemtolist (gestrichen Family Wall kann das nativ)
- v0.9.x: Erinnerungen + Wiederholungen (Premium-Account erforderlich)
- v0.9.0: get_tasks liefert recurrency, recurrency_interval, rrule, reminder (read-only) ✓ ← aktuell
- v2.0: Schreibzugriff auf Wall-Posts (Erstellen, Kommentieren)
+2 -2
View File
@@ -2,14 +2,14 @@
MCP server for [Family Wall](https://www.familywall.com) -- read and manage your family's circles, lists, tasks, and recipes directly from Claude.
## Features (v0.8.3)
## Features (v0.9.0)
### Read
- `get_circles` -- list all family circles
- `get_members` -- list members of a circle (or all circles)
- `get_lists` -- list all task lists (includes `emoji`, `color`, `circle_id`; `null` when unset; list types: `SHOPPING_LIST`, `TODOS`, `OTHER`); without scope parameter returns lists from **all circles**; optional `scope` parameter filters by circle metaId or circle name
- `get_tasks` -- list tasks in a specific list (includes `category_id`, `due_date`, `assignee_ids`)
- `get_tasks` -- list tasks in a specific list (includes `category_id`, `due_date`, `assignee_ids`, `recurrency`, `rrule`, `reminder`)
- `get_categories` -- list categories for a list (locale-filtered; custom categories always included; `custom` flag marks user-created ones)
- `get_activities` -- list recent wall activities (author resolved to display name)
- `get_recipes` -- list all family recipes (compact summary: id, name, prep/cook time, serves)
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
[project]
name = "mcp-familywall"
version = "0.8.3"
version = "0.9.0"
description = "MCP server for Family Wall — read your family's lists and tasks via Claude"
readme = "README.md"
requires-python = ">=3.12"
+1 -1
View File
@@ -1 +1 @@
__version__ = "0.8.3"
__version__ = "0.9.0"
+47
View File
@@ -398,6 +398,7 @@ def get_tasks(list_id: str, only_open: bool = True):
_fw_debug = os.environ.get("FW_DEBUG") == "1"
_known_fields = {
# output fields
"metaId",
"text",
"description",
@@ -406,6 +407,34 @@ def get_tasks(list_id: str, only_open: bool = True):
"dueDate",
"assigneeIds",
"taskListId",
# recurrency fields
"recurrency",
"recurrencyInterval",
"rrule",
"byDay",
"recurrencyDeletedOccurence",
"reminder",
# always-present housekeeping fields
"moodStarShortcut",
"bestMoment",
"lastAction",
"lastActionAuthor",
"lastActionDate",
"categories",
"moodMap",
"sortingIndex",
"comments",
"editable",
"creationDate",
"completedDate",
"familyId",
"toAll",
"accountId",
"medias",
"modifDate",
"assignee",
"taskId",
"clientOpId",
}
result = []
@@ -425,6 +454,20 @@ def get_tasks(list_id: str, only_open: bool = True):
file=sys.stderr,
)
raw_recurrency = task.get("recurrency")
raw_interval = task.get("recurrencyInterval")
recurrency_interval = int(raw_interval) if raw_interval is not None else None
raw_reminder = task.get("reminder")
if raw_reminder and isinstance(raw_reminder, dict):
raw_val = raw_reminder.get("value")
reminder = {
"unit": raw_reminder.get("unit"),
"value": int(raw_val) if raw_val is not None else None,
}
else:
reminder = None
result.append(
{
"id": task.get("metaId"),
@@ -434,6 +477,10 @@ def get_tasks(list_id: str, only_open: bool = True):
"category_id": task.get("taskCategoryId"),
"due_date": task.get("dueDate"),
"assignee_ids": task.get("assigneeIds") or [],
"recurrency": raw_recurrency,
"recurrency_interval": recurrency_interval,
"rrule": task.get("rrule"),
"reminder": reminder,
}
)