Skip to main content
Glama

list_tasks

Read-onlyIdempotent

List tasks visible to the caller, with optional filters: projectId, parentId (pass "null" string or JSON null for top-level-only), status, assigneeId (or the sentinels "me" / "unassigned"), assignedToAgentPersona, collaboratorId (or "me": tasks a person collaborates on without holding them), title with titleMode ("contains" default, "equals", "startsWith"; all case-insensitive), dueBefore / dueAfter, overdueOnly, includeSubtasks, orderBy. Each row carries collaborators, the people working on it besides its assignee, isManual and datesFromSubtasks (true when its dates come from its subtasks), and url, the task's link in the Onplana web app. Returns up to 200 tasks per call with cursor-based pagination (nextCursor). Set includeSubtasks=true to include matching subtasks at any depth when filtering by status/assignee/title (omitting parentId). PREFER get_plan when you need the whole project tree in one call; PREFER list_assigned_tasks for your own queue. Use list_tasks when drilling parent to children or paginating through a large project. When you pass projectId, the response carries projectResolved: if it is false the id did not match any project visible to you and the empty tasks list says NOTHING about whether that project has work in it, re-check the id (use full ids from list_projects, never abbreviated) rather than concluding the project is empty or unsaved.

Input Schema

NameRequiredDescriptionDefault
limitNoDefault 25, max 200.
titleNoCase-insensitive match on task title. See titleMode for how it matches.
cursorNoLast-id pagination cursor from a prior call's nextCursor.
statusNo
orderByNoDefault 'dueDate'. Combined with priority desc as secondary.
dueAfterNoISO date - show tasks due after this date.
parentIdNoParent task id, "null" string, or JSON null for top-level-only.
dueBeforeNoISO date - show tasks due before this date.
projectIdNoOptional - restrict to one project.
titleModeNoHow title is matched: 'contains' (default), 'equals', or 'startsWith'. All case-insensitive.
assigneeIdNoShow tasks assigned to one user. Special values: 'me' (the caller), 'unassigned' (no assignee).
overdueOnlyNoWhen true, only return tasks past their due date and not DONE.
customFieldsNoFilter by custom-field value(s); multiple entries are ANDed. Each entry is { fieldId, op, value? }. Ops must be valid for the field type , numeric (NUMBER/CURRENCY/RATING): eq/gt/gte/lt/lte/isNotEmpty; DATE: eq/before/after/isNotEmpty; text/DROPDOWN: eq/contains/isNotEmpty; MULTI_SELECT: contains/isNotEmpty; CHECKBOX: isChecked/isUnchecked (unchecked includes never set). Omit value for isNotEmpty, isChecked and isUnchecked. No neq / isEmpty. Get field ids from list_custom_field_defs.
collaboratorIdNoOnly tasks this user collaborates on (works on without holding). Special value: 'me' (the caller).
includeSubtasksNoWhen true, include matching subtasks at any depth (not just top-level). Default false.
assignedToAgentPersonaNoWhen true, only return tasks whose assignee is an agent persona ("what are the agents working on").

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / customFields / description
      Previous value: -"Filter by custom-field value(s); multiple entries are ANDed. Each entry is { fieldId, op, value? }. Ops must be valid for the field type , numeric (NUMBER/CURRENCY/RATING): eq/gt/gte/lt/lte/isNotEmpty; DATE: eq/before/after/isNotEmpty; text/DROPDOWN: eq/contains/isNotEmpty; MULTI_SELECT: contains/isNotEmpty; CHECKBOX: eq/isNotEmpty. Omit value only for isNotEmpty. Inclusion-only in v1 (no neq / isEmpty). Get field ids from list_custom_field_defs."New value: +"Filter by custom-field value(s); multiple entries are ANDed. Each entry is { fieldId, op, value? }. Ops must be valid for the field type , numeric (NUMBER/CURRENCY/RATING): eq/gt/gte/lt/lte/isNotEmpty; DATE: eq/before/after/isNotEmpty; text/DROPDOWN: eq/contains/isNotEmpty; MULTI_SELECT: contains/isNotEmpty; CHECKBOX: isChecked/isUnchecked (unchecked includes never set). Omit value for isNotEmpty, isChecked and isUnchecked. No neq / isEmpty. Get field ids from list_custom_field_defs."
    • changedInput schema / properties / customFields / items / properties / op / enum
      Previous value: -[
      -  "eq",
      -  "contains",
      -  "gt",
      -  "gte",
      -  "lt",
      -  "lte",
      -  "before",
      -  "after",
      -  "isNotEmpty"
      -]New value: +[
      +  "eq",
      +  "contains",
      +  "gt",
      +  "gte",
      +  "lt",
      +  "lte",
      +  "before",
      +  "after",
      +  "isNotEmpty",
      +  "isChecked",
      +  "isUnchecked"
      +]
    • changedInput schema / properties / customFields / items / properties / value / description
      Previous value: -"Comparison value; omit for isNotEmpty."New value: +"Comparison value; omit for isNotEmpty, isChecked and isUnchecked."
  2. Changed2 schema fields changed
    • addedInput schema / properties / collaboratorId
      Added value: +{
      +  "description": "Only tasks this user collaborates on (works on without holding). Special value: 'me' (the caller).",
      +  "type": "string"
      +}
    • addedInput schema / properties / customFields
      Added value: +{
      +  "description": "Filter by custom-field value(s); multiple entries are ANDed. Each entry is { fieldId, op, value? }. Ops must be valid for the field type , numeric (NUMBER/CURRENCY/RATING): eq/gt/gte/lt/lte/isNotEmpty; DATE: eq/before/after/isNotEmpty; text/DROPDOWN: eq/contains/isNotEmpty; MULTI_SELECT: contains/isNotEmpty; CHECKBOX: eq/isNotEmpty. Omit value only for isNotEmpty. Inclusion-only in v1 (no neq / isEmpty). Get field ids from list_custom_field_defs.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "fieldId": {
      +        "description": "CustomFieldDefinition id (scoped to this org + entity).",
      +        "type": "string"
      +      },
      +      "op": {
      +        "enum": [
      +          "eq",
      +          "contains",
      +          "gt",
      +          "gte",
      +          "lt",
      +          "lte",
      +          "before",
      +          "after",
      +          "isNotEmpty"
      +        ],
      +        "type": "string"
      +      },
      +      "value": {
      +        "description": "Comparison value; omit for isNotEmpty.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "fieldId",
      +      "op"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
  3. Added

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, yet the description still adds real behavioral context: the 200-row cap, cursor-based pagination via nextCursor, the extra row fields (collaborators, isManual, datesFromSubtasks, url), the includeSubtasks depth semantics, and the projectResolved caveat that an empty list does not mean an empty project. It stops short of describing the full return envelope, but that is a minor gap against a tool whose safety profile is already covered.

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?

Purpose is front-loaded, then filters, then return shape, then routing alternatives and the projectResolved caveat – a sensible order. It is one dense paragraph rather than broken into lines, so the routing and caveat clauses are easy to skim past, but no sentence is filler.

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 16-parameter, zero-required filtering tool with no output schema, the description supplies pagination, return fields, sentinel values, the parentId/subtask interaction, and the misleading-empty-result warning. Nothing an agent needs to call it correctly or interpret its output is missing.

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 coverage is 94%, so the baseline is 3, but the description earns a step up by adding semantics the schema only partially carries: the 'me' / 'unassigned' sentinels, the "null"/JSON-null parentId distinction for top-level-only, case-insensitive titleMode, and the cross-parameter rule that includeSubtasks only recurses when parentId is omitted. The customFields operator matrix is left entirely to the schema, which is acceptable given its own long description.

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?

States a specific verb+resource (list tasks visible to the caller) and immediately enumerates the filter space, so the agent knows exactly what the tool returns. It also explicitly distinguishes itself from get_plan and list_assigned_tasks, which is the sibling-routing signal the agent needs.

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 alternatives and the conditions that select them: PREFER get_plan for a whole project tree in one call, PREFER list_assigned_tasks for your own queue, and use list_tasks when drilling parent to children or paginating large projects. It also names a concrete failure mode (projectResolved=false) and prescribes the remedy.

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.