update_test_case
Update fields on a specific test case version by providing its ID and version number. Modify summary, precondition, priority, status, assignee, labels, components, fix versions, or custom fields. Returns 204 on success.
Instructions
Update fields on a specific version of a test case. Requires both the test case id and versionNo (usually 1 for latest). Priority and status take integer IDs. Returns 204 on success.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Test case ID | |
| versionNo | Yes | Version number to update | |
| summary | No | ||
| precondition | No | ||
| priority | No | Priority integer ID | |
| status | No | Status integer ID | |
| assignee | No | Assignee Jira account ID | |
| labels | No | ||
| components | No | ||
| fixVersions | No | ||
| customFields | No |
Implementation Reference
- src/index.ts:243-266 (registration)The tool 'update_test_case' is registered via the 'tool()' helper wrapper around server.registerTool(). It accepts an id, versionNo, and optional fields (summary, precondition, priority, status, assignee, labels, components, fixVersions, customFields).
tool( "update_test_case", "Update fields on a specific version of a test case. Requires both the test case id and versionNo (usually 1 for latest). Priority and status take integer IDs. Returns 204 on success.", { id: ID.describe("Test case ID"), versionNo: z.number().int().describe("Version number to update"), summary: z.string().optional(), precondition: z.string().optional(), priority: z.number().int().optional().describe("Priority integer ID"), status: z.number().int().optional().describe("Status integer ID"), assignee: z.string().optional().describe("Assignee Jira account ID"), labels: z.array(z.number().int()).optional(), components: z.array(z.number().int()).optional(), fixVersions: z.array(z.number().int()).optional(), customFields: z.array(CustomField).optional(), }, async ({ id, versionNo, ...rest }) => { await qtmFetch(`/testcases/${id}/versions/${versionNo}`, { method: "PUT", body: JSON.stringify(rest), }); return ok({ message: `Test case ${id} version ${versionNo} updated` }); } ); - src/index.ts:259-265 (handler)The handler function for 'update_test_case' destructures id and versionNo from input, sends a PUT request to /testcases/{id}/versions/{versionNo} with the remaining fields as JSON body, and returns a success message.
async ({ id, versionNo, ...rest }) => { await qtmFetch(`/testcases/${id}/versions/${versionNo}`, { method: "PUT", body: JSON.stringify(rest), }); return ok({ message: `Test case ${id} version ${versionNo} updated` }); } - src/index.ts:246-258 (schema)Input schema for 'update_test_case' defines required id (string|number) and versionNo (int), plus optional fields: summary, precondition, priority, status, assignee, labels, components, fixVersions, and customFields (array of CustomField objects).
{ id: ID.describe("Test case ID"), versionNo: z.number().int().describe("Version number to update"), summary: z.string().optional(), precondition: z.string().optional(), priority: z.number().int().optional().describe("Priority integer ID"), status: z.number().int().optional().describe("Status integer ID"), assignee: z.string().optional().describe("Assignee Jira account ID"), labels: z.array(z.number().int()).optional(), components: z.array(z.number().int()).optional(), fixVersions: z.array(z.number().int()).optional(), customFields: z.array(CustomField).optional(), }, - src/index.ts:138-142 (helper)The CustomField Zod schema referenced by the tool's input, defining optional id, value, and cascadeValue fields for custom field support.
const CustomField = z.object({ id: z.string().describe("Custom field ID, e.g. qcf_1"), value: z.string().optional().describe("Field value"), cascadeValue: z.string().optional().describe("Cascade dropdown value"), }); - src/index.ts:171-184 (registration)The 'tool()' helper function that wraps server.registerTool() for concise tool registration.
/** Thin wrapper around registerTool for concise, non-deprecated tool registration. */ const tool = <Shape extends z.ZodRawShape>( name: string, description: string, inputSchema: Shape, // eslint-disable-next-line @typescript-eslint/no-explicit-any callback: (args: z.infer<z.ZodObject<Shape>>) => Promise<any> ) => server.registerTool( name, { description, inputSchema }, // eslint-disable-next-line @typescript-eslint/no-explicit-any callback as any );