update_category_or_project
Update fields on an existing category or project, such as title, color, labels, or schedule. Rejects project-only fields for categories; use update_task for tasks.
Instructions
Update fields on an existing CATEGORY or PROJECT via /doc/update (Full Access Token). For tasks, use update_task. Fields marked 'Projects ONLY' (day/due_date/priority/frog) are blocked for categories: if any of them is given, the tool first reads the document (1 extra API call) and refuses if it is a category. The reason is structural, not technical: a category can never be completed or checked off, and deadline, scheduling, priority and frog belong to things that can be finished — projects and tasks. The API accepts the fields on categories (live-tested 2026-09-11) but they are not meaningful there (rule 2026-09-11). label_ids applies to both categories and projects. Strategy-dependent fields (start/end date, planned_week/month, review_date, orbit) can be set even when the strategy is disabled in the app. Do not complete projects here (done via /doc/update skips the app's side effects) — that is done in the Marvin app. Note: Marvin's server can sporadically respond 500 on /doc/update (transient and atomic); just retry. But a PERMANENT 500 (persists across retries) means the document does not exist — deleted, or a wrong/never-existing ID (the server responds 500 instead of 404 for missing IDs, verified live 2026-08-29). Fetch a fresh ID via get_categories/get_children.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | Projects ONLY: schedule YYYY-MM-DD, 'today', or 'unassigned' to unschedule | |
| frog | No | Projects ONLY: frog 3=monster, 2=baby, 1=normal, 0=remove | |
| icon | No | Icon name with a library prefix ('lucide-Rocket', 'huge-happy'), '' removes. ONLY meaningful on categories — projects never render their own icon (verified in the app 2026-08-29) | |
| note | No | New note (replaces the existing one) | |
| color | No | Color '#rrggbb', '' removes | |
| orbit | No | Orbit strategy: True = put in orbit (verified in the app 2026-08-29 on tasks: Orbit view + icon in Today). UNDOCUMENTED field | |
| title | No | New title | |
| item_id | Yes | ID of the category/project (from get_categories) | |
| due_date | No | Projects ONLY: deadline YYYY-MM-DD, '' removes | |
| end_date | No | Soft deadline YYYY-MM-DD (Start & End Dates strategy), '' removes | |
| priority | No | Projects ONLY: 'high'=Most important (red), 'mid'=Very important (orange), 'low'=Important (yellow, the one-star level — NOT the app's 'Low priority', which projects do not have), '' removes. Projects use the string field priority, not isStarred (verified live 2026-08-29; mapping verified against the app's code 2026-08-30) | |
| label_ids | No | New labels (replaces existing ones, [] removes all) — categories AND projects: categories have labels in the same field as projects, stored and rendered (live-tested + verified in the app 2026-09-11) | |
| parent_id | No | Move to parent category ID, or 'root' | |
| backburner | No | True = put in the backburner, False = take out. NOTE (verified in the app 2026-08-29 on tasks): only effective on unscheduled items — scheduling trumps the flag | |
| start_date | No | Start date YYYY-MM-DD (Start & End Dates strategy), '' removes | |
| review_date | No | Review date YYYY-MM-DD (Review Date strategy), '' removes | |
| planned_week | No | Plan into a week: the week's Monday YYYY-MM-DD (Planning Ahead strategy), '' removes (the app's view may keep showing it until the client is reloaded — see update_task.planned_week) | |
| no_auto_orbit | No | Orbit strategy: True = exempt from automatic orbiting. UNDOCUMENTED field (bool type verified in live data 2026-08-29) | |
| planned_month | No | Plan into a month: YYYY-MM (Planning Ahead strategy), '' removes (the app's view may keep showing it until the client is reloaded — see update_task.planned_week) | |
| first_scheduled | No | The app's bookkeeping field firstScheduled YYYY-MM-DD, '' removes — mainly for restoring the value from the convert tool's removed_project_fields after a conversion round trip (nothing backfills it, neither server nor app — verified 2026-08-29). Otherwise leave alone | |
| time_estimate_minutes | No | Time estimate in minutes, 0 removes it. On projects: rendered as the project's OWN estimate, no aggregation with the children's (verified in the app 2026-08-29) |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||