Skip to main content
Glama

assign_task

DestructiveIdempotent

Assign or unassign one task. Pass assigneeId=null to unassign. Alternatively pass assigneeEmail to resolve by org-member email (useful when the agent only knows the user's email and would otherwise need a separate list to find their id). Mutually exclusive with assigneeId. Optional expectedAssigneeRevision (integer): if supplied, the call fails with a CONFLICT error when another caller has assigned the task since you last read it. Returns the assignee's id and name (assigneeName), and the new claimRevision so you can chain consecutive assigns under optimistic concurrency. Caller must have task.assign on the project. Target must be an active member of the organization. On plans with resource management the result also carries load: the assignee's capacity for the week the task lands in, the hours already committed to their other open work, this task's share, whether that projection exceeds capacity (over, overBy), and the competing work that week (otherWork). Null when the task has no dates.

Input Schema

NameRequiredDescriptionDefault
dryRunNoPreview only: return assignee current -> proposed + currentAssigneeRevision without committing. Writes nothing, fires no side effects. Pair with expectedAssigneeRevision on the real call.
taskIdYesTask to (un)assign.
assigneeIdNoUser id or null to unassign. Mutually exclusive with assigneeEmail.
assigneeEmailNoAlternative to assigneeId. Resolved against active org members by email. 404 if not a member.
expectedAssigneeRevisionNoOptimistic-concurrency guard. The Task.claimRevision you read; CONFLICT if it has moved.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: required permission (task.assign on the project), target precondition (active org member), the CONFLICT failure mode for expectedAssigneeRevision, and the returned claimRevision that enables chained optimistic-concurrency assigns. With destructiveHint=true already declared, this level of precondition and error disclosure is more than the annotations carry on their own.

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?

Front-loads the core action and the unassign idiom, then layers concurrency and capacity detail in a logical order. It is a single dense paragraph running well over a hundred words, and the `load` payload sentence could be tightened, but every sentence carries information the agent can act on.

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?

There is no output schema, and the description compensates by documenting the return shape (assignee id and name, claimRevision, and the capacity/load block including over, overBy and otherWork). It also covers permissions, target preconditions, error semantics and dryRun pairing, leaving no material gap for a five-parameter mutation.

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 schema already documents all five parameters and the baseline would be 3. The description nonetheless adds operational meaning the schema states only tersely: why email resolution exists, how expectedAssigneeRevision fails and how claimRevision is meant to be reused for chaining.

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 and resource ('Assign or unassign one task') and immediately delimits scope to a single task, which distinguishes it from the sibling bulk_assign. The unassign path is described in the same breath, so the agent knows this tool covers both directions.

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?

Gives explicit guidance on when to reach for assigneeEmail versus assigneeId, including the rationale ('when the agent only knows the user's email and would otherwise need a separate list'), and states the two are mutually exclusive. It does not, however, name tool-level alternatives such as bulk_assign or propose_assignment, so routing between sibling tools is left to inference.

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.