Skip to main content
Glama

update_issue

Modify and manage existing issues in Backlog by updating key details such as summary, priority, status, due date, assigned users, and comments for better project tracking and collaboration.

Instructions

Updates an existing issue

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
actualHoursNoActual work hours
assigneeIdNoUser ID of the assignee
attachmentIdNoAttachment IDs
categoryIdNoCategory IDs
commentNoComment to add when updating the issue
descriptionNoUpdates an existing issue
dueDateNoScheduled due date (yyyy-MM-dd)
estimatedHoursNoEstimated work hours
issueIdOrKeyYesIssue ID or issue key
issueTypeIdNoIssue type ID
milestoneIdNoMilestone IDs
notifiedUserIdNoUser IDs to notify
priorityIdNoPriority ID
resolutionIdNoResolution ID
startDateNoScheduled start date (yyyy-MM-dd)
statusIdNoStatus ID
summaryNoSummary of the issue
versionIdNoVersion IDs

Implementation Reference

  • The main implementation of the 'update_issue' tool. This factory function returns a ToolDefinition object with the tool's name, description, input/output schemas, and the async handler function that resolves the issue identifier, processes custom fields, and calls backlog.patchIssue to update the issue.
    export const updateIssueTool = ( backlog: Backlog, { t }: TranslationHelper ): ToolDefinition< ReturnType<typeof updateIssueSchema>, (typeof IssueSchema)['shape'] > => { return { name: 'update_issue', description: t( 'TOOL_UPDATE_ISSUE_DESCRIPTION', 'Updates an existing issue' ), schema: z.object(updateIssueSchema(t)), outputSchema: IssueSchema, handler: async ({ issueId, issueKey, customFields, ...params }) => { const result = resolveIdOrKey('issue', { id: issueId, key: issueKey }, t); if (!result.ok) { throw result.error; } const customFieldPayload = customFieldsToPayload(customFields); const finalPayload = { ...params, ...customFieldPayload, }; return backlog.patchIssue(result.value, finalPayload); }, }; };
  • Detailed Zod schema definition for the input parameters of the update_issue tool, including optional fields for issue identification, properties like summary, dates, assignees, custom fields, etc.
    const updateIssueSchema = buildToolSchema((t) => ({ issueId: z .number() .optional() .describe( t( 'TOOL_UPDATE_ISSUE_ISSUE_ID', 'The numeric ID of the issue (e.g., 12345)' ) ), issueKey: z .string() .optional() .describe( t( 'TOOL_UPDATE_ISSUE_ISSUE_KEY', "The key of the issue (e.g., 'PROJ-123')" ) ), summary: z .string() .optional() .describe(t('TOOL_UPDATE_ISSUE_SUMMARY', 'Summary of the issue')), issueTypeId: z .number() .optional() .describe(t('TOOL_UPDATE_ISSUE_ISSUE_TYPE_ID', 'Issue type ID')), priorityId: z .number() .optional() .describe(t('TOOL_UPDATE_ISSUE_PRIORITY_ID', 'Priority ID')), description: z .string() .optional() .describe( t('TOOL_UPDATE_ISSUE_DESCRIPTION', 'Detailed description of the issue') ), startDate: z .string() .optional() .describe( t('TOOL_UPDATE_ISSUE_START_DATE', 'Scheduled start date (yyyy-MM-dd)') ), dueDate: z .string() .optional() .describe( t('TOOL_UPDATE_ISSUE_DUE_DATE', 'Scheduled due date (yyyy-MM-dd)') ), estimatedHours: z .number() .optional() .describe(t('TOOL_UPDATE_ISSUE_ESTIMATED_HOURS', 'Estimated work hours')), actualHours: z .number() .optional() .describe(t('TOOL_UPDATE_ISSUE_ACTUAL_HOURS', 'Actual work hours')), categoryId: z .array(z.number()) .optional() .describe(t('TOOL_UPDATE_ISSUE_CATEGORY_ID', 'Category IDs')), versionId: z .array(z.number()) .optional() .describe(t('TOOL_UPDATE_ISSUE_VERSION_ID', 'Version IDs')), milestoneId: z .array(z.number()) .optional() .describe(t('TOOL_UPDATE_ISSUE_MILESTONE_ID', 'Milestone IDs')), statusId: z .number() .optional() .describe(t('TOOL_UPDATE_ISSUE_STATUS_ID', 'Status ID')), resolutionId: z .number() .optional() .describe(t('TOOL_UPDATE_ISSUE_RESOLUTION_ID', 'Resolution ID')), assigneeId: z .number() .optional() .describe(t('TOOL_UPDATE_ISSUE_ASSIGNEE_ID', 'User ID of the assignee')), notifiedUserId: z .array(z.number()) .optional() .describe(t('TOOL_UPDATE_ISSUE_NOTIFIED_USER_ID', 'User IDs to notify')), attachmentId: z .array(z.number()) .optional() .describe(t('TOOL_UPDATE_ISSUE_ATTACHMENT_ID', 'Attachment IDs')), comment: z .string() .optional() .describe( t('TOOL_UPDATE_ISSUE_COMMENT', 'Comment to add when updating the issue') ), customFields: z .array( z.object({ id: z .number() .describe( t( 'TOOL_UPDATE_ISSUE_CUSTOM_FIELD_ID', 'The ID of the custom field (e.g., 12345)' ) ), value: z .union([z.number(), z.array(z.number())]) .optional() .describe( 'The ID(s) of the custom field item. For single-select fields, provide a number. For multi-select fields, provide an array of numbers representing the selected item IDs.' ), otherValue: z .string() .optional() .describe( t( 'TOOL_UPDATE_ISSUE_CUSTOM_FIELD_OTHER_VALUE', 'Other value for list type fields' ) ), }) ) .optional() .describe( t( 'TOOL_UPDATE_ISSUE_CUSTOM_FIELDS', 'List of custom fields to set on the issue' ) ), }));
  • The updateIssueTool is registered (instantiated) within the 'issue' toolset group in the allTools function, which aggregates all MCP tools.
    updateIssueTool(backlog, helper),

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nulab/backlog-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server