Skip to main content
Glama

Update Test Case In A Run

update_run_test_case
Destructive

Update a single test case in a manual run by assigning an owner or recording a pass, fail, blocked, skipped, or retest result, including comments, linked issues, and step outcomes.

Instructions

Update one test case inside a manual run. Two modes, same tool: (1) Quick verdict — pass updates.assigneeUserId and/or updates.result/status to do what clicking "Assign to" and the result pill does in the UI. (2) Detailed result — additionally pass any of updates.comment (rich HTML), updates.linkedIssues, updates.stepResults to record a full result entry, exactly like the UI's "Add detailed result…" dialog. Whenever any of those rich fields are present the server logs a complete result instead of a bare status change. NOTE: combining updates.assigneeUserId with any detailed-result field in one call is rejected — make two calls (one to assign, one to record the result), mirroring the UI's separate "Assign to" and "Add detailed result…" actions. Requires write permission. rtcRef accepts the caseKey ("TC-156"), the internal tcm_rtc_... RTC ID, or the underlying test case _id. Works for both already-touched cases and "untested" virtual cases (the server auto-creates the per-case record on first edit). Closed runs reject result writes. IMPORTANT: send updates.assigneeUserId as an email OR User _id — both are accepted. updates.result accepts the UI labels — the canonical values are "untested", "passed", "failed", "blocked", "skipped", "retest". Pass display ("Passed", "Blocked") or canonical ("passed", "blocked") form — the server normalizes lowercase+underscored. To update multiple cases at once, call this tool in parallel (one call per case). Files cannot be added to a result over MCP — tell the user to use the TestDino UI.

Input Schema

NameRequiredDescriptionDefault
runIdYesInternal run _id or counter-style ID e.g. "RUN-12"
rtcRefYesPer-case record reference — `tcm_rtc_...` _id, caseKey ("TC-156"), or underlying test case _id.
updatesYesQuick verdict: assigneeUserId (email or _id; null to unassign), result/status (display or canonical), elapsed (seconds). Detailed result (any of these triggers a full result entry): comment (rich HTML), linkedIssues (array of linked-issue objects), stepResults (array, e.g. [{ "order": 1, "status": "passed", "comment": "" }]), configuration (the browser/platform this result is for). configuration is REQUIRED when the run covers more than one browser — a result naming none belongs to no cell and is rejected.
projectIdYesProject ID

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv2.2.3
    • changedInput schema / properties / updates / description
      Previous value: -"Quick verdict: assigneeUserId (email or _id; null to unassign), result/status (display or canonical), elapsed (seconds). Detailed result (any of these triggers a full result entry): comment (rich HTML), linkedIssues (array of linked-issue objects), attachments (array of attachment objects/URLs), stepResults (array, e.g. [{ \"order\": 1, \"status\": \"passed\", \"comment\": \"\" }]), configuration (the browser/platform this result is for). configuration is REQUIRED when the run covers more than one browser — a result naming none belongs to no cell and is rejected."New value: +"Quick verdict: assigneeUserId (email or _id; null to unassign), result/status (display or canonical), elapsed (seconds). Detailed result (any of these triggers a full result entry): comment (rich HTML), linkedIssues (array of linked-issue objects), stepResults (array, e.g. [{ \"order\": 1, \"status\": \"passed\", \"comment\": \"\" }]), configuration (the browser/platform this result is for). configuration is REQUIRED when the run covers more than one browser — a result naming none belongs to no cell and is rejected."
  2. Changed7 schema fields changedv2.2.0
    • addedInput schema / $schema
      Added value: +"http://json-schema.org/draft-07/schema#"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedInput schema / properties / projectId / description
      Previous value: -"Project ID (required)."New value: +"Project ID"
    • changedInput schema / properties / rtcRef / description
      Previous value: -"Per-case record reference — `tcm_rtc_...` _id, caseKey ('TC-156'), or underlying test case _id (required)."New value: +"Per-case record reference — `tcm_rtc_...` _id, caseKey (\"TC-156\"), or underlying test case _id."
    • changedInput schema / properties / runId / description
      Previous value: -"Internal run _id or counter-style ID e.g. 'RUN-12' (required)."New value: +"Internal run _id or counter-style ID e.g. \"RUN-12\""
    • addedInput schema / properties / updates / additionalProperties
      Added value: +{}
    • changedInput schema / properties / updates / description
      Previous value: -"Fields to update. Quick verdict fields: assigneeUserId (email or _id, pass null to unassign), result/status (display or canonical form), elapsed (seconds). Detailed-mode fields: comment (HTML), linkedIssues, attachments, stepResults (e.g. [{order, status, comment}]). Quick and detailed are mutually exclusive — mixing an assignee with detailed fields is rejected server-side."New value: +"Quick verdict: assigneeUserId (email or _id; null to unassign), result/status (display or canonical), elapsed (seconds). Detailed result (any of these triggers a full result entry): comment (rich HTML), linkedIssues (array of linked-issue objects), attachments (array of attachment objects/URLs), stepResults (array, e.g. [{ \"order\": 1, \"status\": \"passed\", \"comment\": \"\" }]), configuration (the browser/platform this result is for). configuration is REQUIRED when the run covers more than one browser — a result naming none belongs to no cell and is rejected."
  3. Changed1 schema field changedv2.0.2
    • changedInput schema / properties / updates / description
      Previous value: -"Fields to update: assigneeUserId (email or _id, pass null to unassign), result/status (display or canonical form), elapsed (seconds)."New value: +"Fields to update. Quick verdict fields: assigneeUserId (email or _id, pass null to unassign), result/status (display or canonical form), elapsed (seconds). Detailed-mode fields: comment (HTML), linkedIssues, attachments, stepResults (e.g. [{order, status, comment}]). Quick and detailed are mutually exclusive — mixing an assignee with detailed fields is rejected server-side."
  4. Addedv1.0.10

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare write/destructive; the description adds substantial context beyond them: write-permission requirement, server-side normalization of result labels, auto-creation of virtual per-case records on first edit, rejection of combined assign+result payloads, and closed-run write rejection. This is a rich behavioral contract for a destructive mutation.

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?

Front-loaded with the two-mode framing and each subsequent sentence (constraint rejections, ref forms, UI escape hatch) carries actionable information. It is long, and a few restatements of schema content (rtcRef forms, assignee userId formats) could be trimmed, but it is not padded.

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?

For a 4-param destructive mutation with nested updates object and no output schema, the description covers everything an agent needs: modes, field triggers, incompatibility rules, state restrictions, multi-case strategy, and unsupported operations. Nothing material is left to inference.

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 100%, so the baseline is 3, but the description adds real value: it enumerates the canonical result values ("untested", "passed", "failed", "blocked", "skipped", "retest") and explains normalization, which the schema does not list as an enum. rtcRef accepted forms and assigneeUserId email/_id are restated from the schema rather than extended.

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 test case inside a manual run") and immediately splits the tool into two named modes (quick verdict vs. detailed result). This clearly distinguishes it from siblings like update_manual_run or list_run_test_cases.

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 states when to use each mode, that assigneeUserId cannot be combined with detailed-result fields in one call (with the two-call workaround), that closed runs reject result writes, and that bulk edits require parallel calls. It also routes users to the TestDino UI for files, which MCP cannot handle.

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