Skip to main content
Glama

Create or update a task

save_task
Destructive

Upsert a task. Omit id to create a new one (name required). Pass id to update an existing task — any subset of fields. To change part of the note, pass patch instead of note. Use null on listId to unlink a task from its list. Returns the saved task.

Input Schema

NameRequiredDescriptionDefault
idNoTask reference: TASKAID-45, #45 or 45. Pass to update an existing task; omit to create a new one.
nameNoRequired when creating. On update, omit to keep the current name. A few words naming the action; the day goes in `when`, the detail in `note`.
noteNoTask notes, as Markdown, up to 15,000 characters — rendered as rich text in the app. Headings, lists, bold, and inline code are supported. Send literal newlines and characters, not escape sequences.
whenNoThe day the task is scheduled for, as "YYYY-MM-DD" (e.g. "2026-05-21"). Omit or pass null when creating to leave the task in Inbox; pass null when updating to move it back there.
patchNoEdits to the note, applied in order and atomically — if one fails, nothing is written. Only on update, in place of `note`: text you do not send keeps its exact wording.
listIdNoPass null to unlink the task from its list.
starredNo
durationNoEstimated duration in minutes, up to a day. Null clears the estimate.
reminderNoA time of day for a reminder, "HH:MM" in 24-hour time (e.g. "15:00"), on the task's `when` day in the user's time zone. Moving the task moves it; null removes it. At that time Taskaid sends the `task.reminded` event to subscribed assistants.
completedNoMarks the task done. True stamps `completedAt` with the time of the call, never the time the work finished.

Output Schema

NameRequiredDescriptionDefault
idYes
urlYes
listYes
nameYes
noteYes
whenYesCalendar date, "YYYY-MM-DD", or null for Inbox.
sourceYes
starredYes
durationYes
reminderYesTime of day on the `when` day, "HH:MM", or null for none.
completedYes
updatedAtYes
completedAtYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed18 schema fields changed
    • removedInput schema / properties / listId / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / listId / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / note / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / note / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedInput schema / properties / when / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / when / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / completedAt / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / completedAt / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / duration / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / duration / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / note / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / note / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / reminder / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / reminder / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / source / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / source / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / when / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / when / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  2. Changed3 schema fields changed
    • addedInput schema / properties / reminder
      Added value: +{
      +  "anyOf": [
      +    {
      +      "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d$",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "A time of day for a reminder, \"HH:MM\" in 24-hour time (e.g. \"15:00\"), on the task's `when` day in the user's time zone. Moving the task moves it; null removes it. At that time Taskaid sends the `task.reminded` event to subscribed assistants."
      +}
    • addedOutput schema / properties / reminder
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Time of day on the `when` day, \"HH:MM\", or null for none."
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "id",
      -  "url",
      -  "name",
      -  "completed",
      -  "starred",
      -  "when",
      -  "note",
      -  "duration",
      -  "completedAt",
      -  "updatedAt",
      -  "source",
      -  "list"
      -]New value: +[
      +  "id",
      +  "url",
      +  "name",
      +  "completed",
      +  "starred",
      +  "when",
      +  "reminder",
      +  "note",
      +  "duration",
      +  "completedAt",
      +  "updatedAt",
      +  "source",
      +  "list"
      +]
  3. Changed1 schema field changed
    • changedInput schema / properties / name / description
      Previous value: -"Required when creating. On update, omit to keep the current name."New value: +"Required when creating. On update, omit to keep the current name. A few words naming the action; the day goes in `when`, the detail in `note`."
  4. Changed2 schema fields changed
    • addedInput schema / properties / completed / description
      Added value: +"Marks the task done. True stamps `completedAt` with the time of the call, never the time the work finished."
    • addedInput schema / properties / name / description
      Added value: +"Required when creating. On update, omit to keep the current name."
  5. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false; the description explains the source of that destructiveness implicitly by directing callers to `patch` when they want to preserve unmentioned note text, and it states the return ("Returns the saved task"). It does not spell out permission requirements or what an update does to fields that are omitted, leaving some behavioral inference to the schema.

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

Conciseness5/5

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

Five short sentences, front-loaded with the create/update split, then the note-editing rule, then the unlink rule, then the return. No filler and no repetition.

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

Completeness4/5

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

For a 10-parameter destructive upsert with an output schema, it covers the decisions an agent actually has to make: create vs update, note replacement vs patch, and unlinking via null. Parameters like `starred`, `duration`, and `completed` are left entirely to the schema, which is acceptable given 90% coverage.

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

Parameters3/5

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

Schema coverage is 90%, so the baseline is 3 and the schema already documents almost every parameter's meaning. The description reinforces the critical create-vs-update contract for `id` and the `note`/`patch`/`listId` semantics, but adds little beyond the already-rich schema text.

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?

Opens with a precise verb+resource ("Upsert a task") and immediately splits the two modes: create when `id` is omitted, update when it is passed. The resource noun cleanly separates it from save_list and save_plan, and the upsert/save verb separates it from view_task and search_tasks.

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

Usage Guidelines4/5

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

Explicit routing is given for the two in-tool paths (omit `id` to create with `name` required; pass `id` to update with any subset of fields) and for the note-editing choice ("pass `patch` instead of `note`"). It does not mention sibling workflows, e.g. using search_tasks or view_task to obtain the `id` before calling this, so it stops short of a full when-to-use map.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources