Skip to main content
Glama

Edit an issue

edit_issue
DestructiveIdempotent

Update a Forgejo issue in place—close or reopen it, or change its title, body, assignees, milestone, due date, or labels without replacing unset fields.

Instructions

Edit an issue in place (owner/repo/index; requires write mode): close or reopen it with state (open/closed), or change its title, body, assignees (logins), milestone (id; 0 removes it), due_date (RFC 3339; empty removes it) or labels (names). Only the fields you pass change; title, body, assignees and labels replace what was there. Labels are matched by exact name, and any the repository has no label for are listed in labels_not_found rather than silently dropped. Works on a pull request's number too, so state=closed closes a pull request without merging it. Answers with the issue in get_issue's shape.

Input Schema

NameRequiredDescriptionDefault
bodyNoNew body (Markdown). Replaces the existing body wholesale.
repoYesRepository name.
indexYesIssue or pull-request number.
ownerYesRepository owner.
stateNo`open` or `closed`.
titleNoNew title.
labelsNoLabel names, replacing the current labels. An empty list removes them all.
due_dateNoDue date as RFC 3339 (e.g. `2026-11-30T00:00:00Z`); an empty string removes it.
assigneesNoLogins to assign, replacing the current assignees. An empty list unassigns everyone.
milestoneNoMilestone id to set; `0` removes the milestone.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.26.0

TDQS

A4.4/5.0
Behavior5/5

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

Annotations declare destructiveHint/idempotentHint but the description adds the real behavioral substance: partial-update semantics ('only the fields you pass change'), the replace-vs-merge distinction per field, exact-name label matching with a labels_not_found reporting channel instead of silent drops, and removal conventions (milestone 0, empty due_date). This is exactly the context annotations cannot convey.

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?

A single dense paragraph front-loaded with target, identifiers and precondition, then field semantics, then edge behaviors. Nearly every clause carries unique information, though the run-on structure of the field list is slightly harder to scan than a short bulleted framing would be.

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?

Ten parameters, no output schema, and yet covered: it names the return shape ('answers with the issue in get_issue's shape'), the partial-update contract, the write-mode prerequisite, and the PR-number edge case. An agent can call this correctly without further discovery.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so replacement semantics, the milestone 0 convention and the empty-due_date convention are already documented in the schema. The description mostly restates them; its only genuinely new element is the labels_not_found side channel, so the baseline 3 applies.

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+resource+scope ('Edit an issue in place (owner/repo/index; requires write mode)') and enumerates exactly which fields it can mutate. Clearly distinguished from read-side siblings like get_issue and list_issues and from create_issue.

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?

States the write-mode precondition and clarifies the non-obvious routing case: the same call works on a pull request number, so state=closed closes a PR without merging (versus merge_pull_request). It gives good positive selection context but names no explicit 'use X instead' alternative for comments or other mutations.

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