Skip to main content
Glama

set_work_status

Change the work status of an existing message to reflect progress, with role-based transitions and peer confirmation required to mark completion.

Instructions

Change the work_status of an EXISTING message as the work moves through its lifecycle — do not send a new message just to change status. Either party (sender or recipient) may call this; third roles are rejected. Transitions: any value can be set from any state, with ONE exception — 'done' requires the current status to be 'done_local' and must be set by the OTHER role than whoever declared done_local. Semantics: 'done_local' = the executor finished on their side; 'done' = completed AND confirmed by the other role (peer confirmation — the channel cannot verify merges or production). 'done' is not a dead end: if an issue resurfaces, move the status back (audited) or reopen the obligation. 'needs_you' is relative to the SETTER: it always means the ball is at the other participant than whoever set it (it surfaces in THEIR channel_status). Re-setting the current value by the other role is a real, audited transition (it moves the ball back); by the same role it is a no-op. For 'blocked' on another message, pass blocked_by=; the blocker MUST be an unresolved action_required message (otherwise nothing could ever resolve it and your task would block forever — rejected). Blocked on something without a resolvable message (human decision, external run) — use 'blocked' with a note and lift it manually. Every transition is logged to message_history. Notes are at most 4000 characters.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
noteNo
blocked_byNo
message_idYes
work_statusYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full burden of behavioral disclosure, and it delivers thoroughly. It reveals that every transition is logged, that re-setting the current value by the same role is a no-op while by the other role is an audited transition, that blocked_by must reference an unresolved action_required message or be rejected, and that 'done' is not a dead end. It also states the note length limit and that third roles are rejected.

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 long but highly structured, starting with the primary purpose, then transitions, semantics, blocked usage, and note limit. Every sentence adds value and avoids redundancy. It is front-loaded with the core action and the critical exclusion. The length is justified by the complexity of the state machine, though it could be slightly tighter.

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?

Given the tool's complexity and the absence of annotations, the description covers all essential aspects: when to use it, transition rules, role restrictions, blocked_by semantics, audited logging, and the no-op case. The output schema exists, so return values are not required. The description is sufficiently complete for an agent to call the tool correctly in all scenarios.

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 0%, so the description must compensate, and it does for message_id, work_status (with semantic explanations of done_local, done, needs_you, blocked), note (max 4000 chars), and blocked_by (must be an unresolved action_required message). However, it does not enumerate the full set of allowable work_status values, only the notable ones, leaving the agent to infer the complete enum.

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 states a specific action ('Change the work_status of an EXISTING message') and explicitly contrasts with sending a new message. It clarifies scope (existing message) and role constraints (sender or recipient only), which distinguishes it from send_message and other message-related tools.

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 provides explicit when-to-use guidance ('do not send a new message just to change status'), explains transition rules (any value can be set, with the done exception), and gives detailed instructions for blocked_by usage versus manual blocking. It also differentiates the semantics of 'needs_you' relative to the setter, giving clear context for when this tool is appropriate.

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