Skip to main content
Glama
andreasd083

amazing-marvin-complete-mcp

update_category_or_project

Idempotent

Update an existing Marvin category or project: rename, recolor, change icon or note, move, relabel, or set project-only fields like deadline, priority, frog, and scheduling dates.

Instructions

Update a category or project: labels, color, icon, note, project fields. 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

TableJSON Schema
NameRequiredDescriptionDefault
dayNoProjects ONLY: schedule YYYY-MM-DD, 'today', or 'unassigned' to unschedule
frogNoProjects ONLY: frog 3=monster, 2=baby, 1=normal, 0=remove
iconNoIcon name with a library prefix ('lucide-Rocket', 'huge-happy'), '' removes. Rendered directly on categories; on projects only when Master List → Configure View → 'Show Custom Icon On' includes projects ('Categories & Projects' verified in the app 2026-08-31, 'Just Projects' 2026-09-18; the earlier wording 'projects never render their own icon' was wrong)
noteNoNew note (replaces the existing one)
colorNoColor '#rrggbb', '' removes
orbitNoOrbit strategy: True = put in orbit (verified in the app 2026-08-29 on tasks: Orbit view + icon in Today). UNDOCUMENTED field
titleNoNew title
item_idYesID of the category/project (from get_categories)
due_dateNoProjects ONLY: deadline YYYY-MM-DD, '' removes
end_dateNoSoft deadline YYYY-MM-DD (Start & End Dates strategy), '' removes
priorityNoProjects 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_idsNoNew 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_idNoMove to parent category ID, or 'root'
backburnerNoTrue = 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_dateNoStart date YYYY-MM-DD (Start & End Dates strategy), '' removes
review_dateNoReview date YYYY-MM-DD (Review Date strategy), '' removes
planned_weekNoPlan 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_orbitNoOrbit strategy: True = exempt from automatic orbiting. UNDOCUMENTED field (bool type verified in live data 2026-08-29)
planned_monthNoPlan 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_scheduledNoThe 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_minutesNoTime 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

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv1.7.2
    • changedInput schema / properties / icon / description
      Previous value: -"Icon name with a library prefix ('lucide-Rocket', 'huge-happy'), '' removes. Rendered directly on categories; on projects only with Master List → Configure View → 'Show Custom Icon On' = 'Categories & Projects' (verified in the app 2026-08-31 — the earlier wording 'projects never render their own icon' was wrong)"New value: +"Icon name with a library prefix ('lucide-Rocket', 'huge-happy'), '' removes. Rendered directly on categories; on projects only when Master List → Configure View → 'Show Custom Icon On' includes projects ('Categories & Projects' verified in the app 2026-08-31, 'Just Projects' 2026-09-18; the earlier wording 'projects never render their own icon' was wrong)"
  2. Changed1 schema field changedv1.7.1
    • changedInput schema / properties / icon / description
      Previous value: -"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)"New value: +"Icon name with a library prefix ('lucide-Rocket', 'huge-happy'), '' removes. Rendered directly on categories; on projects only with Master List → Configure View → 'Show Custom Icon On' = 'Categories & Projects' (verified in the app 2026-08-31 — the earlier wording 'projects never render their own icon' was wrong)"
  3. Changed3 schema fields changedv1.6.0
    • changedInput schema / properties / label_ids / description
      Previous value: -"Projects ONLY: new labels (replaces existing ones, [] removes all)"New value: +"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)"
    • changedInput schema / properties / planned_month / description
      Previous value: -"Plan into a month: YYYY-MM (Planning Ahead strategy), '' removes"New value: +"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)"
    • changedInput schema / properties / planned_week / description
      Previous value: -"Plan into a week: the week's Monday YYYY-MM-DD (Planning Ahead strategy), '' removes"New value: +"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)"
  4. Changed1 schema field changedv1.4.0
    • changedInput schema / properties / priority / description
      Previous value: -"Projects ONLY: priority 'high'/'mid'/'low', '' removes. Projects use the string field priority, not isStarred (verified live 2026-08-29)"New value: +"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)"
  5. First observedv1.3.0

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavior beyond the annotations: it discloses a hidden pre-read API call when Projects-ONLY fields are supplied, explains that the tool refuses categories in that case, and gives a precise failure-mode distinction between transient 500s (retry) and permanent 500s (missing document). It also warns that completion via /doc/update skips app side effects. This is consistent with idempotentHint=true and not contradicted by any annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a clear one-sentence summary and sibling routing, followed by well-separated operational warnings. It is longer than average, but the tool is complex and the extra length covers genuine behavioral hazards. It loses a point for some redundancy with schema details (repeated field lists and numerous verification dates) that could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 21-parameter tool with a rich input schema and an output schema, the description covers the non-obvious operational context: full-access-token requirement, category blocking logic, strategy-disabled behavior, completion side effects, and the 500-as-missing-ID failure mode. An agent has everything it needs to invoke this tool correctly and to interpret common failures.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds value above the schema by grouping parameters into 'Projects ONLY' vs. shared fields, clarifying that label_ids applies to both categories and projects, and noting that strategy fields work even when the strategy is disabled. It does not need to enumerate every parameter because the schema already does that thoroughly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Update a category or project' and lists the editable fields (labels, color, icon, note, project fields). It explicitly distinguishes itself from the sibling tool: 'For tasks, use update_task.' An agent can determine what this tool does and what it does not do without reading the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit routing guidance: tasks go to update_task, projects must not be completed here, and Projects-ONLY fields are blocked for categories. It also clarifies that strategy-dependent fields can be set even when the strategy is disabled, which prevents an agent from wrongly assuming a prerequisite. The 'existing CATEGORY or PROJECT' wording plus 'For tasks, use update_task' provides clear when-to-use and when-not-to-use signals.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.