Skip to main content
Glama
SmartBear MCP server

SmartBear MCP server

Official
by SmartBear

QMetry: Bulk Update Test Case Execution Status

qmetry_bulk_update_test_case_execution_status

Bulk-updates execution status for single or multiple test case runs and fills mandatory Test Run UDFs before applying the status, keeping QMetry execution records accurate.

Instructions

Update execution status for individual or multiple test case runs in bulk, enforcing mandatory Test Run UDFs

Toolset: Test Suites

Parameters:

  • projectKey (string): Project key - unique identifier for the project (default: "default")

  • entityIDs (string) required: Comma-separated IDs of Test Case Runs to update. CRITICAL: the parameter name is 'entityIDs' — do NOT use 'tcRunIDs', 'testCaseRunIds', 'runIds', or other variants. Accepts a number or string (e.g., 66095087 or '66095087' for single, '66095069,66095075' for bulk). To get the entityIDs - Call API 'Execution/Fetch Testcase Run ID'. From the response, get value -> data[].tcRunID

  • entityType (enum): Type of Entity to Execute: 'TCR' (Test Case Run) or 'TCSR' (Test Case Step Run) (default: "TCR")

  • qmTsRunId (string) required: Id of Test Suite Run to execute (required). CRITICAL: the parameter name is 'qmTsRunId' — do NOT use 'tsrunID', 'testSuiteRunId', 'tsRunID', or other variants. Accepts a number or string. To get the qmTsRunId - Call API 'Execution/Fetch Executions'. From the response, get value -> data[].tsRunID

  • runStatusID (number) required: Id of the execution status to set (required). To get the runStatusID - Call API 'Admin/Project GET info Service' From the response, get value of following attribute -> allstatus[].id Common statuses: Pass, Fail, Not Run, Blocked, WIP, etc.

  • dropID (union): Unique identifier of drop/build on which execution is to be performed (optional). To get the dropID - Call API 'Fetch Build/List' From the response, get value of following attribute -> data[].dropID

  • isAutoExecuted (enum): Set '1' for automated and '0' for manual Execution Type

  • isBulkOperation (boolean): Set true for bulk operations (multiple entityIDs), false for single execution update. Default: true if multiple comma-separated entityIDs, false otherwise

  • comments (string): Optional comments for the execution status update

  • username (string): If Part 11 Compliance is active then required for authentication

  • password (string): If Part 11 Compliance is active then required for authentication

  • qmRunObj (string): Internal QMetry run object (optional, usually empty string)

  • type (enum): Type of Entity - same as entityType (for backwards compatibility)

  • viewId (number): ViewId for test execution - SYSTEM AUTOMATICALLY RESOLVES THIS. Leave empty unless you have a specific viewId. System will fetch project info using the projectKey and extract latestViews.TE.viewId automatically.

  • udfValuesByRun (record<string, record<string, object>>): Optional Test Run UDF values to set BEFORE the status is updated, keyed per Test Case Run. Outer key: tcRunID (must be one of entityIDs). Inner key: UDF field 'name' (e.g. 'test_env' — NOT the 'FLD.' fieldKey). Inner value: { value, fieldID?, multiSelectAction? }. Use this to fill mandatory Test Run UDFs reported by a MANDATORY_TEST_RUN_UDF_MISSING response. Example: { "66095069": { "test_env": { "value": "QA" } }, "66095075": { "test_env": { "value": "UAT" } } }

Output Description: On success: { success: true, udfUpdates: [{ tcRunIDs, response }], statusUpdate: }. When mandatory Test Run UDFs are missing: { success: false, code: 'MANDATORY_TEST_RUN_UDF_MISSING', statusUpdated: false, runsMissingFields, lookupOptions?, _note }.

Use Cases: 1. Update single test case run status to Pass, Fail, Blocked, or Not Run 2. Bulk update multiple test case run statuses in a single operation 3. Mark all selected test case runs as Not Run for re-execution 4. Update execution status after manual test execution 5. Set execution status based on automated test results 6. Update test execution status across different test environments 7. Track test execution progress and completion 8. Manage test execution status for compliance and reporting 9. Fill mandatory Test Run UDFs per run and update the execution status in one call

Examples:

  1. Update single test case run status to Failed (single execution)

{
  "entityIDs": "66095087",
  "entityType": "TCR",
  "qmTsRunId": "2720260",
  "runStatusID": 123266,
  "isBulkOperation": false
}

Expected Output: Test case run 66095087 status updated to Failed successfully

  1. Bulk update two test case runs to Pass status (bulk execution)

{
  "entityIDs": "66095069,66095075",
  "entityType": "TCR",
  "qmTsRunId": "2720260",
  "runStatusID": 123268,
  "isBulkOperation": true,
  "comments": "All test cases passed successfully"
}

Expected Output: Test case runs 66095069 and 66095075 updated to Pass status successfully

  1. Bulk update all selected test case runs to Not Run status

{
  "entityIDs": "66095069,66095075,66095081,66095087,66095093,66095099,66095105",
  "entityType": "TCR",
  "qmTsRunId": "2720260",
  "runStatusID": 123269,
  "isBulkOperation": true
}

Expected Output: 7 test case runs updated to Not Run status successfully for re-execution

  1. Update test case run with build/drop information

{
  "entityIDs": "66095087",
  "entityType": "TCR",
  "qmTsRunId": "2720260",
  "runStatusID": 123266,
  "dropID": 947,
  "isBulkOperation": false
}

Expected Output: Test case run updated with execution status and build information

  1. Update automated test execution status with automation flag

{
  "entityIDs": "66095069,66095075",
  "entityType": "TCR",
  "qmTsRunId": "2720260",
  "runStatusID": 123268,
  "isAutoExecuted": "1",
  "isBulkOperation": true,
  "comments": "Automated test execution completed"
}

Expected Output: Automated test case runs updated to Pass status with automation flag

  1. Update test case run status with Part 11 Compliance authentication

{
  "entityIDs": "66095087",
  "entityType": "TCR",
  "qmTsRunId": "2720260",
  "runStatusID": 123266,
  "username": "test.user",
  "password": "password",
  "isBulkOperation": false
}

Expected Output: Test case run status updated with Part 11 Compliance authentication

  1. Update ALL executions of test suite VKMC-TS-20 to Failed (MULTI-CALL OPERATION)

{
  "entityIDs": "66341841,66342887,66342893,66342899",
  "entityType": "TCR",
  "qmTsRunId": "2733104",
  "runStatusID": 123269,
  "isBulkOperation": true
}

Expected Output: Execution 1/4 updated. The MCP Agent will automatically repeat this operation for executions 2733205, 2733306, and 2733407 using their corresponding entityIDs.

  1. Retry after MANDATORY_TEST_RUN_UDF_MISSING: fill mandatory Test Run UDF 'test_env' per run, then mark both runs Passed

{
  "entityIDs": "66095069,66095075",
  "entityType": "TCR",
  "qmTsRunId": "2720260",
  "runStatusID": 123268,
  "isBulkOperation": true,
  "udfValuesByRun": {
    "66095069": {
      "test_env": {
        "value": "QA"
      }
    },
    "66095075": {
      "test_env": {
        "value": "UAT"
      }
    }
  }
}

Expected Output: { success: true, udfUpdates: [{ tcRunIDs: [66095069], ... }, { tcRunIDs: [66095075], ... }], statusUpdate: {...} }

Hints: 1. CRITICAL: entityIDs, entityType, qmTsRunId, and runStatusID are REQUIRED parameters 2. 3. MANDATORY TEST RUN UDF GATE (entityType 'TCR', applies to EVERY target status including Not Run): 4. - Before updating, the tool checks each run's Test Run UDFs; fields with allowBlank=false are mandatory. 5. - If ANY run is missing a mandatory value, NOTHING is updated and the tool returns code 'MANDATORY_TEST_RUN_UDF_MISSING' with runsMissingFields[{ tcRunID, entityKey, missingFields[{ name, label, fieldID, fieldType, listName? }] }]. 6. - On that response: show the missing fields per run to the user, ask for the values (never invent them), then call this tool again with the same arguments plus 'udfValuesByRun'. 7. - 'udfValuesByRun' format: { '': { '': { value } } }. Keys are tcRunIDs from entityIDs; inner keys are the UDF 'name' (not the 'FLD.' fieldKey). fieldID is optional (auto-filled). 8. - Value formats: DATETIMEPICKER 'MM-DD-YYYY'; LOOKUPLIST option id (from lookupOptions[listName][].id); MULTILOOKUPLIST array of ids; CASCADINGLIST { parent, child }. 9. - Supplied UDF values are written first (Bulk Update Test Run UDFs), then the status is updated. Non-mandatory UDFs can also be set this way. 10. - entityType 'TCSR' (step runs) skips the gate; 'udfValuesByRun' is rejected for TCSR. 11. - viewId is auto-resolved (latestViews.TE.viewId); do not pass it unless you have a specific one. 12. 13. CRITICAL - ALWAYS FETCH STATUS IDs FROM PROJECT INFO: 14. NEVER use hardcoded or memorized status IDs. Status IDs are PROJECT-SPECIFIC and must be fetched dynamically. 15. MANDATORY WORKFLOW BEFORE USING runStatusID: 16. 1. Call mcp_smartbear_qmetry_fetch_qmetry_project_info with the current projectKey 17. 2. Extract the 'allstatus' array from the response 18. 3. Match the desired status NAME to find its corresponding ID 19. 4. Use the fetched ID in the runStatusID parameter 20. 21. EXAMPLE STATUS ID RESOLUTION: 22. User says: 'Update status to Failed' 23. Step 1: Call FETCH_PROJECT_INFO → Get allstatus array 24. Step 2: Find status where name='Failed' → Extract its id property 25. Step 3: Use that id as runStatusID (e.g., 123269 for 'Failed') 26. 27. COMMON STATUS NAMES (IDs vary by project - MUST VALIDATE): 28. - 'Passed' / 'Pass' - Test case executed successfully 29. - 'Failed' / 'Fail' - Test case failed with errors 30. - 'Blocked' - Test case cannot be executed due to blockers 31. - 'Not Run' - Test case not yet executed or needs re-execution 32. - 'WIP' / 'Work In Progress' - Test case execution in progress 33. - 'Not Applicable' - Test case not applicable for this execution 34. 35. WHY THIS IS CRITICAL: 36. - Status IDs are assigned per QMetry project and are NOT universal 37. - Using wrong status ID will update tests with incorrect status 38. - Example: ID 123268 might be 'Blocked' in one project but 'Passed' in another 39. - The allstatus array is the AUTHORITATIVE source for all status mappings 40. 41. HOW TO GET entityIDs (Test Case Run IDs): 42. 1. Call API 'Execution/Fetch Testcase Run ID' (FETCH_TESTCASE_RUNS_BY_TESTSUITE_RUN tool) 43. 2. From the response, get value of following attribute -> data[].tcRunID 44. 3. Example: Single ID '66095087' or Multiple IDs '66095069,66095075,66095081' 45. 4. For bulk operations, provide comma-separated IDs without spaces 46. HOW TO GET qmTsRunId (Test Suite Run ID): 47. 1. Call API 'Execution/Fetch Executions' (FETCH_EXECUTIONS_BY_TESTSUITE tool) 48. 2. From the response, get value of following attribute -> data[].tsRunID 49. 3. Example: Test Suite Run ID might be '2720260' 50. HOW TO GET runStatusID (Execution Status ID) - DETAILED PROCESS: 51. 1. Call API 'Admin/Get info Service' (FETCH_PROJECT_INFO tool) with projectKey 52. 2. From the response, locate the 'allstatus' array 53. 3. Search for the status object where name matches your desired status (case-insensitive) 54. 4. Extract the 'id' property from the matching status object 55. 5. NEVER use example IDs from documentation - they are project-specific 56. 57. EXAMPLE allstatus ARRAY STRUCTURE: 58. allstatus: [ 59. { name: 'Passed', defaultName: 'passed', id: 123266, color: '#14892C|#FFFFFF' }, 60. { name: 'Failed', defaultName: 'failed', id: 123269, color: '#FF6666|#FFFFFF' }, 61. { name: 'Blocked', defaultName: 'blocked', id: 123268, color: '#CCCCCC|#FFFFFF' }, 62. { name: 'Not Run', defaultName: 'notrun', id: 123270, color: '#205081|#FFFFFF', isdefault: true }, 63. { name: 'Not Applicable', defaultName: 'empty', id: 123267, color: '#59AFE1|#FFFFFF' } 64. ] 65. Note: Above IDs are EXAMPLES ONLY - fetch actual IDs from your project 66. HOW TO GET dropID (Build/Drop ID) - OPTIONAL: 67. 1. Call API 'Build/List' (FETCH_BUILDS tool) 68. 2. From the response, get value of following attribute -> data[].dropID 69. 3. Example: Build/Drop ID might be 947 70. ENTITY TYPES: 71. - 'TCR' = Test Case Run (most common use case) 72. - 'TCSR' = Test Case Step Run (for step-level execution updates) 73. BULK OPERATION FLAG: 74. - isBulkOperation=false: Single test case run update (one entityID) 75. - isBulkOperation=true: Multiple test case runs update (comma-separated entityIDs) 76. - Auto-detected: If entityIDs contains comma, defaults to true; otherwise false 77. AUTOMATION FLAG (isAutoExecuted) - OPTIONAL: 78. - '1' = Automated execution (test run by automation framework) 79. - '0' = Manual execution (test run by human tester) 80. - Used for execution tracking and reporting purposes 81. PART 11 COMPLIANCE (username & password) - CONDITIONAL: 82. - Required ONLY if Part 11 Compliance is active in your QMetry instance 83. - Used for regulatory compliance and audit trail purposes 84. - Not needed for standard QMetry installations 85. COMMENTS FIELD - OPTIONAL: 86. - Add execution notes, failure reasons, or status change context 87. - Useful for tracking why status was changed 88. - Appears in execution history and audit logs 89. COMMON EXECUTION STATUS NAMES: 90. - Pass: Test case executed successfully 91. - Fail: Test case failed with errors 92. - Blocked: Test case cannot be executed due to blockers 93. - Not Run: Test case not yet executed or needs re-execution 94. - WIP: Work In Progress - test case execution in progress 95. WORKFLOW FOR USER PROMPTS: 96. 1. If user says 'execute test case run by id to failed' or 'update status to fail': 97. - Fetch test case runs to get tcRunID (entityIDs) 98. - Fetch project info to get 'Fail' status ID (runStatusID) 99. - Set isBulkOperation=false for single ID 100. 2. If user says 'bulk update test case run status to pass' or 'update all to passed': 101. - Fetch test case runs to get multiple tcRunIDs 102. - Fetch project info to get 'Pass' status ID 103. - Set isBulkOperation=true 104. - Join multiple IDs with commas (no spaces) 105. 3. If user says 'execute status to not run of given test case run ids': 106. - Use provided IDs or fetch if needed 107. - Fetch project info to get 'Not Run' status ID 108. - Set isBulkOperation based on ID count 109. 4. If the user requests updating status for ALL executions of a test suite, the agent must: 110. 1. Call FETCH_EXECUTIONS_BY_TESTSUITE to get all qmTsRunIds. 111. 2. For each qmTsRunId: 112. - Call FETCH_TESTCASE_RUNS_BY_TESTSUITE_RUN to get tcRunID (entityIDs) 113. - Fetch project info to get 'Fail' status ID (runStatusID) 114. - Call BULK_UPDATE_EXECUTION_STATUS with the corresponding qmTsRunId + tcRunID + desired runStatusID 115. 3. Repeat until all executions are updated. 116. This tool is intended to be invoked multiple times in sequence for multi-execution updates. 117. FIELD MAPPING CRITICAL NOTES: 118. - entityIDs must be comma-separated STRING (e.g., '66095069,66095075') 119. - qmTsRunId must be STRING format (e.g., '2720260') 120. - runStatusID must be NUMERIC (e.g., 123268) 121. - dropID can be numeric or string (flexible) 122. API ENDPOINT: PUT /rest/execution/runstatus/bulkupdate 123. This tool is essential for test execution management and status tracking 124. Critical for maintaining accurate test execution records and reporting 125. Use for manual test execution updates and automated test result integration 126. Essential for test execution audit trails and compliance requirements

Input Schema

NameRequiredDescriptionDefault
typeNoType of Entity - same as entityType (for backwards compatibility)
dropIDNoUnique identifier of drop/build on which execution is to be performed (optional). To get the dropID - Call API 'Fetch Build/List' From the response, get value of following attribute -> data[<index>].dropID
viewIdNoViewId for test execution - SYSTEM AUTOMATICALLY RESOLVES THIS. Leave empty unless you have a specific viewId. System will fetch project info using the projectKey and extract latestViews.TE.viewId automatically.
commentsNoOptional comments for the execution status update
passwordNoIf Part 11 Compliance is active then required for authentication
qmRunObjNoInternal QMetry run object (optional, usually empty string)
usernameNoIf Part 11 Compliance is active then required for authentication
entityIDsYesComma-separated IDs of Test Case Runs to update. CRITICAL: the parameter name is 'entityIDs' — do NOT use 'tcRunIDs', 'testCaseRunIds', 'runIds', or other variants. Accepts a number or string (e.g., 66095087 or '66095087' for single, '66095069,66095075' for bulk). To get the entityIDs - Call API 'Execution/Fetch Testcase Run ID'. From the response, get value -> data[<index>].tcRunID
qmTsRunIdYesId of Test Suite Run to execute (required). CRITICAL: the parameter name is 'qmTsRunId' — do NOT use 'tsrunID', 'testSuiteRunId', 'tsRunID', or other variants. Accepts a number or string. To get the qmTsRunId - Call API 'Execution/Fetch Executions'. From the response, get value -> data[<index>].tsRunID
entityTypeNoType of Entity to Execute: 'TCR' (Test Case Run) or 'TCSR' (Test Case Step Run)TCR
projectKeyNoProject key - unique identifier for the projectdefault
runStatusIDYesId of the execution status to set (required). To get the runStatusID - Call API 'Admin/Project GET info Service' From the response, get value of following attribute -> allstatus[<index>].id Common statuses: Pass, Fail, Not Run, Blocked, WIP, etc.
isAutoExecutedNoSet '1' for automated and '0' for manual Execution Type
udfValuesByRunNoOptional Test Run UDF values to set BEFORE the status is updated, keyed per Test Case Run. Outer key: tcRunID (must be one of entityIDs). Inner key: UDF field 'name' (e.g. 'test_env' — NOT the 'FLD.' fieldKey). Inner value: { value, fieldID?, multiSelectAction? }. Use this to fill mandatory Test Run UDFs reported by a MANDATORY_TEST_RUN_UDF_MISSING response. Example: { "66095069": { "test_env": { "value": "QA" } }, "66095075": { "test_env": { "value": "UAT" } } }
isBulkOperationNoSet true for bulk operations (multiple entityIDs), false for single execution update. Default: true if multiple comma-separated entityIDs, false otherwise

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv0.43.0
    • addedInput schema / properties / udfValuesByRun
      Added value: +{
      +  "additionalProperties": {
      +    "additionalProperties": {
      +      "properties": {
      +        "fieldID": {
      +          "description": "Optional projectUserFieldID of the Test Run UDF. Auto-filled from Test Run UDF metadata when omitted; if given, it must match the metadata ID for this field name.",
      +          "exclusiveMinimum": 0,
      +          "maximum": 9007199254740991,
      +          "type": "integer"
      +        },
      +        "multiSelectAction": {
      +          "default": "append",
      +          "description": "Action for MULTILOOKUPLIST fields only. 'append' adds the new values to existing selections (default). 'replace' clears existing selections and sets only the new values. Omit or use 'append' if user does not specify — never assume 'replace'.",
      +          "enum": [
      +            "append",
      +            "replace"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "number"
      +            },
      +            {
      +              "items": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "type": "array"
      +            },
      +            {
      +              "properties": {
      +                "child": {
      +                  "description": "Child item ID for cascading list.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": -9007199254740991,
      +                  "type": "integer"
      +                },
      +                "parent": {
      +                  "description": "Parent item ID for cascading list.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": -9007199254740991,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "parent",
      +                "child"
      +              ],
      +              "type": "object"
      +            }
      +          ],
      +          "description": "Value to set for this UDF field. Type depends on field type:\nSTRING: plain string, e.g. 'test value'\nNUMBER: number, e.g. 3\nDATETIMEPICKER: date string in MM-DD-YYYY format, e.g. '06-20-2026'\nLOOKUPLIST (single): numeric item ID, e.g. 5108697\nMULTILOOKUPLIST (multi-select): array of item IDs, e.g. [5158524, 5158525]\nCASCADINGLIST: object with parent and child IDs, e.g. {parent: 5126498, child: 5126499}"
      +        }
      +      },
      +      "required": [
      +        "value"
      +      ],
      +      "type": "object"
      +    },
      +    "propertyNames": {
      +      "type": "string"
      +    },
      +    "type": "object"
      +  },
      +  "description": "Optional Test Run UDF values to set BEFORE the status is updated, keyed per Test Case Run. Outer key: tcRunID (must be one of entityIDs). Inner key: UDF field 'name' (e.g. 'test_env' — NOT the 'FLD.' fieldKey). Inner value: { value, fieldID?, multiSelectAction? }. Use this to fill mandatory Test Run UDFs reported by a MANDATORY_TEST_RUN_UDF_MISSING response. Example: { \"66095069\": { \"test_env\": { \"value\": \"QA\" } }, \"66095075\": { \"test_env\": { \"value\": \"UAT\" } } }",
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / viewId
      Added value: +{
      +  "description": "ViewId for test execution - SYSTEM AUTOMATICALLY RESOLVES THIS. Leave empty unless you have a specific viewId. System will fetch project info using the projectKey and extract latestViews.TE.viewId automatically.",
      +  "type": "number"
      +}
  2. Changed1 schema field changedv0.40.0
    • removedInput schema / properties / baseUrl
      Removed value: -{
      -  "description": "The base URL for the QMetry instance (must be a valid URL)",
      -  "format": "uri",
      -  "type": "string"
      -}
  3. Changed2 schema fields changedv0.39.0
    • removedInput schema / properties / dropID / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • addedInput schema / properties / dropID / type
      Added value: +[
      +  "number",
      +  "string"
      +]
  4. Changed1 schema field changedv0.37.0
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  5. First observedv0.27.1

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare readOnly=false, destructive=false, idempotent=false; the description goes far beyond by disclosing the mandatory Test Run UDF gate that blocks ALL updates and returns code 'MANDATORY_TEST_RUN_UDF_MISSING', the Part 11 conditional auth requirement, auto-resolution of viewId, the write-UDFs-then-update-status ordering, and the TCSR exemption. It also documents the response shape for both success and gate-failure paths.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The leading sentence is front-loaded and clear, but the body is roughly 126 numbered hints with heavy duplication: common status names appear twice, runStatusID resolution is described in the parameter list, the hints, and the examples, and examples 1-5 restate the same shape with different status IDs. Signal is present but buried in redundant prose.

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 15-parameter mutation tool with nested objects, no output schema, and a blocking UDF gate, the description covers prerequisites, error recovery loop, auth conditionals, enum meanings, and return shapes. Nothing an agent needs to call it correctly or recover from the mandatory-UDF rejection is missing.

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 baseline is 3, but the description adds real meaning beyond the schema: status IDs are project-specific and must be resolved from allstatus via FETCH_PROJECT_INFO, never hardcoded, plus concrete value formats for UDF types and the rule that inner UDF keys are the field 'name' not the 'FLD.' fieldKey. Minor duplication with the schema's own parameter descriptions keeps it from a 5.

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?

The opening sentence names a specific verb and resource ('Update execution status ... in bulk'), scopes it to Test Case Runs, and adds the distinguishing constraint ('enforcing mandatory Test Run UDFs') that separates it from siblings like qmetry_bulk_update_test_run_udfs or qtm4j_update_test_case_execution. An agent can identify the tool without opening the schema.

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?

It states explicitly when to use it (single vs bulk, TCR vs TCSR, manual vs automated), enumerates prerequisites (fetch entityIDs, qmTsRunId, runStatusID via named sibling tools), and warns when not to pass viewId. The 'WORKFLOW FOR USER PROMPTS' section maps user phrasings to concrete call sequences, including the multi-invocation case for all executions of a suite.

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

Deploy Server

Other Tools