redmine_update_issue
Update a Redmine issue with proactive workflow validation to reject invalid status changes before they are applied.
Instructions
Update an issue, with reactive workflow validation on status changes.
Args:
issue_id: numeric Redmine issue id.
subject: optional new subject.
description: optional new description.
status: optional id or name (e.g. "In Progress"). Triggers
workflow pre-flight against the cache.
priority: optional id or name.
assigned_to_id: optional user id; 0 means unchanged.
notes: optional comment to attach with this update (becomes a
journal entry).
difficulty: optional engagement-mode level for the global
Difficulty custom field. Values: "Unclassified" /
"Easy" / "Normal" / "Hard". NO default-fill on
update — empty means "don't change Difficulty."
held: optional boolean. True marks the issue as held (blocks
closing). False (default) means unchanged. To clear a
held flag, pass held=True is wrong — instead pass
custom_fields with {"id": 2, "value": ""} directly,
or set held=False won't fire (sentinel is falsy).
held_until: optional ISO-8601 date ("2026-10-01"). Sets the
Held Until custom field. Empty means unchanged.
due_date: optional ISO-8601 date ("2026-05-17"). Empty leaves
it unchanged; pass the literal string "" (i.e. just don't
send this arg) to leave it untouched. To clear an existing
due_date you currently need redmine_request with
{"issue": {"due_date": null}} — the MCP can't distinguish
"unset" from "leave alone" without explicit null support.
start_date: same shape as due_date.
done_ratio: optional 0-100 progress percent. -1 (sentinel)
means unchanged; 0 is explicit "reset to no progress."
fixed_version_id: optional version id (string for id-or-empty).
Empty leaves unchanged; explicit "0" clears the version.
custom_fields: optional list of {"id": <int>, "value": <str>}
entries. Accepts either a Python list (preferred) or a JSON-
encoded string. Empty means no custom-field changes.
On a status change the cache pre-flight short-circuits any
previously-observed disallowed transition with a
:class:WorkflowTransitionDisallowed payload. After a real PUT the
outcome is recorded so future calls benefit. Honors
REDMINE_MCP_READ_ONLY.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| held | No | ||
| notes | No | ||
| status | No | ||
| subject | No | ||
| due_date | No | ||
| issue_id | Yes | ||
| priority | No | ||
| difficulty | No | ||
| done_ratio | No | ||
| held_until | No | ||
| start_date | No | ||
| description | No | ||
| custom_fields | No | ||
| assigned_to_id | No | ||
| fixed_version_id | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |