Skip to main content
Glama

Update Issue

update_issue

Update selected fields, notes, or monitors on an existing MantisBT issue using a partial PATCH, with dry-run preview and an optional appended note.

Instructions

Update one or more fields of an existing MantisBT issue using a partial PATCH.

The "fields" object accepts any combination of:

  • summary (string)

  • description (string)

  • steps_to_reproduce (string)

  • additional_information (string)

  • status: { name: "new"|"feedback"|"acknowledged"|"confirmed"|"assigned"|"resolved"|"closed" }

  • resolution: { id: 20 } (20 = fixed/resolved)

  • handler: { id: <user_id> } or { name: "" }

  • priority: { name: "<priority_name>" }

  • severity: { name: "<severity_name>" }

  • reproducibility: { name: "<reproducibility_name>" }

  • category: { name: "<category_name>" }

  • version: { name: "<version_name>" } (affected version)

  • target_version: { name: "<version_name>" }

  • fixed_in_version: { name: "<version_name>" }

  • view_state: { name: "public"|"private" }

  • custom_fields: [{field: {id|name}, value: ""}] (only the listed custom fields are changed, others stay untouched; use get_issue_schema to discover fields)

  • notes: [{ id: <note_id>, text?: "", view_state?: "public"|"private" }] (edits existing notes; note IDs come from get_issue. An omitted view_state keeps the note's current visibility. To add a new note use the "note" parameter or add_note.)

Important: when resolving an issue, always set BOTH status and resolution to avoid leaving resolution as "open".

Use the optional "note" parameter to append a note in the same call (e.g. the reason for a status change) — no separate add_note call needed. For a note without field changes use add_note.

Use "add_monitors" / "remove_monitors" (lists of MantisBT login names) to change who watches the issue — "fields" may be omitted then. The response contains "monitors" with added/removed/not_monitoring and the current monitor list. Adding or removing other users requires the monitor_add_others_bug_threshold / monitor_delete_others_bug_threshold access level.

Steps run in order: fields, monitors, note. Once one step succeeded, a later failure is reported inline ("notes_error" when a note edit was not applied, "monitors_error", "note_error") instead of failing the call — do not retry the steps that went through. Only if every requested step failed is the call an error.

Input Schema

NameRequiredDescriptionDefault
idYesNumeric issue ID to update
noteNoOptional note text appended after a successful update (e.g. reason for a status change). Replaces a separate add_note call.
fieldsNoFields to update (partial update — only provided fields are changed; unknown keys are rejected). May be omitted when only add_monitors, remove_monitors or note are given.
dry_runNoIf true, return the patch payload that would be sent without actually updating the issue. Useful for previewing changes before committing them.
add_monitorsNoMantisBT login names to add as monitors (watchers) of the issue
note_view_stateNoVisibility of the appended note: "public" (default) or "private". Only used when "note" is set.public
remove_monitorsNoMantisBT login names to remove from the monitors of the issue; names that are not monitoring are ignored

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv1.15.0
    • addedInput schema / properties / add_monitors
      Added value: +{
      +  "description": "MantisBT login names to add as monitors (watchers) of the issue",
      +  "items": {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "minItems": 1,
      +  "type": "array"
      +}
    • changedInput schema / properties / fields / description
      Previous value: -"Fields to update (partial update — only provided fields are changed; unknown keys are rejected)"New value: +"Fields to update (partial update — only provided fields are changed; unknown keys are rejected). May be omitted when only add_monitors, remove_monitors or note are given."
    • addedInput schema / properties / fields / properties / notes
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "id": {
      +        "description": "ID of the note to edit (from get_issue)",
      +        "exclusiveMinimum": 0,
      +        "maximum": 9007199254740991,
      +        "type": "integer"
      +      },
      +      "text": {
      +        "description": "New note text",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "view_state": {
      +        "description": "New visibility; omitted = keep the current one",
      +        "enum": [
      +          "public",
      +          "private"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "id"
      +    ],
      +    "type": "object"
      +  },
      +  "minItems": 1,
      +  "type": "array"
      +}
    • addedInput schema / properties / remove_monitors
      Added value: +{
      +  "description": "MantisBT login names to remove from the monitors of the issue; names that are not monitoring are ignored",
      +  "items": {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "minItems": 1,
      +  "type": "array"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "id",
      -  "fields"
      -]New value: +[
      +  "id"
      +]
  2. Changed38 schema fields changedv1.14.0
    • removedInput schema / additionalProperties
      Removed value: -false
    • removedInput schema / properties / fields / properties / category / $ref
      Removed value: -"#/properties/fields/properties/status"
    • addedInput schema / properties / fields / properties / category / properties
      Added value: +{
      +  "id": {
      +    "type": "number"
      +  },
      +  "name": {
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / fields / properties / category / type
      Added value: +"object"
    • removedInput schema / properties / fields / properties / custom_fields / items / additionalProperties
      Removed value: -false
    • removedInput schema / properties / fields / properties / custom_fields / items / properties / field / $ref
      Removed value: -"#/properties/fields/properties/status"
    • addedInput schema / properties / fields / properties / custom_fields / items / properties / field / properties
      Added value: +{
      +  "id": {
      +    "type": "number"
      +  },
      +  "name": {
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / fields / properties / custom_fields / items / properties / field / type
      Added value: +"object"
    • changedInput schema / properties / fields / properties / custom_fields / items / required
      Previous value: -[
      -  "field"
      -]New value: +[
      +  "field",
      +  "value"
      +]
    • removedInput schema / properties / fields / properties / fixed_in_version / $ref
      Removed value: -"#/properties/fields/properties/status"
    • addedInput schema / properties / fields / properties / fixed_in_version / properties
      Added value: +{
      +  "id": {
      +    "type": "number"
      +  },
      +  "name": {
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / fields / properties / fixed_in_version / type
      Added value: +"object"
    • removedInput schema / properties / fields / properties / handler / $ref
      Removed value: -"#/properties/fields/properties/status"
    • addedInput schema / properties / fields / properties / handler / properties
      Added value: +{
      +  "id": {
      +    "type": "number"
      +  },
      +  "name": {
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / fields / properties / handler / type
      Added value: +"object"
    • removedInput schema / properties / fields / properties / priority / $ref
      Removed value: -"#/properties/fields/properties/status"
    • addedInput schema / properties / fields / properties / priority / properties
      Added value: +{
      +  "id": {
      +    "type": "number"
      +  },
      +  "name": {
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / fields / properties / priority / type
      Added value: +"object"
    • removedInput schema / properties / fields / properties / reproducibility / $ref
      Removed value: -"#/properties/fields/properties/status"
    • addedInput schema / properties / fields / properties / reproducibility / properties
      Added value: +{
      +  "id": {
      +    "type": "number"
      +  },
      +  "name": {
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / fields / properties / reproducibility / type
      Added value: +"object"
    • removedInput schema / properties / fields / properties / resolution / $ref
      Removed value: -"#/properties/fields/properties/status"
    • addedInput schema / properties / fields / properties / resolution / properties
      Added value: +{
      +  "id": {
      +    "type": "number"
      +  },
      +  "name": {
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / fields / properties / resolution / type
      Added value: +"object"
    • removedInput schema / properties / fields / properties / severity / $ref
      Removed value: -"#/properties/fields/properties/status"
    • addedInput schema / properties / fields / properties / severity / properties
      Added value: +{
      +  "id": {
      +    "type": "number"
      +  },
      +  "name": {
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / fields / properties / severity / type
      Added value: +"object"
    • removedInput schema / properties / fields / properties / status / additionalProperties
      Removed value: -false
    • removedInput schema / properties / fields / properties / target_version / $ref
      Removed value: -"#/properties/fields/properties/status"
    • addedInput schema / properties / fields / properties / target_version / properties
      Added value: +{
      +  "id": {
      +    "type": "number"
      +  },
      +  "name": {
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / fields / properties / target_version / type
      Added value: +"object"
    • removedInput schema / properties / fields / properties / version / $ref
      Removed value: -"#/properties/fields/properties/status"
    • addedInput schema / properties / fields / properties / version / properties
      Added value: +{
      +  "id": {
      +    "type": "number"
      +  },
      +  "name": {
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / fields / properties / version / type
      Added value: +"object"
    • removedInput schema / properties / fields / properties / view_state / $ref
      Removed value: -"#/properties/fields/properties/status"
    • addedInput schema / properties / fields / properties / view_state / properties
      Added value: +{
      +  "id": {
      +    "type": "number"
      +  },
      +  "name": {
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / fields / properties / view_state / type
      Added value: +"object"
    • addedInput schema / properties / id / maximum
      Added value: +9007199254740991
  3. Changed3 schema fields changedv1.10.5
    • addedInput schema / properties / fields / properties / custom_fields
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "field": {
      +        "$ref": "#/properties/fields/properties/status",
      +        "description": "Custom field reference: { id } or { name }"
      +      },
      +      "value": {
      +        "description": "Field value as string",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "field"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / note
      Added value: +{
      +  "description": "Optional note text appended after a successful update (e.g. reason for a status change). Replaces a separate add_note call.",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / note_view_state
      Added value: +{
      +  "default": "public",
      +  "description": "Visibility of the appended note: \"public\" (default) or \"private\". Only used when \"note\" is set.",
      +  "enum": [
      +    "public",
      +    "private"
      +  ],
      +  "type": "string"
      +}
  4. Addedv1.10.4
  5. Removed
  6. Changed1 schema field changedv1.5.15
    • addedInput schema / properties / dry_run
      Added value: +{
      +  "description": "If true, return the patch payload that would be sent without actually updating the issue. Useful for previewing changes before committing them.",
      +  "type": "boolean"
      +}
  7. First observedv1.5.6

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare the write/non-idempotent/non-destructive profile; the description goes far beyond that by disclosing execution order (fields, monitors, note), non-atomic failure semantics (inline notes_error / monitors_error / note_error rather than call failure), and the "do not retry the steps that went through" rule. It also names the access-level thresholds required to add or remove other users as monitors, which annotations cannot express.

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 field list is a scannable bulleted block preceded by the key scope sentence, so it is front-loaded and structured rather than rambling. A little redundancy remains — e.g. "no separate add_note call needed" repeats what the schema's note description already says — but nearly every sentence carries operational information.

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-parameter nested-object mutation with no output schema, the description covers the critical unknowns: step ordering, partial-failure reporting keys, and monitor permissions. It does mention the "monitors" response shape but says nothing about the primary return payload after a successful field update, and dry_run behavior is only documented in the schema.

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, but the description adds genuine meaning: the allowed status name ladder, a concrete resolution example (id 20 = fixed/resolved), the partial-change semantics of custom_fields, and the rule that an omitted note view_state preserves current visibility. Minor gap: dry_run and note_view_state are never mentioned in the description text, leaving those entirely to the schema.

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?

Opens with a specific verb and resource ("Update one or more fields of an existing MantisBT issue using a partial PATCH") and immediately scopes the operation as partial rather than a full replace. It then enumerates the accepted field set, so an agent can tell it apart from create_issue, add_note, or add_monitor 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 Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes between siblings: use the "note" parameter for a note alongside field changes versus add_note for a note alone, use add_monitors/remove_monitors for watchers, and get_issue_schema to discover custom fields. It also states a conditional rule (always set BOTH status and resolution when resolving) and that "fields" may be omitted for monitor-only calls.

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