Skip to main content
Glama

List tasks

list_todos
Read-only

Reads tasks from the Offhand to-do list. Returns title, schedule, part of day, group, completion state, whether it has been put aside in Someday, "details" — what the person wrote about the task, whole — where there are any, "fromNote" — the words of the note it was captured from — where they say more than the title and details, and "agentNote", the last thing an agent said about it. A repeating task that has run carries "lastRun": when, and what was said — whether today's run already happened and what the last one found. A task that is work toward a goal carries "goal": its id and title. A goal itself carries "isGoal". A task an agent left files with carries "files": each one's name, type, size and a "url" to download it from a shell or code (curl -o), good for ten minutes — never its contents. Open work reads overdue first, then by day; finished work newest first. One call is one page: "nextOffset" says more tasks match, and passed as offset it reads the next page. A listing without since or task also answers "agents": the person's other agents, each by the "name" assignTo takes and the "label" a person says. This is the list as Offhand Cloud holds it; where their Offhand app uploads, syncedAt says when it last did.

Input Schema

NameRequiredDescriptionDefault
goalNoOnly the work toward this goal: its id or uuid.
taskNoOne task by its id or uuid, or several apart by commas, whatever their status — to follow work you handed out, whoever holds it now.
limitNoMaximum tasks to return, at most 100. Default: 50.
queryNoOptional search over task titles and the notes they came from.
sinceNoOnly tasks that changed at or after this moment: pass the "cursor" your last listing answered with. Every row carries "updatedAt". For a check on a schedule — nothing new answers with no tasks.
offsetNoSkip this many, to read the next page: the "nextOffset" a page that stopped short gave.
statusNoWhich tasks to return. "open" is everything not finished, "done" is finished, "all" is both; the others narrow to one agent status. Default: open.
handedByNoOnly tasks this agent added for another agent with add_task, wherever they are now. Pass "me" to hear how the work you handed out went: its status and "agentNote" are the answer. Default status here: all.
assignedToNoOnly tasks assigned to this agent. Pass "me" (or your own name) to find the work meant for you; pass "none" for tasks nobody is named on.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / handedBy / description
      Previous value: -"Only tasks this agent added for another agent with add_task, wherever they are now, handed back included. Pass \"me\" to hear how the work you handed out went: its status and \"agentNote\" are the answer. Default status here: all."New value: +"Only tasks this agent added for another agent with add_task, wherever they are now. Pass \"me\" to hear how the work you handed out went: its status and \"agentNote\" are the answer. Default status here: all."
  2. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and destructiveHint=false, so the description's job is extra context, and it delivers: sort order (overdue first, finished newest first), one call is one page, file URLs expire in ten minutes and never carry contents, and a syncedAt caveat about cloud freshness. It stops short of stating limits or what happens at page boundaries beyond the offset rule.

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

Conciseness3/5

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

The purpose is front-loaded, but the body is a dense run-on chain of em-dash clauses that mixes return fields, pagination, and freshness caveats without paragraph breaks. Each clause carries information, yet the packaging makes it slower to parse than it needs to be.

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?

With nine optional parameters and no output schema, the description carries the entire burden of explaining returns, and it does: field-by-field coverage of lastRun, goal, isGoal, files, agentNote, plus ordering, pagination, and cloud sync state. Nothing an agent needs to call this correctly appears to be missing.

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 100%, so every parameter is already documented, and most of what the description says about since/offset largely restates the schema's own wording about "cursor" and "nextOffset". The one genuinely additive note is that an unscoped listing also answers "agents", which is return-shape context rather than parameter meaning. Baseline 3 fits.

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?

"Reads tasks from the Offhand to-do list" gives a specific verb and resource, and the whole description stays in read territory, which cleanly separates it from the write-oriented siblings add_task and set_task_status. An agent knows immediately this is the retrieval path rather than a mutation.

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?

It gives real conditional guidance: use since for a scheduled check ("nothing new answers with no tasks"), use task to follow handed-out work, and a listing without since or task also returns "agents". It never explicitly names the siblings or states when not to use it, but the routing signals are concrete rather than implied.

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.