Skip to main content
Glama

Zammad MCP by usefulapi

Update ticket

zammad_update_ticket
DestructiveIdempotent

WRITE: change fields of ONE ticket: state, priority, owner (agent), group and/or title. Use names from zammad_list_ticket_states / zammad_list_ticket_priorities / zammad_list_groups. Pending states need pending_time. Never deletes, removes or merges (those states are refused). The instance's own triggers still run, so closing or reassigning a ticket can send the customer or agent a notification e-mail. PUT /api/v1/tickets/{id}.

Input Schema

NameRequiredDescriptionDefault
groupNoGroup name, e.g. Sales (subgroups as Sales::Europe).
stateNoState name, e.g. open, closed, 'pending reminder'.
titleNoNew ticket title.
owner_idNoUser id of the agent who should own the ticket. Id 1 is Zammad's 'no owner' placeholder.
priorityNoPriority name, e.g. '3 high'.
ticket_idYesZammad ticket id.
pending_timeNoRequired for the pending states: when the ticket reminds or closes, ISO 8601 with a timezone.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing that instance triggers still fire and that closing/reassigning can email the customer or agent, plus that delete/remove/merge states are refused. It also clarifies the destructiveHint rather than contradicting it: the only destructive side effects are notification-inducing state changes, not data loss.

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 tight sentences: the WRITE prefix and field list are front-loaded, followed by value sources, the conditional requirement, the safety boundary, the side-effect warning, and the endpoint. No sentence is filler.

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 7-param mutation with no output schema, it supplies the mutation boundary, side effects, and value sourcing needed to call it correctly. The remaining gap is operational context such as required permissions/roles and what happens to fields omitted from the call.

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 already 100%, so the baseline is 3; the description adds genuine cross-parameter meaning the schema cannot, namely that pending_time is conditionally required when state is a pending state, and that owner must be an agent id. Field-level examples (Sales::Europe, 'no owner' id 1) duplicate schema descriptions.

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?

Names the verb (change fields), the exact resource (ONE ticket), and enumerates the mutable fields (state, priority, owner, group, title). The 'ONE ticket' scope plus 'Never deletes, removes or merges' cleanly separates it from zammad_create_ticket and zammad_reply_to_ticket without opening the schema.

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?

Explicitly routes the agent to zammad_list_ticket_states / zammad_list_ticket_priorities / zammad_list_groups to obtain valid names, and states the pending_time prerequisite for pending states. It stops short of naming a sibling to use instead (e.g. for bulk changes or article replies), so it is strong context without explicit exclusions.

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.