Skip to main content
Glama
SmartBear

SmartBear MCP server

Official
by SmartBear

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
QTM4J_API_KEYNoQTM4J API Key
QMETRY_API_KEYNoQMetry Open API Key
QTM4J_BASE_URLNoUS region (default): https://qtmcloud.qmetry.com. Australia region: https://syd-qtmcloud.qmetry.com.https://qtmcloud.qmetry.com
BEARQ_API_TOKENNoBearQ workspace API token - leave blank to disable BearQ tools
QMETRY_BASE_URLNoBy default, connects to https://testmanagement.qmetry.com. Change to a custom QMetry server URL or a region-specific endpoint if needed.https://testmanagement.qmetry.com
SWAGGER_API_KEYNoSwagger API Key - leave blank to disable Swagger tools
ZEPHYR_BASE_URLNoZephyr API base URL. By default, connects to https://api.zephyrscale.smartbear.com/v2. Change to region-specific endpoint if needed.https://api.zephyrscale.smartbear.com/v2
ZEPHYR_API_TOKENNoZephyr API token - leave blank to disable Zephyr tools
PACT_BROKER_TOKENNoPactFlow Authentication Token
REFLECT_API_TOKENNoReflect API Token - leave blank to disable Reflect tools
BEARQ_API_BASE_URLNoBearQ API base URL - leave blank to use the default (https://api.bearq.smartbear.com)https://api.bearq.smartbear.com
BUGSNAG_AUTH_TOKENNoBugSnag Auth Token - leave blank to disable BugSnag tools
PACT_BROKER_BASE_URLNoPactFlow or Pact Broker base url - leave blank to disable the tools
PACT_BROKER_PASSWORDNoPact Broker Password
PACT_BROKER_USERNAMENoPact Broker Username
SWAGGER_UI_BASE_PATHNoSwagger UI base path - only needed for on-premise installations (leave blank for cloud)https://app.swaggerhub.com
COLLABORATOR_BASE_URLNoCollab base url
COLLABORATOR_USERNAMENoCollab username
BUGSNAG_PROJECT_API_KEYNoBugSnag Project API Key - for single project interactions
QTM4J_AUTOMATION_API_KEYNoQTM4J Automation API Key - required for automation tools, leave blank to disable them
SWAGGER_PORTAL_BASE_PATHNoSwagger Portal API base path - only needed for on-premise installations (leave blank for cloud)https://api.portal.swaggerhub.com/v1
COLLABORATOR_LOGIN_TICKETNoCollab login ticket
SWAGGER_REGISTRY_BASE_PATHNoSwagger Registry API base path - only needed for on-premise installations (leave blank for cloud)https://api.swaggerhub.com

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": true
}
resources
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
bearq_run_regression_testsA

Runs the full BearQ regression suite — every regression-ready test case in the workspace. Use for CI/CD or pre-release smoke.

Toolset: Tasks

Parameters:

  • environment (string): Target environment name to run tests against. Omit to use the workspace default.

bearq_run_test_casesA

Runs specific BearQ regression test cases by ID. Targets only regression-ready cases — drafts will be rejected.

Toolset: Tasks

Parameters:

  • testCaseIds (array) required: IDs of BearQ regression test cases to run.

  • environment (string): Target environment name to run tests against. Omit to use the workspace default.

bearq_run_tests_in_functional_areasB

Runs every regression test case tagged with one or more functional areas. Functional areas can be given by ID or name.

Toolset: Tasks

Parameters:

  • functionalAreas (array) required: Functional areas to target, by ID or name.

  • environment (string): Target environment name to run tests against. Omit to use the workspace default.

bearq_delete_test_casesA

Deletes specific BearQ test cases by ID. Deletion is reversible — tests are archived and can be restored. Works on any unprotected test; protected tests are rejected.

Toolset: Tasks

Parameters:

  • testCaseIds (array) required: IDs of BearQ test cases to delete.

bearq_expand_application_modelC

Explores the live application to discover or update its pages and elements in BearQ's application model. Optionally scope to a single functional area.

Toolset: Tasks

Parameters:

  • functionalArea (union): Functional area to scope the exploration to, by ID or name. Omit to explore the entire application.

bearq_chat_with_qa_leadA

Sends an open-ended instruction to BearQ's QA lead agent. Use this when no other BearQ tool fits — the QA lead can list, create, and update test cases, manage functional areas, and read the application model, and acts as a general-purpose escape hatch.

Toolset: Tasks

Parameters:

  • instruction (string) required: Natural language instruction to send to the BearQ QA lead agent.

bearq_get_taskA

Retrieves a task's current state, metadata, and activity log. Returns immediately with whatever's available — does not block on the task completing.

Toolset: Tasks

Parameters:

  • taskId (number) required: BearQ task ID.

bearq_get_task_statusA

Retrieves the status of a task (running / complete / error / cancelled). Cheaper than fetching full task details.

Toolset: Tasks

Parameters:

  • taskId (number) required: BearQ task ID.

bearq_stop_taskC

Cancels a running task.

Toolset: Tasks

Parameters:

  • taskId (number) required: BearQ task ID to cancel.

bearq_wait_for_taskA

Blocks until a BearQ task reaches a terminal state (completed / failed / cancelled) or the stream times out, then returns the full ordered sequence of SSE events from the public API (metadata, activityLogEntries, and a terminal done or timeout event) verbatim. Blocks for the lifetime of the task — for a quick check use bearq_get_task_status instead.

Toolset: Tasks

Parameters:

  • taskId (number) required: BearQ task ID.

bearq_list_environmentsA

Lists the environments configured in the workspace. Use this to discover valid environment names to pass to the test-running tools, and to identify the workspace default.

Toolset: Environments

Parameters: None

reflect_list_segmentsA

Retrieve available reusable test segments for the given platform type. Segments are reusable test steps with an optional set of parameters that can used across multiple tests.

Toolset: Tests

Parameters:

  • platform (enum) required: The platform type to retrieve segments for

  • offset (number): Offset for pagination

  • limit (number): Maximum number of segments to return

reflect_connect_to_sessionA

Connect to an active Reflect recording session via WebSocket to enable interactive control. When creating or editing a Reflect test using a connected recording session, follow these guidelines:

  1. After connecting to a session, get the list of segments for the session's platform type so you know what actions could be added via segments vs needing to create new steps. Do not list tests, only list segments.

  2. Before performing an action, take a screenshot to understand the current state of the application.

  3. Each add_prompt_step request should perform a single action or assertion. Do not combine multiple actions or assertions into a single step.

  4. Only perform one action at a time unless you're sure the action won't move the application to a different screen. For example, you can send multiple add_prompt_step requests to fill out individual form fields if those fields are visible on the current screen.

  5. Check the list of existing Segments to see if a Segment exists that achieves a similar goal to what you're trying to do next. If so, add the segment instead of creating new steps.

  6. If a step fails, use delete_previous_step to remove it and try a different approach.

  7. After completing a task, if the task required multiple prompt steps, add a final prompt step that validates the current state of the page based on what you see on the screen. In your validation, do not reference information that can change from run to run.

Toolset: Recording

Parameters:

  • sessionId (string) required: The ID of the Reflect recording session to connect to

reflect_add_prompt_stepA

Add a natural language prompt step to an active Reflect recording session

Toolset: Recording

Parameters:

  • sessionId (string) required: The ID of the Reflect recording session

  • prompt (string) required: The natural language prompt describing the test step. The prompt should describe a single action, assertion, or query. The prompt can only contain literal text; it cannot contain template variables, secrets, or other dynamic syntax. If we are in a Web recording, the prompt can perform browser navigation (e.g. 'Click on the back button', 'Navigate to https://www.example.com') and use the tab and enter keys to navigate (e.g. 'Press the tab key', 'Press the enter key').

reflect_get_screenshotA

Capture a screenshot from the current state of an active Reflect recording session

Toolset: Recording

Parameters:

  • sessionId (string) required: The ID of the Reflect recording session

  • format (enum): The image format for the screenshot (png or jpeg)

reflect_delete_previous_stepA

Delete the last step added to an active Reflect recording session

Toolset: Recording

Parameters:

  • sessionId (string) required: The ID of the Reflect recording session

reflect_add_segmentA

Insert a reusable test segment into an active Reflect recording session

Toolset: Recording

Parameters:

  • sessionId (string) required: The ID of the Reflect recording session

  • segmentId (number) required: The ID of the segment to add

reflect_list_suitesB

Retrieve a list of all reflect suites available

Toolset: Suites

Parameters: None

reflect_list_suite_executionsB

List all executions for a given suite

Toolset: Suites

Parameters:

  • suiteId (string) required: ID of the reflect suite to list executions for

reflect_get_suite_execution_statusA

Get the status of a reflect suite execution

Toolset: Suites

Parameters:

  • suiteId (string) required: ID of the reflect suite to get execution status for

  • executionId (string) required: ID of the reflect suite execution to get status for

reflect_execute_suiteC

Execute a reflect suite

Toolset: Suites

Parameters:

  • suiteId (string) required: ID of the reflect suite to execute

reflect_cancel_suite_executionC

Cancel a reflect suite execution

Toolset: Suites

Parameters:

  • suiteId (string) required: ID of the reflect suite to cancel execution for

  • executionId (string) required: ID of the reflect suite execution to cancel

reflect_list_testsB

List all reflect tests

Toolset: Tests

Parameters: None

reflect_get_test_detailB

Get the full detail of a reflect test, including its name, description, and all recorded steps

Toolset: Tests

Parameters:

  • testId (string) required: ID of the reflect test to retrieve details for

reflect_run_testC

Run a reflect test

Toolset: Tests

Parameters:

  • testId (string) required: ID of the reflect test to run

reflect_get_test_statusC

Get the status of a reflect test execution

Toolset: Tests

Parameters:

  • executionId (string) required: ID of the reflect test execution to get status for

reflect_create_testA

Create a new Reflect test which contains an ordered list of steps.

Toolset: Tests

Parameters:

  • name (string) required: Name of the test to create.

  • type (enum) required: Platform of the test.

  • description (string): Optional description of the test.

  • deviceProfile (string): Device profile id. Required for a 'web' test; ignored for 'api' and 'native-mobile'. One of: 'desktop', 'tablet', 'mobile'.

  • steps (array) required: Ordered list of steps that make up the test. Web tests must begin with a 'browser-navigate' step. Prefer deterministic, selector-based steps ('click', 'input', 'submit', 'text-validation', 'hover', etc.) over AI-driven 'prompt' steps whenever a stable selector is available. Reserve 'prompt' steps for behavior that can't be expressed with a selector. Any text field in a step (e.g. 'inputText', 'url', 'expectedText', 'requestBody', header values, prompt text) may embed Reflect variable and function references using '${...}' syntax, which are resolved at run time: '${var(name)}' inserts the value of a parameter/variable named 'name' (declare parameters via the top-level 'parameters' field, or assign them mid-run with an 'update-parameters' step); '${sec(name)}' inserts the value of the account secret 'name'. Functions generate dynamic values: '${alphanum(n)}', '${alpha(n)}', '${num(n)}' (random alphanumeric / alphabetic / numeric string of length n), '${range(min, max)}' (random integer, inclusive), '${time(offsetMs)}' and '${datetime(offsetMs)}' (current epoch-millis / date-time, with an optional millisecond offset), and '${date(format, offsetDays)}' (current date formatted with tokens like 'MM/dd/yyyy', with an optional day offset).

  • parameters (array): Optional named parameters (variables) for the test, each with a 'name' and optional default 'value'. Reference a parameter's value inside any step text field with '${var(name)}'.

reflect_create_segmentA

Create a new Reflect segment which contains an ordered list of steps. Segments are reusable groups of steps that can be referenced from tests, and cannot reference other segments.

Toolset: Tests

Parameters:

  • name (string) required: Name of the segment to create.

  • type (enum) required: Platform of the segment.

  • description (string): Optional description of the segment.

  • deviceProfile (string): Device profile id. Required for a 'web' segment; ignored for 'api' and 'native-mobile'. One of: 'desktop', 'tablet', 'mobile'.

  • steps (array) required: Ordered list of steps that make up the segment. Segments cannot reference other segments. Prefer deterministic, selector-based steps ('click', 'input', 'submit', 'text-validation', 'hover', etc.) over AI-driven 'prompt' steps whenever a stable selector is available. Reserve 'prompt' steps for behavior that can't be expressed with a selector. Any text field in a step (e.g. 'inputText', 'url', 'expectedText', 'requestBody', header values, prompt text) may embed Reflect variable and function references using '${...}' syntax, which are resolved at run time: '${var(name)}' inserts the value of a parameter/variable named 'name' (declare parameters via the top-level 'parameters' field, or assign them mid-run with an 'update-parameters' step); '${sec(name)}' inserts the value of the account secret 'name'. Functions generate dynamic values: '${alphanum(n)}', '${alpha(n)}', '${num(n)}' (random alphanumeric / alphabetic / numeric string of length n), '${range(min, max)}' (random integer, inclusive), '${time(offsetMs)}' and '${datetime(offsetMs)}' (current epoch-millis / date-time, with an optional millisecond offset), and '${date(format, offsetDays)}' (current date formatted with tokens like 'MM/dd/yyyy', with an optional day offset).

  • parameters (array): Optional named parameters (variables) for the segment, each with a 'name' and optional default 'value'. Reference a parameter's value inside any step text field with '${var(name)}'.

bugsnag_get_current_projectA

Retrieve the 'current' project on which tools should operate by default. This allows BugSnag tools to be called with no projectId parameter.

Toolset: Projects

Parameters: None

Use Cases: 1. Understand if a current project has been set

Hints: 1. If a project is returned, it can be assumed that the user expects interactions with BugSnag tools to refer to this project 2. If this tool returns no current project then other BugSnag tools will require an explicit project ID parameter 3. Call the List Projects tool to see all projects that the user has access to. Get the project ID from this list either by asking the user for the project name or slug 4. You might find a BugSnag API key in the user's code where they configure the BugSnag SDK that can be matched to a project 'apiKey' field from the project list

bugsnag_list_projectsA

List all projects in the organization that the current user has access to, or find a project matching an API key.

Toolset: Projects

Parameters:

  • apiKey (string): The API key of the BugSnag project, if known.

Use Cases: 1. Get an overview of all projects in the organization 2. Locate a project by its API key if known from the user's code

Hints: 1. Project IDs from this list can be used with other tools when no project API key is configured

bugsnag_list_project_event_filtersA

Get available event filter fields for a project

Toolset: Projects

Parameters:

  • projectId (string): Unique identifier of the project. This is optional if a current project is set and is used to set the current project for BugSnag tools.

Use Cases: 1. Discover what filter fields are available before searching for errors 2. Find the correct field names for filtering by user, environment, or custom metadata 3. Understand filter options and data types for building complex queries

Examples:

  1. Get all available filter fields

{}

Expected Output: JSON array of EventField objects containing display_id, custom flag, and filter/pivot options

Hints: 1. Use this tool before the List Errors or Get Error tools to understand available filters 2. Look for display_id field in the response - these are the field names to use in filters

bugsnag_get_errorA

Get full details on an error, including aggregated and summarized data across all events (occurrences) and details of the latest event (occurrence), such as breadcrumbs, metadata and the stacktrace. Use the filters parameter to narrow down the summaries further.

Toolset: Errors

Parameters:

  • projectId (string): Unique identifier of the project. This is optional if a current project is set and is used to set the current project for BugSnag tools.

  • errorId (string) required: Unique identifier of the error to retrieve

  • filters (record<string, array>): Apply filters to narrow down the error list. Use the List Project Event Filters tool to discover available filter fields. Time filters support extended ISO 8601 format (e.g. 2018-05-20T00:00:00Z) or relative format (e.g. 7d, 24h). (default: {"event.since":[{"type":"eq","value":"30d"}],"error.status":[{"type":"eq","value":"open"}]})

Output Description: JSON object containing: - error_details: Aggregated data about the error, including first and last seen occurrence - latest_event: Detailed information about the most recent occurrence of the error, including stacktrace, breadcrumbs, user and context - pivots: List of pivots (summaries) for the error, which can be used to analyze patterns in occurrences - url: A link to the error in the dashboard - this should be shown to the user for them to perform further analysis

Use Cases: 1. Investigate a specific error found through the List Project Errors tool 2. Understand which types of user are affected by the error using summarized event data 3. Get error details for debugging and root cause analysis 4. Retrieve error metadata for incident reports and documentation

Examples:

  1. Get details for a specific error

{
  "errorId": "6863e2af8c857c0a5023b411"
}

Expected Output: JSON object with error details including message, stack trace, occurrence count, and metadata

Hints: 1. Error IDs can be found using the List Project Errors tool 2. Use this after filtering errors to get detailed information about specific errors 3. Use Get Event Details tool if you need detailed information about a specific event (occurrence) rather than the aggregated error 4. If you used a filter to get this error, you can pass the same filters here to restrict the results or apply further filters 5. The URL provided in the response points should be shown to the user in all cases as it allows them to view the error in the dashboard and perform further analysis

bugsnag_list_project_errorsA

List and search errors in a project using customizable filters and pagination

Toolset: Errors

Parameters:

  • projectId (string): Unique identifier of the project. This is optional if a current project is set and is used to set the current project for BugSnag tools.

  • filters (record<string, array>): Apply filters to narrow down the error list. Use the List Project Event Filters tool to discover available filter fields. Time filters support extended ISO 8601 format (e.g. 2018-05-20T00:00:00Z) or relative format (e.g. 7d, 24h). (default: {"event.since":[{"type":"eq","value":"30d"}],"error.status":[{"type":"eq","value":"open"}]})

  • sort (enum): Field to sort the errors by (default: "last_seen")

  • direction (enum): Sort direction for ordering results (default: "desc")

  • perPage (number): How many results to return per page. (default: 30)

  • nextUrl (string): URL for retrieving the next page of results. Use the value in the previous response to get the next page when more results are available. Only values provided in the output from this tool can be used. Do not attempt to construct it manually.

Use Cases: 1. Debug recent application errors by filtering for open errors in the last 7 days 2. Generate error reports for stakeholders by filtering specific error types or severity levels 3. Monitor error trends over time using date range filters 4. Find errors affecting specific users or environments using metadata filters

Examples:

  1. Find errors affecting a specific user in the last 24 hours

{
  "filters": {
    "user.email": [
      {
        "type": "eq",
        "value": "user@example.com"
      }
    ],
    "event.since": [
      {
        "type": "eq",
        "value": "24h"
      }
    ]
  }
}

Expected Output: JSON object with a list of errors in the 'data' field, a count of the current page of results in the 'count' field, and a total count of all results in the 'total' field

  1. Get the 10 open errors with the most users affected in the last 30 days

{
  "filters": {
    "event.since": [
      {
        "type": "eq",
        "value": "30d"
      }
    ],
    "error.status": [
      {
        "type": "eq",
        "value": "open"
      }
    ]
  },
  "sort": "users",
  "direction": "desc",
  "perPage": 10
}

Expected Output: JSON object with a list of errors in the 'data' field, a count of the current page of results in the 'count' field, and a total count of all results in the 'total' field

  1. Get the next 50 results

{
  "nextUrl": "https://api.bugsnag.com/projects/515fb9337c1074f6fd000003/errors?base=2025-08-29T13%3A11%3A37Z&direction=desc&filters%5Berror.status%5D%5B%5D%5Btype%5D=eq&filters%5Berror.status%5D%5B%5D%5Bvalue%5D=open&offset=10&per_page=10&sort=users",
  "perPage": 50
}

Expected Output: JSON object with a list of errors, with a URL to the next page if more results are available and a total count of all errors matched

Hints: 1. Use List Project Event Filters tool first to discover valid filter field names for your project 2. Combine multiple filters to narrow results - filters are applied with AND logic 3. For time filters: use relative format (7d, 24h) for recent periods or ISO 8601 UTC format (2018-05-20T00:00:00Z) for specific dates 4. Common time filters: event.since (from this time), event.before (until this time) 5. The 'event.since' filter and 'error.status' filters are always applied and if not specified are set to '30d' and 'open' respectively 6. There may not be any errors matching the filters - this is not a problem with the tool, in fact it might be a good thing that the user's application had no errors 7. This tool returns paged results. The 'page_error_count' field indicates the number of results returned in the current page, and the 'total_error_count' field indicates the total number of results across all pages. 8. If the output contains a 'next_url' value, there are more results available - call this tool again supplying the next URL as a parameter to retrieve the next page. 9. Do not modify the next URL as this can cause incorrect results. The only other parameter that can be used with 'next' is 'per_page' to control the page size.

bugsnag_update_errorA

Update the status of an error

Toolset: Errors

Parameters:

  • projectId (string): Unique identifier of the project. This is optional if a current project is set and is used to set the current project for BugSnag tools.

  • errorId (string) required: Unique identifier of the error

  • operation (enum) required: The operation to apply to the error

  • issue_url (string): The URL of the issue to link to the error - required when operation is 'link_issue'

  • reopenRules (object): Reopen rules for snooze operation - required when operation is 'snooze'

Use Cases: 1. Mark an error as open, fixed or ignored 2. Discard or un-discard an error 3. Update the severity of an error 4. Snooze an error with defined conditions for when it should be reopened

Examples:

  1. Mark an error as fixed

{
  "errorId": "6863e2af8c857c0a5023b411",
  "operation": "fix"
}

Expected Output: Success response indicating the error was marked as fixed

  1. Snooze an error for 1 hour

{
  "errorId": "6863e2af8c857c0a5023b411",
  "operation": "snooze",
  "reopenRules": {
    "reopenIf": "occurs_after",
    "seconds": 3600
  }
}

Expected Output: Success response indicating the error was snoozed for 1 hour

  1. Snooze an error until 5 additional users are affected

{
  "errorId": "6863e2af8c857c0a5023b411",
  "operation": "snooze",
  "reopenRules": {
    "reopenIf": "n_additional_users",
    "additionalUsers": 5
  }
}

Expected Output: Success response indicating the error was snoozed until 5 additional users are affected

  1. Snooze an error until 10 occurrences in 24 hours

{
  "errorId": "6863e2af8c857c0a5023b411",
  "operation": "snooze",
  "reopenRules": {
    "reopenIf": "n_occurrences_in_m_hours",
    "occurrences": 10,
    "hours": 24
  }
}

Expected Output: Success response indicating the error was snoozed until 10 occurrences in 24 hours

  1. Link a Jira issue to an error

{
  "errorId": "6863e2af8c857c0a5023b411",
  "operation": "link_issue",
  "issue_url": "https://smartbear.atlassian.net/browse/PIPE-9547"
}

Expected Output: Success response indicating the Jira issue was linked to the error

  1. Unlink a Jira issue from an error

{
  "errorId": "6863e2af8c857c0a5023b411",
  "operation": "unlink_issue"
}

Expected Output: Success response indicating the Jira issue was unlinked from the error

Hints: 1. Only use valid operations - BugSnag may reject invalid values 2. When using 'snooze' operation, reopenRules parameter is required 3. When using 'link_issue' operation, issue_url parameter is required 4. Use 'unlink_issue' to remove the link between an error and its issue 5. For 'occurs_after' reopen rules, specify 'seconds' parameter 6. For 'n_additional_users' reopen rules, specify 'additionalUsers' parameter (max 100,000) 7. For 'n_occurrences_in_m_hours' reopen rules, specify both 'occurrences' and 'hours' parameters 8. For 'n_additional_occurrences' reopen rules, specify 'additionalOccurrences' parameter 9. Snoozing temporarily silences an error until the specified reopen condition is met

bugsnag_get_eventA

Get detailed information about a specific event

Toolset: Events

Parameters:

  • projectId (string): Unique identifier of the project. This is optional if a current project is set and is used to set the current project for BugSnag tools.

  • eventId (string) required: Unique identifier of the event

Use Cases: 1. Get the full details of an event, including any thread stack traces

Examples:

  1. Get event details of an event

{
  "eventId": "6863e2af012caf1d5c320000"
}

Expected Output: JSON object with complete event details including stack trace (error trace and other threads, if present), metadata, and context

bugsnag_get_event_details_from_dashboard_urlA

Get detailed information about a specific event using its dashboard URL

Toolset: Events

Parameters:

  • link (string) required: Full URL to the event details page in the BugSnag dashboard (web interface), containing project slug and event_id parameter.

Use Cases: 1. Get event details when given a dashboard URL from a user or notification 2. Extract event information from shared links or browser URLs 3. Quick lookup of event details without needing separate project and event IDs

Examples:

  1. Get event details from a dashboard URL

{
  "link": "https://app.bugsnag.com/my-org/my-project/errors/6863e2af8c857c0a5023b411?event_id=6863e2af012caf1d5c320000"
}

Expected Output: JSON object with complete event details including stack trace, metadata, and context

Hints: 1. The URL must contain both project slug in the path and event_id in query parameters 2. This is useful when users share BugSnag dashboard URLs and you need to extract the event data

bugsnag_get_events_on_an_errorA

Gets a list of events that have grouped into the specified error

Toolset: Events

Parameters:

  • projectId (string): Unique identifier of the project. This is optional if a current project is set and is used to set the current project for BugSnag tools.

  • errorId (string) required: Unique identifier of the error

  • filters (record<string, array>): Apply filters to narrow down the event list. Use the List Project Event Filters tool to discover available filter fields. Time filters support extended ISO 8601 format (e.g. 2018-05-20T00:00:00Z) or relative format (e.g. 7d, 24h). (default: {"event.since":[{"type":"eq","value":"30d"}],"error.status":[{"type":"eq","value":"open"}]})

  • direction (enum): Sort direction for ordering results (default: "desc")

  • perPage (number): How many results to return per page. (default: 30)

  • nextUrl (string): URL for retrieving the next page of results. Use the value in the previous response to get the next page when more results are available. Only values provided in the output from this tool can be used. Do not attempt to construct it manually.

Use Cases: 1. Retrieving all the events for comparison to find commonalities or differences in stack traces, breadcrumbs and metadata

Examples:

  1. Get events of an error

{
  "projectId": "1234567890abcdef12345678",
  "errorId": "6863e2af012caf1d5c320000"
}

Expected Output: A list of events, ordered by timestamp, with complete details including stack trace, breadcrumbs, metadata, and context

bugsnag_list_releasesA

List releases for a project

Toolset: Releases

Parameters:

  • projectId (string): Unique identifier of the project. This is optional if a current project is set and is used to set the current project for BugSnag tools.

  • releaseStage (string): Filter releases by this stage (e.g. production, staging), defaults to 'production' (default: "production")

  • visibleOnly (boolean): Whether to only include releases that are marked as visible in the dashboard (default: false)

  • perPage (number): How many results to return per page. (default: 30)

  • nextUrl (string): URL for retrieving the next page of results. Use the value in the previous response to get the next page when more results are available. Only values provided in the output from this tool can be used. Do not attempt to construct it manually.

Output Description: JSON array of release summary objects with metadata, with a URL to the next page if more results are available

Use Cases: 1. View recent releases to correlate with error spikes 2. Filter releases by stage (e.g. production, staging) for targeted analysis

Examples:

  1. List production releases for a project

{}

Expected Output: JSON array of release objects in the production stage

  1. List staging releases for a project

{
  "releaseStage": "staging"
}

Expected Output: JSON array of release objects in the staging stage

  1. Get the next page of results

{
  "nextUrl": "/projects/515fb9337c1074f6fd000003/releases?offset=30&per_page=30"
}

Expected Output: JSON array of release objects with metadata from the next page

Hints: 1. Use the Get Release tool to get more details on a specific release, including the builds it contains 2. The release stage defaults to 'production' if not specified 3. Use visibleOnly to filter out releases that have been marked as hidden in the dashboard

bugsnag_get_releaseA

Get more details for a specific release by its ID, including source control information and associated builds

Toolset: Releases

Parameters:

  • projectId (string): Unique identifier of the project. This is optional if a current project is set and is used to set the current project for BugSnag tools.

  • releaseId (string) required: Unique identifier of the app release

Output Description: JSON object containing release details along with stability metrics such as user and session stability, and whether it meets project targets

Use Cases: 1. View release metadata such as version, source control info, and error counts 2. Analyze the stability data and targets for a release 3. See the builds that make up the release

Examples:

  1. Get details for a specific release

{
  "releaseId": "5f8d0d55c9e77c0017a1b2c3"
}

Expected Output: JSON object with release details including version, source control info, error counts and stability data.

Hints: 1. Release IDs can be found using the List releases tool

bugsnag_get_buildA

Get more details for a specific build by its ID

Toolset: Releases

Parameters:

  • projectId (string): Unique identifier of the project. This is optional if a current project is set and is used to set the current project for BugSnag tools.

  • buildId (string) required: Unique identifier of the app build

Output Description: JSON object containing build details along with stability metrics such as user and session stability, and whether it meets project targets

Use Cases: 1. View build metadata such as version, source control info, and error counts 2. Analyze a specific build to correlate with error spikes or deployments 3. See the stability targets for a project and if the build meets them

Examples:

  1. Get details for a specific build

{
  "buildId": "5f8d0d55c9e77c0017a1b2c3"
}

Expected Output: JSON object with build details including version, source control info, error counts and stability data.

Hints: 1. Build IDs can be found using the List builds tool

bugsnag_list_span_groupsA

List span groups (operations) tracked for performance monitoring

Toolset: Performance

Parameters:

  • projectId (string): Unique identifier of the project. This is optional if a current project is set and is used to set the current project for BugSnag tools.

  • sort (enum): Field to sort by

  • direction (enum): Sort direction for ordering results (default: "desc")

  • perPage (number): How many results to return per page. (default: 30)

  • starredOnly (boolean): Show only starred span groups

  • nextUrl (string): URL for retrieving the next page of results. Use the value in the previous response to get the next page when more results are available. Only values provided in the output from this tool can be used. Do not attempt to construct it manually.

  • filters (record<string, array>): Apply filters to narrow down the span group list. Use the List Trace Fields tool to discover available filter fields. Time filters support extended ISO 8601 format (e.g. 2018-05-20T00:00:00Z) or relative format (e.g. 7d, 24h). (default: {"span.since":[{"type":"eq","value":"7d"}]})

Use Cases: 1. View all operations being tracked for performance 2. Find slow operations by sorting by duration metrics 3. Filter to starred/important span groups

Examples:

  1. List slowest operations

{
  "sort": "duration_p95",
  "direction": "desc",
  "perPage": 10
}

Expected Output: Array of span groups sorted by 95th percentile duration

  1. List starred span groups with filtering

{
  "starredOnly": true,
  "filters": {
    "span_group.category": [
      {
        "type": "eq",
        "value": "full_page_load"
      }
    ]
  }
}

Expected Output: Array of starred span groups filtered by category

Hints: 1. Span groups represent different operation types (page loads, API calls, etc.) 2. Use sort by duration_p95 or duration_p99 to find the slowest operations 3. Star important span groups for quick access 4. Use nextUrl for pagination

bugsnag_get_span_groupA

Get detailed performance metrics for a specific span group

Toolset: Performance

Parameters:

  • projectId (string): Unique identifier of the project. This is optional if a current project is set and is used to set the current project for BugSnag tools.

  • spanGroupId (string) required: ID of the span group

  • filters (record<string, array>): Apply filters to narrow down the span group list. Use the List Trace Fields tool to discover available filter fields. Time filters support extended ISO 8601 format (e.g. 2018-05-20T00:00:00Z) or relative format (e.g. 7d, 24h). (default: {"span.since":[{"type":"eq","value":"7d"}]})

Use Cases: 1. View detailed statistics (p50, p75, p90, p95, p99) for an operation 2. Check if performance targets are configured 3. Monitor span count to understand operation volume

Examples:

  1. Get details for an API endpoint span group

{
  "spanGroupId": "[HttpClient]GET-api.example.com"
}

Expected Output: Statistics, category, and performance target info

  1. Get span group details with device filtering

{
  "spanGroupId": "[HttpClient]GET-api.example.com",
  "filters": {
    "device.browser_name": [
      {
        "type": "eq",
        "value": "Chrome"
      }
    ]
  }
}

Expected Output: Statistics filtered for Chrome browser only

Hints: 1. Use List Span Groups first to discover available span group IDs 2. IDs are automatically URL-encoded - provide the raw ID 3. Statistics include p50, p75, p90, p95, p99 percentiles

bugsnag_list_spansA

Get individual spans belonging to a span group

Toolset: Performance

Parameters:

  • projectId (string): Unique identifier of the project. This is optional if a current project is set and is used to set the current project for BugSnag tools.

  • spanGroupId (string) required: ID of the span group

  • sort (enum): Field to sort by

  • direction (enum): Sort direction for ordering results (default: "desc")

  • perPage (number): How many results to return per page. (default: 30)

  • nextUrl (string): URL for retrieving the next page of results. Use the value in the previous response to get the next page when more results are available. Only values provided in the output from this tool can be used. Do not attempt to construct it manually.

  • filters (record<string, array>): Apply filters to narrow down the span group list. Use the List Trace Fields tool to discover available filter fields. Time filters support extended ISO 8601 format (e.g. 2018-05-20T00:00:00Z) or relative format (e.g. 7d, 24h). (default: {"span.since":[{"type":"eq","value":"7d"}]})

Use Cases: 1. Analyze individual slow operations 2. Debug performance issues by examining specific traces 3. Find patterns in operation attributes

Examples:

  1. Get slowest spans for an operation

{
  "spanGroupId": "[HttpClient]GET-api.example.com",
  "sort": "duration",
  "direction": "desc",
  "perPage": 10
}

Expected Output: Array of the 10 slowest span instances

  1. Get spans filtered by OS with pagination

{
  "spanGroupId": "[HttpClient]GET-api.example.com",
  "sort": "timestamp",
  "filters": {
    "os.name": [
      {
        "type": "eq",
        "value": "iOS"
      }
    ]
  },
  "nextUrl": "/projects/123/spans?offset=30&per_page=30"
}

Expected Output: Array of spans from iOS devices with next page navigation

Hints: 1. Sort by duration descending to find the slowest instances 2. Each span includes trace ID for further investigation

bugsnag_get_traceA

Get all spans within a specific trace

Toolset: Performance

Parameters:

  • projectId (string): Unique identifier of the project. This is optional if a current project is set and is used to set the current project for BugSnag tools.

  • traceId (string) required: Trace ID

  • from (string) required: Start time (ISO 8601 format)

  • to (string) required: End time (ISO 8601 format)

  • targetSpanId (string): Optional target span ID to focus on

  • perPage (number): How many results to return per page. (default: 30)

  • nextUrl (string): URL for retrieving the next page of results. Use the value in the previous response to get the next page when more results are available. Only values provided in the output from this tool can be used. Do not attempt to construct it manually.

Use Cases: 1. Debug slow requests by viewing all operations in the trace 2. Understand the flow of a request through the system 3. Identify bottlenecks in distributed systems

Examples:

  1. Get all spans for a trace

{
  "traceId": "abc123",
  "from": "2024-01-01T00:00:00Z",
  "to": "2024-01-01T23:59:59Z"
}

Expected Output: Array of all spans in the trace with timing and hierarchy

  1. Get spans for a trace with pagination and target span

{
  "traceId": "def456",
  "from": "2024-01-01T00:00:00Z",
  "to": "2024-01-01T23:59:59Z",
  "targetSpanId": "span-789",
  "perPage": 50
}

Expected Output: Array of up to 50 spans focused around the target span

Hints: 1. Traces show the complete execution path of a request 2. Use from/to parameters to narrow the time window 3. targetSpanId can be used to focus on a specific span in the trace

bugsnag_list_trace_fieldsA

Get available trace fields/attributes for filtering

Toolset: Performance

Parameters:

  • projectId (string): Unique identifier of the project. This is optional if a current project is set and is used to set the current project for BugSnag tools.

Use Cases: 1. Find available custom attributes for performance filtering 2. Understand what metadata is attached to traces 3. Build dynamic filters based on available fields

Examples:

  1. Get all trace fields

{}

Expected Output: Array of field names and types available for filtering

Hints: 1. Trace fields are custom attributes added to spans 2. Use these fields for filtering other performance queries

bugsnag_get_network_endpoint_groupingsA

Get the network endpoint grouping rules for a project

Toolset: Performance

Parameters:

  • projectId (string): Unique identifier of the project. This is optional if a current project is set and is used to set the current project for BugSnag tools.

Use Cases: 1. View current network endpoint grouping configuration 2. Understand how network requests are being grouped in performance monitoring 3. Check grouping patterns before making updates

Examples:

  1. Get network grouping rules for a project

{}

Expected Output: Array of endpoint URL patterns

Hints: 1. Network grouping patterns help consolidate similar requests into single span groups 2. Patterns use OpenAPI path templating syntax with curly braces for path parameters (e.g., /users/{userId}) 3. Wildcards () can be used in domains to match multiple subdomains (e.g., https://.example.com)

bugsnag_set_network_endpoint_groupingsA

Set the network endpoint grouping rules for a project

Toolset: Performance

Parameters:

  • projectId (string): Unique identifier of the project. This is optional if a current project is set and is used to set the current project for BugSnag tools.

  • endpoints (array) required: Array of URL patterns by which network spans are grouped. Endpoints follow OpenAPI path templating syntax (https://swagger.io/specification/#path-templating) where path parameters use curly braces (e.g., /users/{id}). If you encounter colon-prefixed parameters (e.g., :userId from Express/React Router), convert them to curly braces (e.g., {userId}). Wildcards () can be used in domains (e.g., https://.example.com) to match multiple subdomains.

Use Cases: 1. Consolidate similar API endpoints into single span groups 2. Group dynamic URLs using path parameters (e.g., /api/users/{userId} groups /api/users/123, /api/users/456) 3. Match multiple subdomains using wildcards (e.g., https://*.example.com groups api.example.com, cdn.example.com) 4. Simplify performance monitoring by reducing span group clutter

Examples:

  1. Group API endpoints with path parameters

{
  "endpoints": [
    "/api/users/{userId}",
    "/api/products/{productId}",
    "/api/orders/{orderId}/items/{itemId}"
  ]
}

Expected Output: Success response confirming the update

  1. Group endpoints with domain wildcards and path parameters

{
  "endpoints": [
    "https://*.example.com/api/v1/{resourceId}",
    "https://api.example.com/v2/users/{userId}",
    "/graphql"
  ]
}

Expected Output: Success response confirming the update

  1. Convert colon-prefixed parameters to curly braces (e.g., from Express/React Router)

{
  "endpoints": [
    "/{organizationSlug}/{projectSlug}/performance/view-load",
    "/api/{version}/items/{itemId}"
  ]
}

Expected Output: Success response confirming the update

Hints: 1. Use Get Network Grouping first to see current patterns 2. Use OpenAPI path templating with curly braces for path parameters: /users/{userId}, /orders/{orderId}/items/{itemId} 3. Convert colon-prefixed parameters to curly braces: :organizationSlug becomes {organizationSlug}, :projectSlug becomes {projectSlug} 4. Wildcards () can be used in domains to match subdomains: https://.example.com/api 5. This replaces all existing patterns - include all patterns you want to keep 6. Well-designed patterns reduce noise in performance monitoring

swagger_list_portalsA

Search for available portals within Swagger. Only portals where you have at least a designer role, either at the product level or organization level, are returned.

Toolset: Portals

swagger_create_portalA

Create a new portal within Swagger.

Toolset: Portals

Parameters:

  • name (string): The display name for the portal - shown to users and in branding (3-40 characters)

  • subdomain (string) required: The portal subdomain - used in the portal URL (e.g., 'myportal' for myportal.example.com). Must be unique, lowercase, 3-20 characters, alphanumeric with hyphens. Recommended: slugified organization name plus a random 3-character suffix (e.g., 'acmecorp-k7p') to avoid collisions

  • offline (boolean): If true, the portal will not be visible to customers - useful for development/staging environments. Defaults to false

  • routing (string): Routing strategy for the portal - either 'browser' (client-side routing) or 'proxy' (server-side routing). Defaults to 'browser'

  • credentialsEnabled (boolean): Whether authentication credentials are enabled for accessing the portal. When true, users can authenticate to access private content. Defaults to true

  • swaggerHubOrganizationId (string) required: The corresponding Swagger organization UUID - required for portal creation. This links the portal to your Swagger organization. Only one Portal per Swagger organization is allowed.

  • openapiRenderer (string): OpenAPI renderer type: 'SWAGGER_UI' (Swagger UI), 'ELEMENTS' (Stoplight Elements), or 'TOGGLE' (allows switching between both with Elements as default). Defaults to 'TOGGLE'

  • pageContentFormat (string): Format for page content rendering - determines how documentation pages are processed: 'HTML', 'MARKDOWN', or 'BOTH'. Defaults to 'HTML'

swagger_get_portalB

Retrieve information about a specific portal.

Toolset: Portals

Parameters:

  • portalId (string) required: Portal UUID or subdomain - unique identifier for the portal instance

swagger_update_portalB

Update a specific portal's configuration.

Toolset: Portals

Parameters:

  • portalId (string) required: Portal UUID or subdomain - unique identifier for the portal instance

  • name (string): Update the portal display name - shown to users and in branding (3-40 characters)

  • subdomain (string): Update the portal subdomain - changes the portal URL. Must remain unique across all portals (3-20 characters, lowercase, alphanumeric with hyphens)

  • customDomain (boolean): Enable/disable custom domain for the portal - allows using your own domain instead of the default subdomain

  • gtmKey (string): Google Tag Manager key for analytics tracking - format: GTM-XXXXXX (max 25 characters)

  • offline (boolean): Set portal visibility - true hides portal from customers (useful for maintenance or development)

  • routing (string): Update routing strategy - 'browser' for client-side routing or 'proxy' for server-side routing

  • credentialsEnabled (boolean): Enable/disable authentication credentials for portal access - controls whether users can authenticate to view private content

  • openapiRenderer (string): Change OpenAPI renderer: 'SWAGGER_UI' (Swagger UI), 'ELEMENTS' (Stoplight Elements), or 'TOGGLE' (switch between both)

  • pageContentFormat (string): Update page content format for documentation rendering: 'HTML', 'MARKDOWN', or 'BOTH'

swagger_resolve_organization_portalA

Resolve portal details for a Swagger organization in a single step. Given an organization UUID, returns the portal ID, subdomain, customDomain (when configured), and the list of products (with productId, productSlug, and productName) for the organization's portal. If the organization has no portal yet, a new portal is created automatically. Use this tool to obtain all portal context needed for subsequent portal and product operations.

Toolset: Portals

Parameters:

  • organizationId (string) required: Swagger organization UUID - the organization to resolve portal details for

swagger_list_portal_productsB

Get products for a specific portal that match your criteria.

Toolset: Products

Parameters:

  • portalId (string) required: Portal UUID or subdomain - unique identifier for the portal instance

swagger_create_portal_productA

Create a new product for a specific portal.

Toolset: Products

Parameters:

  • portalId (string) required: Portal UUID or subdomain - unique identifier for the portal instance

  • type (string) required: Product creation type - 'new' to create from scratch or 'copy' to duplicate an existing product

  • productId (string): Source product UUID to copy from - required when type is 'copy', specifies which existing product to duplicate. Omit when type is 'new'

  • name (string) required: Product display name - will be shown to users in the portal navigation and product listings (3-40 characters)

  • slug (string) required: URL-friendly identifier for the product - must be unique within the portal, used in URLs (e.g., 'my-api' becomes /my-api). 3-22 characters, lowercase, alphanumeric with hyphens, underscores, or dots

  • description (string): Product description - explains what the API/product does, shown in product listings and cards (max 110 characters)

  • public (boolean): Whether the product is publicly visible to all portal visitors - false means only authenticated users with appropriate roles can access it

  • hidden (boolean): Whether the product is hidden from the portal landing page navigation menus - useful for internal or draft products

swagger_get_portal_productC

Retrieve information about a specific product resource.

Toolset: Products

Parameters:

  • productId (string) required: Product UUID or identifier in the format 'portal-subdomain:product-slug' - unique identifier for the product

swagger_delete_portal_productA

Delete a product from a specific portal

Toolset: Products

Parameters:

  • productId (string) required: Product UUID or identifier in the format 'portal-subdomain:product-slug' - unique identifier for the product

swagger_update_portal_productA

Update a product's settings within a specific portal.

Toolset: Products

Parameters:

  • productId (string) required: Product UUID or identifier in the format 'portal-subdomain:product-slug' - unique identifier for the product

  • name (string): Update product display name - changes how it appears to users in navigation and listings (3-40 characters)

  • slug (string): Update URL-friendly identifier - must remain unique within the portal, affects product URLs (3-22 characters, lowercase, alphanumeric with hyphens/underscores/dots)

  • description (string): Update product description - explains the API/product functionality, shown in listings (max 110 characters)

  • public (boolean): Change product visibility - true makes it publicly accessible to all visitors, false restricts to authenticated users with roles

  • hidden (boolean): Change navigation visibility - true hides from portal landing page menus while keeping the product accessible via direct links

swagger_publish_portal_productA

Publish a product's content to make it live or as preview. This endpoint publishes the current content of a product, making it visible to portal visitors. Use preview mode to test before going live. Optionally provide tableOfContentsId to get a page-specific URL. Returns publication status, a live or preview URL (null if URL building fails), product and portal metadata, and an optional warning when metadata/URL building failed — a warning does NOT mean the publish failed.

Toolset: Products

Parameters:

  • productId (string) required: Product UUID or identifier in the format 'portal-subdomain:product-slug' - unique identifier for the product

  • tableOfContentsId (string): Optional table of contents UUID, or identifier in the format 'portal-subdomain:product-slug:section-slug:table-of-contents-slug'. When provided, publishPortalProduct uses it to resolve the published URL path for the returned preview/live link.

  • preview (boolean): Whether to publish as preview (true) or live (false). Preview allows testing before going live. Defaults to false (live publication) (default: false)

swagger_list_portal_product_sectionsA

Get sections for a specific product within a portal.

Toolset: Sections

Parameters:

  • productId (string) required: Product UUID or identifier in the format 'portal-subdomain:product-slug' - unique identifier for the product

  • embed (array): List of related entities to embed in the response - e.g., ['tableOfContents', 'tableOfContents.swaggerhubApi'] to include table of contents and SwaggerHub API details

  • page (number): Page number for paginated results - specifies which page of results to retrieve (default is 1)

  • size (number): Number of items per page for pagination - controls how many results are returned per page (default is 10)

swagger_create_table_of_contentsA

Create a new table of contents item in a portal product section. Supports API references, HTML content, and Markdown content types.

Toolset: Table Of Contents

Parameters:

  • sectionId (string) required: Section ID - unique identifier for the section within the product

  • type (enum) required: Type of table of contents creation - 'new' to create from scratch or 'copy' to duplicate an existing one

  • title (string) required: Title of the table of contents item - will be displayed in navigation (3-40 characters)

  • slug (string) required: URL-friendly identifier for the table of contents item - must be unique within the section (3-22 characters, lowercase, alphanumeric with hyphens/underscores/dots)

  • order (number) required: Order position of the table of contents item within its parent section or item

  • parentId (string): Parent table of contents item ID - null for top-level items, or ID of parent item for nested structure

  • content (object): Content configuration for the table of contents item

swagger_list_table_of_contentsA

Get table of contents for a section of a product within a portal.

Toolset: Table Of Contents

Parameters:

  • sectionId (string) required: Section ID - unique identifier for the section within the product

  • embed (array): List of related entities to embed in the response - e.g., ['swaggerhubApi'] to include SwaggerHub API details

  • page (number): Page number for paginated results - specifies which page of results to retrieve (default is 1)

  • size (number): Number of items per page for pagination - controls how many results are returned per page (default is 20)

swagger_delete_table_of_contentsA

Delete table of contents entry. Performs a soft-delete of an entry from the table of contents. Supports recursive deletion of nested items.

Toolset: Table Of Contents

Parameters:

  • tableOfContentsId (string) required: The table of contents UUID, or identifier in the format 'portal-subdomain:product-slug:section-slug:table-of-contents-slug'

  • recursive (boolean): Flag to include all the nested tables of contents (default: false)

swagger_create_documentation_pageA

Create a documentation page in a portal product in a single tool call. Supports markdown and html content types. Returns the page location details (productId, sectionId, slug) and a draftUrl to edit it in the portal.

Toolset: Documents

Parameters:

  • portalId (string) required: Portal UUID or subdomain - unique identifier for the portal

  • productId (string) required: Product UUID - unique identifier for the product

  • pageTitle (string) required: Title of the documentation page - will be displayed in navigation (3-255 characters)

  • pageSlug (string): URL slug for the documentation page. 3-255 characters, lowercase, alphanumeric with hyphens, underscores, or dots (e.g. 'my-page'). If not provided, the slug is generated from the page title.

  • pageContent (string): Content of the documentation page. Provide HTML when contentType is 'html', Markdown when contentType is 'markdown'.

  • contentType (enum): Content type of the documentation page. 'markdown' works with both 'internal' and 'external' source. 'html' only works with 'external' source — html + internal is not supported by the API and will return an error. (default: "markdown")

  • source (enum): Where the document content is managed. 'internal': editable in both the portal UI and via API. 'external': editable via API only, not in the portal UI. Constraint: 'html' content type only supports 'external' source. (default: "internal")

  • order (number): Order position of the documentation page within its parent section or item (default: 0)

  • parentId (string): Parent table of contents item ID - null for top-level pages, or ID of parent item for nested structure

swagger_get_documentA

Get document content and metadata by document ID. Useful for retrieving HTML or Markdown content from table of contents items.

Toolset: Documents

Parameters:

  • documentId (string) required: Document UUID - unique identifier for the document

swagger_update_documentA

Update the content or source of an existing document. Supports both HTML and Markdown content types.

Toolset: Documents

Parameters:

  • documentId (string) required: Document UUID - unique identifier for the document

  • content (string): The document content to update (HTML or Markdown based on document type)

  • type (enum): Content type of the document. Note: documents with type 'html' and source 'internal' cannot be edited via API — only 'html' + 'external' and all 'markdown' combinations are supported.

  • source (enum): Where the document content is managed. 'internal': editable in both portal UI and API. 'external': editable via API only. Note: 'html' + 'internal' documents cannot be updated via API.

swagger_search_apis_and_domainsA

Search for APIs and Domains in SwaggerHub Registry using the comprehensive /specs endpoint and retrieve metadata including owner, name, description, summary, version, and specification.

Toolset: Registry API

Parameters:

  • query (string): Search query to filter APIs by name, description, or content

  • state (enum): Filter APIs by publication state - ALL (default), PUBLISHED, or UNPUBLISHED

  • tag (string): Filter APIs by tag

  • offset (number): Offset for pagination (0-based, default 0)

  • limit (number): Number of results per page (1-100, default 20)

  • sort (enum): Sort field - NAME, UPDATED, or CREATED (default NAME)

  • order (enum): Sort order - ASC or DESC (default ASC)

  • owner (string): Filter APIs by owner (organization or user)

  • specType (enum): Filter by specification type - API or DOMAIN (default all types)

swagger_get_api_definitionA

Fetch resolved API definition from SwaggerHub Registry based on owner, API name, and version. By default returns the definition as JSON (converting YAML-stored definitions to JSON). Set format:'text' to get the YAML definition — required as the source for swagger_patch_api edits.

Toolset: Registry API

Parameters:

  • owner (string) required: API owner (organization or user, case-sensitive)

  • api (string) required: API name (case-sensitive)

  • version (string) required: Version identifier

  • resolved (boolean): Set to true to get the resolved version with all external $refs included (default false)

  • flatten (boolean): Set to true to create models from inline schemas in OpenAPI definition (default false)

  • format (enum): Response format: 'json' (default) may convert YAML to JSON; 'text' returns the definition as YAML — required for swagger_patch_api edits.

swagger_create_or_update_apiB

Create a new API or update an existing API in SwaggerHub Registry for Swagger Studio. The API specification type (OpenAPI, AsyncAPI) is automatically detected from the definition content. APIs are always created with fixed values: version 1.0.0, private visibility, and automock disabled (these values cannot be changed). Returns HTTP 201 for creation, HTTP 200 for update. Response includes 'operation' field indicating whether it was a 'create' or 'update' operation along with API details and SwaggerHub URL.

Toolset: Registry API

Parameters:

  • owner (string) required: Organization name (owner of the API)

  • apiName (string) required: API name

  • definition (string) required: API definition content (OpenAPI/AsyncAPI specification in JSON or YAML format). Format is automatically detected. On create, fixed values are used: version 1.0.0, private visibility, automock disabled, and no project assignment. On update, the API's existing visibility is preserved.

swagger_list_organizationsA

Get organizations for a user. Returns a list of organizations that the authenticating user is a member of. On-Premise admin gets a list of all organizations in the system.

Toolset: Registry API

Parameters:

  • q (string): Search organizations by partial or full name (case-insensitive)

  • sortBy (enum): The property to sort the results by

  • order (enum): Sort order

  • page (number): 0-based index of the page to return

  • pageSize (number): Number of results per page to return

swagger_scan_api_standardizationA

Run a standardization scan against an API definition using the organization's governance and standardization rules. Accepts a raw YAML or JSON OpenAPI/AsyncAPI definition and returns a list of validation errors, the total issue count, and counts grouped by severity. Use this tool when the user provides the API definition content directly (as raw YAML or JSON) and asks to validate, scan, or check the governance or standardization of the API.

Toolset: Registry API

Parameters:

  • orgName (string) required: The organization name to use for standardization rules

  • definition (string) required: API definition content (OpenAPI/AsyncAPI specification in JSON or YAML format) to scan for standardization errors

swagger_scan_api_standardization_from_registryA

Run a standardization scan on an API that already exists in SwaggerHub Registry, identified by organization name, API name, and version. Fetches the API definition from the registry internally and scans it against the organization's governance and standardization rules. Returns a list of validation errors, total issue count, counts grouped by severity, and a SwaggerHub UI URL for the scanned API. Use this tool when the user identifies the API by org name, API name, and version and asks to validate, scan, or check the governance or standardization of an existing API.

Toolset: Registry API

Parameters:

  • orgName (string) required: The organization name that owns the API and provides the standardization rules (case-sensitive)

  • apiName (string) required: API name (case-sensitive)

  • version (string) required: Version identifier

swagger_create_api_from_promptA

Generate and save a new API or a new version of an existing API based on a prompt using SmartBear AI. This tool automatically applies organization governance and standardization rules during API generation. The specType parameter determines the format of the generated definition. Use: 'openapi20' for OpenAPI 2.0, 'openapi30x' for OpenAPI 3.0.x, 'openapi31x' for OpenAPI 3.1.x, 'asyncapi2xx' for AsyncAPI 2.x, 'asyncapi30x' for AsyncAPI 3.0.x. Use this tool when creating APIs that comply with governance policies or when generating APIs from natural language descriptions. Use this tool when users ask to create, generate, or design APIs with governance or standardization requirements. Fails with a conflict error if the API version already exists. Returns API details and SwaggerHub URL.

Toolset: Registry API

Parameters:

  • owner (string) required: API owner (organization or user, case-sensitive)

  • apiName (string) required: API name

  • prompt (string) required: The prompt describing the desired API functionality (e.g., 'Create a RESTful API for managing a pet store with endpoints for pets, orders, and inventory')

  • specType (enum): Specification type for the generated API definition. Use: 'openapi20' for OpenAPI 2.0, 'openapi30x' for OpenAPI 3.0.x (default), 'openapi31x' for OpenAPI 3.1.x, 'asyncapi2xx' for AsyncAPI 2.x, 'asyncapi30x' for AsyncAPI 3.0.x (default: "openapi30x")

swagger_standardize_apiA

Standardize and fix an API definition using AI to ensure compliance with governance policies. Scans the API definition for standardization errors and automatically fixes them using SmartBear AI. Optionally provide 'newVersion' (e.g. patch bump '1.0.0' → '1.0.1') to save the fixed definition as a new version — omitting it will overwrite the current version. Returns the number of errors found, the fixed definition, and a URL to view the standardized API. Use this tool when users ask to standardize, fix, govern, or ensure governance compliance of APIs.

Toolset: Registry API

Parameters:

  • owner (string) required: API owner (organization or user, case-sensitive)

  • api (string) required: API name (case-sensitive)

  • version (string) required: Version identifier

  • newVersion (string): The version to save the fixed definition as (e.g. '1.0.1'). Omitting this will overwrite the current version — prefer providing a patch bump (e.g. '1.0.0' → '1.0.1') unless the user specifies otherwise.

swagger_patch_apiA

Apply targeted search/replace edits to a YAML API definition in SwaggerHub Registry. Only OpenAPI and AsyncAPI definitions are supported. Each edit's 'oldString' must be copied exactly from swagger_get_api_definition with format:'text' and without 'resolved' or 'flatten' — those options transform the definition, so edits based on them will not match the stored source. JSON definitions are not supported. Nothing is saved unless every edit applies — failed edits are returned with 'no_match' or 'ambiguous' status. When 'newVersion' is given the patched definition is saved as a new private version; patching in place keeps the visibility of the existing version. Use this tool to fix specific issues in an existing API without regenerating the whole definition.

Toolset: Registry API

Parameters:

  • owner (string) required: API owner (organization or user, case-sensitive)

  • apiName (string) required: API name (case-sensitive)

  • version (string) required: Version of the definition to patch (base version, e.g. '1.0.0')

  • newVersion (string): Version to save the patched definition as (e.g. '1.0.1'). Must not already exist and is always created as private. Omit to overwrite the base version, which keeps its current visibility. The definition's info.version is updated automatically — do not add an edit for it.

  • edits (array) required: Search/replace edits applied sequentially to the YAML definition. Nothing is saved unless every edit applies (atomic).

contract-testing_generate_pact_testsA

Generate Pact tests using PactFlow AI. You can provide one or more of the following input types: (1) request/response pairs for specific interactions, (2) code files to analyze and extract interactions from, and/or (3) OpenAPI document to generate tests for specific endpoints. When providing an OpenAPI document, a matcher is required to specify which endpoints to generate tests for.

Toolset: Generate Pact Tests

Parameters:

  • language (enum): Target language for the generated Pact tests. If not provided, will be inferred from other inputs.

  • requestResponse (object): Direct request/response pair for a specific interaction. Use this when you have concrete examples of API requests and responses

  • code (array): Collection of source code files to analyze and extract API interactions from. Include client code, data models, existing tests, or any code that makes API calls

  • openapi (any)

  • additionalInstructions (string): Optional free-form instructions to guide the generation process (e.g., 'Focus on error scenarios', 'Include authentication headers', 'Use specific test framework patterns')

  • testTemplate (object): Optional test template to use as a basis for generation. Helps ensure generated tests follow your specific patterns, frameworks, and coding standards

contract-testing_review_pact_testsC

Review Pact tests using PactFlow AI. You can provide the following inputs: (1) Pact tests to be reviewed along with metadata

Toolset: Review Pact Tests

Parameters:

  • pactTests (object) required: Primary pact tests that needs to be refined.

  • code (array): Collection of source code files to analyze and extract API interactions from. Include client code, data models, existing tests, or any code that makes API calls

  • userInstructions (string): Optional free-form instructions that provide additional context or specify areas of focus during the refinement process of the Pact test.

  • errorMessages (array): Optional error output from failed contract test runs. These can be used to better understand the context or failures observed and guide the recommendations toward resolving specific issues.

  • openapi (any)

contract-testing_get_provider_statesC

Retrieve the states of a specific provider

Toolset: Fetch Provider States

Parameters:

  • provider (string) required: name of the provider to retrieve states for

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_can_i_deployA

Performs a comprehensive compatibility check to determine whether a specific version of a service (pacticipant) can be safely deployed into a given environment. It analyzes the complete contract matrix of consumer-provider relationships to confirm that all required integrations are verified and compatible.

Toolset: Can I Deploy

Parameters:

  • pacticipant (string) required: The name of the pacticipant (application/service) being evaluated for deployment

  • version (string) required: The version of the pacticipant that you want to check if it's safe to deploy

  • environment (string) required: The target environment where the pacticipant version will be deployed (e.g., 'production', 'staging', 'test')

contract-testing_matrixA

Retrieve the comprehensive contract verification matrix that shows the relationship between consumer and provider versions, their associated pact files, and verification results stored in the Pact Broker or Pactflow. The matrix provides detailed visibility into which consumer and provider versions have been successfully verified against each other, and highlights failures with detailed information about the cause.

Toolset: Matrix

Parameters:

  • latestby (string): This property removes the rows for the overridden pacts/verifications from the results. The options are cvp (show only the latest row for each consumer version and provider) and cvpv (show only the latest row each consumer version and provider version). For a can-i-deploy query with one selector, it should be set to cvp. For a can-i-deploy query with two selectors, it should be set to cvpv.

  • limit (number): The limit on the number of results to return (1-1000, default: 100) (default: 100)

  • q (array) required

Use Cases: 1. Quickly identify which consumer and provider version combinations have passed or failed verification. 2. Diagnose and investigate why a particular consumer-provider verification failed. 3. Visualize the overall contract compatibility across two pacticipants / services. 4. Perform advanced queries using selectors to understand compatibility within specific branches, environments, or version ranges. 5. Support informed deployment decisions by answering 'can I deploy version X of this service to production?' 6. Expose contract verification details to non-frequent API users in a more accessible format.

contract-testing_check_pactflow_ai_entitlementsA

Check your PactFlow AI entitlements and credit balance if you encounter 401 Unauthorized errors or permission/credit issues when using PactFlow AI features.

Toolset: PactFlow AI Status

Use Cases: 1. Diagnose 401 unauthorized errors when attempting to use PactFlow AI features 2. Check remaining AI credits when PactFlow AI operations are rejected due to insufficient credits 3. Verify account entitlements when users receive permission denied errors for PactFlow AI functionality 4. Troubleshoot PactFlow AI access issues by retrieving current entitlement status and credit balance 5. Provide detailed error context when PactFlow AI features are unavailable due to account limitations

contract-testing_get_metricsA

Fetch metrics across the entire workspace

Toolset: Metrics

Parameters: None

contract-testing_get_team_metricsA

Fetch metrics for all teams

Toolset: Metrics

Parameters: None

contract-testing_list_pacticipantsB

Retrieve all pacticipants (applications/services) registered in the Pact Broker or PactFlow workspace.

Toolset: Pacticipants

Parameters:

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Number of results per page (default: 5)

contract-testing_get_pacticipantA

Retrieve details for a specific pacticipant by name.

Toolset: Pacticipants

Parameters:

  • pacticipantName (string) required: Name of the pacticipant (application or service)

contract-testing_list_branchesA

Retrieve all branches for a given pacticipant, with optional filtering and pagination.

Toolset: Branches and Versions

Parameters:

  • pacticipantName (string) required: Name of the pacticipant

  • q (string): Filter branches by name

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_list_pacticipant_versionsB

Retrieve all versions for a given pacticipant.

Toolset: Branches and Versions

Parameters:

  • pacticipantName (string) required: Name of the pacticipant

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_pacticipant_versionA

Retrieve details for a specific version of a pacticipant.

Toolset: Branches and Versions

Parameters:

  • pacticipantName (string) required: Name of the pacticipant

  • versionNumber (string) required: Version number to retrieve

contract-testing_get_latest_pacticipant_versionB

Retrieve the latest version of a pacticipant, optionally filtered by tag.

Toolset: Branches and Versions

Parameters:

  • pacticipantName (string) required: Name of the pacticipant

  • tag (string): Tag to filter by. If omitted, returns the overall latest version.

contract-testing_list_environmentsB

Retrieve all environments configured in the Pact Broker or PactFlow workspace.

Toolset: Environments and Deployments

Parameters:

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_environmentB

Retrieve details for a specific environment by UUID.

Toolset: Environments and Deployments

Parameters:

  • environmentId (string) required: UUID of the environment

contract-testing_record_deploymentB

Record that a version of a pacticipant has been deployed to an environment.

Toolset: Environments and Deployments

Parameters:

  • pacticipantName (string) required: Name of the pacticipant that was deployed

  • versionNumber (string) required: Version number that was deployed

  • environmentId (string) required: UUID of the target environment

  • applicationInstance (string): Identifies a specific instance when multiple instances of the same application are deployed to the same environment (e.g. 'blue', 'green')

contract-testing_get_currently_deployed_versionsB

Retrieve all versions currently deployed to a given environment.

Toolset: Environments and Deployments

Parameters:

  • environmentId (string) required: UUID of the environment

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_record_releaseA

Record that a version of a pacticipant has been released to an environment (for mobile/library release workflows).

Toolset: Environments and Deployments

Parameters:

  • pacticipantName (string) required: Name of the pacticipant that was released

  • versionNumber (string) required: Version number that was released

  • environmentId (string) required: UUID of the target environment

contract-testing_get_currently_supported_versionsB

Retrieve all versions currently released and supported in a given environment.

Toolset: Environments and Deployments

Parameters:

  • environmentId (string) required: UUID of the environment

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_publish_consumer_contractsB

Publish one or more consumer Pact contracts to the Pact Broker or PactFlow, with branch and tag metadata.

Toolset: Contracts

Parameters:

  • pacticipantName (string) required: Name of the consumer application

  • pacticipantVersionNumber (string) required: Version number of the consumer

  • contracts (array) required: Contracts to publish

  • tags (array): Version tags (e.g. 'main', 'staging')

  • branch (string): Branch name of the consumer

  • buildUrl (string): URL of the CI build that produced these contracts

contract-testing_publish_provider_contractA

Publish a provider OpenAPI or AsyncAPI contract and self-verification results to PactFlow (Bi-Directional Contract Testing).

Toolset: Contracts

Parameters:

  • providerName (string) required: Name of the provider application

  • pacticipantVersionNumber (string) required: Version number of the provider

  • contract (object) required: Provider contract (OpenAPI or AsyncAPI spec) and verification details

  • tags (array): Version tags

  • branch (string): Branch name of the provider

  • buildUrl (string): URL of the CI build

contract-testing_get_pacts_for_verificationB

Retrieve the pacts that a provider should verify, based on consumer version selectors and WIP/pending pact configuration.

Toolset: Contracts

Parameters:

  • providerName (string) required: Name of the provider to get pacts for

  • consumerVersionSelectors (array): Selectors specifying which consumer versions to include

  • includePendingStatus (boolean): Include the pending status in the results

  • includeWipPactsSince (string): Include WIP pacts published since this date (ISO 8601)

  • providerVersionBranch (string): Branch of the provider version being verified

  • providerVersionTags (array): Tags for the provider version being verified

contract-testing_get_bdct_provider_contractA

Fetch the provider OpenAPI contract for a given provider version in Bi-Directional Contract Testing.

Toolset: Bi-Directional Contract Testing

Parameters:

  • providerName (string) required: Name of the provider

  • providerVersionNumber (string) required: Provider version number

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_bdct_provider_contract_verification_resultsB

Fetch the self-verification results for a provider contract version in Bi-Directional Contract Testing.

Toolset: Bi-Directional Contract Testing

Parameters:

  • providerName (string) required: Name of the provider

  • providerVersionNumber (string) required: Provider version number

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_bdct_consumer_contractsB

Fetch all consumer Pact contracts relevant to a given provider version in Bi-Directional Contract Testing.

Toolset: Bi-Directional Contract Testing

Parameters:

  • providerName (string) required: Name of the provider

  • providerVersionNumber (string) required: Provider version number

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_bdct_consumer_contract_verification_resultsB

Fetch the consumer contract verification results for a given provider version in Bi-Directional Contract Testing.

Toolset: Bi-Directional Contract Testing

Parameters:

  • providerName (string) required: Name of the provider

  • providerVersionNumber (string) required: Provider version number

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_bdct_cross-contract_verification_resultsC

Fetch the cross-contract verification results for a given provider version in Bi-Directional Contract Testing.

Toolset: Bi-Directional Contract Testing

Parameters:

  • providerName (string) required: Name of the provider

  • providerVersionNumber (string) required: Provider version number

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_bdct_consumer_by_consumer_versionB

Fetch the consumer Pact contract for a specific consumer-provider version pair in Bi-Directional Contract Testing.

Toolset: Bi-Directional Contract Testing

Parameters:

  • providerName (string) required: Name of the provider

  • providerVersionNumber (string) required: Provider version number

  • consumerName (string) required: Name of the consumer

  • consumerVersionNumber (string) required: Consumer version number

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_bdct_provider_by_consumer_versionB

Fetch the provider OpenAPI contract for a specific consumer-provider version pair in Bi-Directional Contract Testing.

Toolset: Bi-Directional Contract Testing

Parameters:

  • providerName (string) required: Name of the provider

  • providerVersionNumber (string) required: Provider version number

  • consumerName (string) required: Name of the consumer

  • consumerVersionNumber (string) required: Consumer version number

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_bdct_provider_check_results_by_consumerB

Fetch the provider contract self-verification results for a specific consumer-provider version pair in Bi-Directional Contract Testing.

Toolset: Bi-Directional Contract Testing

Parameters:

  • providerName (string) required: Name of the provider

  • providerVersionNumber (string) required: Provider version number

  • consumerName (string) required: Name of the consumer

  • consumerVersionNumber (string) required: Consumer version number

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_bdct_consumer_pact_test_results_by_consumerB

Fetch the consumer contract verification results for a specific consumer-provider version pair in Bi-Directional Contract Testing.

Toolset: Bi-Directional Contract Testing

Parameters:

  • providerName (string) required: Name of the provider

  • providerVersionNumber (string) required: Provider version number

  • consumerName (string) required: Name of the consumer

  • consumerVersionNumber (string) required: Consumer version number

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_bdct_x-contract_test_results_by_consumerB

Fetch the cross-contract verification results for a specific consumer-provider version pair in Bi-Directional Contract Testing.

Toolset: Bi-Directional Contract Testing

Parameters:

  • providerName (string) required: Name of the provider

  • providerVersionNumber (string) required: Provider version number

  • consumerName (string) required: Name of the consumer

  • consumerVersionNumber (string) required: Consumer version number

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_list_integrationsA

Retrieve all consumer-provider integrations registered in the workspace.

Toolset: Integrations and Network

Parameters:

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_pacticipant_networkB

Retrieve the integration network graph for a specific pacticipant.

Toolset: Integrations and Network

Parameters:

  • pacticipantName (string) required: Name of the pacticipant to get network for

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_list_labelsA

Retrieve all labels used across the workspace.

Toolset: Labels

Parameters:

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_pacticipant_labelA

Check whether a specific label is applied to a pacticipant.

Toolset: Labels

Parameters:

  • pacticipantName (string) required: Name of the pacticipant

  • labelName (string) required: Name of the label

contract-testing_list_pacticipants_by_labelA

Retrieve all pacticipants that have a specific label applied.

Toolset: Labels

Parameters:

  • labelName (string) required: Label name to filter by

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_update_pacticipantA

Fully replace a pacticipant's metadata (display name, main branch, repository URL, etc.).

Toolset: Pacticipants

Parameters:

  • pacticipantName (string) required: Name of the pacticipant to update

  • displayName (string): Human-readable display name

  • mainBranch (string): Name of the main/trunk branch (e.g. 'main')

  • repositoryName (string): Repository name

  • repositoryNamespace (string): Repository namespace/organisation

  • repositoryUrl (string): URL of the source repository

contract-testing_patch_pacticipantA

Partially update a pacticipant's metadata — only fields provided are changed.

Toolset: Pacticipants

Parameters:

  • pacticipantName (string) required: Name of the pacticipant to update

  • displayName (string): Human-readable display name

  • mainBranch (string): Name of the main/trunk branch (e.g. 'main')

  • repositoryName (string): Repository name

  • repositoryNamespace (string): Repository namespace/organisation

  • repositoryUrl (string): URL of the source repository

contract-testing_update_pacticipant_versionC

Update metadata for a specific pacticipant version.

Toolset: Branches and Versions

Parameters:

  • pacticipantName (string) required: Name of the pacticipant

  • versionNumber (string) required: Version number to update

  • buildUrl (string): URL of the CI build that produced this version

contract-testing_get_branch_versionsA

Retrieve all versions published from a specific branch of a pacticipant.

Toolset: Branches and Versions

Parameters:

  • pacticipantName (string) required: Name of the pacticipant

  • branchName (string) required: Name of the branch

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_deployed_versions_for_versionB

Retrieve deployment records for a specific pacticipant version in a specific environment.

Toolset: Environments and Deployments

Parameters:

  • pacticipantName (string) required: Name of the pacticipant

  • versionNumber (string) required: Version number

  • environmentId (string) required: UUID of the environment

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_released_versions_for_versionA

Retrieve release records for a specific pacticipant version in a specific environment.

Toolset: Environments and Deployments

Parameters:

  • pacticipantName (string) required: Name of the pacticipant

  • versionNumber (string) required: Version number

  • environmentId (string) required: UUID of the environment

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_create_environmentA

Create a new deployment environment in PactFlow.

Toolset: Environments and Deployments

Parameters:

  • name (string) required: Unique name for the environment (e.g. 'production', 'staging')

  • production (boolean) required: Whether this is a production environment

  • displayName (string): Human-readable display name

  • teamUuids (array): UUIDs of teams that own this environment

contract-testing_update_environmentB

Update an existing environment's metadata.

Toolset: Environments and Deployments

Parameters:

  • environmentId (string) required: UUID of the environment to update

  • name (string) required: Unique name for the environment

  • production (boolean) required: Whether this is a production environment

  • displayName (string): Human-readable display name

  • teamUuids (array): UUIDs of teams that own this environment

contract-testing_delete_environmentB

Delete an environment by UUID.

Toolset: Environments and Deployments

Parameters:

  • environmentId (string) required: UUID of the environment

contract-testing_create_pacticipantA

Register a new application/service (pacticipant) in the workspace.

Toolset: Pacticipants

Parameters:

  • name (string) required: Name of the pacticipant (cannot be changed after creation)

  • displayName (string): Human-readable display name

  • mainBranch (string): Name of the main/trunk branch (e.g. 'main')

  • repositoryName (string): Repository name

  • repositoryNamespace (string): Repository namespace/organisation

  • repositoryUrl (string): URL of the source repository

contract-testing_delete_pacticipantA

Delete a pacticipant and all its associated data.

Toolset: Pacticipants

Parameters:

  • pacticipantName (string) required: Name of the pacticipant to delete

contract-testing_get_branchA

Retrieve details for a specific branch of a pacticipant.

Toolset: Branches and Versions

Parameters:

  • pacticipantName (string) required: Name of the pacticipant

  • branchName (string) required: Name of the branch

contract-testing_delete_branchC

Delete a branch from a pacticipant.

Toolset: Branches and Versions

Parameters:

  • pacticipantName (string) required: Name of the pacticipant

  • branchName (string) required: Name of the branch to delete

contract-testing_add_label_to_pacticipantB

Apply a label to a pacticipant.

Toolset: Labels

Parameters:

  • pacticipantName (string) required: Name of the pacticipant

  • labelName (string) required: Name of the label

contract-testing_remove_label_from_pacticipantA

Remove a label from a pacticipant.

Toolset: Labels

Parameters:

  • pacticipantName (string) required: Name of the pacticipant

  • labelName (string) required: Name of the label

contract-testing_get_integrations_by_teamA

Retrieve all consumer-provider integrations belonging to a specific team.

Toolset: Integrations and Network

Parameters:

  • teamId (string) required: UUID of the team

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_delete_integrationC

Delete a specific consumer-provider integration.

Toolset: Integrations and Network

Parameters:

  • providerName (string) required: Name of the provider

  • consumerName (string) required: Name of the consumer

contract-testing_delete_all_integrationsA

Delete ALL consumer-provider integrations in the workspace.

Toolset: Integrations and Network

Parameters: None

contract-testing_list_webhooksA

Retrieve all webhooks configured in the workspace.

Toolset: Webhooks

Parameters:

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_webhookA

Retrieve details for a specific webhook by UUID.

Toolset: Webhooks

Parameters:

  • webhookId (string) required: UUID of the webhook

contract-testing_create_webhookB

Create a new webhook to trigger on contract events.

Toolset: Webhooks

Parameters:

  • description (string) required: Human-readable description of the webhook

  • events (array) required: Events that trigger this webhook

  • request (object) required: HTTP request to send when triggered

  • consumer (object): Restrict to a specific consumer (omit for all)

  • provider (object): Restrict to a specific provider (omit for all)

  • enabled (boolean): Whether the webhook is enabled (default: true)

  • teamUuid (string): UUID of the owning team (null for global)

contract-testing_update_webhookB

Update an existing webhook's configuration.

Toolset: Webhooks

Parameters:

  • webhookId (string) required: UUID of the webhook to update

  • description (string): Human-readable description

  • events (array): Events that trigger this webhook

  • request (object): HTTP request to send when triggered

  • consumer (object): Restrict to a specific consumer

  • provider (object): Restrict to a specific provider

  • enabled (boolean): Whether the webhook is enabled

  • teamUuid (string): UUID of the owning team

contract-testing_delete_webhookB

Delete a webhook by UUID.

Toolset: Webhooks

Parameters:

  • webhookId (string) required: UUID of the webhook

contract-testing_test_execute_webhooksA

Trigger a test execution of all matching webhooks without a real event.

Toolset: Webhooks

Parameters: None

contract-testing_execute_webhookB

Trigger a test execution of a specific webhook.

Toolset: Webhooks

Parameters:

  • webhookId (string) required: UUID of the webhook

contract-testing_list_secretsA

Retrieve all secrets stored in the workspace.

Toolset: Secrets

Parameters:

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_get_secretA

Retrieve metadata for a specific secret by UUID.

Toolset: Secrets

Parameters:

  • secretId (string) required: UUID of the secret

contract-testing_create_secretA

Create a new secret for use in webhook authentication.

Toolset: Secrets

Parameters:

  • name (string) required: Name of the secret

  • value (string) required: Value of the secret

  • description (string): Description of the secret

  • teamUuid (string): UUID of the owning team (cannot be changed after creation)

contract-testing_update_secretA

Update an existing secret's name, value, or description.

Toolset: Secrets

Parameters:

  • secretId (string) required: UUID of the secret to update

  • name (string): New name for the secret

  • value (string): New value for the secret

  • description (string): New description

contract-testing_delete_secretC

Delete a secret by UUID.

Toolset: Secrets

Parameters:

  • secretId (string) required: UUID of the secret

contract-testing_get_current_userA

Retrieve the profile of the currently authenticated user.

Toolset: User, Tokens and Preferences

Parameters: None

contract-testing_list_api_tokensB

Retrieve API tokens for the current user.

Toolset: User, Tokens and Preferences

Parameters:

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_regenerate_api_tokenA

Regenerate (rotate) an API token by ID.

Toolset: User, Tokens and Preferences

Parameters:

  • tokenId (string) required: ID of the token to regenerate

contract-testing_get_user_preferencesA

Retrieve the current user's preferences.

Toolset: User, Tokens and Preferences

Parameters: None

contract-testing_get_system_preferencesA

Retrieve system-wide preferences.

Toolset: User, Tokens and Preferences

Parameters: None

contract-testing_get_audit_logA

Retrieve the audit log of events in the workspace.

Toolset: Audit

Parameters:

  • since (string): Only include events at or after this ISO 8601 timestamp

  • userUuid (string): Filter events by PactFlow user UUID

  • type (string): Filter events by type (e.g. 'pact_publication')

  • sort (string): Sort order: '+timestamp' (asc, default) or '-timestamp' (desc)

  • from (string): Start result set from this audit event UUID (keyset pagination)

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (max 100) (default: 5)

Use Cases: 1. Review recent changes to pacticipants, webhooks, or secrets 2. Investigate who published a specific pact or verification 3. Filter events by user or event type for compliance reporting 4. Track deployment recording activity across environments

contract-testing_admin_list_usersA

List all users in the workspace (admin).

Toolset: Admin

Parameters:

  • active (boolean): Filter by active/inactive status

  • q (string): Filter by name or email

  • userType (number): 0 = regular users, 1 = system accounts

  • page (number): Page number (default: 1)

  • size (number): Results per page (default: 5)

contract-testing_admin_get_userA

Retrieve details for a specific user by UUID (admin).

Toolset: Admin

Parameters:

  • userId (string) required: UUID of the user

contract-testing_admin_create_userC

Create a new user account (admin).

Toolset: Admin

Parameters:

  • email (string) required: Email address of the new user

  • name (string) required: Display name of the new user

  • firstName (string): First name

  • lastName (string): Last name

  • externalIdpId (string): External identity provider ID (for SAML/SSO)

  • externalIdpUsername (string): External IdP username (for SAML/SSO)

contract-testing_admin_update_userA

Update a user's profile or active status (admin).

Toolset: Admin

Parameters:

  • userId (string) required: UUID of the user to update

  • active (boolean): Whether the user is active

  • email (string): New email address

  • firstName (string): First name

  • lastName (string): Last name

  • name (string): Display name

contract-testing_admin_delete_userB

Delete a user account (admin).

Toolset: Admin

Parameters:

  • userId (string) required: UUID of the user

contract-testing_admin_invite_usersB

Send invitations to new users (admin).

Toolset: Admin

Parameters:

  • users (array) required: List of users to invite

contract-testing_admin_set_user_rolesA

Replace all roles assigned to a user (admin).

Toolset: Admin

Parameters:

  • userId (string) required: UUID of the user

  • roles (array) required: Array of role UUIDs to assign

contract-testing_admin_add_role_to_userB

Add a single role to a user (admin).

Toolset: Admin

Parameters:

  • userId (string) required: UUID of the user

  • roleId (string) required: UUID of the role

contract-testing_admin_remove_role_from_userB

Remove a single role from a user (admin).

Toolset: Admin

Parameters:

  • userId (string) required: UUID of the user

  • roleId (string) required: UUID of the role

contract-testing_admin_list_teamsB

List all teams in the workspace (admin).

Toolset: Admin

Parameters:

  • q (string): Filter teams by name

  • page (number): Page number (default: 1)

  • size (number): Results per page (default: 5)

contract-testing_admin_get_teamA

Retrieve details for a specific team by UUID (admin).

Toolset: Admin

Parameters:

  • teamId (string) required: UUID of the team

contract-testing_admin_create_teamB

Create a new team (admin).

Toolset: Admin

Parameters:

  • name (string) required: Name of the team

  • administratorUuids (array): UUIDs of team administrators

  • environmentUuids (array): UUIDs of environments assigned to this team

  • pacticipantNames (array): Names of pacticipants assigned to this team

contract-testing_admin_update_teamB

Replace a team's configuration (admin).

Toolset: Admin

Parameters:

  • teamId (string) required: UUID of the team to update

  • name (string) required: Name of the team

  • administratorUuids (array): UUIDs of team administrators

  • environmentUuids (array): UUIDs of environments assigned to this team

  • pacticipantNames (array): Names of pacticipants assigned to this team

contract-testing_admin_delete_teamB

Delete a team (admin).

Toolset: Admin

Parameters:

  • teamId (string) required: UUID of the team

contract-testing_admin_list_team_usersA

List all users in a specific team (admin).

Toolset: Admin

Parameters:

  • teamId (string) required: UUID of the team

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_admin_get_team_userA

Check if a specific user is a member of a team (admin).

Toolset: Admin

Parameters:

  • teamId (string) required: UUID of the team

  • userId (string) required: UUID of the user

contract-testing_admin_set_team_usersA

Replace all members of a team (admin).

Toolset: Admin

Parameters:

  • teamId (string) required: UUID of the team

  • uuids (array) required: UUIDs of users to set as team members (replaces existing)

contract-testing_admin_patch_team_usersB

Add or remove individual users from a team using JSON Patch (admin).

Toolset: Admin

Parameters:

  • teamId (string) required: UUID of the team

  • operations (array) required: JSON Patch operations to apply

contract-testing_admin_remove_user_from_teamB

Remove a specific user from a team (admin).

Toolset: Admin

Parameters:

  • teamId (string) required: UUID of the team

  • userId (string) required: UUID of the user

contract-testing_admin_list_rolesA

List all roles defined in the workspace (admin).

Toolset: Admin

Parameters:

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_admin_get_roleA

Retrieve details for a specific role by UUID (admin).

Toolset: Admin

Parameters:

  • roleId (string) required: UUID of the role

contract-testing_admin_create_roleC

Create a new role with specific permissions (admin).

Toolset: Admin

Parameters:

  • name (string) required: Name of the role

  • permissions (array) required: Permissions granted by this role

  • description (string): Description of the role

contract-testing_admin_update_roleB

Update an existing role's name and permissions (admin).

Toolset: Admin

Parameters:

  • roleId (string) required: UUID of the role to update

  • name (string) required: Name of the role

  • permissions (array) required: Permissions granted by this role

  • description (string): Description of the role

contract-testing_admin_delete_roleB

Delete a role (admin).

Toolset: Admin

Parameters:

  • roleId (string) required: UUID of the role

contract-testing_admin_reset_rolesA

Reset all roles to their factory defaults (admin).

Toolset: Admin

Parameters: None

contract-testing_admin_list_permissionsB

List all available permission scopes (admin).

Toolset: Admin

Parameters:

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

contract-testing_admin_create_system_accountB

Create a new system account (admin).

Toolset: Admin

Parameters:

  • name (string) required: Name of the system account

contract-testing_admin_get_system_account_tokensB

Retrieve API tokens for a system account (admin).

Toolset: Admin

Parameters:

  • accountId (string) required: UUID of the system account

  • pageNumber (number): Page number (default: 1)

  • pageSize (number): Results per page (default: 5)

qmetry_fetch_qmetry_list_projectsA

Fetch QMetry projects list including projectID, name, projectKey, isArchived, viewIds and folderPath needed for other operations

Toolset: Projects

Parameters:

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

  • params (object) required

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • filter (string): Filter criteria as JSON string (default '[]') (default: "[]")

Output Description: JSON object containing list of projects details, including Version, Build Number(if greater than or equal to 1), Project ID, name, Project Key and Date Format

Use Cases: 1. Get project list to check user how many project access to particular apikey 2. Retrieve available fields of each project list including projectID, name, projectKey, isArchived, viewIds and folderPath needed for other operations 3. Validate project access and permissions

Examples:

  1. Get list of project available to user

{
  "params": {
    "showArchive": false
  }
}

Expected Output: Project active/non archived list including some important fields like projectID, name, projectKey, isArchived, viewIds and folderPath needed for other operations

  1. Get projects with custom pagination

{
  "params": {
    "showArchive": false
  },
  "page": 1,
  "limit": 10,
  "start": 0
}

Expected Output: List of projects with custom pagination settings

  1. Get not active/archived projects

{
  "params": {
    "showArchive": true
  }
}

Expected Output: List of all projects including archived ones (showArchive: true sent in payload)

  1. Filter projects by name

{
  "filter": "[{\"value\":\"MAC\",\"type\":\"string\",\"field\":\"name\"}]"
}

Expected Output: Filtered list of projects matching the name criteria

  1. Filter projects by project key

{
  "filter": "[{\"value\":\"MAC\",\"type\":\"string\",\"field\":\"projectKey\"}]"
}

Expected Output: List of projects filtered by project key (e.g. 'MAC', 'UT', etc.)

Hints: 1. Fetch list of projects available to user 2. Use 'default' project key when user doesn't specify one 3. Use params.showArchive: true/false to get archived/non-archived projects, default is false when not provided 4. Pagination supported for large result sets (start, page, limit parameters) 5. Filter parameter should be a JSON string with filter criteria 6. Common filter fields: 'name' (string), 'projectKey' (string)

qmetry_set_qmetry_project_infoA

Set current QMetry project for your account

Toolset: Projects

Parameters:

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

Output Description: JSON object containing project configuration details, confirmation of project switch, and available project metadata,including Version, Build Number(if greater than or equal to 1), Project ID, name, Project Key and Date Format

Use Cases: 1. Switch to a specific project before performing test case operations 2. Set project context for batch operations on test cases 3. Configure the default project for the current session 4. Validate access to a specific project before proceeding with operations

Examples:

  1. Set default project as active

{
  "projectKey": "default"
}

Expected Output: Project context set to 'default' with confirmation of project details

  1. Switch to UT project

{
  "projectKey": "UT"
}

Expected Output: Project context switched to 'UT' project with available configurations

  1. Set MAC project as active for test case operations

{
  "projectKey": "MAC"
}

Expected Output: Project context set to 'MAC' with viewIds and folder structure

Hints: 1. Always set the project context before performing test case operations in multi-project environments 2. Use the same project key that you'll use in subsequent test case operations 3. Common project keys include 'default', 'UT', 'MAC', 'VT' - check with your QMetry admin for available projects 4. This operation must be performed before fetching test cases if working with non-default projects 5. The project context persists for the current session until changed again

qmetry_fetch_qmetry_project_infoA

Fetch QMetry project information including viewId and folderPath needed for other operations

Toolset: Projects

Parameters:

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

Output Description: JSON object containing project details, viewIds, folderPaths, project configuration, 'dateTimeFormatID' (active date format ID), and 'dateTimeFormatNew' array (each entry: { id, name, unique_value } — use unique_value of the matching entry as the date format pattern for all API date fields).

Use Cases: 1. Get project configuration before fetching test cases 2. Retrieve available viewIds for test case listing 3. Get folderPath information for project navigation 4. Validate project access and permissions

Examples:

  1. Get default project info

{}

Expected Output: Project configuration with viewIds, folderPaths, and project details

  1. Get specific project info

{
  "projectKey": "MAC"
}

Expected Output: MAC project configuration with available views and folders

Hints: 1. Always call this first when user doesn't provide viewId or folderPath 2. Use 'default' project key when user doesn't specify one 3. Extract viewId from latestViews.TC.viewId for test case operations 4. Use empty string '' as folderPath for root directory 5. DATE FORMAT — IMPORTANT: response contains 'dateTimeFormatID' (number) and 'dateTimeFormatNew' (array). 6. dateTimeFormatID = active format ID for this project. 7. dateTimeFormatNew = [{ id, name, unique_value }] — find entry where id === dateTimeFormatID. 8. unique_value is the authoritative date format pattern using Java/QMetry conventions: 9. yyyy = 4-digit year | MM = 2-digit month (01-12) | dd = 2-digit day | MMM = 3-letter month (Jan/Feb/...) 10. Example mappings: 11. unique_value 'MM-dd-yyyy' → format: 12-25-2024 12. unique_value 'dd-MM-yyyy' → format: 25-12-2024 13. unique_value 'yyyy-MM-dd' → format: 2024-12-25 14. unique_value 'dd-MMM-yyyy' → format: 25-Dec-2024 15. Always use this format when sending date values in any create/update payload. 16. Always parse user-provided dates and reformat them to this pattern before sending to API.

qmetry_fetch_releases_and_cyclesA

Fetch QMetry releases and cycles from the current project

Toolset: Projects

Parameters:

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

  • showArchive (boolean): Whether to include archived records in the results. When true, returns both active and archived items. When false, returns only active (non-archived) items. Applies to any entity type being fetched (test cases, requirements, releases, cycles, builds, platforms, etc.).

Output Description: JSON object with project hierarchy containing releases and their associated cycles

Use Cases: 1. Fetch associated releases and cycles of current project 2. Fetch available releases and cycles of current project 3. Get release and cycle information for test planning 4. List all releases and cycles in a project 5. Search for specific releases using release name or ID 6. Fetch cycle lists based on release ID 7. Search for specific cycles using cycle name or ID 8. Get project structure for test planning and execution 9. Retrieve release hierarchy for reporting purposes

Examples:

  1. Get active releases and cycles (default behavior)

{}

Expected Output: List of active releases and cycles excluding archived ones (showArchive: false sent in payload)

  1. Get active/unarchived releases and cycles explicitly

{
  "showArchive": false
}

Expected Output: List of active releases and cycles excluding archived ones (showArchive: false sent in payload)

  1. Get not active/archived releases and cycles

{
  "showArchive": true
}

Expected Output: List of all releases and cycles including archived ones (showArchive: true sent in payload)

Hints: 1. Use 'default' project key when user doesn't specify one 2. PAYLOAD SCENARIOS: 3. - No showArchive parameter → payload: {showArchive: false} → Returns only active releases/cycles 4. - showArchive: false → payload: {showArchive: false} → Returns only active/non-archived releases/cycles 5. - showArchive: true → payload: {showArchive: true} → Returns all releases/cycles including archived ones 6. Default behavior always excludes archived items unless explicitly requested 7. Releases contain cycles - use this hierarchy for test execution planning 8. Each release can have multiple cycles representing different testing phases

qmetry_fetch_buildsA

Fetch QMetry builds from the current project

Toolset: Projects

Parameters:

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

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • filter (string): Filter criteria as JSON string (default '[]') (default: "[]")

Output Description: JSON object with builds list and pagination metadata

Use Cases: 1. Fetch all from the current project 2. Fetch all available builds for test execution planning 3. Get build metadata for test run assignments 4. List builds for reporting and analytics 5. Filter builds by name or archive status 6. Get paginated build results for large projects 7. Retrieve build information for CI/CD integration 8. Search for specific builds using filters 9. Get build details for test execution history

Examples:

  1. Get all builds (default behavior)

{}

Expected Output: List of all builds with default pagination (10 items per page)

  1. Get builds with custom pagination

{
  "page": 1,
  "limit": 10,
  "start": 0
}

Expected Output: List of builds with custom pagination settings

  1. Filter builds by name

{
  "filter": "[{\"value\":\"Build 1.0\",\"type\":\"string\",\"field\":\"name\"}]"
}

Expected Output: Filtered list of builds matching the name criteria

  1. Filter builds by archive status

{
  "filter": "[{\"value\":[1,0],\"type\":\"list\",\"field\":\"isArchived\"}]"
}

Expected Output: List of builds filtered by archive status (archived and non-archived)

Hints: 1. Use 'default' project key when user doesn't specify one 2. Default pagination: start=0, page=1, limit=10 3. Filter parameter should be a JSON string with filter criteria 4. Common filter fields: 'name' (string), 'isArchived' (list of 0,1) 5. Empty payload {} is sent when no parameters are provided 6. Builds are also known as 'drops' in QMetry terminology 7. Use builds for associating test executions with specific software versions

qmetry_fetch_platformsA

Fetch QMetry platforms from the current project

Toolset: Projects

Parameters:

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

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • sort (string): Sort criteria as JSON string (default '[{"property":"platformID","direction":"DESC"}]') (default: "[{"property":"platformID","direction":"DESC"}]")

  • filter (string): Filter criteria as JSON string (default '[]') (default: "[]")

Output Description: JSON object with platforms list and pagination metadata

Use Cases: 1. Fetch all platforms from the current project 2. Get platform metadata for test execution planning 3. List platforms for test environment selection 4. Filter platforms by name or properties 5. Get paginated platform results for large projects 6. Retrieve platform information for cross-platform testing 7. Search for specific platforms using filters 8. Get platform details for test execution assignment

Examples:

  1. Get all platforms (default behavior)

{}

Expected Output: List of all platforms with default pagination (10 items per page)

  1. Get platforms with custom pagination

{
  "page": 1,
  "limit": 10,
  "start": 0
}

Expected Output: List of platforms with custom pagination settings

  1. Filter platforms by name

{
  "filter": "[{\"value\":\"Chrome\",\"type\":\"string\",\"field\":\"name\"}]"
}

Expected Output: Filtered list of platforms matching the name criteria

  1. Filter platforms by archive status

{
  "filter": "[{\"value\":[1,0],\"type\":\"list\",\"field\":\"isArchived\"}]"
}

Expected Output: List of platforms filtered by archive status (archived and non-archived)

  1. Get only archived platforms

{
  "filter": "[{\"value\":[1],\"type\":\"list\",\"field\":\"isArchived\"}]"
}

Expected Output: List of only archived platforms

  1. Get only active/non-archived platforms

{
  "filter": "[{\"value\":[0],\"type\":\"list\",\"field\":\"isArchived\"}]"
}

Expected Output: List of only active/non-archived platforms

  1. Get platforms with custom sorting

{
  "sort": "[{\"property\":\"name\",\"direction\":\"ASC\"}]"
}

Expected Output: List of platforms sorted by name in ascending order

Hints: 1. Use 'default' project key when user doesn't specify one 2. Default pagination: start=0, page=1, limit=10 3. Filter parameter should be a JSON string with filter criteria 4. Sort parameter should be a JSON string with sort criteria 5. Default sort: platformID descending 6. Common filter fields: 'name' (string), 'isArchived' (list of 0,1) for archive status 7. IMPORTANT: Always use 'isArchived' field for filtering by archive status, even though response shows 'isPlatformArchived' 8. Archive status values: 0 = active/non-archived, 1 = archived 9. Empty payload {} is sent when no parameters are provided 10. Use platforms for cross-platform testing and environment selection

qmetry_create_releaseA

Create a new release in QMetry with optional cycle for test planning and execution tracking

Toolset: Projects

Parameters:

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

  • release (object) required

  • cycle (object): Optional cycle to create within the release

Output Description: JSON object containing the created release ID, release details, and cycle information if provided

Use Cases: 1. Create a new release for a major product version (e.g., v2.0, Q1 Release) 2. Create a release with an initial cycle for immediate test planning 3. Set up release dates for sprint planning and milestone tracking 4. Organize test execution by product versions and cycles 5. Create release hierarchy for better test planning and reporting 6. Establish test execution phases with releases and cycles

Examples:

  1. Create a basic release with just a name

{
  "release": {
    "name": "Release 2.0"
  }
}

Expected Output: Release 'Release 2.0' created successfully with generated release ID

  1. Create a release with description and dates

{
  "release": {
    "name": "Q1 2024 Release",
    "description": "First quarter release for 2024",
    "startDate": "01-01-2024",
    "targetDate": "31-03-2024"
  }
}

Expected Output: Release 'Q1 2024 Release' created with start date 01-01-2024 and target date 31-03-2024

  1. Create a release with an initial cycle

{
  "release": {
    "name": "Release 3.0",
    "description": "Major product update"
  },
  "cycle": {
    "name": "Sprint 1",
    "isLocked": false,
    "isArchived": false
  }
}

Expected Output: Release 'Release 3.0' created with cycle 'Sprint 1' for test execution planning

  1. Create a release with all details

{
  "release": {
    "name": "Summer 2024 Release",
    "description": "Summer product release with new features",
    "startDate": "01-06-2024",
    "targetDate": "31-08-2024"
  },
  "cycle": {
    "name": "Beta Testing Cycle",
    "isLocked": false
  }
}

Expected Output: Release 'Summer 2024 Release' created with dates and 'Beta Testing Cycle' for test execution

Hints: 1. CRITICAL: release.name is REQUIRED - must provide a name for the release 2. Date format depends on QMetry instance configuration: DD-MM-YYYY or MM-DD-YYYY 3. Check your QMetry instance settings to determine the correct date format 4. If dates are in wrong format, QMetry will return an error - verify format with admin 5. projectID is optional in the release object - it will be auto-resolved from the project key if not provided 6. To explicitly set projectID, first call FETCH_PROJECT_INFO to get the numeric project ID 7. cycle parameter is completely optional - omit it if you only want to create a release 8. If providing cycle, cycle.name is REQUIRED 9. cycle.isLocked defaults to false if not provided - set to true to prevent modifications 10. cycle.isArchived defaults to false if not provided - set to true to archive immediately (rare) 11. Releases can have multiple cycles added later using other tools 12. Use descriptive release names like 'Release 2.0', 'Q1 2024', 'Sprint 15' for better organization 13. startDate and targetDate help with sprint planning and milestone tracking 14. Creating a release with a cycle is useful for immediate test planning after release creation 15. Release hierarchy: Project → Release → Cycle → Test Execution 16. After creating a release, you can associate test suites and test cases with it 17. Use FETCH_RELEASES_CYCLES tool after creation to verify the release was created successfully

qmetry_create_cycleA

Create a new cycle within an existing release in QMetry for test execution planning

Toolset: Projects

Parameters:

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

  • cycle (object) required

Output Description: JSON object containing the created cycle ID, cycle details, and association with the release

Use Cases: 1. Create a new test cycle for a sprint within an existing release 2. Add additional testing phases to an existing release 3. Set up regression testing cycles for a specific release 4. Organize test execution by sprints, phases, or iterations 5. Create cycles with specific date ranges for milestone tracking 6. Establish test execution phases within release planning

Examples:

  1. Create a basic cycle with just a name in a release

{
  "cycle": {
    "name": "Sprint 2",
    "releaseID": 12345
  }
}

Expected Output: Cycle 'Sprint 2' created successfully in release ID 12345

  1. Create a cycle with description and dates

{
  "cycle": {
    "name": "Regression Testing Cycle",
    "description": "Full regression testing for release 2.0",
    "startDate": "15-01-2024",
    "targetDate": "31-01-2024",
    "releaseID": 12345
  }
}

Expected Output: Cycle 'Regression Testing Cycle' created with start date 15-01-2024 and target date 31-01-2024 in release 12345

  1. Create a locked cycle to prevent modifications

{
  "cycle": {
    "name": "Final QA Cycle",
    "description": "Locked cycle for final QA testing",
    "isLocked": true,
    "isArchived": false,
    "releaseID": 12345
  }
}

Expected Output: Locked cycle 'Final QA Cycle' created in release 12345 to prevent modifications

  1. Create a cycle with all details including project ID and dates

{
  "cycle": {
    "name": "Sprint 3 - Feature Testing",
    "description": "Testing new features for Sprint 3",
    "startDate": "01-02-2024",
    "targetDate": "15-02-2024",
    "isLocked": false,
    "isArchived": false,
    "projectID": 67890,
    "releaseID": 12345
  }
}

Expected Output: Cycle 'Sprint 3 - Feature Testing' created with dates and project context in release 12345

Hints: 1. CRITICAL: cycle.releaseID is REQUIRED - must provide the release ID to associate this cycle with 2. CRITICAL: cycle.name is REQUIRED - must provide a name for the cycle 3. HOW TO GET releaseID: 4. 1. Call FETCH_RELEASES_CYCLES tool to get all releases and their IDs 5. 2. From the response, get value from projects.releases[].releaseID 6. 3. Use that numeric releaseID in the cycle.releaseID parameter 7. Example: Release 'Q1 2024' might have releaseID: 12345 8. CRITICAL WORKFLOW - IF USER PROVIDES RELEASE NAME: 9. 1. User says: 'Create cycle Sprint 2 in release Q1 2024' 10. 2. You MUST first call FETCH_RELEASES_CYCLES tool to get all releases 11. 3. Search the response for release with name 'Q1 2024' 12. 4. Extract projects.releases[].releaseID from matching release 13. 5. Use that releaseID in cycle.releaseID parameter 14. 6. If release name not found, inform user and list available releases 15. Example workflow: 16. - User request: 'Create cycle Sprint 2 in Release 2.0' 17. - Step 1: Call FETCH_RELEASES_CYCLES 18. - Step 2: Find release where name = 'Release 2.0', get its releaseID (e.g., 12345) 19. - Step 3: Call CREATE_CYCLE with cycle.releaseID = 12345 20. RELEASE NAME RESOLUTION: 21. - NEVER assume or guess release IDs - always fetch from API 22. - Release names are user-defined strings (e.g., 'Q1 2024', 'Release 2.0', 'Sprint 15') 23. - Release IDs are numeric identifiers assigned by QMetry (e.g., 12345, 67890) 24. - Match release names case-insensitively when searching 25. - If multiple releases match the name, ask user to clarify or use the most recent one 26. - FETCH_RELEASES_CYCLES returns: projects.releases[] array with name and releaseID fields 27. Date format depends on QMetry instance configuration: DD-MM-YYYY or MM-DD-YYYY 28. Check your QMetry instance settings to determine the correct date format 29. If dates are in wrong format, QMetry will return an error - verify format with admin 30. projectID is optional in the cycle object - it will be auto-resolved from the project key if not provided 31. To explicitly set projectID, first call FETCH_PROJECT_INFO to get the numeric project ID 32. cycle.isLocked defaults to false if not provided - set to true to prevent modifications 33. cycle.isArchived defaults to false if not provided - set to true to archive immediately (rare) 34. Use descriptive cycle names like 'Sprint 2', 'Regression Cycle', 'Alpha Testing' for better organization 35. startDate and targetDate help with sprint planning and milestone tracking 36. Cycle hierarchy: Project → Release → Cycle → Test Execution 37. After creating a cycle, you can associate test suites and test cases with it 38. Use FETCH_RELEASES_CYCLES tool after creation to verify the cycle was created successfully 39. DIFFERENCE FROM CREATE_RELEASE: This tool creates a cycle in an EXISTING release, while CREATE_RELEASE can create a release with an optional cycle 40. If you need to create both a release and a cycle together, use CREATE_RELEASE tool instead 41. If release doesn't exist yet, create it first with CREATE_RELEASE, then add more cycles with this tool

qmetry_update_cycleA

Update an existing cycle in QMetry for test execution planning

Toolset: Projects

Parameters:

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

  • cycle (object) required

Output Description: JSON object containing the updated cycle details and confirmation of update

Use Cases: 1. Update cycle name for better organization 2. Modify cycle dates to reflect schedule changes 3. Adjust testing phase timelines within a release 4. Update cycle metadata for sprint tracking 5. Revise milestone dates for test execution planning 6. Rename cycles to match updated sprint naming conventions

Examples:

  1. Update cycle name

{
  "cycle": {
    "name": "Alpha_v1_Updated",
    "buildID": 1494,
    "releaseID": 3729
  }
}

Expected Output: Cycle updated successfully with new name 'Alpha_v1_Updated'

  1. Update cycle dates

{
  "cycle": {
    "startDate": "10-10-2018",
    "targetDate": "11-11-2018",
    "buildID": 1494,
    "releaseID": 3729
  }
}

Expected Output: Cycle dates updated successfully with new start date 10-10-2018 and target date 11-11-2018

  1. Update cycle name and dates together

{
  "cycle": {
    "name": "Sprint 2 - Updated",
    "startDate": "15-01-2024",
    "targetDate": "31-01-2024",
    "buildID": 1494,
    "releaseID": 3729
  }
}

Expected Output: Cycle updated with new name and dates successfully

Hints: 1. CRITICAL: cycle.buildID is REQUIRED - must provide the build ID to identify the cycle to update 2. CRITICAL: cycle.releaseID is REQUIRED - must provide the release ID to identify the cycle to update 3. HOW TO GET buildID and releaseID: 4. 1. Call FETCH_RELEASES_CYCLES tool (API: 'Cycle/List') to get all cycles 5. 2. From the response, get buildID from projects.releases[].builds[].buildID 6. 3. From the response, get releaseID from projects.releases[].releaseID 7. 4. Use those numeric IDs in cycle.buildID and cycle.releaseID parameters 8. Example: Cycle 'Sprint 2' might have buildID: 1494 and releaseID: 3729 9. CRITICAL WORKFLOW - IF USER PROVIDES CYCLE NAME: 10. 1. User says: 'Update cycle Sprint 2 to change dates' 11. 2. You MUST first call FETCH_RELEASES_CYCLES tool to get all cycles 12. 3. Search the response for cycle with matching name 'Sprint 2' 13. 4. Extract buildID and releaseID from the matching cycle 14. 5. Use those IDs in cycle.buildID and cycle.releaseID parameters 15. 6. If cycle name not found, inform user and list available cycles 16. Example workflow: 17. - User request: 'Update cycle Alpha_v1 name to Alpha_v1_Updated' 18. - Step 1: Call FETCH_RELEASES_CYCLES 19. - Step 2: Find cycle where name = 'Alpha_v1', get its buildID (e.g., 1494) and releaseID (e.g., 3729) 20. - Step 3: Call UPDATE_CYCLE with cycle.buildID = 1494 and cycle.releaseID = 3729 21. CYCLE IDENTIFICATION: 22. - NEVER assume or guess buildID or releaseID - always fetch from API 23. - Cycle names are user-defined strings (e.g., 'Sprint 2', 'Alpha_v1', 'Regression Cycle') 24. - buildID and releaseID are numeric identifiers assigned by QMetry 25. - Match cycle names case-insensitively when searching 26. - If multiple cycles match the name, ask user to clarify or use the most recent one 27. - FETCH_RELEASES_CYCLES returns: projects.releases[].builds[] array with name, buildID, and releaseID 28. Date format depends on QMetry instance configuration: DD-MM-YYYY or MM-DD-YYYY 29. Check your QMetry instance settings to determine the correct date format 30. NOTE: To verify/update the Date Format - Go to QMetry -> User Profile 31. If dates are in wrong format, QMetry will return an error - verify format with admin 32. You can update name, startDate, or targetDate independently or together 33. Only include the fields you want to update - other fields will remain unchanged 34. startDate and targetDate help with sprint planning and milestone tracking 35. Cycle hierarchy: Project → Release → Cycle → Test Execution 36. After updating a cycle, you can verify changes using FETCH_RELEASES_CYCLES tool 37. DIFFERENCE FROM CREATE_CYCLE: This tool updates an EXISTING cycle, while CREATE_CYCLE creates a new one

qmetry_create_test_caseA

Create a new test case in QMetry with steps, metadata, and release/cycle mapping.

Toolset: Test Cases

Parameters:

  • tcFolderID (string): Test Case folder ID - SYSTEM AUTOMATICALLY RESOLVES THIS. Leave empty unless you have a specific folder ID. System will fetch project info using the projectKey and extract rootFolders.TC.id automatically. Manual folder ID only needed if you want to target a specific sub-folder.

  • skipSteps (boolean): Set to true ONLY when the user explicitly says they do NOT want steps created (e.g. 'create test case without steps', 'no steps', 'skip steps'). When true, the 'steps' field must be omitted entirely. When false or absent (the default), steps MUST always be included — auto-generate them from context if the user did not provide them.

  • steps (array): STEPS RULE — include this field unless the user explicitly says NOT to create steps.

NEVER send steps: [] (empty array) — always send at least 1 valid step object. Omit this field entirely (and set skipSteps: true) ONLY when the user explicitly asks to skip steps.

HOW TO POPULATE:

  • If user explicitly provides steps: parse each step into { orderId, description, inputData?, expectedOutcome? }.

  • If user does NOT provide steps (and did not say to skip them): auto-generate meaningful steps based on the test case name, description, and context. Use your knowledge to infer 2-5 logical, realistic steps for the feature or flow being tested. Example: name='Login Test Case' → [{orderId:1, description:'Navigate to login page'}, {orderId:2, description:'Enter credentials'}, {orderId:3, description:'Submit and verify success'}]

  • If user explicitly said NOT to create steps: omit this field and set skipSteps: true.

STEP DEFAULT VALUES: After building the steps array, check 'stepDefaultValues' from Fetch UDF Layout. stepDefaultValues shape: { fieldName: defaultValue } For each step: for each key in stepDefaultValues, if the user did NOT explicitly provide a value for that field → add it to step.UDF with the default value. Auto-apply silently — do NOT ask the user.

Step object fields: orderId (required): sequential integer starting at 1 description (required): step action text inputData (optional): test data for this step expectedOutcome (optional): what should happen after this step UDF (optional): step-level custom fields — auto-fill defaults from stepDefaultValues tcStepID (omit on create — only used when updating existing steps)

  • name (string) required

  • priority (number)

  • component (array)

  • testcaseOwner (number)

  • testCaseState (number)

  • testCaseType (number)

  • estimatedTime (number): Estimated execution time in SECONDS (e.g. 3600 = 1 hour, 36000 = 10 hours). NOT minutes.

  • testingType (number)

  • description (string)

  • associateRelCyc (boolean)

  • releaseCycleMapping (array): Release/cycle mapping. Set associateRelCyc=true when providing this. version field defaults to 1 if not specified.

  • udfFields (record<string, union>): Flat UDF field values. Keys = UDF field names from 'Fetch UDF Layout'. Values depend on fieldTypeName: STRING/LARGETEXT: string, NUMBER: number, DATETIMEPICKER: date string ('14-08-2026'), LOOKUPLIST: numeric ID, MULTILOOKUPLIST: array of IDs [101, 102], CASCADINGLIST: { parent: 101, child: 102 }. Call 'Fetch UDF Layout' with entityType + pageName='ADD' to discover available fields and list option IDs.

Output Description: JSON object containing the new test case ID, summary, and creation metadata.

Use Cases: 1. Create a basic test case with just a name and folder 2. Add detailed steps with custom fields (UDFs) to a test case 3. Associate test case with specific release/cycle for planning 4. Set priority, owner, component, and other metadata using valid IDs from project info 5. Create test cases for automation or manual testing types 6. Add test case to a specific folder using tcFolderID 7. Include estimated execution time and description 8. Map test case to multiple cycles/releases

Examples:

  1. MOST COMMON: User provides only a name — steps are auto-generated from context.

{
  "name": "Login Test Case",
  "steps": [
    {
      "orderId": 1,
      "description": "Navigate to the login page"
    },
    {
      "orderId": 2,
      "description": "Enter valid username and password"
    },
    {
      "orderId": 3,
      "description": "Click the Login button"
    },
    {
      "orderId": 4,
      "description": "Verify successful login and dashboard is shown"
    }
  ]
}

Expected Output: Test case created with auto-generated steps inferred from the test case name 'Login Test Case'.

  1. Create test case with metadata only — steps auto-generated from context

{
  "tcFolderID": "102653",
  "name": "Login Test Case",
  "priority": 2025268,
  "testCaseState": 2025271,
  "estimatedTime": 3600,
  "description": "Verifies login flow",
  "steps": [
    {
      "orderId": 1,
      "description": "Navigate to the login page"
    },
    {
      "orderId": 2,
      "description": "Enter valid credentials"
    },
    {
      "orderId": 3,
      "description": "Submit the login form"
    },
    {
      "orderId": 4,
      "description": "Verify redirection to the home page"
    }
  ]
}

Expected Output: Test case created with metadata and auto-generated steps based on description 'Verifies login flow'.

  1. SCENARIO 1: User explicitly asked for steps — 'create test case with step 1 - Go to login page, step 2 - enter credentials'

{
  "tcFolderID": "102653",
  "name": "Login Flow Test",
  "steps": [
    {
      "orderId": 1,
      "description": "Go to login page"
    },
    {
      "orderId": 2,
      "description": "Enter credentials"
    }
  ]
}

Expected Output: Test case created with 2 steps because user explicitly mentioned steps in prompt.

  1. SCENARIO 1: User provided steps with full metadata (steps explicitly mentioned in prompt)

{
  "tcFolderID": "102653",
  "name": "Test Case 1",
  "steps": [
    {
      "orderId": 1,
      "description": "First Step",
      "inputData": "First Data",
      "expectedOutcome": "First Outcome",
      "UDF": {
        "customField1": "Custom Field Data A",
        "customField2": "Custom Field Data B"
      }
    }
  ],
  "priority": 2025268,
  "component": [
    2025328
  ],
  "testcaseOwner": 1467,
  "testCaseState": 2025271,
  "testCaseType": 2025282,
  "estimatedTime": 10,
  "description": "Description",
  "testingType": 2025275,
  "associateRelCyc": true,
  "releaseCycleMapping": [
    {
      "release": 14239,
      "cycle": [
        21395
      ],
      "version": 1
    }
  ]
}

Expected Output: Test case created with steps because user explicitly requested steps. All metadata populated.

  1. SCENARIO 3: User explicitly says no steps — 'create a test case without any steps'

{
  "name": "Login Test Case",
  "skipSteps": true
}

Expected Output: Test case created with no steps because user explicitly asked to skip them.

  1. User provides name only — steps auto-generated from test case name context

{
  "name": "Password Reset Test Case",
  "steps": [
    {
      "orderId": 1,
      "description": "Navigate to the login page"
    },
    {
      "orderId": 2,
      "description": "Click on 'Forgot Password' link"
    },
    {
      "orderId": 3,
      "description": "Enter registered email address and submit the reset form"
    },
    {
      "orderId": 4,
      "description": "Click reset link from email and set a new password"
    },
    {
      "orderId": 5,
      "description": "Verify login succeeds with the new password"
    }
  ]
}

Expected Output: Test case created with 5 auto-generated steps inferred from the name 'Password Reset Test Case'. No user-provided steps — LLM generated them from context.

Hints: 1. ╔══════════════════════════════════════════════════════════════════════════════╗ 2. ║ STEPS RULE — INCLUDE STEPS UNLESS USER EXPLICITLY ASKS TO SKIP THEM ║ 3. ╚══════════════════════════════════════════════════════════════════════════════╝ 4. 5. Include 'steps' in the payload unless the user explicitly says NOT to create steps. 6. NEVER send steps: [] (empty array) — either send at least 1 valid step object or omit steps with skipSteps: true. 7. 8. HOW TO POPULATE STEPS: 9. 10. SCENARIO 1 — User explicitly provides steps in their prompt. 11. Trigger phrases: 'with steps', 'step 1 -', 'add steps', 'include steps', 'following steps', 'these steps'. 12. Action: Parse the user's step text into { orderId, description, inputData?, expectedOutcome? } objects. 13. Example: 'create test case, step 1 - open browser, step 2 - click login' 14. → steps: [{ orderId: 1, description: 'open browser' }, { orderId: 2, description: 'click login' }] 15. 16. SCENARIO 2 — User does NOT mention steps at all. 17. Action: Generate meaningful steps based on the test case name, description, and all other context provided. 18. Use your knowledge of the feature/flow being tested to infer logical, realistic test steps. 19. Always include 2-5 steps that make sense for the test case. 20. Example: name='Login Test Case' → steps: [{orderId:1, description:'Navigate to login page'}, {orderId:2, description:'Enter credentials'}, {orderId:3, description:'Submit form'}, {orderId:4, description:'Verify login success'}] 21. 22. SCENARIO 3 — User explicitly says NOT to create steps. 23. Trigger phrases: 'no steps', 'without steps', 'skip steps', 'don't add steps', 'without any steps'. 24. Action: Set skipSteps: true and omit the 'steps' field entirely from the payload. 25. Example: 'create test case Login Test Case without steps' → { name: 'Login Test Case', skipSteps: true } 26. 27. STEP DEFAULT VALUES — apply after step generation (scenarios 1 and 2 only): 28. After building the steps array (from user input OR auto-generated), check 'stepDefaultValues' from Fetch UDF Layout. 29. stepDefaultValues shape: { fieldName: defaultValue } — e.g. { 'lookup19': 5232630 } 30. For EACH step, for EACH key in stepDefaultValues: 31. IF the user has NOT explicitly specified a value for that field in the step → set it to the default value. 32. This applies to step UDF fields (step.UDF) that have defaults configured. 33. Auto-apply silently — do NOT ask the user. 34. Example: stepDefaultValues = { status: 5232630 } → every step's UDF.status = 5232630 unless user gave a different value. 35. 36. DECISION TABLE: 37. | Situation | Action | 38. |------------------------------------|-----------------------------------------------------------------------------| 39. | User provided steps | Use steps from user's prompt; fill step UDF defaults from stepDefaultValues | 40. | User did not mention steps | Auto-generate steps from context; fill step UDF defaults from stepDefaultValues | 41. | User explicitly said NO steps | Set skipSteps: true, omit 'steps' field entirely | 42. 43. ╚══════════════════════════════════════════════════════════════════════════════╝ 44. 45. ╔══════════════════════════════════════════════════════════════════╗ 46. ║ STEP 0 — NON-NEGOTIABLE: Call 'Fetch UDF Layout' BEFORE create ║ 47. ╚══════════════════════════════════════════════════════════════════╝ 48. NEVER call 'Create Test Case' without first calling 'Fetch UDF Layout' with entityType='TC', pageName='ADD'. 49. Skipping this step WILL cause 400 errors (CO.MANDATORY_FIELDS_MISSING) because mandatory fields and defaults are unknown. 50. This rule has NO exceptions — not even when the user only provided a name and nothing else. 51. 52. === MANDATORY PRE-CREATE CHECK === 53. 54. SYSTEM FIELDS mandatory check — use 'systemFields' array from Fetch UDF Layout: 55. Each entry: { name, label, fieldTypeName, isMandatory } 56. isMandatory=true (allowBlank=false in QMetry) means the field MUST have a value. 57. IMPORTANT: QMetry's API sometimes returns 'systemFields: []' (empty) even when system fields ARE mandatory. 58. If 'systemFields' is empty, treat the following as always mandatory: name (Summary), testCaseState (Status). 59. For testCaseState default: check 'customListObjs.testCaseState' from Fetch Project Info — use first non-archived entry as fallback. 60. 61. UDF FIELDS mandatory check — use 'fields' array from Fetch UDF Layout: 62. Each entry: { name, label, fieldTypeName, isMandatory, listName? } 63. IMPORTANT: QMetry's API sometimes returns isMandatory=false for fields that ARE enforced as mandatory. 64. The 'isMandatory' flag is a hint, not a guarantee. Trust the actual API error over this flag. 65. When isMandatory=true: field MUST have a value. 66. 67. DEFAULT VALUES — use 'defaultValues' object from Fetch UDF Layout: 68. Shape: { fieldName: defaultValueId } e.g. { 'lookup19': 5232630, 'estimatedTime': 18305.0, 'priority': 5232497 } 69. These are pre-configured QMetry defaults. ALWAYS auto-apply them — even when user did not mention the field. 70. IMPORTANT: QMetry's API sometimes returns 'defaultValues: {}' (empty) even when defaults exist in QMetry settings. 71. If 'defaultValues' is empty, you cannot auto-apply — ask user for mandatory fields without defaults. 72. RULE: if isMandatory=true AND defaultValues[field.name] exists → use default, do NOT ask user. 73. RULE: if isMandatory=true AND NO defaultValues[field.name] → MUST ask user before creating. 74. RULE: if isMandatory=false AND defaultValues[field.name] exists → auto-apply default if user didn't specify. 75. RULE: if isMandatory=false AND no default → skip if user didn't provide. 76. 77. ╔══════════════════════════════════════════════════════════════════════════╗ 78. ║ PRE-FLIGHT DEFAULT SWEEP — MANDATORY STEP BEFORE EVERY CREATE CALL ║ 79. ╚══════════════════════════════════════════════════════════════════════════╝ 80. After resolving mandatory fields, do a full sweep of ALL defaultValues entries: 81. For EACH key in defaultValues: 82. IF the user did not explicitly provide that field → add it to the payload using the default value. 83. This applies regardless of isMandatory — non-mandatory defaults MUST also be auto-applied. 84. Example: defaultValues = { lookup19: 5232630, estimatedTime: 18305, priority: 5232497 } 85. → user only said 'create a test case named X' 86. → payload MUST include: lookup19=5232630, estimatedTime=18305, priority=5232497 87. → WRONG to omit priority/estimatedTime just because they are not mandatory — they have defaults. 88. Skipping this sweep = missing fields in the created record = user-visible data loss. 89. ╚══════════════════════════════════════════════════════════════════════════╝ 90. 91. TEST CASE STEPS — always required (see STEPS RULE above): 92. stepSystemFields: built-in step fields { name, label, fieldTypeName, isMandatory } 93. stepFields: step-level UDF fields { name, label, fieldTypeName, isMandatory, listName? } 94. Mandatory stepFields UDFs (isMandatory=true) must be filled in step.UDF — use stepDefaultValues for defaults, else a placeholder value. 95. STEP DEFAULT VALUES: use 'stepDefaultValues' object from Fetch UDF Layout — same auto-fill logic as defaultValues. 96. For EACH key in stepDefaultValues: if user has NOT explicitly provided a value for that step field → auto-apply the default silently. 97. This applies to all steps (both user-provided and auto-generated). 98. 99. DECISION MATRIX: 100. | isMandatory | Has default | Action | 101. |-------------|-------------|-------------------------------------| 102. | true | YES | Auto-fill with default, no ask | 103. | true | NO | Ask user before creating | 104. | false | YES | Auto-fill with default — REQUIRED | 105. | false | NO | Skip if user didn't provide | 106. 107. Only after ALL mandatory fields are resolved AND default sweep is complete → proceed with create. 108. === END MANDATORY PRE-CREATE CHECK === 109. 110. === ERROR RECOVERY: CO.MANDATORY_FIELDS_MISSING === 111. If create fails with error code 'CO.MANDATORY_FIELDS_MISSING', DO NOT give up. Auto-recover: 112. 1. Parse the 'MISSING_FIELDS' list from the error response (comma-separated field labels). 113. 2. Match each label against 'fields[].label' and 'systemFields[].label' from the Fetch UDF Layout response. 114. 3. For matched UDF fields: check 'listOptions[field.listName]' for valid option IDs. 115. 4. For matched system fields (e.g. 'Status'): check 'customListObjs.testCaseState' from project info. 116. 5. If the field has a 'defaultValues' entry: auto-fill it silently. 117. 6. If no default exists: ask the user ONLY for the missing fields by label. 118. 7. Retry create with the resolved values added to the payload. 119. NEVER ask user to 'try again' manually — resolve and retry automatically. 120. === END ERROR RECOVERY === 121. 122. === DATE FORMAT CHECK (MANDATORY — EVERY CREATE REQUEST) === 123. ALWAYS call 'Fetch QMetry Project Info' before every create request — not only when the user explicitly mentions a date. 124. Any UDF field could be a DATETIMEPICKER. Wrong format causes QMetry to silently discard the field value (API returns success but value is NOT stored — no error). 125. Project info response contains 'dateTimeFormatID' and 'dateTimeFormatNew' array. 126. STEP 1: From project info, read dateTimeFormatID (e.g. 3). 127. STEP 2: Find entry in dateTimeFormatNew where id === dateTimeFormatID → read its unique_value (e.g. 'yyyy-MM-dd'). 128. STEP 3: unique_value is the Java/QMetry format pattern. Mapping: 129. yyyy = 4-digit year | MM = 2-digit month (01-12) | dd = 2-digit day | MMM = 3-letter month (Jan/Feb/...) 130. Example: id=1 → MM-dd-yyyy → '10-25-2000' | id=2 → dd-MM-yyyy → '25-10-2000' | id=3 → yyyy-MM-dd → '2000-10-25' | id=4 → dd-MMM-yyyy → '25-Oct-2000' 131. STEP 4: For EVERY DATETIMEPICKER field in the payload (user-provided OR from defaultValues): 132. - Parse the date regardless of what format the user typed 133. - Re-format it using the active unique_value pattern 134. - Send the re-formatted string to the API 135. Examples with unique_value='yyyy-MM-dd': 136. User says '25 Dec 2024' → send '2024-12-25' 137. User says '12/25/2024' → send '2024-12-25' 138. Default value is a date string '2024-12-25' → already correct, keep it 139. NEVER send a date in a format different from the project's active dateTimeFormatID format. 140. Fetch project info ONCE per create/update operation and reuse dateTimeFormatID for all date fields. 141. === END DATE FORMAT CHECK === 142. 143. If tcFolderID is not provided, it will be auto-resolved to the root test case folder using project info (rootFolders.TC.id). 144. To get valid values for priority, owner, component, etc., call the project info tool and use the returned customListObjs IDs. 145. STALE / NOT-FOUND ID RECOVERY (applies to ALL system fields — priority, component/label, owner, status, testCaseType, testingType, release, cycle): If the user references a value by name and it is NOT found in your current cached project info data, DO NOT give up or skip the field immediately. Instead: call 'Fetch QMetry Project Info' fresh (no arguments needed) to get the latest snapshot, then re-scan the relevant customListObjs list. This is mandatory when: (a) the user just added a new label/priority/status/user in QMetry UI, or (b) the cached info is from an earlier turn. Only skip + show a friendly message if the value is still missing AFTER the fresh fetch. 146. FOLDER ID RESOLUTION (tcFolderID): Project info only exposes the ROOT folder ID (rootFolders.TC.id). Sub-folder IDs are NOT returned by project info. If the user specifies a sub-folder (e.g. 'Folder 1'), use this resolution order: 1. Check if the user already provided the numeric folder ID — use it directly. 2. Try fetching test cases with folderPath='' and scope='folder' — if a TC exists there, its folder context confirms the path, but the ID is still needed from the UI. 3. If still unresolved, ask the user: 'Please provide the numeric folder ID for "". You can find it in the QMetry URL when browsing that folder (look for folderId=XXXXX).' NEVER silently fall back to root folder when the user explicitly named a sub-folder — always ask first. 147. If the user provides a priority name (e.g. 'Blocker'), fetch project info, find the matching priority in customListObjs.priority[index].name, and use its ID in the payload. If the name is not found after a fresh fetch, skip the priority field (it is not required) and show a user-friendly message: 'Test case created without priority, as given priority is not available in the current project.' 148. If the user provides a component name, fetch project info, find the matching component in customListObjs.component[index].name, and use its ID in the payload. If the name is not found, skip the component field (it is not required) and show a user-friendly message: 'Test case created without component, as given component is not available in the current project.' 149. If the user provides an owner name, fetch project info, find the matching owner in customListObjs.owner[index].name, and use its ID in the payload as testcaseOwner. If the name is not found, skip the testcaseOwner field (it is not required) and show a user-friendly message: 'Test case created without owner, as given owner is not available in the current project.' 150. If the user provides a test case state name, fetch project info, find the matching state in customListObjs.testCaseState[index].name, and use its ID in the payload as testCaseState. If the name is not found, skip the testCaseState field (it is not required) and show a user-friendly message: 'Test case created without test case state, as given state is not available in the current project.' 151. If the user provides a test case type name, fetch project info, find the matching type in customListObjs.testCaseType[index].name, and use its ID in the payload as testCaseType. If the name is not found, skip the testCaseType field (it is not required) and show a user-friendly message: 'Test case created without test case type, as given type is not available in the current project.' 152. If the user provides a testing type name, fetch project info, find the matching type in customListObjs.testingType[index].name, and use its ID in the payload as testingType. If the name is not found, skip the testingType field (it is not required) and show a user-friendly message: 'Test case created without testing type, as given testing type is not available in the current project.' 153. Example: If user says 'Create test case with title "High priority test case" and set priority to "Blocker"', first call project info, map 'Blocker' to its ID, and use that ID for the priority field in the create payload. If user says 'set priority to "Urgent"' and 'Urgent' is not found, skip the priority field and show: 'Test case created without priority, as given priority is not available in the current project.' 154. tcFolderID is required; use the root folder ID from project info or a specific folder. 155. STEPS: ALWAYS include steps in the payload. If user did not provide steps, auto-generate them from the test case name and context. See STEPS RULE at top of hints. 156. If the user provides a prompt like 'create test case with steps as step 1 - Go to login page, step 2 - give credential, step 3 - go to test case page, step 4 - create test case', LLM should parse each step and convert it into the steps payload array, mapping each step to an object with orderId, description, and optionally inputData and expectedOutcome. 157. Example mapping: 'step 1 - Go to login page' → { orderId: 1, description: 'Go to login page' }. 158. LLM should increment orderId for each step, use the step text as description, and optionally infer inputData/expectedOutcome if provided in the prompt. 159. Demo steps payload: steps: [ { orderId: 1, description: 'First Step', inputData: 'First Data', expectedOutcome: 'First Outcome', UDF: { customField1: 'Custom Field Data A', customField2: 'Custom Field Data B' } }, ... ] 160. UDF fields in steps must match your QMetry custom field configuration. 161. Release/cycle mapping is optional but useful for planning. 162. If the user wants to link or associate a release and cycle to the test case, set associateRelCyc: true in the payload. 163. If the user provides a release ID, map it from projects.releases[index].releaseID in the project info response, and use that ID in releaseCycleMapping. 164. If the user provides both release and cycle IDs, validate both against the current project's releases and cycles; if valid, use them in releaseCycleMapping. 165. When adding releaseCycleMapping, always include the 'version' field (usually set to 1) in each mapping object. The correct format is: { release: , cycle: [], version: 1 }. If 'version' is missing, the request will fail. 166. If the user provides a release name, map it to its ID from project info; if a cycle name is provided, map it to its ID from the associated release's builds list. 167. Example payload: releaseCycleMapping: [ { release: , cycle: [], version: 1 } ] 168. LLM should ensure that provided release/cycle names or IDs exist in the current project before using them in the payload. If not found, skip and show a user-friendly message: 'Test case created without release/cycle association, as given release/cycle is not available in the current project.' 169. All IDs (priority, owner, etc.) must be valid for your QMetry instance. 170. If a custom field is mandatory, include it in the UDF object. 171. estimatedTime is in SECONDS (e.g. 3600 = 1 hour, 36000 = 10 hours). NOT minutes. 172. Description and testingType are optional but recommended for clarity. 173. 174. UDF (User Defined Fields) WORKFLOW FOR CREATE: 175. 1. Call 'Fetch UDF Layout' with entityType='TC', pageName='ADD' to discover field names, types, list option IDs, and udfmID (projectUserFieldID). 176. IF listOptions[field.listName] is empty after Fetch UDF Layout, the tool already tried a metadata fallback. If STILL empty, ask the user to provide the option ID from the QMetry UI — do NOT guess numeric IDs. 177. 2. For LOOKUPLIST fields: pick one ID from listOptions[field.listName][].id. 178. 3. For MULTILOOKUPLIST fields: pick an array of IDs from listOptions[field.listName][].id. 179. 4. For CASCADINGLIST fields (ROOT-LEVEL UDF — MANDATORY STEPS): 180. a. MUST call 'Fetch Cascade Child Values' with parentId to get available child options (do NOT skip this step). 181. b. Pass the cascade value as: { parent: parentId, child: childId } in udfFields. 182. Example: udfFields: { project19: { parent: 5232623, child: 5232625 } } 183. 5. For STRING/LARGETEXT/NUMBER/DATETIMEPICKER: pass value directly. 184. 6. Pass all UDF values via 'udfFields' param: { fieldName: value }. 185. 7. Mandatory UDF fields (isMandatory=true) MUST be included or create will fail. 186. 187. STEP UDFs: Pass step UDF values in each step's 'UDF' object. 188. Call 'Fetch UDF Layout' for stepFields to discover field names, types, and udfmID (projectUserFieldID). 189. Step UDF field types follow same rules as root UDF EXCEPT for CASCADINGLIST — step cascade requires a DIFFERENT format: 190. 191. STEP CASCADINGLIST UDF FORMAT (critical — different from root cascade): 192. For a cascade field named 'project19' with udfmID=2637584, parent={id:5232626, value:'React'}, child={id:5232628, value:'Redux'}: 193. You MUST include THREE keys inside the step's UDF object: 194. 1. fieldName: { parent: parentId, child: childId } 195. e.g. project19: { parent: 5232626, child: 5232628 } 196. 2. fieldName_value: [{ FieldID: 'fieldName', FieldValue: [{ id: parentId, value: 'parentLabel', child: { id: childId, value: 'childLabel' } }], type: 'CASCADINGLIST' }] 197. e.g. project19_value: [{ FieldID: 'project19', FieldValue: [{ id: 5232626, value: 'React', child: { id: 5232628, value: 'Redux' } }], type: 'CASCADINGLIST' }] 198. 3. fieldName_selectedList: { id: udfmID, name: 'fieldName', type: 'CASCADINGLIST' } 199. e.g. project19_selectedList: { id: 2637584, name: 'project19', type: 'CASCADINGLIST' } 200. To get parentLabel and childLabel: call 'Fetch Cascade Child Values' — it returns option labels alongside IDs. 201. udfmID comes from Fetch UDF Layout stepFields[].projectUserFieldID. 202. NEVER omit _value or _selectedList for step cascade fields — the API silently ignores cascade data without them.

qmetry_update_test_caseA

Update an existing QMetry test case OR create a new version by tcID and tcVersionID, with auto-resolution from entityKey.

Toolset: Test Cases

Parameters:

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

  • tcID (number) required: Test Case numeric ID. CRITICAL: the parameter name is 'tcID' — do NOT use 'testCaseId', 'testCaseID', 'tcId', or other variants. Accepts a string or number. This is the internal numeric identifier, not the entity key like 'MAC-TC-1684'. You can get this ID from test case search results or by using filters.

  • tcVersionID (number) required: Test Case version number. This is the internal numeric identifier for the version.

  • tcVersion (number): Test Case version number (required when withVersion=true for creating new version). This is the current version number from which a new version will be created.

  • withVersion (boolean): Pass 'true' if you want to create a new version of the test case with incremented version number. When true, a new version is created (e.g., if current version is 2, new version 3 is created). When false or omitted, updates the existing version specified by tcVersionID. IMPORTANT: Always send proper tcVersionID to identify which version the request is for.

  • versionComment (string): Comment or description for the new version (used only when withVersion=true). Helps track what changed in this new version. Example: 'Updated test steps for new requirements'

  • notruncurrent (boolean): Flag to control execution behavior for current version when creating a new version. Used in conjunction with withVersion=true.

  • notrunall (boolean): Flag to control execution behavior for all versions when creating a new version. Used in conjunction with withVersion=true.

  • folderPath (string): Folder path for test suites - SYSTEM AUTOMATICALLY SETS TO ROOT. Leave empty unless you want specific folder. System will automatically use empty string "" (root directory). Only specify if user wants specific folder like "Automation/Regression". (default: "")

  • scope (string): Scope of the operation - defines the context for data retrieval. Common values: 'project' (default), 'folder', 'release', 'cycle'. Applies to any entity type being fetched or operated upon. (default: "project")

  • isStepUpdated (boolean): Set to true when steps are being added, updated, or removed. Required when including 'steps' or 'removeSteps' arrays.

  • steps (array)

  • removeSteps (array)

  • name (string)

  • priority (number)

  • component (array)

  • owner (number)

  • testCaseState (number)

  • testCaseType (number)

  • estimatedTime (number): Estimated execution time in seconds. Example: 7200 for 2 hours

  • executionMinutes (number)

  • testingType (number)

  • description (string)

  • updateOnlyMetadata (boolean): Set to true to update only metadata fields without touching test steps. When true, steps and removeSteps are ignored.

  • udfFields (record<string, union>): Flat UDF field values. Keys = UDF field names from 'Fetch UDF Layout'. Values depend on fieldTypeName: STRING/LARGETEXT: string, NUMBER: number, DATETIMEPICKER: date string ('14-08-2026'), LOOKUPLIST: numeric ID, MULTILOOKUPLIST: array of IDs [101, 102], CASCADINGLIST: { parent: 101, child: 102 }. Call 'Fetch UDF Layout' with entityType + pageName='ADD' to discover available fields and list option IDs.

  • UDF (record<string, object>): UDF wrapper required for update operations. Keys = UDF field names. Each value must include fieldID (from 'Fetch UDF Layout' with pageName='DETAIL') and value. Also set matching flat key in udfFields for the LOOKUPLIST Alias display. Example: { custom_text: { fieldID: 1001, value: 'new value' } }

Output Description: JSON object containing the test case ID, version ID, summary, update/creation metadata. When withVersion=true (version creation), response includes new version number and version ID. When withVersion=false/omitted (existing version update), response includes updated fields confirmation.

Use Cases: 1. Update test case summary (name) 2. Change priority, owner, or state of a test case 3. Edit, add, or remove test steps 4. Update only metadata (no steps) 5. Create a new version of a test case (withVersion=true) 6. Update a specific version of a test case (without withVersion flag) 7. Bulk update using entityKey auto-resolution 8. Modify test case description or estimated time 9. Change test case type or component 10. Update testing type or custom fields 11. Update, add and remove test case steps 12. Version control for test case evolution tracking

Examples:

  1. Update test case summary (existing version update)

{
  "tcID": 4519260,
  "tcVersionID": 5448492,
  "name": "MAC Test11"
}

Expected Output: Test case summary updated. tcID and tcVersionID auto-resolved from entityKey. Only 'name' field changed. Version remains the same.

  1. Create NEW VERSION with updated summary and description

{
  "tcID": 4572654,
  "tcVersionID": 5514384,
  "tcVersion": 1,
  "name": "Add two numbers 2 v2",
  "description": "Test Description version 2",
  "withVersion": true,
  "versionComment": "version 2 comment add",
  "notruncurrent": true,
  "notrunall": true
}

Expected Output: New version created (version 2). Test case now has incremental version with updated summary and description. Original version 1 remains unchanged.

  1. Create NEW VERSION with all metadata fields (release, cycle, priority, owner, etc.)

{
  "tcID": 4572654,
  "tcVersionID": 5514384,
  "tcVersion": 1,
  "name": "Facebook Login Validation Failed update from MCP V2",
  "description": "Existing description V2",
  "priority": 2355751,
  "testcaseOwner": 6963,
  "testCaseState": 2355753,
  "testCaseType": 2355762,
  "estimatedTime": 7200,
  "withVersion": true,
  "versionComment": "Created version 2 with updated metadata",
  "notruncurrent": true,
  "notrunall": true,
  "folderPath": 602290,
  "scope": "project"
}

Expected Output: New test case version 2 created with updated summary, description, priority (High), owner (umang.savaliya), state, type, and estimated time (2 hours). Version comment added for tracking.

  1. Update EXISTING VERSION 2 (not creating new version)

{
  "tcID": 4572654,
  "tcVersionID": 5514385,
  "name": "Updated version 2 name",
  "priority": 2355752
}

Expected Output: Version 2 updated with new name and priority. No new version created because withVersion flag is not set. This is a normal update of existing version.

  1. Update priority to High and owner to john.doe (existing version)

{
  "tcID": 4519260,
  "tcVersionID": 5448492,
  "priority": 505015,
  "testcaseOwner": 6963
}

Expected Output: Priority and owner updated. Field IDs auto-resolved from project info. tcID/tcVersionID resolved from entityKey. Existing version modified.

  1. Update steps (edit, add, remove) - existing version

{
  "tcID": 4519260,
  "tcVersionID": 5448492,
  "steps": [
    {
      "orderId": 1,
      "description": "Step 22",
      "inputData": "Input 22",
      "expectedOutcome": "Outcome 22",
      "tcStepID": 3014032
    },
    {
      "orderId": 2,
      "description": "Step3",
      "inputData": "Input 3",
      "expectedOutcome": "Outcome 3"
    }
  ],
  "removeSteps": [
    {
      "tcStepID": 3014031,
      "description": "Step 1",
      "orderId": 1
    }
  ],
  "isStepUpdated": true
}

Expected Output: Steps updated: Step 22 edited (tcStepID preserved), Step3 added (no tcStepID), Step 1 removed. tcID/tcVersionID auto-resolved. Existing version modified.

  1. Create NEW VERSION with updated steps

{
  "tcID": 4572654,
  "tcVersionID": 5514384,
  "tcVersion": 1,
  "name": "Add two numbers 2 v2",
  "steps": [
    {
      "orderId": 1,
      "description": "I and u have a calculator",
      "inputData": "",
      "expectedOutcome": "",
      "tcStepID": 38001791
    },
    {
      "orderId": 2,
      "description": "I add 41 and 31",
      "inputData": "",
      "expectedOutcome": "",
      "tcStepID": 38001793
    },
    {
      "orderId": 3,
      "description": "the result should be 72",
      "inputData": "",
      "expectedOutcome": "",
      "tcStepID": 38001792
    }
  ],
  "withVersion": true,
  "versionComment": "version 2 with preserved steps",
  "notruncurrent": true,
  "notrunall": true,
  "isStepUpdated": true
}

Expected Output: New version 2 created with all steps from version 1 preserved. Steps carry forward with their tcStepID values. Version comment added for tracking.

  1. Update only metadata (no steps) - existing version

{
  "tcID": 4519260,
  "tcVersionID": 5448492,
  "updateOnlyMetadata": true,
  "name": "New Name"
}

Expected Output: Metadata updated only. Steps unchanged. tcID/tcVersionID auto-resolved. Existing version modified.

  1. Create NEW VERSION from existing version 2 with updated steps (working payload for linked test cases)

{
  "tcID": 4594145,
  "tcVersionID": 5536706,
  "tcVersion": 2,
  "name": "Mock Test Case - E-commerce Checkout Flow - v3",
  "steps": [
    {
      "orderId": 1,
      "description": "Open browser and navigate to e-commerce website",
      "expectedOutcome": "Homepage loads successfully with product catalog",
      "inputData": "URL: https://example-shop.com",
      "tcStepID": 38129471
    },
    {
      "orderId": 2,
      "description": "Search for product",
      "expectedOutcome": "Search results display relevant products",
      "inputData": "Search term: 'wireless headphones'",
      "tcStepID": 38129475
    },
    {
      "orderId": 3,
      "description": "Select product and add to cart",
      "expectedOutcome": "Product added to cart, cart counter increments",
      "inputData": "Click 'Add to Cart' button",
      "tcStepID": 38129472
    },
    {
      "orderId": 4,
      "description": "Proceed to checkout",
      "expectedOutcome": "Checkout page displays with cart summary",
      "inputData": "Click cart icon and 'Proceed to Checkout'",
      "tcStepID": 38129473
    },
    {
      "orderId": 5,
      "description": "Complete payment",
      "expectedOutcome": "Order confirmation page displayed",
      "inputData": "Fill payment details and submit",
      "tcStepID": 38129474
    },
    {
      "orderId": 6,
      "description": "Verify order confirmation email received",
      "expectedOutcome": "Email with order details received in inbox",
      "inputData": "Check email account for confirmation"
    },
    {
      "orderId": 7,
      "description": "Check order status in account dashboard",
      "expectedOutcome": "Order status shows as 'Processing' with tracking information",
      "inputData": "Navigate to My Orders section"
    }
  ],
  "withVersion": true,
  "versionComment": "Created version 3: Added 2 new verification steps (email and order status check)",
  "notrunall": false,
  "notruncurrent": false,
  "scope": "project"
}

Expected Output: New version 3 created successfully from version 2. Test case now has 7 steps (5 preserved + 2 new). Key: tcVersion=2 was used because version 2 already existed in system. notrunall and notruncurrent both false (not true). Result shows tcVersion: 3 in response with new tcVersionID.

Hints: 1. === DEFAULT VALUES — APPLY FOR ANY UNSET FIELD === 2. Call 'Fetch UDF Layout' with entityType='TC', pageName='DETAIL' before updating. 3. defaultValues (from Fetch UDF Layout): { fieldName: defaultValueId } — sweep ALL entries. 4. For EACH key in defaultValues: if user did not explicitly provide that field → include it in payload with the default value. 5. This applies to non-mandatory fields too (e.g. priority, estimatedTime). Omitting them = data loss. 6. === END DEFAULT VALUES === 7. 8. === DATE FORMAT CHECK (MANDATORY — EVERY UPDATE REQUEST) === 9. ALWAYS call 'Fetch QMetry Project Info' before every update request — not only when the user explicitly mentions a date. 10. Any UDF field could be a DATETIMEPICKER. Wrong format causes QMetry to silently discard the field value (API returns success but value is NOT stored — no error). 11. STEP 1: From project info, read dateTimeFormatID (e.g. 3). 12. STEP 2: Find entry in dateTimeFormatNew where id === dateTimeFormatID → read its unique_value (e.g. 'yyyy-MM-dd'). 13. STEP 3: unique_value pattern: yyyy=4-digit year, MM=2-digit month (01-12), dd=2-digit day, MMM=3-letter month (Jan/Feb/...). 14. Example: id=1 → MM-dd-yyyy → '10-25-2000' | id=2 → dd-MM-yyyy → '25-10-2000' | id=3 → yyyy-MM-dd → '2000-10-25' | id=4 → dd-MMM-yyyy → '25-Oct-2000' 15. STEP 4: For EVERY DATETIMEPICKER field in the payload: parse any user-provided date and re-format it using the active unique_value pattern before sending. 16. NEVER assume a date format — always derive it from dateTimeFormatID. Wrong format = silent data loss. 17. === END DATE FORMAT CHECK === 18. 19. CRITICAL - VERSION CREATION vs UPDATE DISTINCTION: 20. This tool supports TWO MODES using the SAME API endpoint: 21. 22. MODE 1: CREATE NEW VERSION (withVersion=true) 23. - Purpose: Create an incremental version of the test case (e.g., v1 → v2, v2 → v3) 24. - When to use: User explicitly asks to 'create new version', 'create version 2', 'increment version' 25. - Required fields: tcID, tcVersionID (of source version), tcVersion (current version number), withVersion=true 26. - Optional but recommended: versionComment (track what changed), notruncurrent, notrunall 27. - Behavior: Creates a NEW test case version with incremented version number. Source version remains unchanged. 28. - Example: If current version is 1, setting withVersion=true creates version 2 29. - Use cases: Updating test case for new requirements, creating variants for different scenarios, version control 30. 31. MODE 2: UPDATE EXISTING VERSION (withVersion=false or omitted) 32. - Purpose: Modify fields of an EXISTING version without creating a new version 33. - When to use: User asks to 'update test case', 'modify version X', 'change summary' (without mentioning new version) 34. - Required fields: tcID, tcVersionID (of version to update) 35. - Do NOT include: withVersion flag, versionComment, tcVersion 36. - Behavior: Updates the specified version in-place. No new version is created. 37. - Example: Updating version 2's summary - only version 2 is modified, no version 3 is created 38. - Use cases: Fixing typos, updating metadata, modifying steps in existing version 39. 40. CRITICAL FIELD UNDERSTANDING: 41. - tcVersionID: The VERSION ID (numeric identifier) of the version you're working with 42. - tcVersion: The VERSION NUMBER (1, 2, 3, etc.) - only needed when withVersion=true 43. - tcID: The TEST CASE ID (remains same across all versions) 44. - Example: Test case VKMCP-TC-10 (tcID: 4572654) has version 1 (tcVersionID: 5514384, tcVersion: 1) 45. - When creating version 2 from version 1: Send tcVersionID=5514384 (source), tcVersion=1 (current), withVersion=true 46. 47. HOW TO DETERMINE WHICH MODE: 48. - User says 'create new version' → MODE 1 (withVersion=true) 49. - User says 'create version 2' → MODE 1 (withVersion=true) 50. - User says 'update test case with new version' → MODE 1 (withVersion=true) 51. - User says 'update test case VKMCP-TC-10 summary' → MODE 2 (no withVersion, update existing version) 52. - User says 'update version 2 summary' → MODE 2 (no withVersion, update existing version 2) 53. - User says 'change priority of version 1' → MODE 2 (no withVersion, update version 1) 54. - If ambiguous, ask user: 'Do you want to create a new version or update the existing version?' 55. 56. VERSION CREATION WORKFLOW (withVersion=true): 57. Step 1: Fetch test case details to get current tcID, tcVersionID, and tcVersion 58. Step 2: Optionally fetch current steps if they need to be preserved/modified 59. Step 3: Prepare payload with: 60. - tcID (test case ID) 61. - tcVersionID (source version ID to create from) 62. - tcVersion (current version number) 63. - withVersion: true (CRITICAL flag) 64. - versionComment (recommended: describe what changed) 65. - Updated fields (name, description, priority, steps, etc.) 66. - notruncurrent: true (recommended) 67. - notrunall: true (recommended) 68. Step 4: Call update API - a new version will be created with incremented version number 69. Step 5: New version inherits all fields from source version, with your specified updates applied 70. 71. EXISTING VERSION UPDATE WORKFLOW (no withVersion): 72. Step 1: Fetch test case details to get tcID and tcVersionID of the version to update 73. Step 2: Prepare payload with: 74. - tcID (test case ID) 75. - tcVersionID (version ID to update) 76. - DO NOT include withVersion, versionComment, or tcVersion 77. - Only include fields you want to change 78. Step 3: Call update API - specified version is updated in-place 79. Step 4: No new version is created, only specified fields are modified 80. 81. FIELD MAPPING FOR VERSION CREATION: 82. When creating a new version, include ALL fields you want the new version to have: 83. - name: Test case summary (required if different from source) 84. - description: Test case description (required if different from source) 85. - priority: Priority ID (get from project info customListObjs.priority[index].id) 86. - testcaseOwner: Owner ID (get from project info customListObjs.owner[index].id) 87. - testCaseState: State ID (get from project info customListObjs.testCaseState[index].id) 88. - testCaseType: Type ID (get from project info customListObjs.testCaseType[index].id) 89. - testingType: Testing type ID (get from project info customListObjs.testingType[index].id) 90. - component: Array of component IDs (get from project info customListObjs.component[index].id) 91. - estimatedTime: Time in seconds (e.g., 7200 for 2 hours) 92. - steps: Array of step objects (include tcStepID from source version to preserve steps) 93. - folderPath: Folder path or folder ID 94. - scope: Usually 'project' 95. 96. STEPS HANDLING IN VERSION CREATION: 97. When creating a new version WITH steps: 98. - To PRESERVE existing steps: Include them with their original tcStepID values 99. - To ADD new steps: Include them WITHOUT tcStepID 100. - To MODIFY steps: Include them with tcStepID and updated description/data 101. - To REMOVE steps: Include them in removeSteps array 102. - Set isStepUpdated: true if any steps are modified, added, or removed 103. - If no steps are included, new version may inherit steps from source (verify with QMetry docs) 104. 105. If user provides entityKey (e.g., MAC-TC-1684), first call FETCH_TEST_CASES with a filter on entityKeyId to resolve the tcID and tcVersionID. 106. To get valid values for priority, owner, component, etc., call the project info tool and use the returned customListObjs IDs. 107. If the user provides a priority name (e.g. 'Blocker'), fetch project info, find the matching priority in customListObjs.priority[index].name, and use its ID in the payload. If the name is not found, skip the priority field (it is not required) and show a user-friendly message: 'Test case updated without priority, as given priority is not available in the current project.' 108. If the user provides a component name, fetch project info, find the matching component in customListObjs.component[index].name, and use its ID in the payload. If the name is not found, skip the component field (it is not required) and show a user-friendly message: 'Test case updated without component, as given component is not available in the current project.' 109. If the user provides an owner name, fetch project info, find the matching owner in customListObjs.owner[index].name, and use its ID in the payload as testcaseOwner. If the name is not found, skip the testcaseOwner field (it is not required) and show a user-friendly message: 'Test case updated without owner, as given owner is not available in the current project.' 110. If the user provides a test case state name, fetch project info, find the matching state in customListObjs.testCaseState[index].name, and use its ID in the payload as testCaseState. If the name is not found, skip the testCaseState field (it is not required) and show a user-friendly message: 'Test case updated without test case state, as given state is not available in the current project.' 111. If the user provides a test case type name, fetch project info, find the matching type in customListObjs.testCaseType[index].name, and use its ID in the payload as testCaseType. If the name is not found, skip the testCaseType field (it is not required) and show a user-friendly message: 'Test case updated without test case type, as given type is not available in the current project.' 112. If the user provides a testing type name, fetch project info, find the matching type in customListObjs.testingType[index].name, and use its ID in the payload as testingType. If the name is not found, skip the testingType field (it is not required) and show a user-friendly message: 'Test case updated without testing type, as given testing type is not available in the current project.' 113. Example: If user says 'Update test case with title "High priority test case" and set priority to "Blocker"', first call project info, map 'Blocker' to its ID, and use that ID for the priority field in the update payload. If user says 'set priority to "Urgent"' and 'Urgent' is not found, skip the priority field and show: 'Test case updated without priority, as given priority is not available in the current project.' 114. CRITICAL: To update test case steps without Duplication, use the following rules: 115. - ANTI-DUPLICATION RULE: The tcStepID field is THE KEY to prevent duplication: 116. * WITH tcStepID = UPDATE existing step (QMetry modifies the existing step in place) 117. * WITHOUT tcStepID = CREATE new step (QMetry adds a brand new step) 118. - For steps to be UPDATED: ALWAYS fetch existing steps first using FETCH_TEST_CASE_STEPS, then include the tcStepID in the step object. 119. - For steps to be ADDED: omit tcStepID completely in the step object. 120. - For steps to be REMOVED: add a full removeSteps object for each step to be deleted, matching the removeTestCaseStep interface. 121. - CRITICAL WARNING - DO NOT ADD UNSOLICITED STEPS: 122. * ONLY add, edit, or remove steps that the user EXPLICITLY requested 123. * DO NOT invent, create, or add extra steps based on assumptions or best practices 124. * DO NOT add 'helpful' steps that the user did not ask for 125. * When user says 'remove step 1', the result should have (N-1) steps, not N steps with extras 126. * When user says 'add 1 step', ONLY add that 1 step, nothing more 127. * When user says 'update step 2', ONLY update step 2, do not add or modify other steps 128. * If unsure what user wants, ASK first rather than adding steps autonomously 129. - WORKFLOW TO AVOID DUPLICATION: 130. 1. Call FETCH_TEST_CASE_STEPS to get all existing steps with their tcStepID values 131. 2. For steps you want to KEEP/UPDATE: Include them in steps[] WITH their original tcStepID 132. 3. For steps you want to ADD: Include them in steps[] WITHOUT tcStepID (ONLY if user requested) 133. 4. For steps you want to REMOVE: Include them in removeSteps[] with full details 134. 5. Always set isStepUpdated: true if steps are added, updated, or removed 135. 6. VERIFY your steps array matches user's explicit request (count and content) 136. - Example: If user says 'Edit step 1 to say ...', FIRST fetch steps to get tcStepID for step 1, THEN include it in the steps array with updated fields and the ORIGINAL tcStepID. 137. - Example: If user says 'Add a new step after step 2', add EXACTLY ONE new object to steps array with no tcStepID (not multiple steps). 138. - Example: If user says 'Remove step 3', add the full step object to removeSteps array, including tcStepID and all required fields. Do NOT add replacement steps. 139. - Example: If test case has 3 steps and user says 'remove step 1', result should have 2 steps (step 2 and step 3 with updated orderIds), NOT 3 steps with extras. 140. - Example: If user says 'add one mock step', add EXACTLY ONE step (not 2 or 3 steps even if they seem related). 141. - COMPLETE PAYLOAD EXAMPLE: { tcID: 123, tcVersionID: 456, steps: [{tcStepID: 1001, orderId: 1, description: 'Updated'}, {orderId: 2, description: 'New'}], removeSteps: [{tcStepID: 1002, orderId: 3, ...}], isStepUpdated: true } 142. - If only metadata is updated (no steps), set updateOnlyMetadata: true and do not include steps/removeSteps. 143. - Always preserve orderId sequence for proper step ordering. 144. - If user prompt is ambiguous, ask for clarification or show a user-friendly error. 145. - WARNING: Omitting tcStepID for existing steps will cause DUPLICATION - the API will create duplicates instead of updating! 146. - FINAL VERIFICATION BEFORE SENDING REQUEST: 147. * Count steps in your payload vs what user requested 148. * If user said 'add 1 step', steps array should have (existing_count + 1) items total 149. * If user said 'remove 1 step', steps array should have (existing_count - 1) items total, removeSteps should have 1 item 150. * If user said 'update step X', steps array should have same count as before, with step X's tcStepID preserved 151. * NEVER include steps the user did not explicitly mention or request 152. Steps are optional but recommended for manual test cases. 153. If the user provides a prompt like 'update test case with steps as step 1 - Go to login page, step 2 - give credential, step 3 - go to test case page, step 4 - create test case', LLM should parse each step and convert it into the steps payload array, mapping each step to an object with orderId, description, and optionally inputData and expectedOutcome. 154. Example mapping: 'step 1 - Go to login page' → { orderId: 1, description: 'Go to login page' }. 155. LLM should increment orderId for each step, use the step text as description, and optionally infer inputData/expectedOutcome if provided in the prompt. 156. Demo steps payload: steps: [ { orderId: 1, description: 'First Step', inputData: 'First Data', expectedOutcome: 'First Outcome', UDF: { customField1: 'Custom Field Data A', customField2: 'Custom Field Data B' } }, ... ] 157. UDF fields in steps must match your QMetry custom field configuration. 158. All IDs (priority, owner, etc.) must be valid for your QMetry instance. 159. If a custom field is mandatory, include it in the UDF object. 160. 161. ADDITIONAL VERSION CREATION GUIDANCE: 162. - versionComment field: STRONGLY RECOMMENDED when withVersion=true. Helps track why version was created. 163. Example comments: 'Updated for Sprint 5 requirements', 'Fixed test steps based on code review', 'Version 2 for production environment' 164. - notruncurrent and notrunall flags: Control execution behavior when creating versions. Set both to true as best practice. 165. - folderPath: Can be string path or numeric folder ID. Usually inherited from source version if not specified. 166. - attachments: Use ADD/REMOVE arrays to manage attachments when creating new version or updating existing version. 167. - estimatedTime vs executionMinutes: Use estimatedTime (in seconds) for version creation. executionMinutes (in minutes) is legacy field. 168. 169. REAL-WORLD VERSION CREATION EXAMPLES: 170. Example 1: User says 'create a new version of test case VKMCP-TC-10 with summary = "Facebook Login Validation Failed update from MCP V2", description = used existing description by at last add V2 text, release = default, cycle = default' 171. → Workflow: 172. 1. Fetch VKMCP-TC-10 details to get tcID, tcVersionID, tcVersion, current description 173. 2. Fetch project info to get default release ID and cycle ID 174. 3. Append ' V2' to current description 175. 4. Send payload with: tcID, tcVersionID (source), tcVersion (current), withVersion=true, name='...V2', description='...V2', versionComment='Created version 2', release/cycle IDs 176. → Result: New incremental version created (e.g., version 1 → version 2) with updated summary, modified description, associated with default release/cycle 177. 178. Example 2: User says 'update version 2 summary, release, cycle, priority' 179. → Workflow: 180. 1. Fetch test case details to get version 2's tcVersionID 181. 2. Fetch project info to get priority, release, cycle IDs 182. 3. Send payload with: tcID, tcVersionID (of version 2), WITHOUT withVersion flag, with updated summary, release, cycle, priority 183. → Result: Version 2 updated in-place. No new version created. Only specified fields modified. 184. 185. COMMON PITFALLS TO AVOID: 186. - Pitfall 1: Setting withVersion=true when user wants to update existing version → Creates unwanted new version 187. - Pitfall 2: Omitting versionComment when creating new version → Lost tracking of why version was created 188. - Pitfall 3: Not fetching current tcVersionID before update → Updating wrong version or causing error 189. - Pitfall 4: Using tcVersion for normal updates → tcVersion only needed when withVersion=true 190. - Pitfall 5: Not including tcStepID for steps when creating version → Steps may duplicate instead of preserving 191. - Pitfall 6: Confusing tcVersionID (version identifier) with tcVersion (version number) → Wrong API payload 192. 193. CRITICAL ERROR HANDLING: TC.VERSION_NOT_SYNCED FOR LINKED TEST CASES 194. 195. PROBLEM: Test cases linked to test suites or with existing executions cannot be updated directly 196. TRIGGERS: 197. ✓ Test case is linked to one or more test suites 198. ✓ Test case has execution history (test runs exist) 199. ✓ Test case is part of a release/cycle with test runs 200. ✓ Any step modification when test case has associations 201. 202. ERROR CODE: TC.VERSION_NOT_SYNCED 203. ERROR MESSAGE: 'This Test Case has been associated. Create a new version to save modifications.' 204. 205. AUTOMATIC RETRY STRATEGY (IMPLEMENT THIS PATTERN): 206. When you receive TC.VERSION_NOT_SYNCED error, AUTOMATICALLY retry with version creation: 207. DO NOT ask user for confirmation - this is expected behavior for associated test cases 208. 209. 1. FIRST ATTEMPT (Normal Update): 210. - Try updating with isStepUpdated=true (for step changes) or without withVersion flag 211. - If error code is TC.VERSION_NOT_SYNCED, proceed to step 2 212. - If error is different, report the error to user 213. 214. 2. AUTOMATIC RETRY (Version Creation): 215. - Use the SAME tcID, tcVersionID, and steps array from first attempt 216. - Add these flags to payload: 217. * withVersion: true (CRITICAL - enables version creation) 218. * tcVersion: (get from test case details or executions) 219. * notrunall: false (use false, not true) 220. * notruncurrent: false (use false, not true) 221. * scope: 'project' (always required) 222. * versionComment: 'Auto-created version due to test suite association' (or custom message) 223. - Set isStepUpdated: true whenever you modify steps (including when withVersion=true) 224. - IMPORTANT: Include ALL existing steps with tcStepID + new steps without tcStepID 225. 226. 3. VERIFICATION: 227. - Check response for new tcVersionID (will be different from source) 228. - Verify tcVersion incremented (e.g., 1→2, 2→3) 229. - Confirm success message: 'Test Case updated successfully' 230. 231. UI BEHAVIOR COMPARISON: 232. QMetry UI shows a popup: 'Save as new version?' with optional comment field 233. API equivalent: Automatic retry with withVersion=true after detecting TC.VERSION_NOT_SYNCED 234. 235. REAL-WORLD EXAMPLE FROM UI PAYLOADS: 236. 237. First Attempt (FAILS with TC.VERSION_NOT_SYNCED): 238. pseudo 239. { 240. "tcID": 4594140, 241. "tcVersionID": 5536696, 242. "withVersion": false, 243. "notrunall": false, 244. "steps": [ 245. // ... 5 existing steps with tcStepID ... 246. // ... 1 new step without tcStepID (orderId: 6) ... 247. ], 248. "removeSteps": [], 249. "isStepUpdated": true 250. } 251. 252. Response: 400 - TC.VERSION_NOT_SYNCED error 253. 254. Second Attempt (SUCCEEDS - Creates Version 2): 255. pseudo 256. { 257. "withVersion": true, // NEW: Version creation flag 258. "notrunall": false, 259. "notruncurrent": false, 260. "steps": [ 261. // SAME steps array as first attempt 262. // ... 5 existing steps with tcStepID ... 263. // ... 1 new step without tcStepID ... 264. ], 265. "removeSteps": [], 266. "scope": "project", 267. "tcID": 4594140, // SAME tcID 268. "tcVersion": 1, // NEW: Current version number 269. "tcVersionID": 5536696, // SAME tcVersionID (source version) 270. "versionComment": "test", // NEW: Version comment (optional) 271. // NOTE: isStepUpdated field is NOT included when withVersion=true 272. } 273. 274. Response: 200 - Success, new tcVersionID created (e.g., 5536697), tcVersion=2 275. 276. IMPLEMENTATION PSEUDO-CODE: 277. typescript 278. try { 279. // First attempt: Normal update 280. const response = await updateTestCase({ 281. tcID, tcVersionID, steps, isStepUpdated: true 282. }); 283. } catch (error) { 284. if (error.code === 'TC.VERSION_NOT_SYNCED') { 285. // Automatic retry with version creation 286. const testCaseDetails = await fetchTestCaseDetails(tcID); 287. // CRITICAL: Use the LATEST version number from system 288. const latestVersion = testCaseDetails.tcVersion; // e.g., 2 if v2 exists 289. const response = await updateTestCase({ 290. tcID, 291. tcVersionID, // Same source version 292. tcVersion: latestVersion, // Use latest version number (not always 1!) 293. steps, // Same steps array 294. // DO NOT include isStepUpdated when withVersion=true 295. withVersion: true, // Enable version creation 296. notrunall: false, // Use false (verified working value) 297. notruncurrent: false, // Use false (verified working value) 298. scope: 'project', // Always required 299. versionComment: 'Auto-created version due to test suite association' 300. }); 301. } else { 302. throw error; // Different error, report to user 303. } 304. } 305. 306. 307. KEY INSIGHTS: 308. - DO NOT ask user for confirmation - auto-retry is expected behavior 309. - Use SAME tcVersionID in both attempts (source version for creation) 310. - Second attempt creates NEW version (tcVersionID changes in response) 311. - Steps array is IDENTICAL in both attempts 312. - tcVersion parameter is ONLY in second attempt (withVersion=true) 313. - This matches QMetry UI behavior where popup auto-triggers version creation 314. 315. CRITICAL: INCREMENTAL tcVersion SELECTION RULE 316. 317. PROBLEM: When multiple versions exist, which tcVersion should you use? 318. SOLUTION: Use the VERSION NUMBER of the version you are creating FROM (the latest existing version) 319. 320. RULE: When creating a new version, tcVersion must equal the CURRENT LATEST VERSION in the system 321. 322. EXAMPLES: 323. - If only version 1 exists: Use tcVersion: 1 (creates version 2 from v1) 324. - If version 1 and 2 exist: Use tcVersion: 2 (creates version 3 from v2) 325. - If version 1, 2, and 3 exist: Use tcVersion: 3 (creates version 4 from v3) 326. 327. WORKFLOW TO DETERMINE CORRECT tcVersion: 328. 1. Call FETCH_TEST_CASE_DETAILS or FETCH_TEST_CASE_EXECUTIONS 329. 2. Check the highest tcVersion number in the system 330. 3. Use that number as your tcVersion parameter in the update payload 331. 4. This ensures you're creating from the latest version, not an old one 332. 333. REAL-WORLD SCENARIO: 334. Scenario: Test case VKMCP-TC-43 has version 2 already created in UI 335. Wrong Approach (will fail): tcVersion: 1, withVersion: true → TC.VERSION_NOT_SYNCED error 336. Correct Approach (will succeed): tcVersion: 2, withVersion: true → Creates version 3 successfully 337. 338. VERIFIED WORKING PAYLOAD (from user's Postman testing): 339. json 340. { 341. "notrunall": false, 342. "notruncurrent": false, 343. "scope": "project", 344. "tcID": 4594145, 345. "tcVersion": 2, // KEY: Use version 2 because v2 already exists 346. "tcVersionID": 5536706, // Source version ID (stays same) 347. "versionComment": "Added new steps", // Describes what changed 348. "withVersion": true, // Enable version creation 349. "steps": [ 350. // 5 existing steps with tcStepID (preserved from source) 351. // 2 new steps without tcStepID (to be added) 352. ] 353. } 354. 355. Result: New version 3 created successfully with 7 total steps 356. 357. DEFAULT VALUES FOR TC.VERSION_NOT_SYNCED RETRIES (THIS PATTERN): 358. - notrunall: false - For this retry pattern, override any usual true default 359. - notruncurrent: false - For this retry pattern, override any usual true default 360. - scope: "project" - Always use this 361. - withVersion: true - Required when creating a new version (both initial and retries) 362. 363. WHEN TO APPLY THIS PATTERN: 364. ✓ Adding steps to test case linked to test suite 365. ✓ Editing steps in test case with existing executions 366. ✓ Removing steps from associated test case 367. ✓ Any modification to steps when TC.VERSION_NOT_SYNCED occurs 368. ✓ When creating new versions from existing versions (always check latest version number) 369. 370. WHEN NOT TO APPLY: 371. ✗ Test case is NOT linked to test suite (normal update works) 372. ✗ Only updating metadata (name, priority, etc.) without steps 373. ✗ Different error codes (handle appropriately) 374. 375. BENEFITS OF THIS APPROACH: 376. 1. Seamless UX - LLM handles version creation automatically 377. 2. Matches UI behavior - no manual intervention needed 378. 3. Preserves test history - creates proper version trail 379. 4. Maintains test suite linkage - version creation preserves associations 380. 5. Handles incremental versions correctly - uses latest version as source 381. 382. 🎯 GRACEFUL HANDLING SUMMARY: 383. 384. When adding/editing/removing steps from test cases: 385. 1. Always TRY normal update first (without withVersion flag) 386. 2. If TC.VERSION_NOT_SYNCED error received: 387. - Fetch latest version number from test case details/executions 388. - Automatically retry with withVersion=true + correct tcVersion 389. - Use notrunall=false, notruncurrent=false, scope='project' 390. - Include version comment describing the changes 391. 3. Report success with new version details to user 392. 4. NEVER ask for confirmation - handle it transparently 393. 394. This ensures test cases with executions or suite associations are handled gracefully 395. without user intervention, matching the QMetry UI experience exactly. 396. 397. executionMinutes time is in minutes (legacy field). 398. estimatedTime is in seconds (preferred for version creation). 399. Description and testingType are optional but recommended for clarity. 400. 401. UDF (User Defined Fields) WORKFLOW FOR UPDATE: 402. 1. Call 'Fetch UDF Layout' with entityType='TC', pageName='DETAIL' to get field names, fieldIDs (projectUserFieldID), and list option IDs. 403. IF listOptions[field.listName] is empty after Fetch UDF Layout, the tool already tried a metadata fallback. If STILL empty, ask the user to provide the option ID from the QMetry UI — do NOT guess numeric IDs. 404. 2. For LOOKUPLIST fields: pick one ID from listOptions[field.listName][].id. 405. 3. For MULTILOOKUPLIST fields: pick an array of IDs; also pass the alias flat key (e.g., fieldNameAlias: 'Option Label'). 406. 4. For CASCADINGLIST fields: pick parent ID + fetch child with 'Fetch Cascade Child Values'. Pass { parent: parentId, child: childId }. 407. 5. Pass BOTH 'udfFields' (flat root values) AND 'UDF' wrapper (with fieldID) — both required for update. 408. Example: udfFields: { custom_text: 'new value' }, UDF: { custom_text: { fieldID: 1001, value: 'new value' } } 409. 6. Mandatory UDF fields (isMandatory=true) MUST be included. 410. STEP UDFs for update: Use same step UDF field names from 'Fetch UDF Layout' stepFields. Pass in each step's 'UDF' object. 411. For MULTILOOKUPLIST step UDFs in update: use { ADD: [id1, id2], REMOVE: [id3] } format.

qmetry_fetch_test_casesA

Fetch QMetry test cases - automatically handles viewId resolution based on project

Toolset: Test Cases

Parameters:

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

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

  • folderPath (string): Folder path for test cases - SYSTEM AUTOMATICALLY SETS TO ROOT. Leave empty unless you want specific folder. System will automatically use empty string "" (root directory). Only specify if user wants specific folder like "Automation/Regression". (default: "")

  • folderID (number): Folder ID - unique numeric identifier for the specific folder. Use this to target a specific folder within the project hierarchy. Applies to any entity type (test cases, requirements, test suites, etc.).

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • scope (string): Scope of the operation - defines the context for data retrieval. Common values: 'project' (default), 'folder', 'release', 'cycle'. Applies to any entity type being fetched or operated upon. (default: "project")

  • showRootOnly (boolean): Whether to show only root folders.

  • getSubEntities (boolean): Whether to include sub-entities.

  • hideEmptyFolders (boolean): Whether to hide empty folders.

  • folderSortColumn (string): Folder sort column (default 'name')

  • restoreDefaultColumns (boolean): Whether to restore default columns (default 'false')

  • folderSortOrder (string): Folder sort order (ASC or DESC)

  • filter (string): Filter criteria as JSON string (default '[]') (default: "[]")

  • udfFilter (string): User-defined field filter as JSON string (default '[]') (default: "[]")

Output Description: JSON object with 'data' array containing test cases and pagination info

Use Cases: 1. List all test cases in a project (without filters) 2. Browse test cases in specific folders for bulk operations 3. Get paginated test case results for reporting 4. Export multiple test cases at once

Examples:

  1. Get all test cases from default project - system will auto-fetch viewId

{}

Expected Output: List of test cases from default project with auto-resolved viewId

  1. Get all test cases from UT project - system will auto-fetch UT project's viewId

{
  "projectKey": "UT"
}

Expected Output: List of test cases from UT project using UT's specific TC viewId

  1. Get test cases by release/cycle filter

{
  "projectKey": "MAC",
  "filter": "[{\"value\":[55178],\"type\":\"list\",\"field\":\"release\"},{\"value\":[111577],\"type\":\"list\",\"field\":\"cycle\"}]"
}

Expected Output: Test cases associated with Release 8.12 (ID: 55178) and Cycle 8.12.1 (ID: 111577)

  1. Get test cases by release only

{
  "projectKey": "MAC",
  "filter": "[{\"value\":[55178],\"type\":\"list\",\"field\":\"release\"}]"
}

Expected Output: All test cases associated with Release 8.12 (ID: 55178)

  1. Get test cases by cycle only

{
  "projectKey": "MAC",
  "filter": "[{\"value\":[111577],\"type\":\"list\",\"field\":\"cycle\"}]"
}

Expected Output: All test cases associated with Cycle 8.12.1 (ID: 111577)

  1. Search for specific test case by entity key

{
  "projectKey": "MAC",
  "filter": "[{\"type\":\"string\",\"value\":\"MAC-TC-1684\",\"field\":\"entityKeyId\"}]"
}

Expected Output: Test cases matching the entity key criteria

  1. Search for multiple test cases by comma-separated entity keys

{
  "projectKey": "MAC",
  "filter": "[{\"type\":\"string\",\"value\":\"MAC-TC-1684,MAC-TC-1685,MAC-TC-1686\",\"field\":\"entityKeyId\"}]"
}

Expected Output: Test cases matching any of the specified entity keys

Hints: 1. CRITICAL - FILTER PERSISTENCE WARNING: 2. DO NOT use this API with filters to fetch a single test case by ID, entityKey, or name! 3. Filters applied to this API persist in the production UI and cause only filtered records to be visible to users. 4. This creates a major UX problem where users see incomplete data in their QMetry portal. 5. 6. CORRECT APPROACH FOR SINGLE TEST CASE: 7. When user asks to 'fetch test case VKMCP-TC-5' or 'get test case by ID 123' or 'find test case named X': 8. 1. Ask user for the numeric test case ID (tcID) if not provided 9. 2. Use 'Fetch Test Case Details' tool with the numeric tcID parameter 10. 3. NEVER use 'Fetch Test Cases' with entityKeyId filter for single test case lookup 11. 12. WHEN TO USE THIS TOOL: 13. Only use this tool when user explicitly asks for: 14. - 'List all test cases' 15. - 'Show me test cases in folder X' 16. - 'Get all test cases' (without specifying a single test case) 17. - 'Export test cases' (for bulk operations) 18. 19. CRITICAL WORKFLOW: Always use the SAME projectKey for both project info and test case fetching 20. Step 1: If user specifies projectKey (like 'UT', 'MAC'), use that EXACT projectKey for project info 21. Step 2: Get project info using that projectKey, extract latestViews.TC.viewId 22. Step 3: Use the SAME projectKey and the extracted TC viewId for fetching test cases 23. Step 4: If user doesn't specify projectKey, use 'default' for both project info and test case fetching 24. NEVER mix project keys - if user says 'MAC project', use projectKey='MAC' for everything 25. DEPRECATED: Do not use filter with entityKeyId for single test case - use 'Fetch Test Case Details' instead 26. RELEASE/CYCLE FILTERING: Use release and cycle IDs, not names, for filtering 27. For release filter: '[{"value":[releaseId],"type":"list","field":"release"}]' 28. For cycle filter: '[{"value":[cycleId],"type":"list","field":"cycle"}]' 29. For combined release+cycle: '[{"value":[releaseId],"type":"list","field":"release"},{"value":[cycleId],"type":"list","field":"cycle"}]' 30. Get release/cycle IDs from FETCH_RELEASES_AND_CYCLES tool before filtering 31. FILTER FIELDS: entityKeyId, priorityAlias, createdByAlias, updatedByAlias, testCaseStateAlias, testingTypeAlias, testCaseTypeAlias, componentAlias, owner, release, cycle 32. SORT FIELDS: entityKey, name, associatedVersion, priorityAlias, createdDate, createdByAlias, updatedDate, updatedByAlias, testCaseStateAlias, testingTypeAlias, executionMinutes 33. For multiple entity keys, use comma-separated values in filter 34. Use empty string '' as folderPath for root directory

qmetry_fetch_test_case_detailsA

Get detailed information for a specific QMetry test case by numeric ID - USE THIS for single test case lookup

Toolset: Test Cases

Parameters:

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

  • tcID (number) required: Test Case numeric ID. CRITICAL: the parameter name is 'tcID' — do NOT use 'testCaseId', 'testCaseID', 'tcId', or other variants. Accepts a string or number. This is the internal numeric identifier, not the entity key like 'MAC-TC-1684'. You can get this ID from test case search results or by using filters.

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

Output Description: JSON object with test case details including ID, key, summary, description, and metadata

Use Cases: 1. Get test case details by numeric ID (PREFERRED for single test case) 2. Fetch test case when user provides entityKey (e.g., 'VKMCP-TC-5') 3. Retrieve test case metadata for a specific test case 4. Get test case summary and properties for display or editing 5. Fetch test case details before accessing steps or version details 6. Lookup test case by name or ID without affecting UI filters

Examples:

  1. Get test case details by numeric ID

{
  "tcID": 4468020
}

Expected Output: Detailed test case information including summary, description, status

Hints: 1. USE THIS TOOL when user asks to 'fetch test case VKMCP-TC-5' or 'get test case by ID' or 'find test case X' 2. This API requires a numeric tcID parameter 3. CRITICAL: If user provides entityKey (e.g., MAC-TC-1684), you have TWO options: 4. Option 1 (RECOMMENDED): Ask user for the numeric test case ID 5. Option 2: If you must resolve entityKey, use FETCH_TEST_CASES with filter ONLY ONCE, then immediately use this tool 6. After resolving entityKey → tcID, always use THIS tool (FETCH_TEST_CASE_DETAILS) for subsequent lookups 7. This tool provides metadata and properties; use FETCH_TEST_CASE_STEPS for step-level details 8. This tool does NOT persist filters in UI - safe for single test case lookups 9. ALWAYS prefer this tool over FETCH_TEST_CASES with filters for single test case operations

qmetry_fetch_test_case_version_detailsA

Get QMetry test case details for a specific version by numeric ID

Toolset: Test Cases

Parameters:

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

  • id (number) required: Test Case numeric ID (required for fetching steps or version details). Accepts a string or number. This is the internal numeric identifier, not the entity key like 'MAC-TC-1684'. You can get this ID from test case search results.

  • version (number) required: Test Case version number. This is the internal numeric identifier for the version.

  • scope (string): Scope of the operation - defines the context for data retrieval. Common values: 'project' (default), 'folder', 'release', 'cycle'. Applies to any entity type being fetched or operated upon. (default: "project")

Output Description: JSON object with version-specific test case details

Use Cases: 1. Get specific version details of a test case 2. Compare different versions of a test case 3. Retrieve version history information 4. Audit changes made across test case versions

Examples:

  1. Get version 2 details for test case ID 123

{
  "id": 123,
  "version": 2
}

Expected Output: Version 2 details for test case 123

Hints: 1. Requires numeric ID, not entityKey 2. If user provides entityKey (e.g., MAC-TC-1684), first resolve it to numeric ID using FETCH_TEST_CASES 3. Version defaults to 1 if not specified 4. Provides version-specific metadata and history

qmetry_fetch_test_case_stepsA

Get detailed test case steps for a specific test case by numeric ID

Toolset: Test Cases

Parameters:

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

  • id (number) required: Test Case numeric ID (required for fetching steps or version details). Accepts a string or number. This is the internal numeric identifier, not the entity key like 'MAC-TC-1684'. You can get this ID from test case search results.

  • version (number): Test Case version number (optional, defaults to 1). This is the internal numeric identifier for the version.

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

Output Description: JSON object with array of test steps including step description, expected result, and order

Use Cases: 1. Get step-by-step instructions with expected results 2. Retrieve test case execution procedure for manual runs 3. Export or display detailed test steps for documentation 4. Fetch steps before automation mapping

Examples:

  1. Get steps for test case ID 123

{
  "id": 123
}

Expected Output: Detailed steps with actions and expected results for test case 123

Hints: 1. Requires numeric ID, not entityKey 2. If user provides entityKey (e.g., MAC-TC-1684), resolve it first via FETCH_TEST_CASES to get the numeric ID 3. Version defaults to 1 if not specified 4. Use pagination for test cases with many steps

qmetry_fetch_test_case_executionsA

Get execution records for a specific test case by numeric ID, including Test Run UDF values. ALWAYS present results as a unified table: Test Suite Key | Test Suite Name | Release | Cycle | Platform | Executed Version | Execution Status | <UDF Label columns…>. NEVER show a separate type+value UDF breakdown — always combine identification fields and UDF values in one table per execution row.

Toolset: Test Cases

Parameters:

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

  • tcid (number) required: Test Case numeric ID. CRITICAL: the parameter name is 'tcID' — do NOT use 'testCaseId', 'testCaseID', 'tcId', or other variants. Accepts a string or number. This is the internal numeric identifier, not the entity key like 'MAC-TC-1684'. You can get this ID from test case search results or by using filters.

  • tcversion (number): Test Case version number (optional, defaults to 1). This is the internal numeric identifier for the version.

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • scope (string): Scope of the operation - defines the context for data retrieval. Common values: 'project' (default), 'folder', 'release', 'cycle'. Applies to any entity type being fetched or operated upon. (default: "project")

  • filter (string): Filter criteria as JSON string (default '[]') (default: "[]")

Output Description: JSON object with executions array. Each execution record ALWAYS contains these mandatory identification fields: 'tsEntityKey' (Test Suite Key, e.g. 'MAC-TS-42'), 'testsuiteName' (Test Suite Name), 'releaseName' (Release), 'cycleName' (Cycle), 'platform' (Platform/environment), 'executedVersion' (Executed Version of the test case), 'executionStatus' (Execution Status label), 'tcRunID' (numeric Test Run ID), and 'testRunUdfs' (array of objects each with name, label, fieldID, fieldType, value — use 'label' for display headers, null if not set). ALL project-defined UDF fields are always included, even those with no value. Top-level 'hasTcRunUdf' flag indicates whether the project has Test Run UDFs configured. When false, a 'testRunUdfNote' field provides a professional explanation instead.

Use Cases: 1. Get execution history for a specific test case 2. Retrieve test case execution results for reporting 3. Filter executions by test suite, platform, or execution status 4. Get execution data for test case analysis 5. Monitor test case execution trends over time 6. Filter executions by release, cycle, or execution date 7. Get execution details for specific test case versions 8. Audit test execution history for compliance 9. Analyze test case execution performance across different environments 10. Track test execution by specific users or teams 11. Fetch Test Run UDF values for a specific test case's execution records 12. Inspect custom metadata captured during test execution via Test Run UDFs 13. Check whether the project has Test Run UDFs configured (hasTcRunUdf flag)

Examples:

  1. Get all executions for test case ID 1223922

{
  "tcid": 1223922
}

Expected Output: Present as ONE unified table — never as a separate type+value UDF breakdown. Example: | Test Suite Key | Test Suite Name | Release | Cycle | Platform | Executed Version | Execution Status | Tested By | Environments UDF | Execution Type | | MAC-TS-42 | Regression Suite | R1 | Sprint1| Chrome | v1 | Passed | varis | chrome, edge, safari | Functional | | MAC-TS-42 | Regression Suite | R1 | Sprint1| Firefox | v2 | Failed | john | firefox | Regression | Columns in order: Test Suite Key (tsEntityKey) | Test Suite Name (testsuiteName) | Release (releaseName) | Cycle (cycleName) | Platform (platform) | Executed Version (executedVersion) | Execution Status | then one column per UDF label. Use the UDF 'label' as column header. Show null UDF values as '-'.

  1. Get executions for specific test case version

{
  "tcid": 1223922,
  "tcversion": 2
}

Expected Output: Execution records for version 2 of the test case

  1. Filter executions by test suite and platform

{
  "tcid": 1223922,
  "filter": "[{\"value\":\"Sample Test Suite\",\"type\":\"string\",\"field\":\"testSuiteName\"},{\"value\":[12345],\"type\":\"list\",\"field\":\"platformID\"}]"
}

Expected Output: Filtered execution records matching test suite and platform criteria

  1. Filter executions by execution status

{
  "tcid": 1223922,
  "filter": "[{\"value\":[\"PASS\"],\"type\":\"list\",\"field\":\"executionStatus\"}]"
}

Expected Output: Execution records with PASS status only

  1. Filter executions by release and cycle

{
  "tcid": 1223922,
  "filter": "[{\"value\":[55178],\"type\":\"list\",\"field\":\"release\"},{\"value\":[111577],\"type\":\"list\",\"field\":\"cycle\"}]"
}

Expected Output: Execution records filtered by specific release and cycle

  1. Filter executions by date range

{
  "tcid": 1223922,
  "filter": "[{\"value\":\"2024-01-01\",\"type\":\"date\",\"field\":\"executedDate\",\"comparison\":\"gt\"},{\"value\":\"2024-12-31\",\"type\":\"date\",\"field\":\"executedDate\",\"comparison\":\"lt\"}]"
}

Expected Output: Execution records within the specified date range

  1. Filter executions by user

{
  "tcid": 1223922,
  "filter": "[{\"value\":[\"john.doe\"],\"type\":\"list\",\"field\":\"executedBy\"}]"
}

Expected Output: Execution records executed by specific user

  1. Fetch Test Run UDF values for all executions of test case ID 41571999

{
  "tcid": 41571999
}

Expected Output: Present as ONE unified table combining identification fields and UDF values — never a separate type+value breakdown. Example: | Test Suite Key | Test Suite Name | Release | Cycle | Platform | Executed Version | Execution Status | Tested By | Environments UDF | Execution Type | Country | | MAC-TS-42 | Login Suite | R1 | Sprint1 | Chrome | v1 | Passed | varis | chrome, edge, safari | Functional | India > i3 | UDF column headers use the UDF 'label' (not raw field key). Null values shown as '-'.

  1. Check if project has Test Run UDFs — response includes hasTcRunUdf flag

{
  "tcid": 1223922
}

Expected Output: Response contains hasTcRunUdf: true (UDFs present, testRunUdfs populated) or hasTcRunUdf: false (no UDFs configured, testRunUdfNote explains this)

Hints: 1. === MANDATORY RESPONSE FORMAT — READ THIS BEFORE RENDERING ANY OUTPUT === 2. 3. PIVOT RULE — CRITICAL: 4. The 'testRunUdfs' field on each execution is an array of { name, label, fieldID, fieldType, value }. 5. You MUST pivot this array into TABLE COLUMNS — do NOT render it as rows. 6. → Each testRunUdfs[i].label = a column header in the unified table 7. → Each testRunUdfs[i].value = the cell value for that execution's row 8. → testRunUdfs[i].fieldType = INTERNAL METADATA — NEVER show this as a column 9. → testRunUdfs[i].fieldID = INTERNAL METADATA — NEVER show this as a column 10. 11. FORBIDDEN PATTERNS — NEVER do any of these: 12. ❌ Do NOT render a separate sub-table (UDF Label | Type | Value) per execution 13. ❌ Do NOT show 'Type' or 'fieldType' as a visible column 14. ❌ Do NOT group output by tcRunID with individual breakdowns beneath each 15. ❌ Do NOT show raw UDF field keys (e.g. 'TRString', '8260LUP') as headers — use 'label' 16. 17. REQUIRED OUTPUT — ONE unified table, all executions as rows: 18. | Test Suite Key | Test Suite Name | Release | Cycle | Platform | Executed Version | Execution Status | <UDF Label 1> | <UDF Label 2> | ... | 19. |----------------|-----------------|---------|-------|----------|------------------|------------------|---------------|---------------|-----| 20. | MAC-TS-42 | Login Suite | R1 | S1 | Chrome | v1 | Passed | varis | chrome, edge | ... | 21. 22. MANDATORY COLUMNS (always first, in this order): 23. 1. Test Suite Key → tsEntityKey (e.g. 'MAC-TS-42') 24. 2. Test Suite Name → testsuiteName (test suite display name) 25. 3. Release → releaseName 26. 4. Cycle → cycleName 27. 5. Platform → platform 28. 6. Executed Version → executedVersion 29. 7. Execution Status → executionStatus 30. 8. Tested By → testedBy/executedBy when present 31. 9+. One column per UDF field — use testRunUdfs[i].label as header, testRunUdfs[i].value as cell. 32. 33. Null UDF values → show as '-'. If hasTcRunUdf is false, show columns 1-8 only. 34. UDF DATA SOURCE — THIS TOOL IS SELF-CONTAINED: 35. This tool automatically calls Test Run UDF metadata once (project-wide) and parses the udfjson field from each execution row. 36. The 'testRunUdfs' array in every execution record already contains ALL configured UDF fields — including fields with no value (null). 37. DO NOT call 'Fetch Test Run UDF Values' after this tool for test case executions — that tool uses GET_TESTCASE_RUNS_BY_TESTSUITE_RUN which is for test suite runs, not test case executions. 38. NEVER chain 'Fetch Test Run UDF Values' when the user asks for UDF values of test case executions — use testRunUdfs from THIS response directly. 39. === END MANDATORY RESPONSE FORMAT === 40. 41. This API requires a numeric tcid parameter, not entity key 42. If user provides entityKey (e.g., MAC-TC-1684), first call FETCH_TEST_CASES with filter on entityKeyId to resolve the tcid 43. After resolving entityKey → tcid, call this tool with the resolved numeric tcid 44. tcversion parameter is optional - omit to get executions for all versions 45. 46. CRITICAL WORKFLOW FOR LINKED ISSUES: When user asks 'fetch linked issues of test case [ID]' or 'linked issues of execution': 47. YOU MUST FIRST get the execution data using this tool to extract tcRunID before fetching issues! 48. 49. COMPLETE WORKFLOW FOR TEST CASE → LINKED ISSUES: 50. STEP 1: Resolve Test Case ID (if needed) - Use FETCH_TEST_CASES if user provides entity key 51. STEP 2: Fetch Test Case Executions (THIS TOOL) - Input: tcid, Extract: data[].tcRunID values 52. STEP 3: Fetch Linked Issues - Tool: FETCH_LINKED_ISSUES_BY_TESTCASE_RUN, Input: entityId = tcRunID 53. 54. ID MAPPING CRITICAL UNDERSTANDING: 55. - tcid/tcID = Test Case ID (for getting execution data with this tool) 56. - tcRunID = Test Case Run/Execution ID (THIS is entityId for linked issues API) 57. - entityId = tcRunID (what the linked issues API actually needs) 58. 59. NEVER USE tcid DIRECTLY as entityId for linked issues! 60. ALWAYS get tcRunID from executions and use THAT as entityId! 61. 62. EXAMPLE RESPONSE STRUCTURE FROM THIS TOOL: 63. { "data": [{ "tcRunID": 58312120, "testSuiteName": "Suite 1", "executionStatus": "PASS", "testRunUdfs": [...] }] } 64. → Use tcRunID (58312120) as entityId for linked issues API 65. 66. FILTER CAPABILITIES: Support extensive filtering by test suite, platform, status, user, release, cycle, dates, and archive status 67. FILTER FIELDS: testSuiteName (string), platformID (list), executionStatus (list), executedBy (list), project (list), release (list), cycle (list), executedDate (date with comparison), isPlatformArchived (list), isTestSuiteArchived (list), executedVersion (numeric) 68. DATE FILTERING: Use 'gt' (greater than) and 'lt' (less than) comparisons for executedDate field 69. EXECUTION STATUS: Common values include 'PASS', 'FAIL', 'BLOCKED', 'NOT_EXECUTED', 'WIP' (verify with your QMetry instance) 70. PLATFORM/SUITE ARCHIVE: Use [1,0] for both archived and non-archived, [1] for archived only, [0] for active only 71. Multiple filter conditions are combined with AND logic 72. Use pagination for large execution result sets (start, page, limit parameters) 73. Get platform IDs from FETCH_PLATFORMS tool and release/cycle IDs from FETCH_RELEASES_AND_CYCLES tool 74. This tool is essential for test execution reporting, trend analysis, and compliance auditing 75. Execution data includes timestamps, user information, environment details, and test results 76. Use scope parameter to define retrieval context (project, folder, release, cycle) 77. 78. TEST RUN UDF SUPPORT: 79. This tool automatically fetches UDF metadata (project-wide, one call for all executions) and enriches each execution record. 80. ALL project-defined Test Run UDF fields are returned for every execution — including fields with no value (value: null). 81. HTML is stripped from rich text (LARGETEXT) UDF field values for clean output. 82. Each execution's 'testRunUdfs' is an array of objects: 83. testRunUdfs: [ 84. { "name": "8260LUP", "label": "Lookup Field", "fieldID": 228563, "fieldType": "LOOKUPLIST", "value": "l1" }, 85. { "name": "TRString", "label": "TR String", "fieldID": 229241, "fieldType": "STRING", "value": "dsf" }, 86. { "name": "notes_run", "label": "Notes Run", "fieldID": 229242, "fieldType": "LARGETEXT", "value": null }, 87. { "name": "cascade_vK", "label": "Cascade VK", "fieldID": 229426, "fieldType": "CASCADINGLIST", "value": { "child": "qq", "parent": "vkc" } } 88. ] 89. Use 'fieldID' from testRunUdfs entries when calling 'Bulk Update Test Run UDFs'. 90. 91. hasTcRunUdf FLAG — IMPORTANT: 92. The response contains a 'hasTcRunUdf' boolean flag at the top level. 93. hasTcRunUdf: true → Project has Test Run UDFs configured; each execution record includes 'testRunUdfs' array with all fields. 94. hasTcRunUdf: false → Project has NO Test Run UDFs configured. 95. When hasTcRunUdf is false, the response includes a 'testRunUdfNote' field with a professional explanation. 96. Inform the user: 'No Test Run UDFs are configured for this project. Contact a project administrator to set up Test Run UDF fields.' 97. NEVER attempt to read testRunUdfs from records when hasTcRunUdf is false — the field will not be present.

qmetry_fetch_test_case_steps_with_udfA

Fetch test case steps including UDF field values via viewColumns endpoint

Toolset: Test Cases

Parameters:

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

  • tcID (number) required: Test Case numeric ID. CRITICAL: the parameter name is 'tcID' — do NOT use 'testCaseId', 'testCaseID', 'tcId', or other variants. Accepts a string or number. This is the internal numeric identifier, not the entity key like 'MAC-TC-1684'. You can get this ID from test case search results or by using filters.

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

  • version (number): Test Case version number (optional, defaults to 1). This is the internal numeric identifier for the version.

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

Output Description: JSON object with data array (steps with UDF values), filterTemplate (UDF field definitions), columns (visible/hidden column config), total count, and viewId

Use Cases: 1. Get step UDF field values for a test case 2. Retrieve steps with custom fields before updating step UDFs 3. Inspect step-level UDF data for reporting

Examples:

  1. Fetch steps with UDF values for test case ID 112768054

{
  "tcID": 112768054
}

Expected Output: Steps with UDF object containing field values, ID_ arrays for lookup IDs, UDF_ prefixed values, filterTemplate with UDF field definitions

Hints: 1. Response includes 'filterTemplate' array listing all UDF fields with their fieldType and udfmID 2. UDF values in each step row: UDF_ = display value, UDF_ID_ = numeric IDs 3. Step UDF object also has ID_ for lookup IDs 4. LOOKUPLIST: id = UDF_ID_, display = UDF_ 5. MULTILOOKUPLIST: ids = UDF_ID_ (array), display = UDF_ 6. CASCADINGLIST: parent = UDF_ID_[0], child = UDF_ID_[1] 7. viewId auto-resolved from project info if not provided

qmetry_link_test_case_to_issuesA

Link one or more defects/issues to a test case by entityKey and issue IDs.

Toolset: Test Cases

Parameters:

  • tcID (string) required: EntityKey of the Test Case to link issues to (e.g. '8d7b-TC-63'). CRITICAL: the parameter name is 'tcID' — do NOT use 'testCaseId' or 'tcId'.

  • dfIDs (array) required: Array of numeric defect/issue IDs to link to the test case (e.g. [2039, 2038, 2037]).

Output Description: JSON object with success status and linkage details.

Use Cases: 1. Link defects/issues to a test case for traceability 2. Bulk link multiple issues to a single test case 3. Automate defect coverage mapping

Examples:

  1. Link issues to test case 8d7b-TC-63

{
  "tcID": "8d7b-TC-63",
  "dfIDs": [
    2039,
    2038,
    2037,
    1528
  ]
}

Expected Output: Issues linked to test case 8d7b-TC-63 successfully.

Hints: 1. To get the tcID, call the 'Fetch Test Cases' tool and use data[].entityKey. 2. dfIDs must be an array of numeric issue/defect IDs — resolve them using the 'Fetch Defects or Issues' tool. 3. If the user provides a test case entityKey (e.g., 8d7b-TC-63), use it directly as tcID. 4. CRITICAL: the parameter name is 'tcID' — do NOT use 'testCaseId' or 'tcId'. 5. CRITICAL: the parameter name is 'dfIDs' — do NOT use 'issueIds' or 'defectIds'.

qmetry_create_requirementA

Create a new requirement in QMetry with metadata and release/cycle mapping.

Toolset: Requirements

Parameters:

  • name (string) required: Requirement name (required).

  • priority (number): Priority ID of the requirement.

  • component (array): Component (Label) IDs associated with the requirement.

  • requirementOwner (number): Owner ID of the requirement.

  • requirementState (number): State ID of the requirement.

  • releaseCycleMapping (array): Release/cycle mapping for the requirement.

  • description (string): Description of the requirement.

  • associateRelCyc (boolean): Whether to associate the release/cycle mapping.

  • rqFolderId (string): Requirement folder ID - SYSTEM AUTOMATICALLY RESOLVES THIS. Leave empty unless you have a specific folder ID. System will fetch project info using the projectKey and extract rootFolders.RQ.id automatically. Manual folder ID only needed if you want to target a specific sub-folder.

  • scope (string): Scope of the requirement, usually 'project'. (default: "project")

  • udfFields (record<string, union>): Flat UDF field values. Keys = UDF field names from 'Fetch UDF Layout'. Values depend on fieldTypeName: STRING/LARGETEXT: string, NUMBER: number, DATETIMEPICKER: date string ('14-08-2026'), LOOKUPLIST: numeric ID, MULTILOOKUPLIST: array of IDs [101, 102], CASCADINGLIST: { parent: 101, child: 102 }. Call 'Fetch UDF Layout' with entityType + pageName='ADD' to discover available fields and list option IDs.

Output Description: JSON object containing the new requirement ID, summary, and creation metadata.

Use Cases: 1. Create a basic requirement with just a name 2. Add detailed metadata like priority, component, and description to a requirement 3. Associate a requirement with a specific release/cycle for planning 4. Set requirementOwner and requirementState using valid IDs from project info 5. Create a requirement in a specific folder using rqFolderId 6. Set custom fields (UDFs) values on the new requirement

Examples:

  1. Create a requirement in the root folder (auto-resolved)

{
  "name": "New login requirement"
}

Expected Output: Requirement created in the root requirement folder with ID and summary details

  1. Create a requirement with metadata

{
  "name": "New login requirement",
  "priority": 688864,
  "component": [
    689030
  ],
  "requirementOwner": 8,
  "requirementState": 688912,
  "description": "Users must be able to log in with SSO.",
  "associateRelCyc": true,
  "releaseCycleMapping": [
    {
      "release": 1628,
      "cycle": [
        1839,
        1840
      ],
      "version": 1
    }
  ]
}

Expected Output: Requirement created with metadata. Example uses: priority=688864, component=[689030], requirementOwner=8, requirementState=688912 — resolve these IDs from project info's customListObjs before use.

Hints: 1. 'name' is the only mandatory field — sets the requirement's title/summary. Every other field is optional. 2. 'description' is a free-text field (supports HTML) for detailed requirement information. 3. 'component' is an array of Component (Label) IDs — resolve names to IDs from project info before use. 4. If rqFolderId is not provided, it will be auto-resolved to the root requirement folder using project info (rootFolders.RQ.id). 5. To get valid values for priority, component, requirementOwner (owner), requirementState (state), call the 'Admin/Get info Service' API (FETCH_PROJECT_INFO tool) and use the returned customListObjs IDs. 6. If the user provides a name instead of an ID for owner/state/priority/component, fetch project info, find the matching entry by name in the relevant customListObjs list, and use its ID. If not found, skip that field and tell the user it was omitted because the value wasn't available in the current project. 7. Release/cycle mapping is optional. If the user wants to associate a release and cycle, set associateRelCyc: true and provide releaseCycleMapping. 8. HARD GATE (not configurable): before creating, this tool checks project info for isExtTrackerConfigured, extTrackerType, and isRQConfigured. If the project has an external tracker configured (isExtTrackerConfigured=true) and isRQConfigured=true, and the tracker is Jira (extTrackerType=1) or Azure (extTrackerType=3), the create is refused with an error — do NOT retry or work around this. Tell the user requirements for this project must be created directly in the external system (Jira or Azure), then synced into QMetry. 9. 10. UDF (User Defined Fields) WORKFLOW FOR CREATE: 11. 1. Call 'Fetch UDF Layout' with entityType='RQ', pageName='ADD' to discover field names, types, and list option IDs. 12. IF listOptions[field.listName] is empty after Fetch UDF Layout, the tool already tried a metadata fallback. If STILL empty, ask the user to provide the option ID from the QMetry UI — do NOT guess numeric IDs. 13. 2. For LOOKUPLIST fields: pick one ID from listOptions[field.listName][].id. 14. 3. For MULTILOOKUPLIST fields: pick an array of IDs. 15. 4. For CASCADINGLIST fields: pick parent ID, then call 'Fetch Cascade Child Values' for child ID. Pass { parent: parentId, child: childId }. 16. 5. Pass all UDF values via 'udfFields' param: { fieldName: value }. 17. 6. Mandatory UDF fields (isMandatory=true) MUST be included or create will fail.

qmetry_update_requirementA

Update an existing QMetry requirement by rqId and rqVersionId.

Toolset: Requirements

Parameters:

  • rqId (number) required: Requirement numeric ID (required). This is the internal numeric identifier, not the entity key like 'MAC-RQ-730'.

  • rqVersionId (number) required: Requirement version ID (required for update).

  • updateWithVersion (boolean): Pass 'true' to create a new version of the requirement instead of updating the existing version in place.

  • name (string): Name of the requirement.

  • description (string): Description of the requirement.

  • component (array): Component (Label) IDs associated with the requirement.

  • requirementOwner (number): Owner ID of the requirement.

  • requirementState (number): State ID of the requirement.

  • priority (number): Priority ID of the requirement.

  • attachments (object): Attachment changes. ADD and REMOVE are both required arrays (use empty arrays for no change).

  • udfFields (record<string, union>): Flat UDF field values. Keys = UDF field names from 'Fetch UDF Layout'. Values depend on fieldTypeName: STRING/LARGETEXT: string, NUMBER: number, DATETIMEPICKER: date string ('14-08-2026'), LOOKUPLIST: numeric ID, MULTILOOKUPLIST: array of IDs [101, 102], CASCADINGLIST: { parent: 101, child: 102 }. Call 'Fetch UDF Layout' with entityType + pageName='ADD' to discover available fields and list option IDs.

  • UDF (record<string, object>): UDF wrapper required for update operations. Keys = UDF field names. Each value must include fieldID and value. Also set matching flat key in udfFields for the LOOKUPLIST Alias display. Example: { custom_text: { fieldID: 1001, value: 'new value' } }

Output Description: JSON object containing the updated requirement ID, summary, and update metadata.

Use Cases: 1. Update the name, description, priority, owner, state, or component of a requirement 2. Add or remove attachments on a requirement 3. Update custom field (UDF) values on a requirement 4. Create a new version of a requirement while updating it (updateWithVersion)

Examples:

  1. Update the priority of a requirement

{
  "rqId": 2073,
  "rqVersionId": 2087,
  "updateWithVersion": false,
  "priority": 688865
}

Expected Output: Requirement priority updated successfully.

  1. Update name, description, owner, and state

{
  "rqId": 2073,
  "rqVersionId": 2087,
  "name": "Updated login requirement",
  "description": "Users must be able to log in with SSO.",
  "requirementOwner": 8,
  "requirementState": 688912,
  "component": [
    689030
  ]
}

Expected Output: Requirement updated with new name, description, owner, state, and component.

Hints: 1. If the user provides an entityKey (e.g., MAC-RQ-730), first call 'Fetch Requirements' with a filter on entityKeyId to resolve rqId and rqVersionId. 2. updateWithVersion: pass 'true' to create a new version of the requirement instead of updating the current version in place. 3. To get valid values for priority, requirementOwner, requirementState, and component, call the 'Admin/Get info Service' API (FETCH_PROJECT_INFO tool) and use the returned customListObjs IDs. 4. If the user provides a name instead of an ID for owner/state/priority, fetch project info, find the matching entry by name in the relevant customListObjs list, and use its ID. If not found, skip that field and tell the user it was omitted because the value wasn't available in the current project. 5. attachments (if used) requires both ADD and REMOVE arrays — pass empty arrays when there is nothing to add or remove. 6. Only fields explicitly listed in this tool's parameters are supported — releaseCycleMapping and associateRelCyc are create-only and not supported here. 7. HARD GATE: before updating, this tool checks project info for isExtTrackerConfigured, extTrackerType, and isRQConfigured. If the project has an external tracker configured (isExtTrackerConfigured=true) and isRQConfigured=true, and the tracker is Jira (extTrackerType=1) or Azure (extTrackerType=3), the update is refused with an error — do NOT retry or work around this. Tell the user requirements for this project must be updated directly in the external system (Jira or Azure), then synced into QMetry. 8. 9. UDF (User Defined Fields) WORKFLOW FOR UPDATE: 10. 1. Call 'Fetch UDF Layout' with entityType='RQ', pageName='DETAIL' to get field names, fieldIDs (projectUserFieldID), and list option IDs. 11. IF listOptions[field.listName] is empty after Fetch UDF Layout, the tool already tried a metadata fallback. If STILL empty, ask the user to provide the option ID from the QMetry UI — do NOT guess numeric IDs. 12. 2. For LOOKUPLIST fields: pick one ID from listOptions[field.listName][].id. 13. 3. For MULTILOOKUPLIST fields: pick array of IDs; also pass alias flat key (e.g., fieldNameAlias: 'Option Label'). 14. 4. For CASCADINGLIST fields: pick parent ID + fetch child with 'Fetch Cascade Child Values'. Pass { parent: parentId, child: childId }. 15. 5. Pass BOTH 'udfFields' (flat root values) AND 'UDF' wrapper (with fieldID) — both required for update. Example: udfFields: { rq_field: 'value' }, UDF: { rq_field: { fieldID: 2001, value: 'value' } } 16. 6. Mandatory UDF fields (isMandatory=true) MUST be included.

qmetry_fetch_requirementsA

Fetch QMetry requirements - automatically handles viewId resolution based on project

Toolset: Requirements

Parameters:

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

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

  • folderPath (string): Folder path for requirements - SYSTEM AUTOMATICALLY SETS TO ROOT. Leave empty unless you want specific folder. System will automatically use empty string "" (root directory). Only specify if user wants specific folder like "Automation/Regression". (default: "")

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • scope (string): Scope of the operation - defines the context for data retrieval. Common values: 'project' (default), 'folder', 'release', 'cycle'. Applies to any entity type being fetched or operated upon. (default: "project")

  • getSubEntities (boolean): Whether to include sub-entities.

  • hideEmptyFolders (boolean): Whether to hide empty folders.

  • folderSortColumn (string): Folder sort column (default 'name')

  • folderSortOrder (string): Folder sort order (ASC or DESC)

  • isJiraFilter (boolean): 'false' if using qmetry filter (default: false)

  • filterType (enum): Pass 'QMETRY' or 'JIRA' (default: "QMETRY")

  • filter (string): Filter criteria as JSON string (default '[]') (default: "[]")

  • udfFilter (string): User-defined field filter as JSON string (default '[]') (default: "[]")

  • sort (string): Sort Records - refer json schema, Possible property - name, entityKey, associatedVersion, priorityAlias, createdDate, createdByAlias, updatedDate, updatedByAlias, requirementStateAlias, linkedTcCount, linkedDfCount, attachmentCount, createdSystem, owner (default: "[{"property":"name","direction":"ASC"}]")

Output Description: JSON object with 'data' array containing requirements and pagination info

Use Cases: 1. List all requirements in a project 2. Search for specific requirements using filters 3. Browse requirements in specific folders 4. Get paginated requirement results 5. Filter requirements by name or properties 6. Get requirement metadata for test planning

Examples:

  1. Get all requirements from default project - system will auto-fetch viewId

{}

Expected Output: List of requirements from default project with auto-resolved viewId

  1. Get all requirements from UT project - system will auto-fetch UT project's viewId

{
  "projectKey": "UT"
}

Expected Output: List of requirements from UT project using UT's specific RQ viewId

  1. Search for specific requirements by entity key

{
  "projectKey": "MAC",
  "filter": "[{\"type\":\"string\",\"value\":\"MAC-RQ-123\",\"field\":\"entityKeyId\"}]"
}

Expected Output: Filtered requirements matching the entity key criteria

  1. Search for multiple requirements by comma-separated entity keys

{
  "projectKey": "MAC",
  "filter": "[{\"type\":\"string\",\"value\":\"MAC-RQ-123,MAC-RQ-456,MAC-RQ-789\",\"field\":\"entityKeyId\"}]"
}

Expected Output: Requirements matching any of the specified entity keys

  1. Filter requirements by state (e.g., Open, Approved)

{
  "projectKey": "MAC",
  "filter": "[{\"type\":\"string\",\"value\":\"Open\",\"field\":\"requirementStateAlias\"}]"
}

Expected Output: Requirements with 'Open' state

  1. Filter requirements by priority

{
  "projectKey": "MAC",
  "filter": "[{\"type\":\"string\",\"value\":\"High\",\"field\":\"priorityAlias\"}]"
}

Expected Output: Requirements with 'High' priority

  1. Filter requirements by archive status

{
  "filter": "[{\"value\":[1,0],\"type\":\"list\",\"field\":\"isArchived\"}]"
}

Expected Output: List of requirements filtered by archive status (archived and non-archived)

  1. Get only archived requirements

{
  "filter": "[{\"value\":[1],\"type\":\"list\",\"field\":\"isArchived\"}]"
}

Expected Output: List of only archived requirements

  1. Sort requirements by name in ascending order

{
  "projectKey": "MAC",
  "sort": "[{\"property\":\"name\",\"direction\":\"ASC\"}]"
}

Expected Output: Requirements sorted alphabetically by name

  1. Sort requirements by creation date (newest first)

{
  "projectKey": "MAC",
  "sort": "[{\"property\":\"createdDate\",\"direction\":\"DESC\"}]"
}

Expected Output: Requirements sorted by creation date, newest first

  1. Sort requirements by entity key

{
  "projectKey": "MAC",
  "sort": "[{\"property\":\"entityKey\",\"direction\":\"ASC\"}]"
}

Expected Output: Requirements sorted by entity key (MAC-RQ-1, MAC-RQ-2, etc.)

  1. Sort requirements by linked test case count

{
  "projectKey": "MAC",
  "sort": "[{\"property\":\"linkedTcCount\",\"direction\":\"DESC\"}]"
}

Expected Output: Requirements sorted by number of linked test cases, highest first

  1. Complex filter: Requirements by owner with specific state

{
  "projectKey": "MAC",
  "filter": "[{\"type\":\"string\",\"value\":\"john.doe\",\"field\":\"owner\"},{\"type\":\"string\",\"value\":\"Approved\",\"field\":\"requirementStateAlias\"}]"
}

Expected Output: Requirements owned by john.doe with 'Approved' state

  1. Multi-field sort: Priority first, then creation date

{
  "projectKey": "MAC",
  "sort": "[{\"property\":\"priorityAlias\",\"direction\":\"DESC\"},{\"property\":\"createdDate\",\"direction\":\"ASC\"}]"
}

Expected Output: Requirements sorted by priority (High to Low), then by creation date (oldest first)

  1. Filter requirements by specific release and cycle

{
  "projectKey": "MAC",
  "filter": "[{\"value\":[55178],\"type\":\"list\",\"field\":\"release\"},{\"value\":[111577],\"type\":\"list\",\"field\":\"cycle\"}]"
}

Expected Output: Requirements associated with Release 8.12 (ID: 55178) and Cycle 8.12.1 (ID: 111577)

  1. Filter requirements by release only

{
  "projectKey": "MAC",
  "filter": "[{\"value\":[55178],\"type\":\"list\",\"field\":\"release\"}]"
}

Expected Output: All requirements associated with Release 8.12 (ID: 55178)

Hints: 1. CRITICAL WORKFLOW: Always use the SAME projectKey for both project info and requirement fetching 2. Step 1: If user specifies projectKey (like 'UT', 'MAC'), use that EXACT projectKey for project info 3. Step 2: Get project info using that projectKey, extract latestViews.RQ.viewId 4. Step 3: Use the SAME projectKey and the extracted RQ viewId for fetching requirements 5. Step 4: If user doesn't specify projectKey, use 'default' for both project info and requirement fetching 6. NEVER mix project keys - if user says 'MAC project', use projectKey='MAC' for everything 7. For search by requirement key (like MAC-RQ-123), use filter: '[{"type":"string","value":"MAC-RQ-123","field":"entityKeyId"}]' 8. For multiple entity keys, use comma-separated values: '[{"type":"string","value":"MAC-RQ-123,MAC-RQ-456","field":"entityKeyId"}]' 9. Use empty string '' as folderPath for root directory 10. Filter supports QMETRY and JIRA types - default is QMETRY 11. FILTER FIELDS: entityKeyId, name, requirementStateAlias, priorityAlias, owner, createdByAlias, updatedByAlias, createdSystem 12. SORT FIELDS: name, entityKey, associatedVersion, priorityAlias, createdDate, createdByAlias, updatedDate, updatedByAlias, requirementStateAlias, linkedTcCount, linkedDfCount, attachmentCount, createdSystem, owner 13. SORT DIRECTIONS: ASC (ascending), DESC (descending) 14. Multiple filters: Use array with multiple objects for AND conditions 15. Multiple sort criteria: Use array with multiple objects, first takes priority 16. Filter format: [{'type':'string','value':'filterValue','field':'fieldName'}] 17. Sort format: [{'property':'fieldName','direction':'ASC|DESC'}] 18. RELEASE/CYCLE FILTERING: Use release and cycle IDs from fetch_releases_and_cycles tool 19. For specific release: '[{"value":[releaseId],"type":"list","field":"release"}]' 20. For specific cycle: '[{"value":[cycleId],"type":"list","field":"cycle"}]' 21. For release AND cycle: '[{"value":[releaseId],"type":"list","field":"release"},{"value":[cycleId],"type":"list","field":"cycle"}]' 22. Example: Release 8.12 (ID: 55178) + Cycle 8.12.1 (ID: 111577) = filter with both IDs

qmetry_fetch_requirement_detailsA

Get detailed information for a specific QMetry requirement by numeric ID

Toolset: Requirements

Parameters:

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

  • id (number) required: Requirement numeric ID (required for fetching specific requirement details). This is the internal numeric identifier, not the entity key like 'MAC-RQ-730'. You can get this ID from requirement search results or by using filters.

  • version (number) required: Requirement version number (required for fetching specific requirement version details). This is the internal numeric identifier for the version.

Output Description: JSON object with requirement details including ID, key, summary, description, status, and all metadata

Use Cases: 1. Get requirement details by numeric ID 2. Retrieve requirement metadata for reporting 3. Get requirement summary and properties 4. Fetch requirement details before linking or updating 5. Access requirement field values and custom fields 6. Get requirement version-specific information

Examples:

  1. Get requirement details by numeric ID

{
  "id": 4791316,
  "version": 1
}

Expected Output: Detailed requirement information including summary, description, status, and all fields

Hints: 1. This API requires a numeric ID parameter, not entity key 2. If user provides entityKey (e.g., MAC-RQ-730), first call FETCH_REQUIREMENTS with a filter on entityKeyId to resolve the numeric ID 3. After resolving entityKey → numeric ID, call this tool with the resolved numeric ID 4. Version parameter is required - use 1 for the latest version unless user specifies otherwise 5. This tool provides complete requirement information including all custom fields 6. Use this tool to get detailed requirement information that's not available in the list view

qmetry_link_requirements_to_testcaseA

Link one or more requirements to a test case by entityKey and version IDs.

Toolset: Requirements

Parameters:

  • tcID (string) required: EntityKey of Testcase (e.g. 'COD-TC-29')

  • tcVersionId (number) required: Test Case version number. This is the internal numeric identifier for the version.

  • rqVersionIds (string) required: Comma-separated values of versionId of the Requirement (e.g. '236124,236125')

Output Description: JSON object with success status and linkage details.

Use Cases: 1. Link requirements to a test case for traceability 2. Bulk link multiple requirements to a single test case 3. Automate requirement coverage mapping

Examples:

  1. Link requirements to test case VT-TC-26

{
  "tcID": "VT-TC-26",
  "tcVersionId": 5448515,
  "rqVersionIds": "5009939,5009937,4970699"
}

Expected Output: Requirements linked to test case VT-TC-26 successfully.

Hints: 1. To get the tcID, call the Testcase/Fetch List for Bulk Operation API and use data[].entityKey. 2. To get the tcVersionId, call the Testcase/Fetch Versions API and use data[].tcVersionID. 3. To get the rqVersionIds, call the requirement/List Versions API and use data[].rqVersionID. 4. If user provides requirement entityKey (e.g., VT-RQ-18), first call requirements list with a filter on entityKeyId to resolve the rqVersionIds 5. If user provides testcase entityKey (e.g., VT-TC-26), first call testcase list with a filter on entityKeyId to resolve the tcVersionId and tcID. 6. rqVersionIds must be a comma-separated string of requirement version IDs.

qmetry_fetch_test_cases_linked_to_requirementA

Get test cases that are linked (or not linked) to a specific requirement in QMetry

Toolset: Requirements

Parameters:

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

  • rqID (number) required: Requirement numeric ID (required for fetching specific requirement details). This is the internal numeric identifier, not the entity key like 'MAC-RQ-730'. You can get this ID from requirement search results or by using filters.

  • getLinked (boolean): True to get only test cases that are linked with this requirement, false to get test cases which are not linked with this requirement. Defaults to true (get linked test cases). (default: true)

  • showEntityWithReleaseCycle (boolean): True to list only test cases which have given release and cycle, false for all test cases regardless of release/cycle association. Defaults to false (show all). (default: false)

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • tcFolderPath (string): Folder path to get test cases under specific folder. Use empty string "" for root folder or specify path like "/Sample Template". (default: "")

  • releaseID (string): Filter test cases by release ID. Accepts a string or number. Get release IDs from FETCH_RELEASES_AND_CYCLES tool.

  • cycleID (string): Filter test cases by cycle ID. Accepts a string or number. Get cycle IDs from FETCH_RELEASES_AND_CYCLES tool.

  • filter (string): Filter criteria as JSON string (default '[]') (default: "[]")

  • getSubEntities (boolean): Allow filter of sub-entities for requirement. (default: true)

  • getColumns (boolean): True to get column information in response. (default: true)

Output Description: JSON object with test cases array, traceability information, and pagination metadata

Use Cases: 1. Get all test cases linked to a specific requirement for traceability analysis 2. Find test cases that are NOT linked to a requirement (gap analysis) 3. Verify requirement coverage by checking linked test cases 4. Impact analysis - see which test cases are affected when a requirement changes 5. Generate traceability matrix between requirements and test cases 6. Filter linked test cases by release, cycle, or other criteria 7. Audit requirement-test case relationships for compliance 8. Identify orphaned test cases or requirements without proper links 9. Plan test execution based on requirement-test case associations 10. Quality assurance - ensure all requirements have adequate test coverage

Examples:

  1. Get all test cases linked to requirement ID 4791316

{
  "rqID": 4791316
}

Expected Output: List of test cases that are linked to requirement MAC-RQ-1011

  1. Get test cases NOT linked to requirement (gap analysis)

{
  "rqID": 4791316,
  "getLinked": false
}

Expected Output: List of test cases that are NOT linked to requirement MAC-RQ-1011

  1. Get linked test cases filtered by specific release

{
  "rqID": 4791316,
  "releaseID": "55178"
}

Expected Output: Linked test cases associated with Release 8.12 (ID: 55178)

  1. Get linked test cases filtered by release and cycle

{
  "rqID": 4791316,
  "releaseID": "55178",
  "cycleID": "111577",
  "showEntityWithReleaseCycle": true
}

Expected Output: Linked test cases in Release 8.12 and Cycle 8.12.1

  1. Get linked test cases from specific folder

{
  "rqID": 4791316,
  "tcFolderPath": "/Sample Template"
}

Expected Output: Linked test cases located in the '/Sample Template' folder

  1. Search linked test cases by entity key

{
  "rqID": 4791316,
  "filter": "[{\"type\":\"string\",\"value\":\"MAC-TC-1684,MAC-TC-1685\",\"field\":\"entityKeyId\"}]"
}

Expected Output: Linked test cases matching specific entity keys

  1. Filter linked test cases by priority

{
  "rqID": 4791316,
  "filter": "[{\"type\":\"list\",\"value\":[1,2],\"field\":\"priorityAlias\"}]"
}

Expected Output: Linked test cases with High or Medium priority

  1. Filter linked test cases by status

{
  "rqID": 4791316,
  "filter": "[{\"type\":\"list\",\"value\":[1,2],\"field\":\"testCaseStateAlias\"}]"
}

Expected Output: Linked test cases with Active or Review status

  1. Filter linked test cases by test case type

{
  "rqID": 4791316,
  "filter": "[{\"type\":\"list\",\"value\":[1],\"field\":\"testCaseTypeAlias\"}]"
}

Expected Output: Linked functional test cases

  1. Filter linked test cases by testing type (automation)

{
  "rqID": 4791316,
  "filter": "[{\"type\":\"list\",\"value\":[2],\"field\":\"testingTypeAlias\"}]"
}

Expected Output: Linked automated test cases

  1. Get only parameterized linked test cases

{
  "rqID": 4791316,
  "filter": "[{\"type\":\"list\",\"value\":[1],\"field\":\"isParameterized\"}]"
}

Expected Output: Linked test cases that are parameterized (data-driven)

  1. Filter linked test cases by archive status

{
  "rqID": 4791316,
  "filter": "[{\"type\":\"list\",\"value\":[0],\"field\":\"isArchived\"}]"
}

Expected Output: Active (non-archived) linked test cases

  1. Search linked test cases by summary content

{
  "rqID": 4791316,
  "filter": "[{\"type\":\"string\",\"value\":\"login\",\"field\":\"summary\"}]"
}

Expected Output: Linked test cases with 'login' in their summary

  1. Filter linked test cases by requirement version

{
  "rqID": 4791316,
  "filter": "[{\"type\":\"string\",\"value\":\"1\",\"field\":\"rqVersion\"}]"
}

Expected Output: Test cases linked to version 1 of the requirement

  1. Complex filter: Active, high priority, automated test cases

{
  "rqID": 4791316,
  "filter": "[{\"type\":\"list\",\"value\":[0],\"field\":\"isArchived\"},{\"type\":\"list\",\"value\":[1],\"field\":\"priorityAlias\"},{\"type\":\"list\",\"value\":[2],\"field\":\"testingTypeAlias\"}]"
}

Expected Output: Active, high priority, automated test cases linked to requirement

Hints: 1. This API requires a numeric rqID parameter, not entity key 2. If user provides entityKey (e.g., MAC-RQ-1011), first call FETCH_REQUIREMENTS with filter on entityKeyId to resolve the numeric rqID 3. After resolving entityKey → rqID, call this tool with the resolved numeric rqID 4. TRACEABILITY WORKFLOW: Use this tool to establish requirement-test case traceability matrix 5. getLinked=true (default): Returns test cases that ARE linked to the requirement 6. getLinked=false: Returns test cases that are NOT linked to the requirement (useful for gap analysis) 7. showEntityWithReleaseCycle=true: Only show test cases that have the specified release and cycle 8. showEntityWithReleaseCycle=false (default): Show all test cases regardless of release/cycle 9. RELEASE/CYCLE FILTERING: Use string IDs, not numeric (e.g., releaseID: '55178', cycleID: '111577') 10. Get release/cycle IDs from FETCH_RELEASES_AND_CYCLES tool before filtering 11. tcFolderPath: Use empty string '' for root folder or specific path like '/Sample Template' 12. FILTER CAPABILITIES: Support same filters as regular test case listing 13. FILTER FIELDS: summary, rqVersion, priorityAlias, testCaseStateAlias, createdByAlias, testCaseTypeAlias, testingTypeAlias, release, cycle, isArchived, isParameterized, componentAlias, entityKeyId 14. PRIORITY IDs: Typically 1=High, 2=Medium, 3=Low (verify with your QMetry instance) 15. STATUS IDs: Typically 1=Active, 2=Review, 3=Deprecated (verify with your QMetry instance) 16. TYPE IDs: Typically 1=Functional, 2=Integration, 3=System (verify with your QMetry instance) 17. TESTING TYPE IDs: Typically 1=Manual, 2=Automated (verify with your QMetry instance) 18. PARAMETERIZED: 1=Yes (parameterized), 0=No (non-parameterized) 19. ARCHIVED: 1=Archived, 0=Active (non-archived) 20. Multiple filter conditions are combined with AND logic 21. For entity key search, use comma-separated values: 'MAC-TC-1,MAC-TC-2,MAC-TC-3' 22. This tool is crucial for compliance, traceability audits, and impact analysis 23. Use getColumns=true to get column metadata for better result interpretation 24. Pagination supported for large result sets (start, page, limit parameters)

qmetry_fetch_requirements_linked_to_test_caseA

Get requirements that are linked (or not linked) to a specific test case in QMetry

Toolset: Requirements

Parameters:

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

  • tcID (number) required: Test Case numeric ID. CRITICAL: the parameter name is 'tcID' — do NOT use 'testCaseId', 'testCaseID', 'tcId', or other variants. Accepts a string or number. This is the internal numeric identifier, not the entity key like 'MAC-TC-1684'. You can get this ID from test case search results or by using filters.

  • getLinked (boolean): True to get only requirements that are linked with this test case, false to get requirements which are not linked with this test case. Defaults to true (get linked requirements). (default: true)

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • rqFolderPath (string): Folder path for requirements - SYSTEM AUTOMATICALLY SETS TO ROOT. Leave empty unless you want specific folder. System will automatically use empty string "" (root directory). Only specify if user wants specific folder like "Automation/Regression". (default: "")

  • filter (string): Filter criteria as JSON string (default '[]') (default: "[]")

Output Description: JSON object with requirements array, traceability information, and pagination metadata

Use Cases: 1. Get all requirements linked to a specific test case for traceability analysis 2. Find requirements that are NOT linked to a test case (gap analysis) 3. Verify test case coverage by checking linked requirements 4. Impact analysis - see which requirements are affected when a test case changes 5. Generate traceability matrix between test cases and requirements 6. Filter linked requirements by various criteria 7. Audit test case-requirement relationships for compliance 8. Identify orphaned requirements or test cases without proper links 9. Plan requirement validation based on test case-requirement associations 10. Quality assurance - ensure all test cases have proper requirement coverage

Examples:

  1. Get all requirements linked to test case ID 594294

{
  "tcID": 594294
}

Expected Output: List of requirements that are linked to test case MAC-TC-1684

  1. Get requirements NOT linked to test case (gap analysis)

{
  "tcID": 594294,
  "getLinked": false
}

Expected Output: List of requirements that are NOT linked to test case MAC-TC-1684

  1. Get linked requirements from specific folder

{
  "tcID": 594294,
  "rqFolderPath": "/CodeSnippets"
}

Expected Output: Linked requirements located in the '/CodeSnippets' folder

  1. Search linked requirements by entity key

{
  "tcID": 594294,
  "filter": "[{\"type\":\"string\",\"value\":\"MAC-RQ-730,MAC-RQ-731\",\"field\":\"entityKeyId\"}]"
}

Expected Output: Linked requirements matching specific entity keys

  1. Filter linked requirements by status

{
  "tcID": 594294,
  "filter": "[{\"type\":\"list\",\"value\":[1,2],\"field\":\"requirementStateAlias\"}]"
}

Expected Output: Linked requirements with Open or Approved status

  1. Filter linked requirements by priority

{
  "tcID": 594294,
  "filter": "[{\"type\":\"list\",\"value\":[1],\"field\":\"priorityAlias\"}]"
}

Expected Output: Linked requirements with High priority

  1. Filter linked requirements by archive status

{
  "tcID": 594294,
  "filter": "[{\"type\":\"list\",\"value\":[0],\"field\":\"isArchived\"}]"
}

Expected Output: Active (non-archived) linked requirements

  1. Search linked requirements by name content

{
  "tcID": 594294,
  "filter": "[{\"type\":\"string\",\"value\":\"authentication\",\"field\":\"name\"}]"
}

Expected Output: Linked requirements with 'authentication' in their name

  1. Filter linked requirements by test case version

{
  "tcID": 594294,
  "filter": "[{\"type\":\"string\",\"value\":\"1\",\"field\":\"tcVersion\"}]"
}

Expected Output: Requirements linked to version 1 of the test case

  1. Filter linked requirements by release and cycle

{
  "tcID": 594294,
  "filter": "[{\"type\":\"list\",\"value\":[55178],\"field\":\"release\"},{\"type\":\"list\",\"value\":[111577],\"field\":\"cycle\"}]"
}

Expected Output: Linked requirements in Release 8.12 and Cycle 8.12.1

Hints: 1. This API requires a numeric tcID parameter, not entity key 2. If user provides entityKey (e.g., MAC-TC-1684), first call FETCH_TEST_CASES with filter on entityKeyId to resolve the numeric tcID 3. After resolving entityKey → tcID, call this tool with the resolved numeric tcID 4. TRACEABILITY WORKFLOW: Use this tool to establish test case-requirement traceability matrix 5. getLinked=true (default): Returns requirements that ARE linked to the test case 6. getLinked=false: Returns requirements that are NOT linked to the test case (useful for gap analysis) 7. rqFolderPath: Use empty string '' for root folder or specific path like '/CodeSnippets' 8. FILTER CAPABILITIES: Support same filters as regular requirement listing 9. FILTER FIELDS: name, entityKeyId, requirementStateAlias, priorityAlias, createdByAlias, tcVersion, release, cycle, isArchived, componentAlias 10. Multiple filter conditions are combined with AND logic 11. For entity key search, use comma-separated values: 'MAC-RQ-1,MAC-RQ-2,MAC-RQ-3' 12. This tool is crucial for compliance, traceability audits, and impact analysis 13. Pagination supported for large result sets (start, page, limit parameters) 14. Use this tool to verify that test cases properly cover requirements 15. Essential for requirement validation and test case completeness analysis

qmetry_create_test_suiteA

Create a new test suite in QMetry with metadata and release/cycle mapping.

Toolset: Test Suites

Parameters:

  • parentFolderId (string): Test Suite parent folder ID - SYSTEM AUTOMATICALLY RESOLVES THIS. Leave empty unless you have a specific folder ID. System will fetch project info using the projectKey and extract rootFolders.TS.id automatically. Manual folder ID only needed if you want to target a specific sub-folder.

  • name (string) required

  • isAutomatedFlag (boolean)

  • description (string)

  • testsuiteOwner (number)

  • testSuiteState (number)

  • associateRelCyc (boolean)

  • releaseCycleMapping (array): Release/cycle association for the test suite. CRITICAL SHAPE DIFFERENCE vs Test Case mapping: Test Suite uses: { releaseId: number, buildID: number } Test Case uses: { release: number, cycle: number[], version: number } — DO NOT use TC shape here. Set associateRelCyc=true when providing this array. Example: [{ releaseId: 92112, buildID: 130831 }]

  • udfFields (record<string, union>): Flat UDF field values. Keys = UDF field names from 'Fetch UDF Layout'. Values depend on fieldTypeName: STRING/LARGETEXT: string, NUMBER: number, DATETIMEPICKER: date string ('14-08-2026'), LOOKUPLIST: numeric ID, MULTILOOKUPLIST: array of IDs [101, 102], CASCADINGLIST: { parent: 101, child: 102 }. Call 'Fetch UDF Layout' with entityType + pageName='ADD' to discover available fields and list option IDs.

Output Description: JSON object containing the new test suite ID, summary, and creation metadata.

Use Cases: 1. Create a basic test suite with just a name and folder 2. Add detailed metadata like description to a test suite 3. Associate test suite with specific release/cycle for planning 4. Set testsuiteOwner, testSuiteState, and other metadata using valid IDs from project info 5. Create test suites for isAutomatedFlag true or false for automated or manual types, default is false 6. Add test suite to a specific folder using parentFolderId 7. Map test suite to multiple cycles/releases and build ID

Examples:

  1. Create a test suite in the root folder (auto-resolved)

{
  "name": "Demo Test Suite"
}

Expected Output: Test suite created in the root test suite folder with ID and summary details

  1. Create a simple test suite in folder 102653

{
  "parentFolderId": "102653",
  "name": "Login Test Suite"
}

Expected Output: Test suite created with ID and summary details

  1. Create a test suite with some details and metadata

{
  "parentFolderId": "113557",
  "isAutomatedFlag": false,
  "name": "Testsuite Summary",
  "description": "desc",
  "testsuiteOwner": 6963,
  "testSuiteState": 505035,
  "associateRelCyc": true,
  "releaseCycleMapping": [
    {
      "buildID": 18411,
      "releaseId": 10286
    }
  ]
}

Expected Output: Test suite created with details and metadata. Example uses: parentFolderId=113557 (MAC root TS folder from rootFolders.TS.id), testsuiteOwner=6963 (umang.savaliya from customListObjs.owner[index].id), testSuiteState=505035 (New from customListObjs.testSuiteState[index].id), releaseId=10286 (Air release from projects[index].releases[index].releaseID), buildID=18411 (Air Q1-19 cycle from projects[index].releases[index].builds[index].buildID)

Hints: 1. ╔══════════════════════════════════════════════════════════════════╗ 2. ║ STEP 0 — NON-NEGOTIABLE: Call 'Fetch UDF Layout' BEFORE create ║ 3. ╚══════════════════════════════════════════════════════════════════╝ 4. NEVER call 'Create Test Suite' without first calling 'Fetch UDF Layout' with entityType='TS', pageName='ADD'. 5. Skipping this step WILL cause 400 errors (CO.MANDATORY_FIELDS_MISSING) because mandatory fields and defaults are unknown. 6. This rule has NO exceptions — not even when the user only provided a name and nothing else. 7. 8. === MANDATORY PRE-CREATE CHECK (ALWAYS DO THIS FIRST) === 9. Before creating any test suite, call 'Fetch UDF Layout' with entityType='TS', pageName='ADD'. 10. Response keys use 'TS' — same structure as TC but scoped to test suite module. 11. 12. SYSTEM FIELDS mandatory check — use 'systemFields' array (from qmSDF.TS in newlayout): 13. Each entry: { name, label, fieldTypeName, isMandatory } 14. isMandatory=true (allowBlank=false) means field MUST have a value before creating. 15. 16. UDF FIELDS mandatory check — use 'fields' array (from qmUDF.TS in newlayout): 17. Each entry: { name, label, fieldTypeName, isMandatory, listName? } 18. isMandatory=true means field MUST have a value. 19. 20. DEFAULT VALUES — use 'defaultValues' object (from qmDefaultValue.TS in newlayout): 21. Shape: { fieldName: defaultValueId } e.g. { 'priority': 5232497, 'estimatedTime': 18305 } 22. RULE: isMandatory=true AND defaultValues[field.name] exists → auto-use default, do NOT ask user. 23. RULE: isMandatory=true AND no defaultValues entry → MUST ask user before creating. 24. RULE: isMandatory=false AND defaultValues entry exists → auto-apply if user didn't specify. 25. 26. ╔══════════════════════════════════════════════════════════════════════════╗ 27. ║ PRE-FLIGHT DEFAULT SWEEP — MANDATORY STEP BEFORE EVERY CREATE CALL ║ 28. ╚══════════════════════════════════════════════════════════════════════════╝ 29. After resolving mandatory fields, sweep ALL defaultValues entries: 30. For EACH key in defaultValues: 31. IF the user did not explicitly provide that field → add it to the payload using the default value. 32. This applies regardless of isMandatory — non-mandatory defaults MUST also be auto-applied. 33. Example: defaultValues = { priority: 5232497, estimatedTime: 18305 } 34. → user only said 'create a test suite named X' 35. → payload MUST include: priority=5232497, estimatedTime=18305 36. → WRONG to omit priority/estimatedTime just because they are not mandatory — they have defaults. 37. Skipping this sweep = missing fields in the created record = user-visible data loss. 38. ╚══════════════════════════════════════════════════════════════════════════╝ 39. 40. DECISION MATRIX: 41. | isMandatory | Has default | Action | 42. |-------------|-------------|-------------------------------------| 43. | true | YES | Auto-fill with default, no ask | 44. | true | NO | Ask user before creating | 45. | false | YES | Auto-fill with default — REQUIRED | 46. | false | NO | Skip if user didn't provide | 47. Only after ALL mandatory fields resolved AND default sweep complete → proceed with create. 48. === END MANDATORY PRE-CREATE CHECK === 49. 50. === ERROR RECOVERY: CO.MANDATORY_FIELDS_MISSING === 51. If create fails with error code 'CO.MANDATORY_FIELDS_MISSING', DO NOT give up. Auto-recover: 52. 1. Parse the 'MISSING_FIELDS' list from the error response (comma-separated field labels). 53. 2. Match each label against 'fields[].label' and 'systemFields[].label' from the Fetch UDF Layout response. 54. 3. For matched UDF fields: check 'listOptions[field.listName]' for valid option IDs. 55. 4. For matched system fields (e.g. 'Status'): check 'customListObjs.testSuiteState' from project info. 56. 5. If the field has a 'defaultValues' entry: auto-fill it silently. 57. 6. If no default exists: ask the user ONLY for the missing fields by label. 58. 7. Retry create with the resolved values added to the payload. 59. NEVER ask user to 'try again' manually — resolve and retry automatically. 60. === END ERROR RECOVERY === 61. 62. === DATE FORMAT CHECK (MANDATORY — EVERY CREATE REQUEST) === 63. ALWAYS call 'Fetch QMetry Project Info' before every create request — not only when the user explicitly mentions a date. 64. Any UDF field could be a DATETIMEPICKER. Wrong format causes QMetry to silently discard the field value (API returns success but value is NOT stored — no error). 65. STEP 1: From project info, read dateTimeFormatID (e.g. 3). 66. STEP 2: Find entry in dateTimeFormatNew where id === dateTimeFormatID → read its unique_value (e.g. 'yyyy-MM-dd'). 67. STEP 3: unique_value pattern: yyyy=4-digit year, MM=2-digit month (01-12), dd=2-digit day, MMM=3-letter month (Jan/Feb/...). 68. Example: id=1 → MM-dd-yyyy → '10-25-2000' | id=2 → dd-MM-yyyy → '25-10-2000' | id=3 → yyyy-MM-dd → '2000-10-25' | id=4 → dd-MMM-yyyy → '25-Oct-2000' 69. STEP 4: For EVERY DATETIMEPICKER field in the payload: parse any user-provided date and re-format it using the active unique_value pattern before sending. 70. NEVER assume a date format — always derive it from dateTimeFormatID. Wrong format = silent data loss. 71. === END DATE FORMAT CHECK === 72. 73. If parentFolderId is not provided, it will be auto-resolved to the root test suite folder using project info (rootFolders.TS.id). 74. To get valid values for testsuiteOwner, testSuiteState, etc., call the 'Admin/Get info Service' API (FETCH_PROJECT_INFO tool) and use the returned customListObjs IDs. 75. CRITICAL: For testsuiteOwner mapping - Call API 'Admin/Get info Service', from the response get value from customListObjs.owner[].id. Match the user by customListObjs.owner[].name. 76. If the user provides an owner name (testsuiteOwner), fetch project info, find the matching owner in customListObjs.owner[index].name or customListObjs.owner[index].uniqueLabel, and use its ID in the payload as testsuiteOwner. If the name is not found, skip the testsuiteOwner field (it is not required) and show a user-friendly message: 'Test suite created without owner, as given owner is not available in the current project.' 77. CRITICAL: For testSuiteState mapping - Call API 'Admin/Get info Service', from the response get value from customListObjs.testSuiteState[].id. Match the state by customListObjs.testSuiteState[].name. 78. If the user provides a test suite state name(testSuiteState), fetch project info, find the matching state in customListObjs.testSuiteState[index].name, and use its ID in the payload as testSuiteState. If the name is not found, skip the testSuiteState field (it is not required) and show a user-friendly message: 'Test suite created without test suite state, as given state is not available in the current project.' 79. parentFolderId is required; use the root folder ID from project info (rootFolders.TS.id) or a specific folder. 80. Release/cycle mapping is optional but useful for planning. 81. If the user wants to link or associate a release and cycle to the test suite, set associateRelCyc: true in the payload. 82. CRITICAL: For releaseCycleMapping.releaseId - Call API 'Release/List' (or use project info projects[].releases[].releaseID), from the response get value from data[].releaseID or projects[].releases[].releaseID. Match the release by name. 83. CRITICAL: For releaseCycleMapping.buildID - Call API 'Cycle/List' (or use project info projects[].releases[].builds[].buildID), from the response get value from data[].buildID or projects[].releases[].builds[].buildID. Match the build/cycle by name. 84. If the user provides a release name, map it to its ID from projects[].releases[].releaseID in the project info response, and use that ID as releaseId in releaseCycleMapping. 85. If the user provides a build/cycle name, map it to its ID from projects[].releases[].builds[].buildID in the project info response, and use that ID as buildID in releaseCycleMapping. 86. Example payload: releaseCycleMapping: [ { releaseId: , buildID: } ] 87. Example: For 'Air' release and 'Air Q1-19' cycle in MAC project, use releaseId: 10286 and buildID: 18411 88. LLM should ensure that provided release/cycle names or IDs exist in the current project before using them in the payload. If not found, skip and show a user-friendly message: 'Test suite created without release/cycle association, as given release/cycle is not available in the current project.' 89. All IDs (testSuiteState from customListObjs.testSuiteState[index].id, testsuiteOwner from customListObjs.owner[index].id, releaseId from projects.releases[index].releaseID, buildID from projects.releases.builds[index].buildID) must be valid for your QMetry instance. 90. If a custom field is mandatory, include it in the UDF object. 91. 92. UDF (User Defined Fields) WORKFLOW FOR CREATE: 93. 1. Call 'Fetch UDF Layout' with entityType='TS', pageName='ADD' to discover field names, types, and list option IDs. 94. IF listOptions[field.listName] is empty after Fetch UDF Layout, the tool already tried a metadata fallback. If STILL empty, ask the user to provide the option ID from the QMetry UI — do NOT guess numeric IDs. 95. 2. For LOOKUPLIST fields: pick one ID from listOptions[field.listName][].id. 96. 3. For MULTILOOKUPLIST fields: pick an array of IDs. 97. 4. For CASCADINGLIST fields: pick parent ID, then call 'Fetch Cascade Child Values' for child ID. Pass { parent: parentId, child: childId }. 98. 5. Pass all UDF values via 'udfFields' param: { fieldName: value }. 99. 6. Mandatory UDF fields (isMandatory=true) MUST be included or create will fail. 100. 101. ╔══════════════════════════════════════════════════════════════════╗ 102. ║ POST-CREATE MANDATORY: Link Platform to Test Suite ║ 103. ╚══════════════════════════════════════════════════════════════════╝ 104. AFTER every successful test suite creation, ALWAYS call 'Link Platforms to Test Suite'. 105. Reason: QMetry UI enforces platform association — test suites without a linked platform 106. are invalid for execution and will show validation errors in the UI. 107. STEP 1: Call 'Fetch Platforms' to get available platforms for the project. 108. STEP 2: If the user specified a platform, match by name and use its platformID. 109. If no platform was specified, use the first available non-archived platform. 110. STEP 3: Call 'Link Platforms to Test Suite' with qmTsId= and qmPlatformId=. 111. NEVER report the test suite as successfully created without completing this platform link step. 112. ╚══════════════════════════════════════════════════════════════════╝

qmetry_update_test_suiteA

Update an existing QMetry test suite by id(testsuite numeric id), with auto-resolution from entityKey.

Toolset: Test Suites

Parameters:

  • id (number) required: Id of Test Suite to be updated (required)

  • TsFolderID (number): Folder ID where Test Suite resides - SYSTEM AUTOMATICALLY RESOLVES THIS. Leave empty unless you have a specific folder ID. System will fetch project info using the projectKey and extract rootFolders.TS.id automatically. Manual folder ID only needed if you want to override the automatic resolution.

  • entityKey (string) required: Entity Key of Test Suite to be updated (required)

  • name (string): Name of the Test Suite

  • description (string): Description of the Test Suite

  • testsuiteOwner (number): Owner ID of the Test Suite

  • testSuiteState (number): State of the Test Suite

  • udfFields (record<string, union>): Flat UDF field values. Keys = UDF field names from 'Fetch UDF Layout'. Values depend on fieldTypeName: STRING/LARGETEXT: string, NUMBER: number, DATETIMEPICKER: date string ('14-08-2026'), LOOKUPLIST: numeric ID, MULTILOOKUPLIST: array of IDs [101, 102], CASCADINGLIST: { parent: 101, child: 102 }. Call 'Fetch UDF Layout' with entityType + pageName='ADD' to discover available fields and list option IDs.

  • UDF (record<string, object>): UDF wrapper required for update. Keys = UDF field names. Each value must include fieldID (from 'Fetch UDF Layout' with pageName='DETAIL') and value.

Output Description: JSON object containing the new test suite ID, summary, and creation metadata.

Use Cases: 1. Update test suite summary (name) 2. Change owner, or state of a test suite 3. Bulk update using entityKey auto-resolution 4. Modify test suite description

Examples:

  1. Update test suite summary (updated name)

{
  "id": 1505898,
  "entityKey": "VT-TS-7",
  "TsFolderID": 1644087,
  "name": "MAC Test11"
}

Expected Output: Test suite summary updated. Only 'name' field changed. Field IDs auto-resolved from project info. id(test suite numeric id) resolved from entityKey. TsFolderID auto-resolved. from the project info. info on rootFolders.TS.id.

  1. Update state to Open and owner of the test suite

{
  "id": 1505898,
  "entityKey": "VT-TS-7",
  "TsFolderID": 1644087,
  "testSuiteState": 505036,
  "testsuiteOwner": 6963
}

Expected Output: State and owner updated. Example uses: testSuiteState=505036 (Open from customListObjs.testSuiteState[index].id), testsuiteOwner=6963 (umang.savaliya from customListObjs.owner[index].id). Field IDs auto-resolved from project info. id(test suite numeric id) resolved from entityKey. TsFolderID auto-resolved from the project info rootFolders.TS.id.

  1. Update only description of the test suite

{
  "id": 1505898,
  "entityKey": "VT-TS-7",
  "TsFolderID": 1644087,
  "description": "Updated description for the test suite."
}

Expected Output: description updated only. Field IDs auto-resolved from project info. id(test suite numeric id) resolved from entityKey. TsFolderID auto-resolved. from the project info. info on rootFolders.TS.id.

Hints: 1. === DEFAULT VALUES — APPLY FOR ANY UNSET FIELD === 2. ALWAYS call 'Fetch UDF Layout' with entityType='TS', pageName='DETAIL' before updating. 3. defaultValues (from Fetch UDF Layout): { fieldName: defaultValueId } — sweep ALL entries. 4. For EACH key in defaultValues: if user did not explicitly provide that field → include it in payload with the default value. 5. This applies to non-mandatory fields too (e.g. testSuiteState). Omitting them = data loss. 6. systemFields (from qmSDF.TS): isMandatory=true fields must retain a valid value after update. 7. fields/UDF (from qmUDF.TS): isMandatory=true UDF fields must be included if being changed. 8. === END DEFAULT VALUES === 9. 10. === DATE FORMAT CHECK (MANDATORY — EVERY UPDATE REQUEST) === 11. ALWAYS call 'Fetch QMetry Project Info' before every update request — not only when the user explicitly mentions a date. 12. Any UDF field could be a DATETIMEPICKER. Wrong format causes QMetry to silently discard the field value (API returns success but value is NOT stored — no error). 13. STEP 1: From project info, read dateTimeFormatID (e.g. 3). 14. STEP 2: Find entry in dateTimeFormatNew where id === dateTimeFormatID → read its unique_value (e.g. 'yyyy-MM-dd'). 15. STEP 3: unique_value pattern: yyyy=4-digit year, MM=2-digit month (01-12), dd=2-digit day, MMM=3-letter month (Jan/Feb/...). 16. Example: id=1 → MM-dd-yyyy → '10-25-2000' | id=2 → dd-MM-yyyy → '25-10-2000' | id=3 → yyyy-MM-dd → '2000-10-25' | id=4 → dd-MMM-yyyy → '25-Oct-2000' 17. STEP 4: For EVERY DATETIMEPICKER field in the payload: parse any user-provided date and re-format it using the active unique_value pattern before sending. 18. NEVER assume a date format — always derive it from dateTimeFormatID. Wrong format = silent data loss. 19. === END DATE FORMAT CHECK === 20. 21. If user provides entityKey (e.g., MAC-TS-7), first call Fetch Test Suites with a filter on entityKeyId to resolve the id (test suite numeric id) and TsFolderID from rootFolders.TS.id. 22. To get valid values for owner, state, etc., call the 'Admin/Get info Service' API (FETCH_PROJECT_INFO tool) and use the returned customListObjs IDs. 23. CRITICAL: For testsuiteOwner mapping - Call API 'Admin/Get info Service', from the response get value from customListObjs.owner[].id. Match the user by customListObjs.owner[].name. 24. If the user provides an owner name, fetch project info, find the matching user in customListObjs.owner[index].name, and use its ID in the payload as testsuiteOwner. If the name is not found, skip the testsuiteOwner field (it is not required) and show a user-friendly message: 'Test suite updated without owner, as given owner is not available in the current project.' 25. CRITICAL: For testSuiteState mapping - Call API 'Admin/Get info Service', from the response get value from customListObjs.testSuiteState[].id. Match the state by customListObjs.testSuiteState[].name. 26. If the user provides a test suite state name, fetch project info, find the matching state in customListObjs.testSuiteState[index].name, and use its ID in the payload as testSuiteState. If the name is not found, skip the testSuiteState field (it is not required) and show a user-friendly message: 'Test suite updated without test suite state, as given state is not available in the current project.' 27. If either owner or state is not found in project info, the update for that field will be skipped and a user-friendly message will be shown to the user. 28. UDF fields in steps must match your QMetry custom field configuration. 29. All IDs (testSuiteState from customListObjs.testSuiteState[index].id, testsuiteOwner from customListObjs.owner[index].id) must be valid for your QMetry instance. 30. If a custom field is mandatory, include it in the UDF object. 31. 32. UDF (User Defined Fields) WORKFLOW FOR UPDATE: 33. 1. Call 'Fetch UDF Layout' with entityType='TS', pageName='DETAIL' to get field names, fieldIDs (projectUserFieldID), and list option IDs. 34. IF listOptions[field.listName] is empty after Fetch UDF Layout, the tool already tried a metadata fallback. If STILL empty, ask the user to provide the option ID from the QMetry UI — do NOT guess numeric IDs. 35. 2. For LOOKUPLIST fields: pick one ID from listOptions[field.listName][].id. 36. 3. For MULTILOOKUPLIST fields: pick array of IDs; also pass alias flat key (e.g., fieldNameAlias: 'Option Label'). 37. 4. For CASCADINGLIST fields: pick parent ID + fetch child with 'Fetch Cascade Child Values'. Pass { parent: parentId, child: childId }. 38. 5. Pass BOTH 'udfFields' (flat root values) AND 'UDF' wrapper (with fieldID) — both required for update. 39. Example: udfFields: { ts_field: 'value' }, UDF: { ts_field: { fieldID: 2001, value: 'value' } } 40. 6. Mandatory UDF fields (isMandatory=true) MUST be included.

qmetry_fetch_test_suitesA

Fetch QMetry test suites - automatically handles viewId resolution based on project

Toolset: Test Suites

Parameters:

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

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

  • folderPath (string): Folder path for test suites - SYSTEM AUTOMATICALLY SETS TO ROOT. Leave empty unless you want specific folder. System will automatically use empty string "" (root directory). Only specify if user wants specific folder like "Automation/Regression". (default: "")

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • scope (string): Scope of the operation - defines the context for data retrieval. Common values: 'project' (default), 'folder', 'release', 'cycle'. Applies to any entity type being fetched or operated upon. (default: "project")

  • getSubEntities (boolean): Whether to include sub-entities.

  • filter (string): Filter criteria as JSON string (default '[]') (default: "[]")

  • udfFilter (string): User-defined field filter as JSON string (default '[]') (default: "[]")

  • sort (string): Sort Records - refer json schema, Possible property - entityKey, name, testsuiteStatus, linkedPlatformCount, linkedTcCount, createdDate, createdByAlias, updatedDate, updatedByAlias, attachmentCount, owner, remExecutionTime, totalExecutionTime (default: "[{"property":"name","direction":"ASC"}]")

Output Description: JSON object with 'data' array containing test suites and pagination info

Use Cases: 1. List all test suites in a project 2. Search for specific test suites using filters 3. Browse test suites in specific folders 4. Get paginated test suite results

Examples:

  1. Get all test suites from default project - system will auto-fetch viewId

{}

Expected Output: List of test suites from default project with auto-resolved viewId

  1. Get all test suites from UT project - system will auto-fetch UT project's viewId

{
  "projectKey": "UT"
}

Expected Output: List of test suites from UT project using UT's specific TS viewId

  1. Get test suites by release/cycle filter

{
  "projectKey": "MAC",
  "filter": "[{\"value\":[55178],\"type\":\"list\",\"field\":\"release\"},{\"value\":[111577],\"type\":\"list\",\"field\":\"cycle\"}]"
}

Expected Output: Test suites associated with Release 8.12 (ID: 55178) and Cycle 8.12.1 (ID: 111577)

  1. Get test suites by release only

{
  "projectKey": "MAC",
  "filter": "[{\"value\":[55178],\"type\":\"list\",\"field\":\"release\"}]"
}

Expected Output: All test suites associated with Release 8.12 (ID: 55178)

  1. Get test suites by cycle only

{
  "projectKey": "MAC",
  "filter": "[{\"value\":[111577],\"type\":\"list\",\"field\":\"cycle\"}]"
}

Expected Output: All test suites associated with Cycle 8.12.1 (ID: 111577)

  1. Search for specific test suite by entity key

{
  "projectKey": "MAC",
  "filter": "[{\"type\":\"string\",\"value\":\"MAC-TS-1684\",\"field\":\"entityKeyId\"}]"
}

Expected Output: Test suites matching the entity key criteria

  1. Search for multiple test suites by comma-separated entity keys

{
  "projectKey": "MAC",
  "filter": "[{\"type\":\"string\",\"value\":\"MAC-TS-1684,MAC-TS-1685,MAC-TS-1686\",\"field\":\"entityKeyId\"}]"
}

Expected Output: Test suites matching any of the specified entity keys

Hints: 1. CRITICAL WORKFLOW: Always use the SAME projectKey for both project info and test suite fetching 2. Step 1: If user specifies projectKey (like 'UT', 'MAC'), use that EXACT projectKey for project info 3. Step 2: Get project info using that projectKey, extract latestViews.TS.viewId 4. Step 3: Use the SAME projectKey and the extracted TS viewId for fetching test suites 5. Step 4: If user doesn't specify projectKey, use 'default' for both project info and test suite fetching 6. NEVER mix project keys - if user says 'MAC project', use projectKey='MAC' for everything 7. For search by test suite key (like MAC-TS-1684), use filter: '[{"type":"string","value":"MAC-TS-1684","field":"entityKeyId"}]' 8. RELEASE/CYCLE FILTERING: Use release and cycle IDs, not names, for filtering 9. For release filter: '[{"value":[releaseId],"type":"list","field":"release"}]' 10. For cycle filter: '[{"value":[cycleId],"type":"list","field":"cycle"}]' 11. For combined release+cycle: '[{"value":[releaseId],"type":"list","field":"release"},{"value":[cycleId],"type":"list","field":"cycle"}]' 12. Get release/cycle IDs from FETCH_RELEASES_AND_CYCLES tool before filtering 13. FILTER FIELDS: name, release, cycle, platform, isArchived, testsuiteStatus, createdByAlias, createdDate, entityKeyId, attachmentCount, linkedPlatformCount, linkedTcCount, updatedByAlias, updatedDate, owner, remExecutionTime, and totalExecutionTime 14. SORT FIELDS: entityKey, name, testsuiteStatus, linkedPlatformCount, linkedTcCount, createdDate, createdByAlias, updatedDate, updatedByAlias, attachmentCount, remExecutionTime, and totalExecutionTime 15. For multiple entity keys, use comma-separated values in filter 16. Use empty string '' as folderPath for root directory

qmetry_fetch_test_suites_for_test_caseA

Get test suites that can be linked to test cases in QMetry with automatic viewId resolution

Toolset: Test Suites

Parameters:

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

  • tsFolderID (number): Test Suite folder ID. CRITICAL: the parameter name is 'tsFolderID' — do NOT use 'testSuiteFolderId', 'folderId', 'folderID', or other variants. Accepts a string or number. Get from project info response → rootFolders.TS.id. Use FETCH_PROJECT_INFO tool first if not provided by user.

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

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • getColumns (boolean): Whether to get column information in response. (default: true)

  • filter (string): Filter criteria as JSON string (default '[]') (default: "[]")

Output Description: JSON object with test suites array and pagination metadata

Use Cases: 1. Get test suites available for linking with test cases 2. Find appropriate test suites for test case organization 3. Browse test suites in specific folders for better management 4. Filter test suites by release, cycle, or archive status 5. Organize test execution by grouping test cases into test suites 6. Plan test suite structure for comprehensive test coverage 7. Manage test case categorization for reporting purposes 8. Search for existing test suites before creating new ones 9. Get root test suite folder contents using project info

Examples:

  1. Get test suites from root folder using auto-resolved viewId

{
  "tsFolderID": 113557
}

Expected Output: List of test suites available in the root test suite folder with auto-resolved viewId

  1. Get test suites with custom pagination and auto-resolved viewId

{
  "tsFolderID": 113557,
  "page": 1,
  "limit": 25
}

Expected Output: Paginated list of test suites with 20 items per page

  1. Filter test suites by release with auto-resolved viewId

{
  "tsFolderID": 113557,
  "filter": "[{\"type\":\"list\",\"value\":[55178],\"field\":\"release\"}]"
}

Expected Output: Test suites associated with Release 8.12 (ID: 55178)

  1. Filter test suites by cycle with auto-resolved viewId

{
  "tsFolderID": 113557,
  "filter": "[{\"type\":\"list\",\"value\":[111577],\"field\":\"cycle\"}]"
}

Expected Output: Test suites associated with Cycle 8.12.1 (ID: 111577)

  1. Get only active (non-archived) test suites

{
  "tsFolderID": 113557,
  "filter": "[{\"value\":[0],\"type\":\"list\",\"field\":\"isArchived\"}]"
}

Expected Output: List of active test suites (not archived)

  1. Filter test suites by release and cycle

{
  "tsFolderID": 113557,
  "filter": "[{\"type\":\"list\",\"value\":[55178],\"field\":\"release\"},{\"type\":\"list\",\"value\":[111577],\"field\":\"cycle\"}]"
}

Expected Output: Test suites associated with both Release 8.12 (ID: 55178) and Cycle 8.12.1 (ID: 111577)

  1. Get test suites with column information

{
  "tsFolderID": 113557,
  "getColumns": true
}

Expected Output: Test suites list with detailed column metadata for better interpretation

  1. Search test suites from specific sub-folder with manual viewId

{
  "tsFolderID": 42,
  "viewId": 104316
}

Expected Output: Test suites available in specific folder ID 42 for test case linking

Hints: 1. CRITICAL: tsFolderID is REQUIRED - Test Suite folder ID will be auto-resolved if not provided 2. viewId will be AUTOMATICALLY RESOLVED from project info if not provided 3. HOW TO GET tsFolderID: 4. 1. Call FETCH_PROJECT_INFO tool first to get project configuration 5. 2. From the response, use rootFolders.TS.id for the root test suite folder 6. 3. Example: rootFolders.TS.id = 113557 (MAC project root TS folder) 7. 4. If user doesn't specify tsFolderID, automatically use rootFolders.TS.id from project info 8. VIEWID AUTO-RESOLUTION: 9. 1. System automatically fetches project info using the projectKey 10. 2. Extracts latestViews.TSFS.viewId automatically 11. 3. Example: latestViews.TSFS.viewId = 104316 (MAC project TSFS view) 12. 4. Manual viewId only needed if you want to override the automatic resolution 13. WORKFLOW: System automatically handles project info if tsFolderID or viewId is not provided 14. PROJECT INFO STRUCTURE: rootFolders.TS.id contains the root test suite folder ID 15. PROJECT INFO STRUCTURE: latestViews.TSFS.viewId contains the test suite folder view ID 16. For sub-folders: Use specific folder IDs if you know them, or call folder listing APIs 17. FILTER CAPABILITIES: Same as other QMetry list operations 18. FILTER FIELDS: release, cycle, isArchived, name, status, priority 19. RELEASE/CYCLE FILTERING: Use numeric IDs in list format (get from FETCH_RELEASES_AND_CYCLES) 20. ARCHIVE FILTERING: 0=Active, 1=Archived 21. getColumns=true provides additional metadata for result interpretation 22. Multiple filter conditions are combined with AND logic 23. Pagination supported for large result sets (start, page, limit parameters) 24. This tool helps organize test cases into logical test suites 25. Essential for test execution planning and test case management 26. Use this before creating new test suites to check existing ones

qmetry_link_test_cases_to_test_suiteA

Link test cases to a test suite in QMetry.

Toolset: Test Suites

Parameters:

  • tsID (number) required: Id of Test Suite (required). CRITICAL: parameter name is 'tsID' — do NOT use 'testSuiteId', 'testSuiteID', or other variants.

  • tcvdIDs (array) required: Array of Test Case Version IDs (required if fromReqs is false). CRITICAL: parameter name is 'tcvdIDs' — do NOT use 'tcVersionIds', 'testCaseVersionIds', or other variants.

  • fromReqs (boolean): Link TestCases from Requirements (optional, default false)

Output Description: JSON object with linkage status and details.

Use Cases: 1. Link test cases to a test suite by entity keys 2. Bulk link multiple test cases to a suite 3. Automate test suite composition from test cases

Examples:

  1. Link test cases to a test suite

{
  "tsID": 8674,
  "tcvdIDs": [
    5448504,
    5448503
  ],
  "fromReqs": false
}

Expected Output: Test cases QTM-TC-32 and QTM-TC-35 linked to test suite 8674.

  1. Link test cases directly to test suites with test cases entityKeys VT-TC-9, VT-TC-10 to test suite id 1487397

{
  "tsID": 1487397,
  "tcvdIDs": [
    5448504,
    5448503
  ],
  "fromReqs": false
}

Expected Output: Test cases VT-TC-9 and VT-TC-10 linked to test suite 1487397.

  1. Link test case VT-TC-4, VT-TC-1,VT-TC-101, VT-TC-22 to test suite VT-TS-3

{
  "tsID": 1487397,
  "tcvdIDs": [
    5448504,
    5448503,
    5448505,
    5448506
  ],
  "fromReqs": false
}

Expected Output: Test cases VT-TC-4, VT-TC-1, VT-TC-101, and VT-TC-22 linked to test suite VT-TS-3.

Hints: 1. To get the tsID, call the Fetch Test Suites for Test Case API with rootFolderId otherwise if given folderid so use that and from response get the id. 2. To get the tcvdIDs by testcase entityKey, call the Testcase/Fetch Versions API and use data[].tcVersionID. 3. Set fromReqs to false to direct test case linkage.

qmetry_requirements_linked_test_cases_to_test_suiteA

Link test cases (including those linked to requirements) to a test suite in QMetry.

Toolset: Test Suites

Parameters:

  • tsID (number) required: Id of Test Suite (required). CRITICAL: parameter name is 'tsID' — do NOT use 'testSuiteId', 'testSuiteID', or other variants.

  • tcvdIDs (array) required: Array of Test Case Version IDs (required if fromReqs is true). CRITICAL: parameter name is 'tcvdIDs' — do NOT use 'tcVersionIds', 'testCaseVersionIds', or other variants.

  • fromReqs (boolean): Link TestCases from Requirements (optional, default true)

Output Description: JSON object with linkage status and details.

Use Cases: 1. Link requirements linked test cases to a test suite 2. Bulk link multiple requirements linked test cases to a suite 3. Automate test suite composition from requirements linked test cases

Examples:

  1. VT-RQ-18 Requirements Linked test cases to a test suite

{
  "tsID": 8674,
  "tcvdIDs": [
    5448504,
    5448503
  ],
  "fromReqs": true
}

Expected Output: Test cases QTM-TC-32 and QTM-TC-35 linked to test suite 8674.

  1. VT-RQ-19 Requirements Linked test cases to test suites id 1487397

{
  "tsID": 1487397,
  "tcvdIDs": [
    5448504,
    5448503
  ],
  "fromReqs": true
}

Expected Output: Test cases VT-TC-9 and VT-TC-10 linked to test suite 1487397.

  1. VT-RQ-20 Requirements Linked test case to test suite VT-TS-3

{
  "tsID": 1487397,
  "tcvdIDs": [
    5448504,
    5448503,
    5448505,
    5448506
  ],
  "fromReqs": true
}

Expected Output: Test cases VT-TC-4, VT-TC-1, VT-TC-101, and VT-TC-22 linked to test suite VT-TS-3.

Hints: 1. To get the tsID, call the Fetch Test Suites for Test Case API with rootFolderId otherwise if given folderid so use that and from response get the id. 2. To get the requirement linked tcvdIDs by requirement entityKey, call the Fetch Test Cases Linked to Requirement API by to fetch If user provides entityKey (e.g., MAC-RQ-1011), first call FETCH_REQUIREMENTS with filter on entityKeyId to resolve the numeric rqID and get the linked test cases version ids. 3. Set fromReqs to true to link requirements linked test cases instead of direct test case linkage.

qmetry_link_platforms_to_test_suiteA

Link one or more platforms to a QMetry Test Suite.

Toolset: Test Suites

Parameters:

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

  • qmTsId (number) required: Id of Test Suite (required). CRITICAL: the parameter name is 'qmTsId' — do NOT use 'tsId', 'testSuiteId', 'tsID', or other variants. Accepts a string or number. To get the qmTsId - Call API 'Testsuite/Fetch Testsuite'. From the response, get value -> data[].id

  • qmPlatformId (string) required: Comma-separated Platform IDs (required). CRITICAL: the parameter name is 'qmPlatformId' — do NOT use 'platformId', 'platformID', 'platformIds', or other variants. Accepts a number or string. To get the qmPlatformId - Call API 'Platform/List'. From the response, get value -> data[].platformID

Output Description: JSON object with linkage status, success message, and details.

Use Cases: 1. Link a single platform to a test suite 2. Link multiple platforms to a test suite for cross-platform testing 3. Define execution environments for a test suite 4. Organize test suites by supported platforms 5. Set up platform-specific test suite configurations

Examples:

  1. Link single platform to a test suite

{
  "qmTsId": 1511970,
  "qmPlatformId": "63004"
}

Expected Output: Platform 63004 linked to test suite 1511970 successfully.

  1. Link multiple platforms to a test suite

{
  "qmTsId": 1511970,
  "qmPlatformId": "63004,63005,63006"
}

Expected Output: Platforms 63004, 63005, 63006 linked to test suite 1511970 successfully.

Hints: 1. CRITICAL: qmTsId and qmPlatformId are REQUIRED parameters 2. To get the qmTsId (Test Suite ID): 3. 1. Call 'Testsuite/Fetch Testsuite' API 4. 2. From response, use data[].id 5. 3. Example: Test Suite 'Login Tests' might have ID 1511970 6. To get the qmPlatformId (Platform ID): 7. 1. Call 'Platform/List' API (Fetch Platforms tool) 8. 2. From response, use data[].platformID 9. 3. Example: Platform 'Chrome' might have ID 63004 10. qmPlatformId accepts comma-separated values for multiple platforms 11. Format for multiple platforms: '63004,63005,63006' 12. No spaces in the comma-separated list 13. If test suite entity key (e.g., VT-TS-12) is provided, first fetch test suites to resolve numeric ID 14. Platforms represent browsers, operating systems, devices, or custom environments 15. This tool helps organize cross-platform test execution 16. Essential for comprehensive platform coverage testing

qmetry_fetch_test_cases_linked_to_test_suiteA

Get test cases that are linked (or not linked) to a specific test suite in QMetry

Toolset: Test Suites

Parameters:

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

  • tsID (number) required: Test Suite numeric ID. CRITICAL: the parameter name is 'tsID' — do NOT use 'testSuiteId', 'testSuiteID', 'suiteId', or other variants. Accepts a string or number. NOTE: To get the tsID - Call API 'Testsuite/Fetch Testsuite' From the response, get value of following attribute -> data[].id

  • getLinked (boolean): True to get only those issues that are linked with this Test case Run, False to get those issues which are not linked with this Test case Run. Default value true (get linked issues). (default: true)

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • filter (string): Filter criteria as JSON string (default '[]') (default: "[]")

Output Description: JSON object with test cases array containing test case details, properties, and suite linkage information

Use Cases: 1. Get all test cases linked to a specific test suite for execution planning 2. Find test cases that are NOT linked to a test suite (gap analysis) 3. Analyze test suite composition and coverage 4. Filter linked test cases by various criteria 5. Plan test execution based on test suite structure 6. Generate test suite reports and documentation 7. Validate test suite contents before execution 8. Manage test case organization within test suites 9. Export test suite details for external reporting 10. Verify test case assignments in test suites

Examples:

  1. Get all test cases linked to test suite ID 1497291 (default behavior)

{
  "tsID": 1497291
}

Expected Output: List of test cases linked to the test suite with test case details and metadata

  1. Get all test cases linked to test suite ID 1497291 (explicit)

{
  "tsID": 1497291,
  "getLinked": true
}

Expected Output: List of test cases linked to the test suite with test case details and metadata

  1. Get test cases NOT linked to test suite (gap analysis)

{
  "tsID": 1497291,
  "getLinked": false
}

Expected Output: List of test cases that are NOT linked to the test suite

  1. Get linked test cases with custom pagination

{
  "tsID": 1497291,
  "getLinked": true,
  "page": 1,
  "limit": 25
}

Expected Output: Paginated list of linked test cases with 50 items per page

  1. Filter linked test cases by priority (using default getLinked=true)

{
  "tsID": 1497291,
  "filter": "[{\"value\":[1,2],\"type\":\"list\",\"field\":\"priorityAlias\"}]"
}

Expected Output: High and medium priority test cases linked to the suite

  1. Filter linked test cases by status

{
  "tsID": 1497291,
  "getLinked": true,
  "filter": "[{\"value\":[1],\"type\":\"list\",\"field\":\"testCaseStateAlias\"}]"
}

Expected Output: Active test cases linked to the test suite

Hints: 1. CRITICAL: tsID parameter is REQUIRED - this is the Test Suite numeric ID 2. getLinked parameter is OPTIONAL - defaults to true if not provided 3. HOW TO GET tsID: 4. 1. Call API 'Testsuite/Fetch Testsuite' to get available test suites 5. 2. From the response, get value of following attribute -> data[].id 6. 3. Example: Test Suite 'Regression Suite' might have ID 1497291 7. tsID is NOT the same as tsFolderID - tsID refers to a specific test suite, not a folder 8. getLinked=true (default): Returns test cases that ARE linked to the test suite 9. getLinked=false: Returns test cases that are NOT linked to the test suite (useful for gap analysis) 10. If getLinked is not specified, it defaults to true (linked test cases) 11. FILTER CAPABILITIES: Support filtering by test case properties 12. FILTER FIELDS: priorityAlias (list), testCaseStateAlias (list), testingTypeAlias (list), testCaseTypeAlias (list), componentAlias (list), owner (list) 13. PRIORITY IDs: Typically 1=High, 2=Medium, 3=Low (verify with your QMetry instance) 14. STATUS IDs: Typically 1=Active, 2=Review, 3=Deprecated (verify with your QMetry instance) 15. TESTING TYPE IDs: Typically 1=Manual, 2=Automated (verify with your QMetry instance) 16. TYPE IDs: Typically 1=Functional, 2=Integration, 3=System (verify with your QMetry instance) 17. Multiple filter conditions are combined with AND logic 18. Use pagination for large result sets (start, page, limit parameters) 19. This tool is essential for test suite management and execution planning 20. Helps verify test suite composition before test runs 21. Critical for understanding test coverage within specific suites 22. Use for test suite analysis and optimization

qmetry_fetch_executions_by_test_suiteA

Get executions for a given test suite in QMetry

Toolset: Test Suites

Parameters:

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

  • tsID (number) required: Test Suite numeric ID. CRITICAL: the parameter name is 'tsID' — do NOT use 'testSuiteId', 'testSuiteID', 'suiteId', or other variants. Accepts a string or number. NOTE: To get the tsID - Call API 'Testsuite/Fetch Testsuite' From the response, get value of following attribute -> data[].id

  • tsFolderID (number): Test Suite folder ID. CRITICAL: the parameter name is 'tsFolderID' — do NOT use 'testSuiteFolderId', 'folderId', 'folderID', or other variants. Accepts a string or number. Get from project info response → rootFolders.TS.id. Use FETCH_PROJECT_INFO tool first if not provided by user.

  • gridName (string): Grid Name to be displayed (default 'TESTEXECUTIONLIST')

  • 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.

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • filter (string): Filter criteria as JSON string (default '[]') (default: "[]")

Output Description: JSON object with executions array containing execution details, status, platforms, releases, and execution metadata

Use Cases: 1. Get all executions for a specific test suite for reporting purposes 2. Analyze test execution results and trends within a test suite 3. Filter executions by release, cycle, platform, or automation status 4. Monitor test suite execution performance across different environments 5. Generate execution reports for specific test suites 6. Track execution history and patterns for test suite optimization 7. Validate test suite execution coverage across releases and cycles 8. Audit test execution data for compliance and quality assurance 9. Export execution data for external reporting and analytics

Examples:

  1. Get all executions for test suite ID 194955

{
  "tsID": 194955
}

Expected Output: List of executions for the test suite with execution details, status, and metadata

  1. Get executions with test suite folder and view ID

{
  "tsID": 194955,
  "tsFolderID": 126554,
  "viewId": 41799
}

Expected Output: Executions filtered by test suite folder and specific view configuration

  1. Filter executions by release and cycle

{
  "tsID": 194955,
  "filter": "[{\"type\":\"list\",\"value\":[55178],\"field\":\"releaseID\"},{\"type\":\"list\",\"value\":[111577],\"field\":\"cycleID\"}]"
}

Expected Output: Executions filtered by specific release (55178) and cycle (111577)

  1. Filter executions by platform and automation status

{
  "tsID": 194955,
  "filter": "[{\"type\":\"list\",\"value\":[12345],\"field\":\"platformID\"},{\"type\":\"boolean\",\"value\":true,\"field\":\"isAutomatedFlag\"}]"
}

Expected Output: Automated executions filtered by specific platform (12345)

  1. Get only active (non-archived) executions

{
  "tsID": 194955,
  "filter": "[{\"value\":[0],\"type\":\"list\",\"field\":\"isArchived\"}]"
}

Expected Output: Active executions that are not archived

  1. Get executions with custom pagination and grid name

{
  "tsID": 194955,
  "gridName": "TESTEXECUTIONLIST",
  "page": 1,
  "limit": 25
}

Expected Output: Paginated list of executions with 25 items per page using specific grid configuration

Hints: 1. !MOST IMPORTANT HOW TO GET viewId: 2. CRITICAL: Always resolve and use the correct test execution viewId for the current project when calling this tool. 3. The viewId parameter must be fetched from the active project's info (latestViews.TEL.viewId). 4. Each QMetry project may have a different test execution list viewId, so using a stale or incorrect viewId will result in incomplete or invalid executions list data by test suite id. 5. Usage workflow: 6. 1. Fetch project info for the current project (Admin/Get info Service). 7. 2. Extract latestViews.TEL.viewId from the response. 8. 3. Use this viewId in the Fetch Test Case Runs by Test Suite Run API call. 9. Example: 10. { 11. tsID: 1533730, 12. viewId: 94194, 13. gridName: 'TESTEXECUTIONLIST' 14. } 15. CRITICAL: tsID parameter is REQUIRED - this is the Test Suite numeric ID 16. HOW TO GET tsID: 17. 1. Call API 'Testsuite/Fetch Testsuite' to get available test suites 18. 2. From the response, get value of following attribute -> data[].id 19. 3. Example: Test Suite 'Regression Suite' might have ID 194955 20. HOW TO GET tsFolderID (optional): 21. 1. Call API 'Testsuite/List of folders' to get test suite folders 22. 2. From the response, get value of following attribute -> data[].id 23. 3. Example: Test Suite folder might have ID 126554 24. FILTER CAPABILITIES: Extensive filtering by execution properties 25. FILTER FIELDS: releaseID (list), cycleID (list), platformID (list), isAutomatedFlag (boolean), isArchived (list) 26. RELEASE/CYCLE FILTERING: Use numeric IDs in list format (get from FETCH_RELEASES_AND_CYCLES) 27. PLATFORM FILTERING: Use numeric platform IDs (get from FETCH_PLATFORMS) 28. AUTOMATION STATUS: Use boolean true/false for isAutomatedFlag field 29. ARCHIVE STATUS: 0=Active executions, 1=Archived executions 30. GRID NAME: Default is 'TESTEXECUTIONLIST' - used for execution list display configuration 31. VIEW ID: Optional numeric identifier for specific execution view configurations 32. Multiple filter conditions are combined with AND logic 33. Use pagination for large execution result sets (start, page, limit parameters) 34. This tool is essential for test execution analysis and reporting 35. Critical for monitoring test suite performance and execution trends 36. Use for compliance reporting and execution audit trails 37. Essential for test execution planning and resource optimization

qmetry_fetch_test_case_runs_by_test_suite_runA

Get test case runs under a specific test suite run execution in QMetry, including Test Run UDF values. ALWAYS present results as a unified table: Test Case Key | Test Case Summary | Executed Version | Execution Status | <UDF Label columns…>. NEVER show a separate type+value breakdown — always combine identification fields and UDF values in one table per run.

Toolset: Test Suites

Parameters:

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

  • tsrunID (string) required: Test Suite Run ID. CRITICAL: the parameter name is 'tsrunID' — do NOT use 'testSuiteRunId', 'tsRunID', 'testSuiteRunID', or any other variant. Accepts a string or number (e.g. 731600 or '731600' — both are valid). To get this value: Call 'Fetch Executions by Test Suite' → use data[].tsRunID from the response.

  • 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.

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • filter (string): Filter criteria as JSON string (default '[]') (default: "[]")

  • udfFilter (string): User-defined field filter as JSON string (default '[]') (default: "[]")

  • tcrUdfFilter (string): Test Case Run (TCR) UDF filter as JSON string (default '[]'). Used to filter test case runs by Test Run UDF field values. Format: '[{"type":"list","value":[,],"field":""}]'. Example: '[{"type":"list","value":[5108701,5108697],"field":"8260LUP"}]' filters runs where the UDF field '8260LUP' has those list item IDs. (default: "[]")

  • showTcWithDefects (boolean): Show test case runs with linked defects (default: false)

Output Description: JSON object with test case runs array. Each row ALWAYS contains these mandatory identification fields: 'entityKey' (Test Case Key, e.g. 'MAC-TC-123'), 'summary' (Test Case Summary/name), 'latestVersion' (Executed Version, e.g. 'v1', 'v2'), 'runStatus' (Execution Status label, e.g. 'Passed', 'Failed', 'Not Run'), 'runStatusID' (numeric status ID), 'tcRunID' (numeric Test Run ID), and 'testRunUdfs' (object with Test Run UDF field keys mapped to their values, parsed from the raw 'udfjson' field; HTML stripped from rich text). UDF values can also be fetched in enriched form via FETCH_TEST_RUN_UDF_VALUES or field metadata via FETCH_TEST_RUN_UDF_METADATA. The top-level response includes 'hasTcRunUdf' (boolean), 'total' (count), and pagination metadata.

Use Cases: 1. Get all test case runs under a specific test suite run execution 2. Fetch Test Run UDF values for all test case executions in a test suite run — always show Test Case Key, Summary, and Execution Status alongside UDFs 3. Fetch Test Run UDF values for a specific test case execution by tcRunID 4. Filter test case runs by Test Run UDF field values (e.g. show only runs where dropdown UDF = specific option) 5. Analyze individual test case execution results, status, and custom UDF metadata 6. Monitor test case run performance and execution trends 7. Generate detailed test execution reports including custom UDF data 8. Track test case run history and execution patterns 9. Validate test case run coverage and execution completeness 10. Audit test case run data with UDF values for compliance and quality assurance 11. Export detailed test case run data including Test Run UDFs for external reporting 12. Retrieve paginated test case run results for large test suite executions

Examples:

  1. Get all test case runs for test suite run ID '107021'

{
  "tsrunID": "107021",
  "viewId": 6887
}

Expected Output: Present as ONE unified table — never as a separate type+value breakdown. Example: | Test Case Key | Test Case Summary | Executed Version | Execution Status | Tested By | Environments UDF | Execution Type | Country | | MAC-TC-5 | Login - valid credential | v1 | Passed | varis | chrome, edge, safari | Functional | India > i3 | | MAC-TC-6 | Login - invalid password | v2 | Failed | john | firefox | Regression | - | Columns: Test Case Key (entityKey) | Test Case Summary (summary) | Executed Version (latestVersion) | Execution Status (runStatus) | then one column per UDF label. Use the UDF 'label' as column header. Show null UDF values as '-'.

  1. Fetch Test Run UDF values for all executions in test suite run '728995'

{
  "tsrunID": "728995",
  "viewId": 79451,
  "start": 0,
  "page": 1,
  "limit": 20
}

Expected Output: Present as ONE unified table combining identification fields and UDF values — never a separate type+value breakdown. Example: | Test Case Key | Test Case Summary | Executed Version | Execution Status | Tested By | Environments UDF | Planned Execution Date | Execution Type | | MAC-TC-5 | Login test | v1 | Passed | varis | chrome, edge, safari | - | Functional | HTML is stripped from LARGETEXT UDF fields. Null values shown as '-'.

  1. Filter by Test Run UDF list/dropdown field (single-select or multi-select lookup) — runs where UDF '8260LUP' has list item IDs 5108701 or 5108697

{
  "tsrunID": "728995",
  "viewId": 79451,
  "tcrUdfFilter": "[{\"type\":\"list\",\"value\":[5108701,5108697],\"field\":\"8260LUP\"}]"
}

Expected Output: Filtered test case runs matching the lookup list UDF values

  1. Filter by Test Run UDF multi-lookup list field — runs where multi-select UDF 'PGTE_MULTILOOKUPLIST' contains list item IDs 5126503 or 5126502

{
  "tsrunID": "728995",
  "viewId": 79451,
  "tcrUdfFilter": "[{\"type\":\"list\",\"value\":[5126503,5126502],\"field\":\"PGTE_MULTILOOKUPLIST\"}]"
}

Expected Output: Filtered test case runs where multi-lookup UDF matches any of the given list item IDs

  1. Filter by Test Run UDF cascading dropdown field — runs where cascading UDF 'cascade_vK' has list item IDs 5126498 or 5126499 (must set isCascading:true)

{
  "tsrunID": "728995",
  "viewId": 79451,
  "tcrUdfFilter": "[{\"type\":\"list\",\"value\":[5126498,5126499],\"field\":\"cascade_vK\",\"isCascading\":true}]"
}

Expected Output: Filtered test case runs matching the cascading dropdown UDF values

  1. Filter by Test Run UDF short text field — runs where text UDF 'TRString' contains the value 'str'

{
  "tsrunID": "728995",
  "viewId": 79451,
  "tcrUdfFilter": "[{\"type\":\"string\",\"field\":\"TRString\",\"value\":\"str\"}]"
}

Expected Output: Filtered test case runs where short text UDF matches the search string

  1. Filter by Test Run UDF large text field — runs where large text UDF 'vk_large_text' contains 'this is large text'

{
  "tsrunID": "728995",
  "viewId": 79451,
  "tcrUdfFilter": "[{\"type\":\"string\",\"field\":\"vk_large_text\",\"value\":\"this is large text\"}]"
}

Expected Output: Filtered test case runs where large text UDF matches the search string

  1. Filter by Test Run UDF date field — runs where date UDF 'PGTE_DATEPICKER' is after a specific date (comparison: gt) and before another date (comparison: lt)

{
  "tsrunID": "728995",
  "viewId": 79451,
  "tcrUdfFilter": "[{\"type\":\"date\",\"field\":\"PGTE_DATEPICKER\",\"comparison\":\"gt\",\"value\":\"06-01-2026\"},{\"type\":\"date\",\"field\":\"PGTE_DATEPICKER\",\"comparison\":\"lt\",\"value\":\"06-30-2026\"}]"
}

Expected Output: Filtered test case runs where date UDF falls within the specified range

  1. Filter by Test Run UDF numeric field — runs where numeric UDF 'NB_number_TR' equals 2

{
  "tsrunID": "728995",
  "viewId": 79451,
  "tcrUdfFilter": "[{\"type\":\"numeric\",\"value\":2,\"field\":\"NB_number_TR\"}]"
}

Expected Output: Filtered test case runs where numeric UDF equals the specified value

  1. Combine multiple Test Run UDF filters — filter by list UDF AND string UDF AND numeric UDF simultaneously

{
  "tsrunID": "728995",
  "viewId": 79451,
  "start": 0,
  "page": 1,
  "limit": 20,
  "tcrUdfFilter": "[{\"type\":\"list\",\"value\":[5108701,5108697],\"field\":\"8260LUP\"},{\"type\":\"string\",\"field\":\"TRString\",\"value\":\"str\"},{\"type\":\"numeric\",\"value\":2,\"field\":\"NB_number_TR\"}]"
}

Expected Output: Test case runs matching ALL specified UDF filter conditions (AND logic)

  1. Full filter combination — standard field filter + Test Run UDF filter + show only runs with defects

{
  "tsrunID": "728995",
  "viewId": 79451,
  "start": 0,
  "page": 1,
  "limit": 20,
  "filter": "[]",
  "udfFilter": "[]",
  "tcrUdfFilter": "[{\"type\":\"list\",\"value\":[5108701,5108697],\"field\":\"8260LUP\"},{\"type\":\"string\",\"field\":\"TRString\",\"value\":\"str\"},{\"type\":\"string\",\"field\":\"vk_large_text\",\"value\":\"this is large text\"},{\"type\":\"date\",\"field\":\"PGTE_DATEPICKER\",\"comparison\":\"gt\",\"value\":\"\"},{\"type\":\"date\",\"field\":\"PGTE_DATEPICKER\",\"comparison\":\"lt\",\"value\":\"\"},{\"type\":\"list\",\"value\":[5126503,5126502],\"field\":\"PGTE_MULTILOOKUPLIST\"},{\"type\":\"list\",\"value\":[5126498,5126499],\"field\":\"cascade_vK\",\"isCascading\":true},{\"type\":\"numeric\",\"value\":2,\"field\":\"NB_number_TR\"}]",
  "showTcWithDefects": false
}

Expected Output: Test case runs filtered by all 7 UDF field type conditions simultaneously

  1. Get paginated test case runs with standard runStatus filter

{
  "tsrunID": "2362144",
  "viewId": 104123,
  "start": 0,
  "page": 1,
  "limit": 25,
  "filter": "[{\"type\":\"string\",\"value\":\"Failed\",\"field\":\"runStatus\"}]"
}

Expected Output: Paginated list of Failed test case runs with 25 items per page including testRunUdfs

  1. Show only test case runs with linked defects, filtered by Test Run UDF list value

{
  "tsrunID": "107021",
  "viewId": 6887,
  "showTcWithDefects": true,
  "tcrUdfFilter": "[{\"type\":\"list\",\"value\":[5108701],\"field\":\"8260LUP\"}]"
}

Expected Output: Test case runs with defects where the specified Test Run UDF matches

Hints: 1. === MANDATORY RESPONSE FORMAT — READ THIS BEFORE RENDERING ANY OUTPUT === 2. 3. PIVOT RULE — CRITICAL: 4. The 'testRunUdfs' field on each row is a key-value map (object) of UDF field keys to their values. 5. You MUST pivot this into TABLE COLUMNS — do NOT render it as rows. 6. → Each key in testRunUdfs = use the UDF human-readable label as the column header 7. → Each value in testRunUdfs = the cell value for that run's row 8. → 'fieldType' / 'fieldID' = INTERNAL METADATA — NEVER show these as columns 9. 10. FORBIDDEN PATTERNS — NEVER do any of these: 11. ❌ Do NOT render a separate sub-table (Label | Type | Value) per tcRunID 12. ❌ Do NOT show 'Type' or 'fieldType' as a visible column 13. ❌ Do NOT group output by tcRunID with individual breakdowns beneath each 14. ❌ Do NOT show raw UDF field keys (e.g. 'TRString', '8260LUP') as column headers — use human-readable labels 15. 16. REQUIRED OUTPUT — ONE unified table, all runs as rows: 17. | Test Case Key | Test Case Summary | Executed Version | Execution Status | <UDF Label 1> | <UDF Label 2> | ... | 18. |---------------|-------------------|------------------|------------------|---------------|---------------|-----| 19. | VKMCP-TC-1 | Login test | v1 | Not Run | varis | chrome, edge | ... | 20. | VKMCP-TC-2 | Invalid password | v2 | Not Run | john | firefox | ... | 21. 22. MANDATORY COLUMNS (always first, in this order): 23. 1. Test Case Key → entityKey (e.g. 'VKMCP-TC-1') 24. 2. Test Case Summary → summary (test case name) 25. 3. Executed Version → latestVersion (e.g. 'v1', 'v2') 26. 4. Execution Status → runStatus (e.g. 'Not Run', 'Passed', 'Failed') 27. 5. Tested By → testedBy/executedBy when present 28. 6+. One column per UDF field — use the human-readable label as header, the value as the cell. 29. 30. Null UDF values → show as '-' in the cell. 31. If testRunUdfs is empty or hasTcRunUdf is false, still show columns 1-5. 32. CHAINING WITH FETCH TEST RUN UDF VALUES: 33. If the user explicitly asks for Test Run UDFs with these test case runs, call 'Fetch Test Run UDF Values' after this tool with sourceContext='testSuiteRun' and sourceRows=. Render that tool's unifiedTableRows as the final answer. 34. === END MANDATORY RESPONSE FORMAT === 35. 36. CRITICAL WORKFLOW FOR FETCHING ALL EXECUTIONS OF A TEST SUITE: 37. When user asks to: 38. - 'fetch all executions' 39. - 'get all test runs' 40. - 'fetch all tcRunIDs for test suite X' 41. - 'update status for all executions of test suite X' 42. STEP 1: First call FETCH_EXECUTIONS_BY_TESTSUITE tool with the test suite ID (tsID, not entityKey) 43. - This returns ALL execution records for that test suite (could be 3, 5, 9, or any number) 44. - Extract ALL tsRunID values from the response data array 45. - Example response: data: [{tsRunID: '2739237', ...}, {tsRunID: '2739236', ...}, {tsRunID: '2739235', ...}] 46. STEP 2: For EACH tsRunID from Step 1, call this tool (FETCH_TEST_CASE_RUNS_BY_TESTSUITE_RUN) 47. - This returns all test case runs (tcRunID values) for that specific execution 48. - Repeat for ALL tsRunID values discovered in Step 1 49. STEP 3: Collect all tcRunID values from all executions 50. - Now you have the complete list of test case runs across ALL executions 51. - Use these for bulk status updates or other operations 52. CRITICAL ERROR TO AVOID: 53. - NEVER assume or hard-code only 2-3 execution IDs 54. - NEVER skip Step 1 - always discover ALL executions first 55. - NEVER fetch tcRunIDs for only some executions - get ALL of them 56. - If there are 9 executions, you must fetch tcRunIDs for all 9, not just 2 57. EXAMPLE WORKFLOW: 58. User: 'Fetch all test case runs for test suite VKMCP-TS-21' 59. Step 1: Call FETCH_EXECUTIONS_BY_TESTSUITE with tsID (resolved from VKMCP-TS-21) 60. Result: Found 9 executions with tsRunIDs: 2739237, 2739236, 2739235, 2739234, 2739233, 2739232, 2739231, 2739230, 2739229 61. Step 2: Call this tool 9 times (once for each tsRunID) 62. Call 1: tsrunID='2739237' -> returns 54 tcRunIDs 63. Call 2: tsrunID='2739236' -> returns 54 tcRunIDs 64. ... (repeat for all 9) 65. Step 3: Total collected: 9 executions × 54 test cases = 486 total tcRunIDs 66. 67. PERFORMANCE CONSIDERATIONS FOR LARGE TEST RUNS: 68. When dealing with large numbers of test case runs (500+, 1000+), follow these guidelines: 69. 1. ALWAYS inform the user about the scale BEFORE starting operations: 70. Example: 'Found 9 executions with approximately 486 test case runs. This will require fetching data from all 9 executions and may take a moment.' 71. 2. For bulk status updates on 1000+ test case runs: 72. - NEVER attempt to update all 1000+ in a single operation 73. - Break into smaller batches of 10-20 test case runs per update 74. - Inform user: 'Found 1000 test case runs. Will process in batches of 20 to ensure reliability and performance.' 75. - Show progress: 'Processing batch 1/50 (20 test runs)...', 'Batch 2/50...' 76. 3. Recommended batch sizes: 77. - For status updates: 10-20 test case runs per batch 78. - For fetching data: Can handle larger batches (50-100) 79. - Adjust based on API response times and timeout limits 80. 4. Always provide progress updates for long-running operations: 81. - Before: 'Processing 1000 test runs in 50 batches of 20...' 82. - During: 'Completed 200/1000 test runs (10 batches)...' 83. - After: 'Successfully updated all 1000 test case runs.' 84. 5. Error handling for batch operations: 85. - If a batch fails, report which batch and continue with remaining 86. - Provide summary at the end: 'Completed 48/50 batches. 2 batches failed (batch 23, 45).' 87. - Allow user to retry failed batches specifically 88. EXAMPLE LARGE-SCALE WORKFLOW: 89. User: 'Update status to Failed for all test runs in VKMCP-TS-21' 90. Step 1: Discover all executions (9 found) 91. Step 2: Fetch all tcRunIDs (486 total) 92. Step 3: Inform user: 'Found 486 test case runs across 9 executions. Will update in 25 batches of 20 runs each.' 93. Step 4: Process in batches with progress updates 94. Step 5: Report completion: 'Successfully updated all 486 test case runs to Failed status.' 95. 96. CRITICAL: tsrunID and viewId parameters are REQUIRED 97. tsrunID is a STRING identifier for the test suite run execution 98. viewId is a NUMERIC identifier for the test execution view 99. !MOST IMPORTANT HOW TO GET tsrunID: 100. 1. Call API 'Execution/Fetch Executions' (FETCH_EXECUTIONS_BY_TESTSUITE) to get ALL available executions 101. 2. From the response, get value of following attribute -> data[].tsRunID for EVERY execution 102. 3. Example: Test Suite might have multiple executions with IDs '107021', '107022', '107023', etc. 103. 4. NEVER assume there are only 2-3 executions - always fetch to discover the actual count 104. !MOST IMPORTANT HOW TO GET viewId: 105. CRITICAL: Always resolve and use the correct test execution viewId for the current project when calling this tool. 106. The viewId parameter must be fetched from the active project's info (latestViews.TE.viewId). 107. Each QMetry project may have a different test execution viewId, so using a stale or incorrect viewId will result in incomplete or invalid test case run data. 108. Usage workflow: 109. 1. Fetch project info for the current project (Admin/Get info Service). 110. 2. Extract latestViews.TE.viewId from the response. 111. 3. Use this viewId in the Fetch Test Case Runs by Test Suite Run API call. 112. Example: 113. { 114. tsrunID: "2362144", 115. viewId: 104123, 116. start: 0, 117. page: 1, 118. limit: 25 119. } 120. This ensures the tool fetches the proper execution runs data for the selected project context. 121. SUPPORTED PARAMETERS: start, page, limit, tsrunID, viewId, filter, udfFilter, tcrUdfFilter, showTcWithDefects 122. PAGINATION: Use start, page, and limit for result pagination 123. PAYLOAD FORMAT: {"start": 0, "page": 1, "limit": 10, "tsrunID": "2362144", "viewId": 104123} 124. 125. === TEST RUN UDF (tcrUdfFilter) — ALL 7 FIELD TYPE FORMATS === 126. tcrUdfFilter filters test case RUNS by Test Run UDF values (not test case UDFs — use udfFilter for those). 127. Value is a JSON array string. Multiple conditions are combined with AND logic. 128. Base structure: {"type":"", "field":"", "value": [,"comparison":"..."] [,"isCascading":true]} 129. 130. --- TYPE 1: list (single-select lookup / dropdown) --- 131. Use for: single-select lookup list UDF fields (one value selected from a list). 132. value: array of numeric list item IDs — get IDs from FETCH_CUSTOM_LIST_ITEMS tool. 133. Format: {"type":"list", "field":"", "value":[,]} 134. Example: [{"type":"list","value":[5108701,5108697],"field":"8260LUP"}] 135. Matches runs where the UDF value is ANY of the provided list item IDs (OR within the array). 136. 137. --- TYPE 2: list (multi-select lookup list) --- 138. Use for: multi-select lookup list UDF fields (multiple values can be selected). 139. Syntax identical to single-select list — same format, just the UDF field itself is multi-select. 140. Format: {"type":"list", "field":"", "value":[,]} 141. Example: [{"type":"list","value":[5126503,5126502],"field":"PGTE_MULTILOOKUPLIST"}] 142. Matches runs where ANY of the UDF's selected values match any of the provided IDs. 143. 144. --- TYPE 3: list (cascading dropdown) --- 145. Use for: cascading dropdown UDF fields (parent-child linked dropdowns). MUST add isCascading:true. 146. Format: {"type":"list", "field":"", "value":[,], "isCascading":true} 147. Example: [{"type":"list","value":[5126498,5126499],"field":"cascade_vK","isCascading":true}] 148. CRITICAL: missing isCascading:true on a cascading field will cause incorrect results or API error. 149. 150. --- TYPE 4: string (short text) --- 151. Use for: single-line text UDF fields. 152. value: the string to search for (partial match / contains). 153. Format: {"type":"string", "field":"", "value":""} 154. Example: [{"type":"string","field":"TRString","value":"str"}] 155. 156. --- TYPE 5: string (large text / rich text) --- 157. Use for: multi-line or rich text UDF fields. Syntax is identical to short text string type. 158. Format: {"type":"string", "field":"", "value":""} 159. Example: [{"type":"string","field":"vk_large_text","value":"this is large text"}] 160. NOTE: Search is against the raw (HTML) content stored in the field; plain text search terms work fine. 161. 162. --- TYPE 6: date --- 163. Use for: date picker UDF fields. REQUIRES a 'comparison' property. 164. comparison: 'gt' = after the date (greater than), 'lt' = before the date (less than). 165. value: date string in 'MM-DD-YYYY' format, or empty string '' to leave the bound open. 166. Format: {"type":"date", "field":"", "comparison":"gt"|"lt", "value":"MM-DD-YYYY"} 167. Example — date range: [{"type":"date","field":"PGTE_DATEPICKER","comparison":"gt","value":"06-01-2026"},{"type":"date","field":"PGTE_DATEPICKER","comparison":"lt","value":"06-30-2026"}] 168. Example — open-ended (no upper bound): [{"type":"date","field":"PGTE_DATEPICKER","comparison":"gt","value":"06-01-2026"}] 169. To filter by a single date use two conditions (gt day-before AND lt day-after) or just one bound. 170. CRITICAL: 'comparison' field is mandatory for date type — omitting it causes API error. 171. 172. --- TYPE 7: numeric --- 173. Use for: number UDF fields. 174. value: a number (integer or decimal). 175. Format: {"type":"numeric", "field":"", "value":} 176. Example: [{"type":"numeric","value":2,"field":"NB_number_TR"}] 177. 178. --- COMBINING MULTIPLE FILTERS --- 179. All conditions in tcrUdfFilter array use AND logic — runs must satisfy ALL conditions. 180. Full example (all 7 types combined): 181. [ 182. {"type":"list","value":[5108701,5108697],"field":"8260LUP"}, 183. {"type":"list","value":[5126503,5126502],"field":"PGTE_MULTILOOKUPLIST"}, 184. {"type":"list","value":[5126498,5126499],"field":"cascade_vK","isCascading":true}, 185. {"type":"string","field":"TRString","value":"str"}, 186. {"type":"string","field":"vk_large_text","value":"large text"}, 187. {"type":"date","field":"PGTE_DATEPICKER","comparison":"gt","value":"06-01-2026"}, 188. {"type":"date","field":"PGTE_DATEPICKER","comparison":"lt","value":"06-30-2026"}, 189. {"type":"numeric","value":2,"field":"NB_number_TR"} 190. ] 191. --- FILTER PARAMETER SUMMARY --- 192. tcrUdfFilter: filter by Test Run UDF fields (this section) 193. udfFilter: filter by Test Case UDF fields (different from test run UDFs) 194. filter: filter by standard execution fields (runStatus, executedBy, etc.) 195. All three can be combined in a single request — they are independently applied with AND logic. 196. 197. hasTcRunUdf FLAG — IMPORTANT: 198. The response contains a 'hasTcRunUdf' boolean flag at the top level. 199. hasTcRunUdf: true → Project has Test Run UDFs configured; each record includes 'testRunUdfs' object. 200. hasTcRunUdf: false → Project has NO Test Run UDFs configured. 201. When hasTcRunUdf is false, the response includes a 'testRunUdfNote' with a professional explanation. 202. Inform the user: 'No Test Run UDFs are configured for this project. Contact a project administrator to set up Test Run UDF fields.' 203. NEVER attempt to read testRunUdfs from records when hasTcRunUdf is false — the field will not be present. 204. 205. TEST RUN UDF RESPONSE (testRunUdfs): 206. When the API returns Test Run UDF data, each row will include a 'testRunUdfs' object. 207. This is a key-value map of UDF field keys to their values, parsed from the API's 'udfjson' field. 208. HTML is stripped from rich text (large text) UDF fields for readable LLM output. 209. Example testRunUdfs in response: 210. testRunUdfs: { 211. "8260LUP": "l1", 212. "look_554": "99", 213. "cascade_vK": {"child": "aa", "parent": "abc"}, 214. "dateNJ": "06-02-2026", 215. "NB_Multilppup_TR": ["ahd"], 216. "Jal_Largetext": "asdef asdfads asdfasf asdf asdf asfd a sdfa" 217. } 218. Use pagination for large result sets (start, page, limit parameters) 219. This tool is essential for detailed test execution analysis and reporting 220. Critical for monitoring individual test case execution performance and UDF values 221. Use for compliance reporting and execution audit trails 222. Essential for test execution quality assurance and trend analysis

qmetry_bulk_update_test_case_execution_statusA

Update execution status for individual or multiple test case runs in bulk

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)

Output Description: JSON object with success status, updated execution details, and confirmation message

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

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.

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

qmetry_fetch_test_suite_detailsA

Fetch full detail data for a QMetry test suite including UDF field values

Toolset: Test Suites

Parameters:

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

  • id (number) required: Test Suite ID (numeric ID)

  • scope (string): Scope of the operation - defines the context for data retrieval. Common values: 'project' (default), 'folder', 'release', 'cycle'. Applies to any entity type being fetched or operated upon. (default: "project")

Output Description: JSON object with full test suite details including UDFTypeData map and all UDF field values

Use Cases: 1. Get UDF field values for a specific test suite 2. Retrieve full test suite metadata including custom fields 3. Inspect test suite details before updating UDF values

Examples:

  1. Fetch details for test suite with ID 142013

{
  "id": 142013
}

Expected Output: Full test suite detail object with UDFTypeData, UDF field values, and metadata

qmetry_create_defect_or_issueA

Create a new defect/issue internally in QMetry.

Toolset: Issues

Parameters:

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

  • issueType (number) required: Issue type ID (e.g. Bug, Enhancement, etc.)

  • issuePriority (number) required: Issue priority ID (e.g. High, Medium, Low, etc.)

  • summary (string) required: Summary or title of the defect/issue

  • description (string): Detailed description of the defect/issue

  • sync_with (string): External system to sync with (e.g. JIRA, QMetry, etc.)

  • issueOwner (number): Owner/user ID for the issue

  • component (array): Component IDs associated with the issue

  • affectedRelease (array): Release IDs affected by this issue

  • affectedCycles (array): Cycle IDs affected by this issue

  • tcRunID (number): Test Case Run ID to link this defect/issue to a test execution (optional)

  • environment (string): Environment where the issue was found (e.g. 'Chrome', 'Firefox', 'Production'). Free-text string — no ID lookup needed.

  • issueState (number): Issue status ID. Optional by default — QMetry allows admins to make this mandatory at the project level. Get valid IDs from project info → customListObjs.issueState[index].id. Common values: Open, Reopened, Resolved, Closed.

  • udfFields (record<string, union>): Flat UDF field values. Keys = UDF field names from 'Fetch UDF Layout'. Values depend on fieldTypeName: STRING/LARGETEXT: string, NUMBER: number, DATETIMEPICKER: date string ('14-08-2026'), LOOKUPLIST: numeric ID, MULTILOOKUPLIST: array of IDs [101, 102], CASCADINGLIST: { parent: 101, child: 102 }. Call 'Fetch UDF Layout' with entityType + pageName='ADD' to discover available fields and list option IDs.

Output Description: JSON object containing the new create issue with id, dfid(defectID).

Use Cases: 1. Create a basic defect/issue with just a summary 2. Set issueType, issueOwner, component (labels), environment, and affectedRelease using valid IDs from project info 3. Create defects/issues with UDF values (hobby, destination, custom fields) 4. Link defects/issues to specific test case runs using tcRunID

Examples:

  1. Create an issue with summary 'Login Issue'

{
  "name": "Login Issue",
  "issuePriority": 2231988,
  "issueType": 2231983
}

Expected Output: Issue created in summary details

  1. Create an issue with Major priority and Bug type to Bug with summary 'Login Issue'

{
  "name": "Login Issue",
  "issuePriority": 2231988,
  "issueType": 2231983
}

Expected Output: Issue created in summary details with priority and Bug type

  1. Create an issue with summary 'Login Issue' and set issueOwner to 'John Doe'

{
  "name": "Login Issue",
  "issueOwner": 15112,
  "issuePriority": 2231988,
  "issueType": 2231983
}

Expected Output: Issue created in summary details with owner, priority and Bug type

  1. Create an issue with summary 'Login Issue' and link it to test case run ID 567890

{
  "name": "Login Issue",
  "issueOwner": 15112,
  "issuePriority": 2231988,
  "issueType": 2231983,
  "tcRunID": 567890
}

Expected Output: Issue created in summary details and linked to test case run ID 567890

  1. Create an issue with summary 'Login Issue' and set description to 'User is unable to login' and owner to 'John Doe' and link it to test case run ID 567890

{
  "name": "Login Issue",
  "issueOwner": 15112,
  "issuePriority": 2231988,
  "issueType": 2231983,
  "tcRunID": 567890,
  "description": "User is unable to login"
}

Expected Output: Issue created in summary details with description, owner, priority, Bug type and linked to test case run ID 567890

  1. Create an issue with summary 'Login Issue' and set release to 'Release 1.0' and its associated all cycles and owner to 'John Doe'

{
  "name": "Login Issue",
  "issueOwner": 15112,
  "issuePriority": 2231988,
  "issueType": 2231983,
  "affectedRelease": [
    111840
  ],
  "affectedCycles": [
    112345,
    112346
  ]
}

Expected Output: Issue created in summary details with release and associated all cycles, owner

  1. Create an issue with summary 'Login Issue' and set release to 'Release 1.0' and its associated all cycle 'Cycle 1.0.1', 'Cycle 1.0.2'

{
  "name": "Login Issue",
  "issuePriority": 2231988,
  "issueType": 2231983,
  "affectedRelease": [
    111840
  ],
  "affectedCycles": [
    112345,
    112346
  ]
}

Expected Output: Issue created in summary details with release and cycles

Hints: 1. ╔══════════════════════════════════════════════════════════════════╗ 2. ║ STEP 0 — NON-NEGOTIABLE: Call 'Fetch UDF Layout' BEFORE create ║ 3. ╚══════════════════════════════════════════════════════════════════╝ 4. NEVER call 'Create Defect or Issue' without first calling 'Fetch UDF Layout' with entityType='IS', pageName='ADD'. 5. Skipping this step WILL cause 400 errors (CO.MANDATORY_FIELDS_MISSING) because mandatory fields and defaults are unknown. 6. This rule has NO exceptions — not even when the user only provided a name and nothing else. 7. 8. === MANDATORY PRE-CREATE CHECK (ALWAYS DO THIS FIRST) === 9. Before creating any issue, call 'Fetch UDF Layout' with entityType='IS', pageName='ADD'. 10. Response keys use 'IS' — same structure as TC but scoped to issue module. 11. 12. SYSTEM FIELDS mandatory check — use 'systemFields' array (from qmSDF.IS in newlayout): 13. Each entry: { name, label, fieldTypeName, isMandatory } 14. isMandatory=true (allowBlank=false) means field MUST have a value before creating. 15. 16. UDF FIELDS mandatory check — use 'fields' array (from qmUDF.IS in newlayout): 17. Each entry: { name, label, fieldTypeName, isMandatory, listName? } 18. isMandatory=true means field MUST have a value. 19. 20. DEFAULT VALUES — use 'defaultValues' object (from qmDefaultValue.IS in newlayout): 21. Shape: { fieldName: defaultValueId } e.g. { 'str1': 'Tony Stark', 'lookup19': 5232630, 'component': 5232632 } 22. IMPORTANT: defaultValues can contain BOTH system field defaults AND UDF field defaults — handle each differently: 23. → SYSTEM field defaults (fields in qmSDF.IS, e.g. component/Labels, issueType, issuePriority): route to TOP-LEVEL params, NOT to udfFields. 24. - MULTILOOKUPLIST system fields (e.g. component): default is a single ID — wrap in array: component: [5232632]. 25. - LOOKUPLIST system fields (e.g. issueType, issuePriority): default is a single ID — use directly: issueType: 5232517. 26. → UDF field defaults (fields in qmUDF.IS, e.g. str1, lookup19, age19): route to udfFields param. 27. IMPORTANT: QMetry's API sometimes returns 'defaultValues: {}' (empty) even when defaults exist in QMetry settings. 28. If 'defaultValues' is empty, you cannot auto-apply — ask user for mandatory fields without defaults. 29. RULE: isMandatory=true AND defaultValues[field.name] exists → auto-use default, do NOT ask user. 30. RULE: isMandatory=true AND no defaultValues entry → MUST ask user before creating. 31. RULE: isMandatory=false AND defaultValues entry exists → auto-apply if user didn't specify. 32. 33. SYSTEM FIELDS mandatory check — additional caveat: 34. IMPORTANT: QMetry's API sometimes returns 'systemFields: []' (empty) even when system fields ARE mandatory. 35. If 'systemFields' is empty, treat the following as always mandatory: summary, issueType, issuePriority. 36. For issueType/issuePriority defaults: check 'customListObjs.issueType' / 'customListObjs.issuePriority' from Fetch Project Info — use first non-archived entry as fallback. 37. 38. ╔══════════════════════════════════════════════════════════════════════════╗ 39. ║ PRE-FLIGHT DEFAULT SWEEP — MANDATORY STEP BEFORE EVERY CREATE CALL ║ 40. ╚══════════════════════════════════════════════════════════════════════════╝ 41. After resolving mandatory fields, sweep ALL defaultValues entries: 42. For EACH key in defaultValues: 43. IF the user did not explicitly provide that field → add it to the payload using the default value. 44. This applies regardless of isMandatory — non-mandatory defaults MUST also be auto-applied. 45. Route correctly: system fields → top-level params, UDF fields → udfFields. 46. MULTILOOKUPLIST system fields (e.g. component): wrap single default ID in array → component: [id]. 47. Example: defaultValues = { str1: 'Tony Stark', lookup19: 5232630, component: 5232632 } 48. → user only said 'create an issue named X' 49. → payload MUST include: udfFields.str1='Tony Stark', udfFields.lookup19=5232630, component=[5232632] 50. → WRONG to put component in udfFields — it is a system field and must be a top-level array param. 51. → WRONG to omit component just because it is not mandatory — it has a default. 52. Skipping this sweep = missing fields in the created record = user-visible data loss. 53. ╚══════════════════════════════════════════════════════════════════════════╝ 54. 55. DECISION MATRIX: 56. | isMandatory | Has default | Action | 57. |-------------|-------------|-------------------------------------| 58. | true | YES | Auto-fill with default, no ask | 59. | true | NO | Ask user before creating | 60. | false | YES | Auto-fill with default — REQUIRED | 61. | false | NO | Skip if user didn't provide | 62. Only after ALL mandatory fields resolved AND default sweep complete → proceed with create. 63. === END MANDATORY PRE-CREATE CHECK === 64. 65. === ERROR RECOVERY: CO.MANDATORY_FIELDS_MISSING === 66. If create fails with error code 'CO.MANDATORY_FIELDS_MISSING', DO NOT give up. Auto-recover: 67. 1. Parse the 'MISSING_FIELDS' list from the error response (comma-separated field labels). 68. 2. Match each label against 'fields[].label' and 'systemFields[].label' from the Fetch UDF Layout response. 69. 3. For matched UDF fields: check 'listOptions[field.listName]' for valid option IDs. 70. 4. For matched system fields (e.g. 'Priority'): check 'customListObjs.issuePriority' from project info. 71. 5. If the field has a 'defaultValues' entry: auto-fill it silently. 72. 6. If no default exists: ask the user ONLY for the missing fields by label. 73. 7. Retry create with the resolved values added to the payload. 74. NEVER ask user to 'try again' manually — resolve and retry automatically. 75. === END ERROR RECOVERY === 76. 77. === DATE FORMAT CHECK (MANDATORY — EVERY CREATE REQUEST) === 78. ALWAYS call 'Fetch QMetry Project Info' before every create request — not only when the user explicitly mentions a date. 79. Any UDF field could be a DATETIMEPICKER. Wrong format causes QMetry to silently discard the field value (API returns success but value is NOT stored — no error). 80. STEP 1: From project info, read dateTimeFormatID (e.g. 3). 81. STEP 2: Find entry in dateTimeFormatNew where id === dateTimeFormatID → read its unique_value (e.g. 'yyyy-MM-dd'). 82. STEP 3: unique_value pattern: yyyy=4-digit year, MM=2-digit month (01-12), dd=2-digit day, MMM=3-letter month (Jan/Feb/...). 83. Example: id=1 → MM-dd-yyyy → '10-25-2000' | id=2 → dd-MM-yyyy → '25-10-2000' | id=3 → yyyy-MM-dd → '2000-10-25' | id=4 → dd-MMM-yyyy → '25-Oct-2000' 84. STEP 4: For EVERY DATETIMEPICKER field in the payload: parse any user-provided date and re-format it using the active unique_value pattern before sending. 85. NEVER assume a date format — always derive it from dateTimeFormatID. Wrong format = silent data loss. 86. === END DATE FORMAT CHECK === 87. 88. CRITICAL: summary, issueType, issuePriority are REQUIRED fields to create an issue 89. OPTIONAL SYSTEM FIELDS: issueOwner, component, affectedRelease, affectedCycles, description, environment, tcRunID 90. SYSTEM FIELD ID RESOLUTION — fetch project info, then use these mappings: 91. - issueType: customListObjs.issueType[].id 92. - issuePriority: customListObjs.issuePriority[].id 93. - issueOwner / owner: customListObjs.users[].id (match by name) 94. - component / labels: customListObjs.component[].id (component acts as labels — pass array of IDs) 95. - environment: free-text string (e.g. 'Chrome', 'Firefox', 'Production') — pass directly as top-level field, no ID lookup needed 96. - sync_with: customListObjs.component[].igConfigurationID or internalTrackerId 97. - tcRunID: data[].tcRunID (from 'Execution/Fetch Testcase Run ID') 98. If the user provides a issuePriority name (e.g. 'Blocker'), fetch project info, find the matching priority in customListObjs.issuePriority[index].name, and use its ID in the payload. If the name is not found, skip the issuePriority field and show a user-friendly message: 'Defect/issue created without issuePriority, as given issuePriority is not available in the current project.' 99. If the user provides an issueOwner name, fetch project info, find the matching issueOwner in customListObjs.users[index].name, and use its ID in the payload as issueOwner. If the name is not found, skip the issueOwner field and show a user-friendly message: 'Defect/issue created without issueOwner, as given issueOwner is not available in the current project.' 100. If the user provides an issue type name, fetch project info, find the matching type in customListObjs.issueType[index].name, and use its ID in the payload as issueType. If the name is not found, skip the issueType field and show a user-friendly message: 'Defect/issue created without issue type, as given type is not available in the current project.' 101. 102. === RELEASE/CYCLE ID RESOLUTION (MANDATORY WHEN USER PROVIDES RELEASE OR CYCLE) === 103. ALWAYS call 'Fetch Releases and Cycles' tool (FETCH_RELEASES_AND_CYCLES) to resolve release and cycle IDs — do NOT guess IDs from project info. 104. Fetch Releases and Cycles response structure: 105. releases[].releaseID → use as affectedRelease value (wrap in array: [releaseID]) 106. releases[].name → release display name to match against user input 107. releases[].builds[].buildID → use as affectedCycles value (wrap in array: [buildID]) 108. releases[].builds[].name → cycle display name to match against user input 109. PAYLOAD FORMAT: both affectedRelease and affectedCycles MUST be arrays of numeric IDs: 110. affectedRelease: [releaseID] e.g. affectedRelease: [92112] 111. affectedCycles: [buildID] e.g. affectedCycles: [130831] 112. affectedCycles: [buildID1, buildID2] multiple cycles allowed 113. WORKFLOW when user provides release/cycle name or ID: 114. 1. Call FETCH_RELEASES_AND_CYCLES to get all releases and their nested cycles (builds). 115. 2. Match user's release name/ID → extract releases[].releaseID. 116. 3. Match user's cycle name/ID within that release → extract releases[].builds[].buildID. 117. 4. Set affectedRelease: [releaseID] and affectedCycles: [buildID] in payload. 118. VALIDATION: If the release or cycle name/ID is not found in FETCH_RELEASES_AND_CYCLES response, skip both fields and show: 'Issue created without release/cycle association, as given release/cycle is not available in the current project.' 119. NEVER pass a single number for affectedRelease or affectedCycles — always wrap in array even for one ID. 120. === END RELEASE/CYCLE ID RESOLUTION === 121. 122. Ensure all IDs used are valid for the current QMetry project context 123. This tool is essential for defect management and test execution linkage 124. Helps maintain traceability between test executions and reported issues 125. Critical for quality assurance and defect lifecycle management 126. Use for creating issues directly from test execution contexts 127. 128. UDF (User Defined Fields) WORKFLOW FOR CREATE: 129. 1. Call 'Fetch UDF Layout' with entityType='IS', pageName='ADD' to discover field names, types, and list option IDs. 130. IF listOptions[field.listName] is empty after Fetch UDF Layout, the tool already tried a metadata fallback. If STILL empty, ask the user to provide the option ID from the QMetry UI — do NOT guess numeric IDs. 131. 2. For LOOKUPLIST fields: pick one ID from listOptions[field.listName][].id. 132. 3. For MULTILOOKUPLIST fields: pick an array of IDs. 133. 4. For CASCADINGLIST fields: pick parent ID, then call 'Fetch Cascade Child Values' for child ID. Pass { parent: parentId, child: childId }. 134. 5. Pass all UDF values via 'udfFields' param: { fieldName: value }. 135. 6. Mandatory UDF fields (isMandatory=true) MUST be included or create will fail.

qmetry_update_issueA

Update an existing QMetry issue by DefectId and/or entityKey.

Toolset: Issues

Parameters:

  • DefectId (number) required: ID of the defect/issue to be updated. CRITICAL: the parameter name is 'DefectId' (capital D) — do NOT use 'defectId', 'issueId', 'id', or other variants. Accepts a string or number.

  • entityKey (string): Entity Key of the defect/issue to be updated

  • issueType (number): Issue type ID (e.g. Bug, Enhancement, etc.)

  • issuePriority (number): Issue priority ID (e.g. High, Medium, Low, etc.)

  • summary (string): Summary or title of the defect/issue

  • description (string): Detailed description of the defect/issue

  • issueOwner (number): Owner/user ID for the issue

  • affectedRelease (number): Release IDs affected by this issue

  • affectedCycles (number): Cycle IDs affected by this issue

  • udfFields (record<string, union>): Flat UDF field values. Keys = UDF field names from 'Fetch UDF Layout'. Values depend on fieldTypeName: STRING/LARGETEXT: string, NUMBER: number, DATETIMEPICKER: date string ('14-08-2026'), LOOKUPLIST: numeric ID, MULTILOOKUPLIST: array of IDs [101, 102], CASCADINGLIST: { parent: 101, child: 102 }. Call 'Fetch UDF Layout' with entityType + pageName='ADD' to discover available fields and list option IDs.

  • UDF (record<string, object>): UDF wrapper required for update. Keys = UDF field names. Each value must include fieldID (from 'Fetch UDF Layout' with pageName='DETAIL') and value.

Output Description: JSON object with update status and details.

Use Cases: 1. Update issue summary (title) 2. Change issue priority, type, or owner 3. Update affected release or cycles 4. Update description or environment 5. Bulk update using DefectId and/or entityKey

Examples:

  1. Update issue summary

{
  "DefectId": 118150,
  "summary": "Money withdrawal is success even if insufficient amount_updated"
}

Expected Output: Issue summary updated successfully.

  1. Update issue priority

{
  "DefectId": 118150,
  "issuePriority": 189340
}

Expected Output: Issue priority updated successfully.

  1. Update issue type

{
  "DefectId": 118150,
  "issueType": 189337
}

Expected Output: Issue type updated successfully.

  1. Update affected release

{
  "DefectId": 118150,
  "affectedRelease": 3730
}

Expected Output: Affected release updated successfully.

Hints: 1. === DEFAULT VALUES — APPLY FOR ANY UNSET FIELD === 2. ALWAYS call 'Fetch UDF Layout' with entityType='IS', pageName='DETAIL' before updating. 3. defaultValues (from Fetch UDF Layout, i.e. qmDefaultValue.IS): { fieldName: defaultValueId } — sweep ALL entries. 4. defaultValues can contain BOTH system field defaults AND UDF field defaults — handle each differently: 5. → SYSTEM field defaults (fields in qmSDF.IS, e.g. component/Labels, issueType, issuePriority): route to TOP-LEVEL params, NOT to udfFields. 6. - MULTILOOKUPLIST system fields (e.g. component): default is a single ID — wrap in array: component: [5232632]. 7. - LOOKUPLIST system fields (e.g. issueType, issuePriority): default is a single ID — use directly. 8. → UDF field defaults (fields in qmUDF.IS, e.g. str1, lookup19, age19): route to udfFields param. 9. For EACH key in defaultValues: if user did not explicitly provide that field → include it in payload using default, routed correctly. 10. This applies to non-mandatory fields too (e.g. component/Labels). Omitting them = data loss. 11. IMPORTANT: QMetry's API sometimes returns 'defaultValues: {}' (empty) — if so, skip auto-apply and ask user for mandatory fields without defaults. 12. systemFields (from qmSDF.IS): isMandatory=true fields must retain a valid value after update. 13. IMPORTANT: QMetry's API sometimes returns 'systemFields: []' (empty). If so, treat summary, issueType, issuePriority as always mandatory. 14. fields/UDF (from qmUDF.IS): isMandatory=true UDF fields must be included if being changed. 15. === END DEFAULT VALUES === 16. 17. === DATE FORMAT CHECK (MANDATORY — EVERY UPDATE REQUEST) === 18. ALWAYS call 'Fetch QMetry Project Info' before every update request — not only when the user explicitly mentions a date. 19. Any UDF field could be a DATETIMEPICKER. Wrong format causes QMetry to silently discard the field value (API returns success but value is NOT stored — no error). 20. STEP 1: From project info, read dateTimeFormatID (e.g. 3). 21. STEP 2: Find entry in dateTimeFormatNew where id === dateTimeFormatID → read its unique_value (e.g. 'yyyy-MM-dd'). 22. STEP 3: unique_value pattern: yyyy=4-digit year, MM=2-digit month (01-12), dd=2-digit day, MMM=3-letter month (Jan/Feb/...). 23. Example: id=1 → MM-dd-yyyy → '10-25-2000' | id=2 → dd-MM-yyyy → '25-10-2000' | id=3 → yyyy-MM-dd → '2000-10-25' | id=4 → dd-MMM-yyyy → '25-Oct-2000' 24. STEP 4: For EVERY DATETIMEPICKER field in the payload: parse any user-provided date and re-format it using the active unique_value pattern before sending. 25. NEVER assume a date format — always derive it from dateTimeFormatID. Wrong format = silent data loss. 26. === END DATE FORMAT CHECK === 27. 28. To get the DefectId, call the Issue/Fetch issue tool and use data[].id from the response. 29. if you have pass issue key (VT-IS-5, MAC-IS-10 etc.) then first fetch issue by issue key to get issue id. 30. Along with DefectId, pass only those fields which are to be updated. 31. Refer to the Create Issue tool for valid field mappings and values. 32. You can update summary, priority, type, affectedRelease, affectedCycles, description, sync_with, issueOwner, component, environment, tcRunID, etc. 33. If you provide entityKey, it will be used for additional validation but DefectId is required. 34. 35. UDF (User Defined Fields) WORKFLOW FOR UPDATE: 36. 1. Call 'Fetch UDF Layout' with entityType='IS', pageName='DETAIL' to get field names, fieldIDs (projectUserFieldID), and list option IDs. 37. IF listOptions[field.listName] is empty after Fetch UDF Layout, the tool already tried a metadata fallback. If STILL empty, ask the user to provide the option ID from the QMetry UI — do NOT guess numeric IDs. 38. 2. For LOOKUPLIST fields: pick one ID from listOptions[field.listName][].id. 39. 3. For MULTILOOKUPLIST fields: pick array of IDs; also pass alias flat key (e.g., fieldNameAlias: 'Option Label'). 40. 4. For CASCADINGLIST fields: pick parent ID + fetch child with 'Fetch Cascade Child Values'. Pass { parent: parentId, child: childId }. 41. 5. Pass BOTH 'udfFields' (flat root values) AND 'UDF' wrapper (with fieldID) — both required for update. 42. Example: udfFields: { is_field: 'value' }, UDF: { is_field: { fieldID: 3001, value: 'value' } } 43. 6. Mandatory UDF fields (isMandatory=true) MUST be included.

qmetry_fetch_defects_or_issuesA

Fetch QMetry defects or issues - automatically handles viewId resolution based on project

Toolset: Issues

Parameters:

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

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

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • filter (string): Filter criteria as JSON string (default '[]') (default: "[]")

  • isJiraIntegrated (boolean): Send true if current project is Integrated with Jira (default: false)

  • sort (string): Sort Records - refer json schema, Possible property - entityKey, name, typeAlias, stateAlias, createdDate, createdByAlias, updatedDate, updatedByAlias, priorityAlias, createdSystem, linkedTcrCount, linkedRqCount, dfOwner, attachmentCount, environmentText (default: "[{"property":"name","direction":"ASC"}]")

Output Description: JSON object with 'data' array containing issues. Each issue has 'id' (numeric defect ID — use this as defectId for Fetch Issue Details), 'entityKey', 'name'/'summary', and other fields. There is no 'DefectId' field in this response — 'id' is the defect identifier.

Use Cases: 1. List all issues in a project 2. Search for specific issues using filters 3. Get paginated issue results

Examples:

  1. Get all issues from default project - system will auto-fetch viewId

{}

Expected Output: List of issues from default project with auto-resolved viewId

  1. Get all issues from UT project - system will auto-fetch UT project's viewId

{
  "projectKey": "UT"
}

Expected Output: List of issues from UT project using UT's specific IS viewId

  1. Get issues by release/cycle filter

{
  "projectKey": "MAC",
  "filter": "[{\"value\":[55178],\"type\":\"list\",\"field\":\"release\"},{\"value\":[111577],\"type\":\"list\",\"field\":\"cycle\"}]"
}

Expected Output: Issues associated with Release 8.12 (ID: 55178) and Cycle 8.12.1 (ID: 111577)

  1. Get issues by release only

{
  "projectKey": "MAC",
  "filter": "[{\"value\":[55178],\"type\":\"list\",\"field\":\"release\"}]"
}

Expected Output: All defects or issues associated with Release 8.12 (ID: 55178)

  1. Get issues by cycle only

{
  "projectKey": "MAC",
  "filter": "[{\"value\":[111577],\"type\":\"list\",\"field\":\"cycle\"}]"
}

Expected Output: All defects or issues associated with Cycle 8.12.1 (ID: 111577)

  1. Search for specific issue by entity key

{
  "projectKey": "MAC",
  "filter": "[{\"type\":\"string\",\"value\":\"MAC-IS-636\",\"field\":\"entityKeyId\"}]"
}

Expected Output: Issues matching the entity key criteria

  1. Search for multiple defects or issues by comma-separated entity keys

{
  "projectKey": "MAC",
  "filter": "[{\"type\":\"string\",\"value\":\"MAC-IS-636,MAC-IS-637,MAC-IS-638\",\"field\":\"entityKeyId\"}]"
}

Expected Output: Issues matching any of the specified entity keys

Hints: 1. CRITICAL WORKFLOW: Always use the SAME projectKey for both project info and issues fetching 2. Step 1: If user specifies projectKey (like 'UT', 'MAC'), use that EXACT projectKey for project info 3. Step 2: Get project info using that projectKey, extract latestViews.IS.viewId 4. Step 3: Use the SAME projectKey and the extracted IS viewId for fetching issues 5. Step 4: If user doesn't specify projectKey, use 'default' for both project info and issues fetching 6. NEVER mix project keys - if user says 'MAC project', use projectKey='MAC' for everything 7. For search by issues key (like MAC-IS-1684), use filter: '[{"type":"string","value":"MAC-IS-1684","field":"entityKeyId"}]' 8. RELEASE/CYCLE FILTERING: Use release and cycle IDs, not names, for filtering 9. For release filter: '[{"value":[releaseId],"type":"list","field":"release"}]' 10. For cycle filter: '[{"value":[cycleId],"type":"list","field":"cycle"}]' 11. For combined release+cycle: '[{"value":[releaseId],"type":"list","field":"release"},{"value":[cycleId],"type":"list","field":"cycle"}]' 12. Get release/cycle IDs from FETCH_RELEASES_AND_CYCLES tool before filtering 13. FILTER FIELDS: name, stateAlias, typeAlias, entityKeyId, createdDate, createdByAlias, updatedDate, updatedByAlias, createdSystem, dfOwner, priorityAlias, linkedTcrCount, linkedRqCount, attachmentCount, componentAlias, environmentText 14. SORT FIELDS: entityKey, name, typeAlias, stateAlias, createdDate, createdByAlias, updatedDate, updatedByAlias, priorityAlias, createdSystem, linkedTcrCount, linkedRqCount, dfOwner, attachmentCount, environmentText 15. For multiple entity keys, use comma-separated values in filter 16. Use pagination for large result sets (start, page, limit parameters) 17. This tool is essential for defect management and issue tracking 18. Critical for quality assurance and defect lifecycle analysis 19. Use for compliance reporting and issue traceability 20. Helps maintain visibility into project defects and issues

qmetry_fetch_linked_issues_of_test_case_runA

Get issues that are linked (or not linked) to a specific test case run in QMetry

Toolset: Issues

Parameters:

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

  • entityId (number) required: Id of Test case run (required for fetching linked issues). CRITICAL: the parameter name is 'entityId' — do NOT use 'tcRunId', 'testCaseRunId', 'runId', or other variants. Accepts a string or number. NOTE: To get the entityId - Call API 'Execution/Fetch Testcase Run ID' From the response, get value of following attribute -> data[].tcRunID

  • getLinked (boolean): True to get only those issues that are linked with this Test case Run, False to get those issues which are not linked with this Test case Run. Default value true (get linked issues). (default: true)

  • getColumns (boolean): Whether to get column information in response. (default: true)

  • istcrFlag (boolean): Set True for test case run operations (default: true)

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • filter (string): Filter criteria as JSON string (default '[]') (default: "[]")

Output Description: JSON object with issues array containing issue details, priorities, status, owner information, and linkage metadata

Use Cases: 1. Get all issues linked to a specific test case run for defect tracking 2. Find issues that are NOT linked to a test case run (gap analysis) 3. Generate defect reports and traceability matrix for test case runs 4. Monitor issue resolution progress for specific test case executions 5. Analyze test execution quality by examining linked defects 6. Filter issues by type, priority, status, or owner for test case runs 7. Audit issue-test case run relationships for compliance 8. Track defect lifecycle in relation to test execution results 9. Quality assurance - ensure proper issue tracking for failed test runs 10. Impact analysis - see which issues affect specific test executions

Examples:

  1. Get all issues linked to test case run ID 1121218

{
  "entityId": 1121218,
  "getColumns": true,
  "getLinked": true
}

Expected Output: List of issues linked to the test case run with issue details, status, and metadata

  1. Get issues NOT linked to test case run (gap analysis)

{
  "entityId": 1121218,
  "getColumns": true,
  "getLinked": false
}

Expected Output: List of issues that are NOT linked to test case run for gap analysis

  1. Filter linked issues by issue type and status

{
  "entityId": 1121218,
  "getColumns": true,
  "getLinked": true,
  "filter": "[{\"type\":\"list\",\"value\":[1],\"field\":\"typeAlias\"},{\"type\":\"list\",\"value\":[1,2],\"field\":\"stateAlias\"}]"
}

Expected Output: Bug type issues in Open or In Progress status

  1. Search linked issues by name and priority

{
  "entityId": 1121218,
  "getColumns": true,
  "getLinked": true,
  "filter": "[{\"type\":\"string\",\"value\":\"login\",\"field\":\"name\"},{\"type\":\"list\",\"value\":[1],\"field\":\"priorityAlias\"}]"
}

Expected Output: High priority issues containing 'login' in their name

  1. Filter issues by date range and entity key

{
  "entityId": 1121218,
  "getColumns": true,
  "getLinked": true,
  "filter": "[{\"value\":\"2024-01-01\",\"type\":\"date\",\"field\":\"createdDate\",\"comparison\":\"gt\"},{\"value\":\"2024-12-31\",\"type\":\"date\",\"field\":\"createdDate\",\"comparison\":\"lt\"},{\"type\":\"string\",\"value\":\"BUG-001,BUG-002\",\"field\":\"entityKeyId\"}]"
}

Expected Output: Specific issues created within date range

  1. Filter issues by owner and created system

{
  "entityId": 1121218,
  "getColumns": true,
  "getLinked": true,
  "filter": "[{\"type\":\"list\",\"value\":[123],\"field\":\"dfOwner\"},{\"type\":\"list\",\"value\":[\"QMetry\"],\"field\":\"createdSystem\"}]"
}

Expected Output: Issues owned by specific user and created in QMetry

Hints: 1. WORKFLOW CRITICAL: NEVER use user-provided IDs directly as entityId! 2. ALWAYS fetch execution data first to get proper tcRunID values! 3. 4. WHEN USER ASKS: 'fetch linked issues of test suite [ID]' OR 'linked issues of test run [ID]': 5. STEP 1: Identify what type of ID the user provided 6. STEP 2A: If Test Suite ID → fetch executions by test suite → get tsRunID → fetch test runs → get tcRunID 7. STEP 2B: If Test Run ID → fetch test case runs by test suite run → get tcRunID 8. STEP 2C: If Test Case ID → fetch test case executions → get tcRunID 9. STEP 3: Use tcRunID as entityId for this tool 10. 11. ID HIERARCHY: Test Suite → Test Suite Runs → Test Case Runs (tcRunID = entityId) 12. ID HIERARCHY: Test Case → Test Case Executions (tcRunID = entityId) 13. 14. CRITICAL: entityId parameter is REQUIRED - this is the Test Case Run numeric ID (tcRunID) 15. HOW TO GET entityId: 16. 1. Call appropriate execution APIs to get test case runs 17. 2. From the response, extract data[].tcRunID 18. 3. Use tcRunID as entityId for this tool 19. 4. Example: tcRunID 1121218 becomes entityId: 1121218 20. 21. getLinked=true (default): Returns issues that ARE linked to the test case run 22. getLinked=false: Returns issues that are NOT linked to the test case run (useful for gap analysis) 23. istcrFlag=true (default): Set to true for test case run operations 24. getColumns=true (default): Include column metadata in response 25. 26. FILTER CAPABILITIES: Support extensive filtering by issue properties 27. FILTER FIELDS: name (string), typeAlias (list), stateAlias (list), entityKeyId (string), createdDate (date with comparison), createdByAlias (list), updatedDate (date with comparison), createdSystem (list), updatedByAlias (list), dfOwner (list), priorityAlias (list), linkedTcrCount (numeric), linkedRqCount (numeric), attachmentCount (numeric), componentAlias (list), environmentText (string), affectedRelease (list) 28. ISSUE TYPE IDs: Typically 1=Bug, 2=Enhancement, 3=Task (verify with your QMetry instance) 29. ISSUE STATE IDs: Typically 1=Open, 2=In Progress, 3=Resolved, 4=Closed (verify with your QMetry instance) 30. ISSUE PRIORITY IDs: Typically 1=High, 2=Medium, 3=Low (verify with your QMetry instance) 31. DATE FILTERING: Use 'gt' (greater than) and 'lt' (less than) comparisons for date fields 32. ENTITY KEY SEARCH: Use comma-separated values for multiple issue keys 33. CREATED SYSTEM: Use 'QMetry' or 'JIRA' to filter by creation system 34. OWNER IDs: Use numeric user IDs from QMetry user management 35. COMPONENT/LABEL IDs: Use numeric IDs for component/label filtering 36. ENVIRONMENT TEXT: Filter by environment description text 37. AFFECTED RELEASE: Use release IDs for filtering by affected releases 38. LINKED COUNT FILTERS: Use numeric values for linkedTcrCount, linkedRqCount, attachmentCount 39. Multiple filter conditions are combined with AND logic 40. Use pagination for large result sets (start, page, limit parameters) 41. This tool is essential for defect tracking and traceability audits 42. Critical for understanding test execution quality and issue relationships 43. Use for compliance reporting and issue lifecycle management 44. Helps establish relationships between test failures and reported issues 45. Essential for impact analysis when test case runs change or fail

qmetry_link_issues_to_testcase_runA

Link one or more issues to a QMetry Testcase Run (execution).

Toolset: Issues

Parameters:

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

  • issueIds (array) required: ID of issues to be linked to Testcase Run

  • tcrId (number) required: ID of Testcase Run to link issues with. CRITICAL: parameter name is 'tcrId' — do NOT use 'tcRunId', 'testCaseRunId', or other variants. Accepts a string or number.

Output Description: JSON object with linkage status and details.

Use Cases: 1. Link a single issue to a testcase run 2. Link multiple issues to a testcase run 3. Automate defect association during test execution 4. Maintain traceability between defects and test runs

Examples:

  1. Link one issue to a testcase run

{
  "issueIds": [
    "5054834"
  ],
  "tcrId": 567890
}

Expected Output: Issue 5054834 linked to testcase run 567890 successfully.

  1. Link multiple issues to a testcase run

{
  "issueIds": [
    "5054834",
    "5054835"
  ],
  "tcrId": 567890
}

Expected Output: Issues 5054834, 5054835 linked to testcase run 567890 successfully.

Hints: 1. if you have pass issue key (VT-IS-5, MAC-IS-10 etc.) then first fetch issue by issue key to get issue id. 2. To get the issueIds, call the Fetch issues linked with testcases tool and use data[].defectID from the response. 3. To get the tcrId, call the Execution/Fetch Testcase Run ID tool and use data[].tcRunID from the response. 4. Both issueIds and tcrId are required. 5. You can link multiple issues at once by providing an array of IDs.

qmetry_fetch_issue_executionsA

Get test case executions linked to a QMetry-native (non-Jira) defect/issue. ALWAYS present results as a unified table: Test Suite Key | Test Suite Name | Release | Cycle | Platform | Executed Version | Execution Status | <UDF Label columns…>. NEVER show a separate type+value UDF breakdown — always combine identification fields and UDF values in one table per execution row.

Toolset: Issues

Parameters:

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

  • linkedAssetId (number) required: Numeric defect ID of the QMetry issue. CRITICAL: parameter name is 'linkedAssetId' — do NOT use 'issueId', 'defectId', 'id', or other variants. Accepts a string or number. To get this ID, call the Fetch Defects or Issues tool and use data[].id from the response.

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • platformID (string): Platform ID to filter executions by environment/platform

  • filter (string): JSON filter string. Supported fields: tcName (string), linkageLevel (string), executedVersion (string), runStatusName (list of status names), platformID (list of numeric IDs), executionCreatedByLoginAlias (list of usernames), isTestSuiteArchived (list: [1] active, [0] archived, [1,0] both). Example: '[{"type":"string","value":"login","field":"tcName"}]' (default: "[]")

Output Description: JSON object with 'data' array of execution records, 'hasTcRunUdf' boolean flag, and 'total' count. Each execution record ALWAYS contains these mandatory identification fields: 'tsEntityKey' (Test Suite Key, e.g. 'MAC-TS-42'), 'tsName' (Test Suite Name), 'releaseName' (Release), 'cycleName' (Cycle), 'platformName' (Platform/environment), 'executedVersion' (Executed Version of the test case), 'runStatusName' (Execution Status label), 'tcRunID' (numeric Test Run ID), 'tcName' (Test Case Name), 'tcEntityKey' (Test Case Key), and 'testRunUdfs' (array of objects each with name, label, fieldID, fieldType, value — use 'label' for display headers, null if not set). For LOOKUPLIST and MULTILOOKUPLIST fields, 'value' contains the resolved human-readable display name (from qmUDFList), not the raw internal uniqueLabel key. ALL project-defined UDF fields are always included, even those with no value. When hasTcRunUdf is false, a 'testRunUdfNote' field provides a professional explanation instead.

Use Cases: 1. Get all test executions linked to a specific defect 2. Audit which test cases were run against a given issue 3. Filter executions by run status (failed, passed, etc.) for an issue 4. Filter executions by platform/environment for an issue 5. Filter executions by tester/executor for an issue 6. Show archived and active test suite executions for an issue 7. View UDF (custom field) values on executions linked to an issue 8. Track test coverage and execution progress for a defect

Examples:

  1. Get all executions linked to issue ID 9598240

{
  "linkedAssetId": 9598240
}

Expected Output: Present as ONE unified table — never as a separate type+value UDF breakdown. Example: | Test Suite Key | Test Suite Name | Release | Cycle | Platform | Executed Version | Execution Status | Tested By | Environments UDF | Execution Type | | MAC-TS-42 | Regression Suite | R1 | Sprint1 | Chrome | 1 | Failed | varis | chrome, edge, safari | Functional | | MAC-TS-43 | Login Suite | R1 | Sprint1 | Firefox | 2 | Blocked | john | firefox | Regression | Columns in order: Test Suite Key (tsEntityKey) | Test Suite Name (tsName) | Release (releaseName) | Cycle (cycleName) | Platform (platformName) | Executed Version (executedVersion) | Execution Status (runStatusName) | then one column per UDF label. Use the UDF 'label' as column header. Show null UDF values as '-'.

  1. Get executions with pagination (page 1, 20 records)

{
  "linkedAssetId": 9598240,
  "page": 1,
  "start": 0,
  "limit": 20
}

Expected Output: First 20 executions linked to the issue

  1. Filter executions by run status (failed or passed)

{
  "linkedAssetId": 9509016,
  "filter": "[{\"type\":\"list\",\"field\":\"runStatusName\",\"value\":[\"failed\",\"passed\"]}]",
  "page": 1,
  "start": 0,
  "limit": 20
}

Expected Output: Executions with failed or passed status for the issue

  1. Filter executions by test case name

{
  "linkedAssetId": 9509016,
  "filter": "[{\"type\":\"string\",\"value\":\"login\",\"field\":\"tcName\"}]",
  "page": 1,
  "start": 0,
  "limit": 20
}

Expected Output: Executions where test case name contains 'login'

  1. Filter by platform, status, and tester

{
  "linkedAssetId": 9509016,
  "filter": "[{\"type\":\"list\",\"field\":\"runStatusName\",\"value\":[\"failed\"]},{\"type\":\"list\",\"field\":\"platformID\",\"value\":[100145]},{\"type\":\"list\",\"field\":\"executionCreatedByLoginAlias\",\"value\":[\"Varis Khan\"]}]",
  "page": 1,
  "start": 0,
  "limit": 20
}

Expected Output: Failed executions on platform 100145 created by Varis Khan

  1. Filter by status and include archived test suite executions

{
  "linkedAssetId": 9509016,
  "filter": "[{\"type\":\"list\",\"field\":\"runStatusName\",\"value\":[\"failed\",\"passed\"]},{\"value\":[1,0],\"type\":\"list\",\"field\":\"isTestSuiteArchived\"}]",
  "page": 1,
  "start": 0,
  "limit": 20
}

Expected Output: Executions with failed/passed status including archived test suites

  1. Filter by execution version and linkage level

{
  "linkedAssetId": 9509016,
  "filter": "[{\"type\":\"string\",\"value\":\"1\",\"field\":\"executedVersion\"},{\"type\":\"string\",\"value\":\"Test Case\",\"field\":\"linkageLevel\"}]",
  "page": 1,
  "start": 0,
  "limit": 20
}

Expected Output: Executions at Test Case linkage level for version 1

Hints: 1. === MANDATORY RESPONSE FORMAT — READ THIS BEFORE RENDERING ANY OUTPUT === 2. 3. PIVOT RULE — CRITICAL: 4. The 'testRunUdfs' field on each execution is an array of { name, label, fieldID, fieldType, value }. 5. You MUST pivot this array into TABLE COLUMNS — do NOT render it as rows. 6. → Each testRunUdfs[i].label = a column header in the unified table 7. → Each testRunUdfs[i].value = the cell value for that execution's row 8. → testRunUdfs[i].fieldType = INTERNAL METADATA — NEVER show this as a column 9. → testRunUdfs[i].fieldID = INTERNAL METADATA — NEVER show this as a column 10. 11. FORBIDDEN PATTERNS — NEVER do any of these: 12. ❌ Do NOT render a separate sub-table (UDF Label | Type | Value) per execution 13. ❌ Do NOT show 'Type' or 'fieldType' as a visible column 14. ❌ Do NOT group output by tcRunID with individual breakdowns beneath each 15. ❌ Do NOT show raw UDF field keys (e.g. 'TRString', '8260LUP') as headers — use 'label' 16. 17. REQUIRED OUTPUT — ONE unified table, all executions as rows: 18. | Test Suite Key | Test Suite Name | Release | Cycle | Platform | Executed Version | Execution Status | <UDF Label 1> | <UDF Label 2> | ... | 19. |----------------|-----------------|---------|-------|----------|------------------|------------------|---------------|---------------|-----| 20. | MAC-TS-42 | Login Suite | R1 | S1 | Chrome | v1 | Failed | varis | chrome, edge | ... | 21. 22. MANDATORY COLUMNS (always first, in this order): 23. 1. Test Suite Key → tsEntityKey (e.g. 'MAC-TS-42') 24. 2. Test Suite Name → tsName (test suite display name) 25. 3. Release → releaseName 26. 4. Cycle → cycleName 27. 5. Platform → platformName 28. 6. Executed Version → executedVersion 29. 7. Execution Status → runStatusName 30. 8. Tested By → executionCreatedByLoginAlias/testedBy when present 31. 9+. One column per UDF field — use testRunUdfs[i].label as header, testRunUdfs[i].value as cell. 32. 33. Null UDF values → show as '-'. If hasTcRunUdf is false, show columns 1-8 only. 34. ISSUE EXECUTION UDF SOURCE — CRITICAL: 35. Do NOT call 'Fetch Test Run UDF Values' for issue execution UDFs. 36. Do NOT create or use another issue-specific UDF fetch tool. 37. Use this tool's response directly: it calls /rest/execution/getExecutionsForIssue for execution rows, parses each row's udfjson for saved UDF values, and uses Test Run UDF metadata to include all configured UDF labels with null/empty values. 38. === END MANDATORY RESPONSE FORMAT === 39. 40. CRITICAL: linkedAssetId is REQUIRED - this is the numeric defect ID from QMetry (not entity key like VKT-IS-5) 41. HOW TO GET linkedAssetId: Call Fetch Defects or Issues tool → use data[].id from the response 42. AUTO-RESOLVE: If user provides an issue entity key (e.g. VKT-IS-5, MAC-IS-10), first call Fetch Defects or Issues with that entity key as filter, extract data[].id, then use it as linkedAssetId 43. AUTO-RESOLVE FILTER EXAMPLE: to resolve VKT-IS-5 → use filter '[{"type":"string","value":"VKT-IS-5","field":"entityKeyId"}]' in Fetch Defects or Issues tool 44. This tool supports QMetry-native issues only — do NOT use for Jira-integrated projects 45. API SOURCE: Execution rows and saved UDF values come from /rest/execution/getExecutionsForIssue. The udfjson field contains saved Test Run UDF values, e.g. Tested_By, execution_type, Country_mcp_udf, environments_udf. 46. METADATA SOURCE: This tool also calls Test Run UDF metadata once to get all available labels, fieldIDs, field types, list options (qmUDFList), and empty fields. Merge metadata fields with udfjson values by UDF name. 47. RESPONSE FIELDS: hasTcRunUdf=true means executions have UDF data; each execution includes a 'testRunUdfs' array with ALL project-defined UDF fields 48. ALL UDF FIELDS: ALL project-defined Test Run UDF fields are returned for every execution — including fields not yet set (value: null) 49. Each element in testRunUdfs: { name, label, fieldID, fieldType, value } — use fieldID when calling 'Bulk Update Test Run UDFs' 50. VALUE RESOLUTION: For LOOKUPLIST and MULTILOOKUPLIST fields, values are resolved from their internal uniqueLabel key to the human-readable display name using qmUDFList lookup options. Always display the resolved name, not the raw uniqueLabel. 51. EXAMPLE testRunUdfs: [{ "name": "TRString", "label": "TR String", "fieldID": 229241, "fieldType": "STRING", "value": "test" }, { "name": "lookup_browser", "label": "Lookup Browser MCP", "fieldID": 229433, "fieldType": "LOOKUPLIST", "value": "Chrome" }, { "name": "dateField", "label": "Date", "fieldID": 229255, "fieldType": "DATETIMEPICKER", "value": null }] 52. FILTER FIELDS: 53. - tcName (string): filter by test case name substring 54. - linkageLevel (string): 'Test Case' or 'Test Step' 55. - executedVersion (string): version number as string e.g. '1' 56. - runStatusName (list): e.g. ["failed","passed","in progress"] 57. - platformID (list): numeric platform IDs e.g. [100145]. Get from FETCH_PLATFORMS tool 58. - executionCreatedByLoginAlias (list): usernames/login aliases e.g. ["john.doe"] 59. - isTestSuiteArchived (list): [1] active only, [0] archived only, [1,0] both 60. FILTER FORMAT: JSON string array — '[{"type":"list","field":"runStatusName","value":["failed"]}]' 61. Multiple filter conditions are combined with AND logic 62. Use pagination (page, start, limit) for large result sets 63. Get platform IDs using the FETCH_PLATFORMS tool before filtering by platformID 64. Execution status names are case-sensitive — use lowercase: 'failed', 'passed', 'in progress', 'blocked', 'not run' 65. hasTcRunUdf: false → No Test Run UDFs configured; testRunUdfs will not appear; a 'testRunUdfNote' field explains this.

qmetry_fetch_issues_linked_to_test_caseA

Get issues that are linked (or not linked) to a specific test case in QMetry

Toolset: Issues

Parameters:

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

  • tcID (number) required: Test Case numeric ID. CRITICAL: the parameter name is 'tcID' — do NOT use 'testCaseId', 'testCaseID', 'tcId', or other variants. Accepts a string or number. This is the internal numeric identifier, not the entity key like 'MAC-TC-1684'. You can get this ID from test case search results or by using filters.

  • getLinked (boolean): True to get only those issues that are linked with this Test case Run, False to get those issues which are not linked with this Test case Run. Default value true (get linked issues). (default: true)

  • start (number): Start index for pagination - defaults to 0 (default: 0)

  • page (number): Page number to return (starts from 1) (default: 1)

  • limit (number): Number of records (default 10). (default: 10)

  • filter (string): Filter criteria as JSON string (default '[]') (default: "[]")

Output Description: JSON object with issues array containing issue details, priorities, status, and linkage information

Use Cases: 1. Get all issues linked to a specific test case for defect tracking 2. Find issues that are NOT linked to a test case (gap analysis) 3. Generate traceability reports between test cases and issues 4. Filter issues by type, priority, status, or owner 5. Monitor issue resolution progress for specific test cases 6. Audit issue-test case relationships for compliance 7. Filter issues by summary content or execution version 8. Get issue details for test execution planning 9. Track linkage level (Test Case vs Test Step level) 10. Quality assurance - ensure proper issue tracking

Examples:

  1. Get all issues linked to test case ID 4495658 (default behavior)

{
  "tcID": 4495658
}

Expected Output: List of issues linked to the test case with issue details, status, and metadata

  1. Get all issues linked to test case ID 4495658 (explicit)

{
  "tcID": 4495658,
  "getLinked": true
}

Expected Output: List of issues linked to the test case with issue details, status, and metadata

  1. Get issues NOT linked to test case (gap analysis)

{
  "tcID": 4495658,
  "getLinked": false
}

Expected Output: List of issues that are NOT linked to the test case

  1. Get linked issues with pagination

{
  "tcID": 4495658,
  "getLinked": true,
  "limit": 25,
  "page": 1
}

Expected Output: Paginated list of issues linked to the test case

  1. Filter linked issues by summary content (using default getLinked=true)

{
  "tcID": 4495658,
  "filter": "[{\"value\":\"login\",\"type\":\"string\",\"field\":\"summary\"}]"
}

Expected Output: Issues linked to test case that contain 'login' in their summary

  1. Filter linked issues by status and priority

{
  "tcID": 4495658,
  "getLinked": true,
  "filter": "[{\"value\":[1,2],\"type\":\"list\",\"field\":\"issueState\"},{\"value\":[1],\"type\":\"list\",\"field\":\"issuePriority\"}]"
}

Expected Output: High priority issues in Open or In Progress status

  1. Filter issues by execution version

{
  "tcID": 4495658,
  "getLinked": true,
  "filter": "[{\"value\":\"2\",\"type\":\"string\",\"field\":\"executedVersion\"}]"
}

Expected Output: Issues linked to version 2 of the test case execution

Hints: 1. CRITICAL: tcID parameter is REQUIRED - this is the Test Case numeric ID 2. getLinked parameter is OPTIONAL - defaults to true if not provided 3. HOW TO GET tcID: 4. 1. Call FETCH_TEST_CASES with filter on entityKeyId to resolve test case key to numeric ID 5. 2. From response, use data[index].tcID field 6. 3. Example: MAC-TC-1684 → tcID: 4495658 7. getLinked=true (default): Returns issues that ARE linked to the test case 8. getLinked=false: Returns issues that are NOT linked to the test case (useful for gap analysis) 9. If getLinked is not specified, it defaults to true (linked issues) 10. FILTER CAPABILITIES: Extensive filtering by issue properties 11. FILTER FIELDS: summary (string), executedVersion (string), linkageLevel (string), issueType (list), issuePriority (list), issueState (list), owner (list) 12. LINKAGE LEVEL: 'Test Case' for test case level links, 'Test Step' for step level links 13. ISSUE TYPE IDs: Typically 1=Bug, 2=Enhancement, 3=Task (verify with your QMetry instance) 14. ISSUE PRIORITY IDs: Typically 1=High, 2=Medium, 3=Low (verify with your QMetry instance) 15. ISSUE STATUS IDs: Typically 1=Open, 2=In Progress, 3=Resolved, 4=Closed (verify with your QMetry instance) 16. OWNER IDs: Use numeric user IDs from QMetry user management 17. Multiple filter conditions are combined with AND logic 18. Use pagination for large issue result sets (start, page, limit parameters) 19. This tool is essential for defect tracking and traceability audits 20. Helps establish relationships between test failures and reported issues 21. Critical for impact analysis when test cases change 22. Use for compliance reporting and quality metrics

qmetry_fetch_issue_detailsA

Fetch full detail data for a QMetry issue including UDF field values

Toolset: Issues

Parameters:

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

  • defectId (number) required: Issue DefectId (numeric ID) — use data[].id from Fetch Issues/Defects response. The field in the list API response is named 'id', not 'DefectId'.

Output Description: JSON object with data property containing full issue details including UDFTypeData map and all UDF field values

Use Cases: 1. Get UDF field values for a specific issue 2. Retrieve full issue metadata including custom fields 3. Inspect issue details before updating UDF values

Examples:

  1. Fetch details for issue with DefectId 1430676

{
  "defectId": 1430676
}

Expected Output: Full issue detail object with UDFTypeData map and all UDF field values including MUL1, TCR_STR, etc.

Hints: 1. CRITICAL: Use 'data[].id' from Fetch Issues/Defects response as 'defectId'. The list API response field is named 'id' — there is no 'DefectId' field in the list response. Do NOT guess or derive defectId from the entity key suffix. 2. AUTO-RESOLVE: If user provides an issue entity key (e.g. VKMCP2-IS-1, MAC-IS-10), first call Fetch Defects or Issues with filter '[{"type":"string","value":"VKMCP2-IS-1","field":"entityKeyId"}]', then use 'data[].id' as defectId. 3. UDF VALUES: Response includes a 'UDFTypeData' map with all UDF field values for the issue. 4. WORKFLOW: To fetch issue UDF values — (1) Fetch Issues with entityKey filter → get data[0].id, (2) in parallel Fetch UDF Layout entityType='IS' pageName='DETAIL' → get field labels/types, (3) call this tool with defectId=data[0].id → read UDFTypeData.

qmetry_import_automation_test_resultsA

Import/Publish automation test results from TestNG, JUnit, Cucumber, Robot, HPUFT, or QAF frameworks into QMetry

Toolset: Automation

Parameters:

  • file (string) required: Base64 encoded file content or file path. User must upload result file (.json, .xml, .zip up to 30 MB)

  • fileName (string) required: Original filename with extension (.json, .xml, or .zip)

  • entityType (enum) required: Format of result file: TESTNG, CUCUMBER, JUNIT, HPUFT, QAF, or ROBOT

  • automationHierarchy (enum): TestNG/JUnit hierarchy: 1=Test Case-Test Step, 2=Test Case only, 3=Test Suite-Test Case. Default: 1

  • testsuiteName (string): Custom test suite name. Ignored if automationHierarchy=3 for JUnit or =2 for ROBOT

  • testsuiteId (string): Reuse existing Test Suite by ID or Entity Key. Ignored if automationHierarchy=3 for JUnit or =2 for ROBOT

  • tsFolderPath (string): Test suite folder path. Creates folder if doesn't exist. Ignored if reusing test suite

  • tcFolderPath (string): Test case folder path. Creates folder if doesn't exist. Ignored if reusing test case

  • platformID (string): Platform ID or Platform Name. Default: 'No Platform'

  • projectID (string): Project ID, Project Key, or Project name. Overrides project in header

  • releaseID (string): Release ID or Release name. Requires projectID if provided

  • cycleID (string): Cycle ID or Cycle name. Requires releaseID and projectID if provided

  • buildID (string): Build ID or Build name

  • testcase_fields (string): JSON string with test case system fields and UDFs. Ignored if reusing test case. Example: {"component":["com1"], "priority":"High"}

  • testsuite_fields (string): JSON string with test suite system fields and UDFs. Ignored if reusing test suite. Example: {"testSuiteState":"Open", "testsuiteOwner":"user"}

  • skipWarning (enum): 0=Fail if summary >255 chars, 1=Truncate summary to 255 chars. Default: 0

  • is_matching_required (string): True=Create new TC if summary/steps don't match, False=Reuse linked TC. Default: True

Use Cases: 1. 1. Import TestNG XML results after CI/CD pipeline execution 2. 2. Publish JUnit test results to QMetry for tracking and reporting 3. 3. Upload Cucumber JSON results with custom test suite organization 4. 4. Import Robot Framework results with specific release/cycle mapping 5. 5. Link automation results to existing test suites for version tracking 6. 6. Create new test suites with custom names and folder structures 7. 7. Map test results to specific platforms (browsers, OS, devices) 8. 8. Associate imported results with releases, cycles, and builds 9. 9. Bulk import multiple test results from ZIP archive 10. 10. Configure test case/suite fields and user-defined fields during import

Examples:

  1. Basic TestNG result import

{
  "file": "<base64_encoded_testng_xml_content>",
  "fileName": "testng-results.xml",
  "entityType": "TESTNG"
}

Expected Output: Auto-generated test suite created with UTC timestamp, test cases auto-linked, execution results updated, 'No Platform' linked

  1. JUnit results with custom test suite name

{
  "file": "<base64_encoded_junit_xml_content>",
  "fileName": "junit-results.xml",
  "entityType": "JUNIT",
  "testsuiteName": "Regression Suite - Build 123",
  "automationHierarchy": "1"
}

Expected Output: Test suite 'Regression Suite - Build 123' created with Test Case-Test Step hierarchy

  1. Cucumber results with platform and release mapping

{
  "file": "<base64_encoded_cucumber_json_content>",
  "fileName": "cucumber-results.json",
  "entityType": "CUCUMBER",
  "platformID": "Chrome 120",
  "releaseID": "Release 2.0",
  "cycleID": "Sprint 15",
  "testsuiteName": "API Automation Tests"
}

Expected Output: Test suite created, linked to Chrome platform, Release 2.0, and Sprint 15 cycle

  1. Reuse existing test suite

{
  "file": "<base64_encoded_testng_xml_content>",
  "fileName": "testng-regression.xml",
  "entityType": "TESTNG",
  "testsuiteId": "PROJ-TS-42"
}

Expected Output: Test cases auto-linked to existing test suite PROJ-TS-42, execution results updated

  1. Import with folder organization

{
  "file": "<base64_encoded_junit_xml_content>",
  "fileName": "junit-results.xml",
  "entityType": "JUNIT",
  "tsFolderPath": "/Automation/Regression",
  "tcFolderPath": "/Automation/API Tests",
  "testsuiteName": "API Regression Suite"
}

Expected Output: Test suite created in '/Automation/Regression' folder, test cases in '/Automation/API Tests' folder

  1. Import with test case custom fields

{
  "file": "<base64_encoded_testng_xml_content>",
  "fileName": "testng-results.xml",
  "entityType": "TESTNG",
  "testcase_fields": "{\"priority\":\"High\",\"testCaseType\":\"Automated\",\"component\":[\"API\",\"Backend\"],\"testcaseOwner\":\"john.doe\",\"estimatedTime\":\"2h:30m:0s\"}"
}

Expected Output: Test cases created with High priority, Automated type, API and Backend components

  1. Import ZIP file with multiple results

{
  "file": "<base64_encoded_zip_content>",
  "fileName": "test-results.zip",
  "entityType": "JUNIT",
  "testsuiteName": "Full Regression Suite",
  "skipWarning": "1"
}

Expected Output: Multiple test results imported from ZIP, summaries truncated if >255 chars

  1. Import with custom hierarchy for JUnit

{
  "file": "<base64_encoded_junit_xml_content>",
  "fileName": "junit-results.xml",
  "entityType": "JUNIT",
  "automationHierarchy": "3",
  "projectID": "PROJ"
}

Expected Output: Multiple test suites created per tag, test cases per tag

  1. Import with build and platform mapping

{
  "file": "<base64_encoded_testng_xml_content>",
  "fileName": "testng-results.xml",
  "entityType": "TESTNG",
  "buildID": "Build-1.2.3",
  "platformID": "Safari 17",
  "releaseID": "Release 1.2",
  "cycleID": "QA Cycle"
}

Expected Output: Results linked to Build 1.2.3, Safari 17 platform, Release 1.2, QA Cycle

  1. Import with test suite and test case fields

{
  "file": "<base64_encoded_cucumber_json_content>",
  "fileName": "cucumber-results.json",
  "entityType": "CUCUMBER",
  "testsuite_fields": "{\"testSuiteState\":\"In Progress\",\"testsuiteOwner\":\"jane.smith\",\"description\":\"Sprint 15 automation results\"}",
  "testcase_fields": "{\"priority\":\"Medium\",\"component\":[\"UI\",\"Frontend\"],\"userDefinedFields\":{\"reviewedDate\":\"11-20-2024\",\"environment\":\"Staging\"}}"
}

Expected Output: Test suite and test cases created with custom fields and UDFs

Hints: 1. 1. CRITICAL: User MUST upload a valid result file before calling this tool 2. 2. USER FILE UPLOAD REQUIRED: Ask user to provide file in chat - system will convert to base64 3. 3. FILE REQUIREMENTS: 4. - Supported extensions: .json, .xml, .zip 5. - Maximum size: 30 MB 6. - ZIP files must contain files matching the specified entityType format 7. 4. REQUIRED PARAMETERS: 8. - file: Base64 encoded content or file path 9. - fileName: Original filename with extension 10. - entityType: TESTNG, CUCUMBER, JUNIT, HPUFT, QAF, or ROBOT 11. 5. ENTITY TYPES: 12. - TESTNG: TestNG XML format 13. - JUNIT: JUnit XML format 14. - CUCUMBER: Cucumber JSON format 15. - ROBOT: Robot Framework XML format 16. - HPUFT: HP UFT format 17. - QAF: QAF format 18. 6. AUTOMATION HIERARCHY (TestNG/JUnit only): 19. - TestNG: 20. * 1 (default): = Test Case, = Test Step 21. * 2: = Test Case only 22. * 3: under = Test Case, = Test Step 23. - JUnit: 24. * 1 (default): = Test Case, = Test Step 25. * 2: = Test Case only 26. * 3: = Test Suite, = Test Case (creates multiple test suites) 27. 7. TEST SUITE OPTIONS: 28. - testsuiteName: Custom name for new test suite 29. - testsuiteId: Reuse existing test suite by ID or Entity Key (e.g., 'PROJ-TS-42') 30. - tsFolderPath: Create test suite in specific folder (e.g., '/Automation/Regression') 31. - Note: testsuiteName/testsuiteId ignored if automationHierarchy=3 for JUnit or =2 for ROBOT 32. 8. TEST CASE OPTIONS: 33. - tcFolderPath: Create test cases in specific folder (e.g., '/Automation/API Tests') 34. - Folders created automatically if they don't exist 35. 9. LINKING OPTIONS: 36. - platformID: Platform ID or name (e.g., 'Chrome 120', 'Safari 17') 37. - projectID: Project ID, key, or name (overrides header project) 38. - releaseID: Release ID or name (requires projectID) 39. - cycleID: Cycle ID or name (requires releaseID and projectID) 40. - buildID: Build ID or name 41. 10. GET IDs FROM OTHER TOOLS: 42. - Platform IDs: Use 'Platform/List' API (FETCH_PLATFORMS tool) 43. - Project IDs: Use 'Project/List' API (FETCH_PROJECTS tool) 44. - Release IDs: Use 'Release/List' API (FETCH_RELEASES_CYCLES tool) 45. - Cycle IDs: Use 'Cycle/List' API (FETCH_RELEASES_CYCLES tool) 46. - Build IDs: Use 'Build/List' API (FETCH_BUILDS tool) 47. - Test Suite IDs: Use 'Testsuite/Fetch' API (FETCH_TEST_SUITES tool) 48. 11. CUSTOM FIELDS (testcase_fields): 49. - JSON string with system fields and UDFs 50. - System fields: component, priority, testCaseState, testCaseType, testcaseOwner, estimatedTime, description 51. - Example: {"component":["API"], "priority":"High", "testcaseOwner":"user"} 52. - Ignored if reusing existing test case 53. 12. CUSTOM FIELDS (testsuite_fields): 54. - JSON string with system fields and UDFs 55. - System fields: testSuiteState, testsuiteOwner, description 56. - Example: {"testSuiteState":"Open", "testsuiteOwner":"user"} 57. - Ignored if reusing existing test suite 58. 13. USER DEFINED FIELDS (UDFs): 59. - Include in testcase_fields or testsuite_fields under 'userDefinedFields' key 60. - Example: {"userDefinedFields": {"reviewedDate": "11-20-2024", "environment": "Staging"}} 61. - UDF types: STRING, LARGETEXT, LOOKUPLIST, MULTILOOKUPLIST, DATEPICKER, NUMBER 62. - See tool metadata for UDF validation rules and auto-create behavior 63. 14. SKIP WARNING OPTIONS: 64. - skipWarning='0' (default): Fail import if test case summary >255 characters 65. - skipWarning='1': Truncate summary to 255 characters and continue import 66. 15. MATCHING BEHAVIOR: 67. - is_matching_required='true' (default): Create new TC/version if summary/steps don't match 68. - is_matching_required='false': Reuse existing TC version if entity key or summary matches 69. 16. IMPORT BEHAVIOR EXAMPLES: 70. - Only file + entityType → Auto-generated test suite, 'No Platform', test cases auto-linked 71. - file + entityType + platformID → Auto-generated test suite with specified platform 72. - file + entityType + testsuiteId → Results updated in existing test suite 73. - file + entityType + platformID + testsuiteId → Results updated in existing test suite with platform 74. 17. FOLDER CREATION: 75. - If tsFolderPath or tcFolderPath specified and doesn't exist, it will be created automatically 76. - Use forward slashes for folder paths (e.g., '/Parent/Child') 77. 18. ESTIMATED TIME FORMAT: 78. - Format: '2h:30m:15s' or '4h' or '7m' or '0s' 79. - Range: 0 to 99999 minutes 80. 19. OWNER FIELDS: 81. - Use userAlias (username) not display name 82. - testcaseOwner: User must have Test Case module rights 83. - testsuiteOwner: User must have Test Suite module rights 84. - Owner not set if user not found or lacks permissions 85. 20. LOOKUPLIST/MULTILOOKUPLIST BEHAVIOR: 86. - If value doesn't exist and auto-create is ON: Value added to list 87. - If value doesn't exist and auto-create is OFF: Field blank or default value 88. - MULTILOOKUPLIST: New values added, old values persist 89. 21. MANDATORY FIELD VALIDATION: 90. - If mandatory system/UDF field missing: 91. * Auto-create OFF + value doesn't exist = Import FAIL 92. * Auto-create ON + value doesn't exist = Import SUCCESS (value created) 93. * Value exists = Import SUCCESS 94. 22. ERROR HANDLING: 95. - Check file size before upload (must be ≤30 MB) 96. - Validate file extension matches entityType 97. - Ensure required dependencies: cycleID requires releaseID and projectID 98. - If import fails, check QMetry UI for detailed error messages 99. 23. WORKFLOW: 100. Step 1: Ask user to upload result file in chat 101. Step 2: System converts file to base64 102. Step 3: Collect entityType and optional parameters 103. Step 4: Call this tool with file data and configuration 104. Step 5: QMetry processes file and creates/updates test artifacts 105. Step 6: Return import results with test suite and execution details 106. 24. USER INTERACTION REQUIRED: 107. - ALWAYS ask user to upload file before calling this tool 108. - Display supported formats: .json, .xml, .zip (up to 30 MB) 109. - Ask for entityType (framework used) 110. - Ask for optional parameters based on user's needs 111. 25. PERFORMANCE TIPS: 112. - For large imports, consider using ZIP files 113. - Reusing existing test suites is faster than creating new ones 114. - Use automationHierarchy wisely to control test case/suite structure

qmetry_fetch_automation_statusA

Fetches the status of an automation import job by request ID.

Toolset: Automation

Parameters:

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

  • requestID (number) required: Numeric request ID from import automation response. CRITICAL: parameter name is 'requestID' — do NOT use 'requestId', 'jobId', or other variants. Accepts a string or number.

Use Cases: 1. 1. Check if an automation import job is completed or still in progress. 2. 2. Retrieve status, progress, and details for a specific automation import request. 3. 3. Monitor automation result processing for CI/CD integrations.

Examples:

  1. Fetch status for request ID 12345

{
  "requestID": 12345
}

Expected Output: Status, progress, and details of the automation import job for request ID 12345.

qmetry_fetch_udf_layoutA

Fetch UDF (User Defined Field) definitions for Test Case, Test Suite, Issue, or Requirement entities. Returns field names, types, fieldIDs, and lookup option IDs. Call this BEFORE creating or updating an entity with UDF values.

Toolset: UDF

Parameters:

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

  • entityType (enum) required: Entity type to fetch UDF field definitions for. 'TC' = Test Case (also returns step UDFs in stepFields), 'TS' = Test Suite, 'IS' = Issue, 'RQ' = Requirement.

  • pageName (enum): 'ADD' returns fields for create operations (no fieldID needed). 'DETAIL' returns fields for update operations and includes fieldID (projectUserFieldID) required by the UDF update wrapper. Call with 'DETAIL' before updating an entity's UDF values. (default: "ADD")

Output Description: JSON with 'entityType', 'pageName'. All data is scoped by entityType key in the QMetry newlayout response: TC uses qmUDF.TC / qmSDF.TC / qmDefaultValue.TC; TS uses qmUDF.TS / qmSDF.TS / qmDefaultValue.TS; IS uses qmUDF.IS / qmSDF.IS / qmDefaultValue.IS. 'fields' array — UDF fields (name, label, fieldTypeName, fieldID, isMandatory, optional listName); isMandatory=true when allowBlank=false in QMetry. 'systemFields' array — system fields like Summary/Priority/Status (name, label, fieldTypeName, isMandatory); isMandatory=true when allowBlank=false. 'defaultValues' object — { fieldName: defaultValueId } pre-configured defaults (auto-fill when user omits the field; no need to ask user). TC-only: 'stepFields' — step UDF fields; 'stepSystemFields' — step system fields (mandatory via tcSteps[].mandatory=true); 'stepDefaultValues' — { fieldName: defaultValueId } from qmTCSDefaultValue.TCS. 'listOptions' map (listName → [{id, name, isArchived}]). '_note' with workflow instructions.

Use Cases: 1. Discover UDF fields before creating a Test Case with custom fields 2. Get fieldIDs before updating a Test Suite's UDF values 3. Find valid dropdown option IDs for a LOOKUPLIST UDF before setting a value 4. Identify mandatory UDF fields before creating an Issue 5. List all step-level UDF fields available for Test Case steps 6. Get CASCADINGLIST parent option IDs before fetching child values 7. Discover UDF fields before creating or updating a Requirement

Examples:

  1. Get UDF field definitions for creating a Test Case

{
  "entityType": "TC",
  "pageName": "ADD"
}

Expected Output: { fields: [{ name: 'custom_text', label: 'Custom Text', fieldTypeName: 'STRING', fieldID: null, isMandatory: false }, ...], stepFields: [{ name: 'step_field', label: 'Step Field', fieldTypeName: 'STRING', ... }], listOptions: { myListKey: [{ id: 101, name: 'Option A' }] } }

  1. Get UDF fieldIDs for updating a Test Suite

{
  "entityType": "TS",
  "pageName": "DETAIL"
}

Expected Output: { fields: [{ name: 'dropdown_field', label: 'Dropdown', fieldTypeName: 'LOOKUPLIST', fieldID: 2002, isMandatory: false, listName: 'myListKey' }, ...], listOptions: { myListKey: [{ id: 101, name: 'Option A' }, { id: 102, name: 'Option B' }] } }

  1. Get UDF field definitions for creating an Issue

{
  "entityType": "IS",
  "pageName": "ADD"
}

Expected Output: { fields: [{ name: 'TCR_STR', label: 'String Field', fieldTypeName: 'STRING', fieldID: null }, ...], listOptions: {} }

  1. Get UDF field definitions for creating a Requirement

{
  "entityType": "RQ",
  "pageName": "ADD"
}

Expected Output: { fields: [{ name: 'rq_custom_field', label: 'Custom Field', fieldTypeName: 'STRING', fieldID: null, isMandatory: false }, ...], listOptions: {} }

  1. Get UDF fieldIDs for updating a Requirement

{
  "entityType": "RQ",
  "pageName": "DETAIL"
}

Expected Output: { fields: [{ name: 'rq_dropdown_field', label: 'Dropdown', fieldTypeName: 'LOOKUPLIST', fieldID: 3002, isMandatory: false, listName: 'myListKey' }, ...], listOptions: { myListKey: [{ id: 101, name: 'Option A' }] } }

Hints: 1. CALL THIS TOOL FIRST: Before creating or updating TC/TS/IS/RQ entities with UDF values, always call this tool to discover field names, types, and valid option IDs. 2. pageName='ADD': Use before CREATE operations — returns field names + types + list options. fieldID is null (not needed on create). 3. pageName='DETAIL': Use before UPDATE operations — returns fieldID (projectUserFieldID) required in the UDF wrapper. 4. WORKFLOW FOR CREATE with UDFs: 5. 1. Call Fetch UDF Layout with entityType + pageName='ADD' 6. 2. For LOOKUPLIST/MULTILOOKUPLIST: pick IDs from listOptions[field.listName] 7. 3. For CASCADINGLIST: pick parent ID from listOptions[field.listName], then call Fetch Cascade Child Values to get child IDs 8. 4. Pass UDF values via 'udfFields' param on the create tool: { fieldName: value } 9. 5. Example: { udfFields: { custom_text: 'value', lookup_field: 101, multi_field: [101, 102], cascade_field: { parent: 201, child: 202 } } } 10. WORKFLOW FOR UPDATE with UDFs: 11. 1. Call Fetch UDF Layout with entityType + pageName='DETAIL' to get fieldIDs 12. 2. For LOOKUPLIST/MULTILOOKUPLIST: pick IDs from listOptions[field.listName] 13. 3. For CASCADINGLIST: pick parent ID, then call Fetch Cascade Child Values for child IDs 14. 4. Pass both 'udfFields' (flat root keys) AND 'UDF' wrapper (with fieldID) on the update tool: 15. udfFields: { custom_text: 'new value', lookup_field: 102 } 16. UDF: { custom_text: { fieldID: 1001, value: 'new value' }, lookup_field: { fieldID: 1002, value: 102 } } 17. 5. For LOOKUPLIST/MULTILOOKUPLIST in update: also set flat alias key — e.g. lookup_fieldAlias: 'Option B' 18. stepFields (TC only): Step-level UDF definitions are separate from entity-level UDF fields. They appear in stepFields (not fields). Use them when setting UDF values on test case steps. 19. listOptions: A map of listName → [{id, name, isArchived}]. Use 'id' as the UDF value for LOOKUPLIST/MULTILOOKUPLIST. Only include non-archived options unless user explicitly wants archived items. 20. EMPTY listOptions: If listOptions[field.listName] is missing or empty for a lookup field, the newlayout endpoint did not return those options. This tool automatically attempts a fallback to the UDF metadata endpoint to populate them. If listOptions is STILL empty after this tool returns, call 'Fetch Test Run UDF Metadata' with the same entityType — its 'lookupOptions' map uses the same listName keys and contains the full option list. 21. isMandatory: If true, this field MUST be included. Source: allowBlank=false in QMetry API (for UDF/system fields) or mandatory=true (for step system fields). 22. DATETIMEPICKER fields: date value MUST match the project's active date format. 23. Get format: project info → dateTimeFormatID → find in dateTimeFormatNew where id matches → read unique_value. 24. unique_value pattern: yyyy=4-digit year, MM=2-digit month (01-12), dd=2-digit day, MMM=3-letter month (Jan/Feb/...). 25. Re-format user date to match before sending. NEVER guess the format — always check project info first. 26. defaultValues: Pre-configured defaults from QMetry. If a mandatory field has a defaultValues entry, use that value automatically without asking the user. Only ask user for mandatory fields with NO default. 27. stepDefaultValues: Same as defaultValues but for test case step fields. 28. PRE-CREATE MANDATORY CHECK WORKFLOW (CRITICAL — do this before every create): 29. 1. Call Fetch UDF Layout with pageName='ADD' for the entity type 30. 2. Check systemFields: for each field where isMandatory=true, check if defaultValues[field.name] exists 31. - Has default → use defaultValues[field.name] as the value, no need to ask user 32. - No default → MUST ask user to provide value before creating 33. 3. Check fields (UDF): same logic — isMandatory=true + no defaultValues entry → ask user 34. 4. For TC steps: check stepSystemFields and stepFields isMandatory, use stepDefaultValues for auto-fill 35. 5. Only after all mandatory fields are resolved (via default or user input) → proceed with create 36. This tool is scoped per project — list options, fieldIDs, and defaults are all project-specific.

qmetry_bulk_update_test_run_udfsA

Bulk update User Defined Field (UDF) values for one or more Test Case Runs in a test execution. Runs asynchronously in the background.

Toolset: UDF

Parameters:

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

  • tcRunIDs (array) required: Array of Test Case Run IDs to update UDF values for. To get tcRunIDs — Call 'Fetch Test Case Runs by Test Suite Run' tool. From the response, get value of data[].tcRunID. Example: [41572006, 41572009, 41572013]

  • UDF (record<string, object>) required: Object mapping UDF field names to their new values. Each key is the UDF field name (e.g. 'test_env', 'priority_field'). Each value is an object with fieldID and value (and optionally multiSelectAction for multi-select fields). All UDF fields are optional — include only the fields you want to update.

Output Description: JSON object with success status, code 'CO.BULK_TC_EXECUTION_UDF_UPDATE_STARTED', and message confirming the background job was queued.

Use Cases: 1. Bulk update a string UDF (e.g. build version, environment name) for multiple test runs 2. Set a date UDF field (e.g. execution date) across multiple test case runs 3. Update a numeric UDF field (e.g. story points, priority score) in bulk 4. Set a single-select lookup UDF to a new value for multiple runs 5. Append new values to a multi-select UDF field across multiple test runs 6. Replace all existing selections in a multi-select UDF with new values 7. Update a cascading list UDF (parent + child) for multiple test runs 8. Update multiple UDF fields of different types in a single bulk operation 9. Reset a UDF field value for all runs in a test suite execution 10. Sync automated test result metadata (environment, build, platform) into UDF fields after execution

Examples:

  1. Bulk update a STRING UDF for multiple test runs

{
  "tcRunIDs": [
    41572006,
    41572009,
    41572013
  ],
  "UDF": {
    "8190_String": {
      "fieldID": 229241,
      "value": "regression-v2.1"
    }
  }
}

Expected Output: Bulk updates to execution UDF values will run in the background. Go to 'Scheduled Task' to track the process.

  1. Bulk update a DATE UDF field for multiple test runs (MM-DD-YYYY format)

{
  "tcRunIDs": [
    41572006,
    41572009
  ],
  "UDF": {
    "KN_DATE": {
      "fieldID": 229255,
      "value": "06-20-2026"
    }
  }
}

Expected Output: Bulk updates to execution UDF values will run in the background.

  1. Bulk update a NUMBER UDF field for multiple test runs

{
  "tcRunIDs": [
    41572006,
    41572009,
    41572013,
    41572015
  ],
  "UDF": {
    "defaultNum": {
      "fieldID": 229003,
      "value": 5
    }
  }
}

Expected Output: Bulk updates to execution UDF values will run in the background.

  1. Bulk update a single-select LOOKUPLIST UDF for multiple test runs

{
  "tcRunIDs": [
    41572006,
    41572009
  ],
  "UDF": {
    "8260LUP": {
      "fieldID": 228563,
      "value": 5108697
    }
  }
}

Expected Output: Bulk updates to execution UDF values will run in the background.

  1. Bulk update a MULTILOOKUPLIST UDF — APPEND new values to existing selections

{
  "tcRunIDs": [
    41572006,
    41572009,
    41572013
  ],
  "UDF": {
    "m_selections": {
      "fieldID": 229223,
      "value": [
        5158524,
        5158525
      ],
      "multiSelectAction": "append"
    }
  }
}

Expected Output: Bulk updates to execution UDF values will run in the background.

  1. Bulk update a MULTILOOKUPLIST UDF — REPLACE existing selections with new values

{
  "tcRunIDs": [
    41572006,
    41572009
  ],
  "UDF": {
    "mullt_env": {
      "fieldID": 229425,
      "value": [
        5108697,
        5108698
      ],
      "multiSelectAction": "replace"
    }
  }
}

Expected Output: Bulk updates to execution UDF values will run in the background.

  1. Bulk update a CASCADINGLIST UDF (parent + child) for multiple test runs

{
  "tcRunIDs": [
    41572006,
    41572009,
    41572013
  ],
  "UDF": {
    "cascade_mcp": {
      "fieldID": 229426,
      "value": {
        "parent": 5126498,
        "child": 5126499
      }
    }
  }
}

Expected Output: Bulk updates to execution UDF values will run in the background.

  1. Bulk update multiple UDF fields of different types in a single operation

{
  "tcRunIDs": [
    41572006,
    41572009,
    41572013,
    41572015,
    41579875
  ],
  "UDF": {
    "8190_String": {
      "fieldID": 229241,
      "value": "smoke-test"
    },
    "KN_DATE": {
      "fieldID": 229255,
      "value": "06-20-2026"
    },
    "defaultNum": {
      "fieldID": 229003,
      "value": 3
    },
    "8260LUP": {
      "fieldID": 228563,
      "value": 5108697
    },
    "m_selections": {
      "fieldID": 229223,
      "value": [
        5158524,
        5158525
      ],
      "multiSelectAction": "append"
    },
    "mullt_env": {
      "fieldID": 229425,
      "value": [
        5108697,
        5108698
      ],
      "multiSelectAction": "replace"
    },
    "cascade_mcp": {
      "fieldID": 229426,
      "value": {
        "parent": 5126498,
        "child": 5126499
      }
    }
  }
}

Expected Output: Bulk updates to execution UDF values will run in the background. Go to 'Scheduled Task' to track the process.

Hints: 1. REQUIRED: 'tcRunIDs' must be a non-empty array of numeric Test Case Run IDs. Get IDs from 'Fetch Test Case Runs by Test Suite Run' tool → data[].tcRunID. 2. REQUIRED: 'UDF' must be an object with at least one field entry. Each key is the UDF field name; each value has 'fieldID' and 'value'. 3. VALUE FORMATS by field type: STRING: plain string, e.g. 'regression-build' NUMBER: number, e.g. 3 DATETIMEPICKER: date string in MM-DD-YYYY format, e.g. '06-20-2026' LOOKUPLIST (single select): numeric item ID, e.g. 5108697 MULTILOOKUPLIST (multi-select): array of item IDs, e.g. [5158524, 5158525] CASCADINGLIST: object with parent and child keys, e.g. {parent: 5126498, child: 5126499}. To get valid child IDs for a CASCADINGLIST field — first call 'Fetch Test Run UDF Metadata' to get the parent item IDs from lookupOptions, then call 'Fetch Cascade Child Values' with a parent item ID to get the available child IDs, then use {parent: , child: } as the value here. 4. MULTILOOKUPLIST — multiSelectAction rules: 'append' (default): new values are ADDED to existing selections. Use when user says 'add', 'include', 'append'. 'replace': existing selections are CLEARED and replaced with only the new values. Use when user says 'replace', 'set to', 'overwrite', 'change to'. If user does not specify, ALWAYS default to 'append'. Never assume 'replace'. 5. MULTILOOKUPLIST — apply multiSelectAction per field individually. Different multi-select fields in the same request can have different multiSelectAction values. 6. DATE FORMAT: Always use MM-DD-YYYY format for DATETIMEPICKER fields (e.g. '06-20-2026', not '2026-06-20'). Convert from any user-supplied date format before calling the tool. 7. ASYNC OPERATION: This API runs in the background. The success response means the job was queued, not that it completed. Tell the user to check 'Scheduled Task' in QMetry UI to track completion. 8. CRITICAL — FIELD IDs: The 'fieldID' for each UDF entry MUST be the exact numeric ID from QMetry's UDF definition — do NOT guess, infer, or fabricate fieldIDs. If the user has not provided a fieldID, ask the user to supply it or look it up in QMetry admin settings before calling this tool. Using a wrong fieldID will silently fail or update the wrong field. 9. CRITICAL — WORKFLOW: When user asks to bulk-update a UDF across all executions of a test suite run (e.g. tsRunID 731600), ALWAYS call 'Fetch Test Case Runs by Test Suite Run' first with that tsRunID to collect ALL tcRunIDs from the response (data[].tcRunID), THEN call this tool. Never skip the fetch step or hard-code tcRunIDs. 10. ALL UDF FIELDS ARE OPTIONAL: Only include the UDF fields the user wants to update. Do not include fields with no change. 11. tcRunIDs vs entityIDs: This tool uses 'tcRunIDs' (array of numbers). Do NOT confuse with 'Bulk Update Test Case Execution Status' which uses 'entityIDs' (comma-separated string).

qmetry_fetch_test_run_udf_metadataA

Fetch the metadata (field definitions) for all Test Run UDF (User Defined Fields) configured in this QMetry project. Returns each field's name, display label, type, and numeric fieldID (projectUserFieldID) required for bulk updates.

Toolset: UDF

Parameters:

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

Output Description: JSON object with 'fields' array (each item has fieldID, name, label, fieldType, allowBlank, and optional listName/listMasterID) and 'lookupOptions' map for list-based fields. If lookupOptions is empty for a list field, options could not be fetched automatically.

Use Cases: 1. Get the fieldID for 'planned_execution_date' before bulk updating it 2. List all available Test Run UDF fields and their types in the project 3. Find the lookup list item IDs for a LOOKUPLIST or MULTILOOKUPLIST Test Run UDF 4. Discover UDF field names and IDs when user says 'what Test Run UDF fields are available'

Examples:

  1. List all Test Run UDF fields in the project

{}

Expected Output: Array of fields with fieldID, name, label, fieldType, and lookupOptions for list-based fields.

Hints: 1. ALWAYS call this tool before 'Bulk Update Test Run UDFs' when the user has not explicitly provided a numeric fieldID. The 'fieldID' in the bulk update corresponds to 'projectUserFieldID' in this response. 2. This tool is the authoritative source of fieldIDs for all Test Run UDF fields — do NOT guess or hard-code fieldIDs. 3. For LOOKUPLIST and MULTILOOKUPLIST fields, the response 'lookupOptions' contains items with 'id', 'name' (display label), and 'uniqueLabel' (internal key stored in executions). When execution UDF values are returned by Fetch Issue Executions or Fetch Test Run UDF Values, LOOKUPLIST/MULTILOOKUPLIST values are already resolved from uniqueLabel → name. For bulk updates, use the item 'id' as the value. 4. DATE fields use MM-DD-YYYY format (e.g. '06-23-2026') when setting values via Bulk Update Test Run UDFs. 5. EMPTY lookupOptions: If 'lookupOptions' is empty or missing a list key for a LOOKUPLIST/MULTILOOKUPLIST field, the API did not return options for that field. In this case the user must provide the option name manually or check the QMetry UI for available option IDs. Do NOT proceed with a guess — ask the user for the option ID or name.

qmetry_fetch_test_run_udf_valuesA

Fetch the Test Run UDF (User Defined Field) values for all test case runs in a given test suite run. Returns each run's UDF values enriched with field label and type information from metadata. Use this tool for test suite run UDF values (sourceContext='testSuiteRun'). Do NOT use this tool for test case executions — 'Fetch Test Case Executions' already calls metadata internally and returns 'testRunUdfs' in every execution row.

Toolset: UDF

Parameters:

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

  • tsrunID (string): Test Suite Run ID. CRITICAL: the parameter name is 'tsrunID' — do NOT use 'testSuiteRunId', 'tsRunID', or any other variant. Accepts a string or number (e.g. 731600 or '731600' — both are valid). Get this from 'Fetch Executions by Test Suite' → use data[].tsRunID from the response. Required when sourceRows is not provided.

  • viewId (number): View ID for the test execution list (latestViews.TE.viewId from project info). Auto-resolved from project info when omitted. Required when sourceRows is not provided.

  • sourceContext (enum): Which parent tool produced sourceRows. Use 'testSuiteRun' for Fetch Test Case Runs by Test Suite Run. Do NOT use this tool for Fetch Test Case Executions — that tool calls metadata internally and returns testRunUdfs on every execution row; use that data directly. Do NOT use this tool for Fetch Issue Executions; that tool already reads udfjson and enriches it with metadata. (default: "testSuiteRun")

  • sourceRows (array): Optional rows already returned by Fetch Test Case Runs by Test Suite Run. The UDF tool will reuse these rows, enrich/pivot UDF values, and preserve identification fields instead of making the same execution-list API call again. Do NOT pass Fetch Test Case Executions rows here — those rows already have testRunUdfs enriched. Do not pass issue execution rows here; use Fetch Issue Executions output directly for issue UDFs.

  • startIndex (number): Zero-based start index for pagination (default: 0). (default: 0)

  • size (number): Number of test case runs to return per page (default: 50). (default: 50)

Output Description: JSON with hasTcRunUdf boolean, sourceContext, total count, defaultColumns, udfColumns, unifiedTableRows, runs array, and availableUdfFields array describing all UDF fields in the project. Render unifiedTableRows directly as the final table: default identification fields first, then one column per UDF label.

Use Cases: 1. Show me the UDF values for all runs in test suite run 731600 2. What is the planned execution date set on each run in this test cycle? 3. List the Test Run UDF values for test suite run 87039 4. Fetch test run UDFs of executions for tsRunID 731600

Examples:

  1. Fetch UDF values for all runs in test suite run 731600

{
  "tsrunID": "731600",
  "sourceContext": "testSuiteRun"
}

Expected Output: Present as ONE unified table — never as a separate type+value breakdown. Example: | Test Case Key | Test Case Summary | Executed Version | Execution Status | Tested By | Environments UDF | Execution Type | Country | | MAC-TC-5 | Login - valid credential | 1 | Passed | varis | chrome, edge, safari | Functional | India > i3 | | MAC-TC-6 | Login - invalid password | 2 | Failed | john | firefox | Regression | - | Columns: Test Case Key (entityKey) | Test Case Summary (summary) | Executed Version (latestVersion) | Execution Status (runStatus) | Tested By | then one column per UDF label. Use the UDF 'label' as column header. Show null UDF values as '-'.

Hints: 1. DEFAULT DISPLAY CONTRACT: Always render 'unifiedTableRows' as ONE table. Do not render UDFs as Label | Type | Value rows. 2. When sourceContext='testSuiteRun', mandatory columns are: Test Case Key | Test Case Summary | Executed Version | Execution Status | Tested By | then one column per UDF label. 3. PARENT-TO-UDF WORKFLOW: If Fetch Test Case Runs by Test Suite Run was already called, pass parentResponse.data as sourceRows with sourceContext='testSuiteRun'. This preserves identification fields and avoids repeating the same API call. 4. For prompts like 'Fetch test case runs of VKMCP-TS-1 and its Test Run UDFs': call Fetch Test Case Runs by Test Suite Run, then call this tool with sourceContext='testSuiteRun' and sourceRows=. 5. For prompts like 'Fetch Test Case Executions and show Test Run UDFs': call Fetch Test Case Executions ONLY — that tool already calls metadata internally and returns testRunUdfs on every execution row. Do NOT call this tool for test case executions. 6. For prompts like 'Fetch Issue Executions and Test Run UDFs': call Fetch Issue Executions only. Do not call this tool, because issue UDF values come from /rest/execution/getExecutionsForIssue udfjson and are already enriched by the issue tool with metadata. 7. If no parent rows are available, use 'tsrunID' from the 'Fetch Executions by Test Suite' tool (data[].tsRunID field). 8. 'viewId' is auto-resolved from latestViews.TE.viewId — leave blank unless explicitly overriding. It is only needed when sourceRows is not supplied. 9. If 'hasTcRunUdf' is false in the response, no Test Run UDFs are configured for this project. 10. The 'testRunUdfs' array on each run contains enriched UDF values with label and fieldID — use fieldID from here when calling 'Bulk Update Test Run UDFs'. 11. VALUE RESOLUTION: For LOOKUPLIST and MULTILOOKUPLIST fields, 'value' is resolved from the internal uniqueLabel key to the human-readable display name using qmUDFList lookup options. Always display the resolved name, never the raw uniqueLabel. 12. LOOKUP RESOLUTION WARNING: If the response contains '_lookupWarning', lookup options were missing for some fields. Individual UDF entries may have '_rawValue: true' and '_note' indicating the value is an unresolved internal ID. In that case, call 'Fetch Test Run UDF Metadata' separately and use its 'lookupOptions' to resolve the display name before showing the user. 13. This tool calls UDF metadata internally — no need to call 'Fetch Test Run UDF Metadata' separately when viewing values. 14. When sourceRows is omitted, this tool also calls the test-suite-run execution list API internally. When sourceRows is provided, it reuses those rows and does not refetch the parent execution list.

qmetry_fetch_cascade_child_valuesA

Fetch the child values of a CASCADINGLIST UDF field for a given parent item ID. Use this before bulk-updating a CASCADINGLIST Test Run UDF to discover valid child item IDs.

Toolset: UDF

Parameters:

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

  • id (number) required: Numeric ID of the parent cascade list item to fetch child values for. Get this from the 'lookupOptions' returned by 'Fetch Test Run UDF Metadata' for a CASCADINGLIST field — each option has an 'id' field.

  • isArchReq (boolean): Whether to include archived child items in the response (default: false). (default: false)

Output Description: JSON object with 'parentId' (the input ID), 'parentName' (the parent item's display name), 'children' array (each item has id, name, uniqueLabel, isArchived), and a '_note' explaining how to use the IDs.

Use Cases: 1. Find valid child values for a CASCADINGLIST UDF before bulk-updating test runs 2. List all child options available under a specific parent cascade item 3. Resolve child item ID when user knows the parent but not the child 4. Discover cascade hierarchy for a UDF field before setting it on test executions

Examples:

  1. Fetch child values for parent cascade item with ID 5173534

{
  "id": 5173534
}

Expected Output: { parentId: 5173534, parentName: "India", children: [{ id: 5173535, name: "i1", uniqueLabel: "i1", isArchived: false }, ...], _note: "Use 'id' from 'children' as the 'child' value in the CASCADINGLIST update." }

  1. Fetch child values including archived items for parent ID 5126498

{
  "id": 5126498,
  "isArchReq": true
}

Expected Output: { parentId: 5126498, parentName: "abc", children: [...], _note: "..." }

Hints: 1. MANDATORY WORKFLOW for CASCADINGLIST bulk update:

  1. Call 'Fetch Test Run UDF Metadata' → get the CASCADINGLIST field's 'fieldID' (projectUserFieldID) and parent item options from 'lookupOptions'.

  2. Call this tool ('Fetch Cascade Child Values') with a parent item 'id' from step 1 → get child item IDs.

  3. Call 'Bulk Update Test Run UDFs' with value: { parent: , child: } and the 'fieldID' from step 1. 2. The parent item IDs are in the 'lookupOptions' map returned by 'Fetch Test Run UDF Metadata'. Each entry under the field's listName contains items with 'id' — use that 'id' as the 'id' parameter here. IMPORTANT: If 'lookupOptions' from Fetch Test Run UDF Metadata is empty for the CASCADINGLIST field, the API did not return parent options. In this case, ask the user to provide the parent item ID from the QMetry UI — do NOT guess. 3. The response 'children' array contains objects with 'id', 'name', 'uniqueLabel', and 'isArchived'. Use 'id' as the 'child' value in the bulk update payload. 4. Set 'isArchReq: true' only if the user explicitly asks to include archived/inactive child options. 5. This endpoint requires 'scope' and 'orgcode' headers — these are injected automatically from the session context when 'Set Project Info' has been called. If you see an authorization error, call 'Set Project Info' first. 6. Do NOT call this tool for STRING, NUMBER, DATETIMEPICKER, LOOKUPLIST, or MULTILOOKUPLIST fields — only CASCADINGLIST (fieldType: 'CASCADINGLIST') fields have a parent-child hierarchy.

qmetry_fetch_quality_gate_configurationA

Fetch the quality gate configuration for a project and AI agent, including assessment scope and gate criteria.

Toolset: AI Agent

Parameters:

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

  • projectId (number) required: Numeric project ID for which to fetch the quality gate configuration. This is the internal numeric identifier, not the project key.

  • agentIdentifier (string) required: Unique identifier of the AI agent whose gate configuration should be retrieved.

Use Cases: 1. Retrieve gate criteria and thresholds before generating a quality gate report 2. Check which quality gates are configured for a project and agent 3. Inspect assessment scope and gate parameters for release readiness evaluation

Examples:

  1. Fetch gate configuration for project 45851 and agent 'RR'

{
  "projectId": 45851,
  "agentIdentifier": "RR"
}

Expected Output: Gate configuration object with assessment scope, gate criteria, and thresholds.

Hints: 1. REQUIRED: 'projectId' must be a valid numeric project ID (not the project key). 2. REQUIRED: 'agentIdentifier' must match a registered AI agent identifier. 3. Call this tool before 'Execute Quality Gate Report' to understand the gate criteria and available gates. 4. If AI Agent is not enabled for the project, the backend will return an appropriate error.

qmetry_execute_quality_gate_reportA

Execute a quality gate report by forwarding the request to the backend analytics engine and returning the results.

Toolset: AI Agent

Parameters:

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

  • reportName (string) required: Report name identifier (e.g. 'RR' for Release Readiness).

  • gateIdentifier (string) required: Gate identifier to execute the report against (e.g. 'GATE1').

  • projectId (number) required: Numeric project ID for the report scope.

  • releaseId (number): Optional release ID to scope the report to a specific release.

  • cycleIds (array): Optional array of cycle IDs to scope the report to specific cycles.

  • page (number): Optional page number for paginated report results.

  • limit (number): Maximum number of records to return per page. Defaults to 100 if not specified. (default: 100)

Use Cases: 1. Generate a release readiness report for a specific project, release, and cycle 2. Execute a quality gate assessment to evaluate project health against gate criteria 3. Run a gate report scoped to specific cycles within a release 4. Produce analytics data for quality gate evaluation and decision-making

Examples:

  1. Execute a release readiness report for project 45851, release 90698, cycle 129140

{
  "reportName": "RR",
  "gateIdentifier": "GATE1",
  "projectId": 45851,
  "releaseId": 90698,
  "cycleIds": [
    129140
  ]
}

Expected Output: { "data": [...], "total": 0, "success": true, "page": {} }

  1. Execute a gate report without release/cycle scoping

{
  "reportName": "RR",
  "gateIdentifier": "GATE1",
  "projectId": 45851
}

Expected Output: { "data": [...], "total": 0, "success": true, "page": {} }

Hints: 1. REQUIRED: 'reportName' identifies the report type (e.g. 'RR' for Release Readiness). 2. REQUIRED: 'gateIdentifier' identifies which gate to evaluate (e.g. 'GATE1'). 3. REQUIRED: 'projectId' must be a valid numeric project ID. 4. OPTIONAL: 'releaseId' scopes the report to a specific release. 5. OPTIONAL: 'cycleIds' scopes the report to specific test cycles within the release. 6. OPTIONAL: 'page' specifies the page number for paginated report results. 7. OPTIONAL: 'limit' sets the maximum number of records per page (defaults to 100). 8. Call 'Fetch Quality Gate Configuration' first to discover available gates and report parameters. 9. The response is returned exactly as received from the backend — no transformation is applied.

qmetry_export_html_reportA

Export HTML content as a downloadable report file via the backend.

Toolset: AI Agent

Parameters:

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

  • htmlContent (string) required: HTML content to be exported as a report.

  • fileName (string) required: Name for the exported report file (without extension). Letters, digits, '.', '_' and '-' only - no path separators or '..' sequences.

Use Cases: 1. Export a generated release readiness report as an HTML file 2. Save AI-generated quality gate analysis as a downloadable report 3. Create a shareable HTML document from report content

Examples:

  1. Export a release readiness report

{
  "htmlContent": "<h1>Release Readiness Report</h1><p>Generated by AI Agent.</p>",
  "fileName": "release-readiness-report"
}

Expected Output: Report file generated and returned by the backend.

Hints: 1. REQUIRED: 'htmlContent' is the full HTML string to export. 2. REQUIRED: 'fileName' is the report file name (without extension). 3. Typically called after generating report content from 'Execute Quality Gate Report' results.

zephyr_get_projectsA

Get details of projects in Zephyr

Toolset: Projects

Parameters:

  • maxResults (number): Specifies the maximum number of results to return in a single call. The default value is 10, and the maximum value that can be requested is 1000.

Note that the server may enforce a lower limit than requested, depending on resource availability or other internal constraints. If this happens, the result set may be truncated. Always check the maxResults value in the response to confirm how many results were actually returned. (default: 10)

  • startAt (number): Zero-indexed starting position. Should be a multiple of maxResults. (default: 0)

Examples:

  1. Get the first 10 projects

{
  "maxResults": 10,
  "startAt": 0
}

Expected Output: The first 10 projects with their details

  1. Get any project

{
  "maxResults": 1
}

Expected Output: One project with its details

  1. Get five projects starting from the 7th project of the list

{
  "maxResults": 5,
  "startAt": 6
}

Expected Output: The 7th to the 11th projects with their details

zephyr_get_projectA

Get details of project specified by id or key in Zephyr

Toolset: Projects

Parameters:

  • projectIdOrKey (string) required: The Zephyr project ID or Jira project key

Examples:

  1. Get the project with id 1

{
  "projectIdOrKey": "1"
}

Expected Output: The project with its details

  1. Get the project with key 'PROJ'

{
  "projectIdOrKey": "PROJ"
}

Expected Output: The project with its details

zephyr_get_test_cyclesA

Get details of Test Cycles in Zephyr

Toolset: Test Cycles

Parameters:

  • projectKey (string): Jira project key filter

  • folderId (number): Folder ID filter

  • jiraProjectVersionId (number): Jira Project Version ID. Relates to 'Version' or 'Releases' in Jira projects.

  • maxResults (number): Specifies the maximum number of results to return in a single call. The default value is 10, and the maximum value that can be requested is 1000.

Note that the server may enforce a lower limit than requested, depending on resource availability or other internal constraints. If this happens, the result set may be truncated. Always check the maxResults value in the response to confirm how many results were actually returned. (default: 10)

  • startAt (number): Zero-indexed starting position. Should be a multiple of maxResults. (default: 0)

Examples:

  1. Get the first 10 Test Cycles

{
  "maxResults": 10,
  "startAt": 0
}

Expected Output: The first 10 Test Cycles with their details

  1. Get any Test Cycle

{
  "maxResults": 1
}

Expected Output: One Test Cycle with its details

  1. Get five Test Cycles starting from the 7th Test Cycles of the list

{
  "maxResults": 5,
  "startAt": 6
}

Expected Output: The 7th to the 11th Test Cycles with their details

  1. Get one Test Cycle from the project PROJ

{
  "projectKey": "PROJ",
  "maxResults": 1
}

Expected Output: One Test Cycle from project PROJ with its details

  1. Get one Test Cycle from the folder with ID 123

{
  "folderId": 123,
  "maxResults": 1
}

Expected Output: One Test Cycle from folder with ID 123 with its details

  1. Get one Test Cycle from the version 456

{
  "jiraProjectVersionId": 456,
  "maxResults": 1
}

Expected Output: One Test Cycle from version 456 with its details

zephyr_get_test_cycleA

Get details of test cycle specified by id or key in Zephyr

Toolset: Test Cycles

Parameters:

  • testCycleIdOrKey (string) required: The ID or key of the test cycle.

Examples:

  1. Get the test cycle with id 1

{
  "testCycleIdOrKey": "1"
}

Expected Output: The test cycle with its details

  1. Get the test cycle with key 'SA-R40'

{
  "testCycleIdOrKey": "SA-R40"
}

Expected Output: The test cycle with its details

zephyr_get_test_cycle_linksA

Get all links (issues, web links, and test plans) associated with a test cycle in Zephyr

Toolset: Test Cycles

Parameters:

  • testCycleIdOrKey (string) required: The ID or key of the test cycle.

Examples:

  1. Get all links for test cycle with id 1

{
  "testCycleIdOrKey": "1"
}

Expected Output: All links (issues, web links, test plans) for the test cycle

  1. Get all links for test cycle with key 'SA-R40'

{
  "testCycleIdOrKey": "SA-R40"
}

Expected Output: All links (issues, web links, test plans) for the test cycle with key SA-R40

zephyr_get_prioritiesC

Get Zephyr Test Case priorities with optional filters

Toolset: Priorities

Parameters:

  • maxResults (number): Specifies the maximum number of results to return in a single call. The default value is 10, and the maximum value that can be requested is 1000.

Note that the server may enforce a lower limit than requested, depending on resource availability or other internal constraints. If this happens, the result set may be truncated. Always check the maxResults value in the response to confirm how many results were actually returned. (default: 10)

  • startAt (number): Zero-indexed starting position. Should be a multiple of maxResults. (default: 0)

  • projectKey (string): Jira project key filter

Examples:

  1. Get the first 10 priorities

{
  "maxResults": 10,
  "startAt": 0
}

Expected Output: The first 10 priorities with their details

  1. Get priorities for a specific project

{
  "projectKey": "PROJ"
}

Expected Output: The priorities for project PROJ

  1. Get all priorities

{}

Expected Output: All priorities

zephyr_get_statusesA

Get statuses of different types of test artifacts in Zephyr

Toolset: Statuses

Parameters:

  • maxResults (number): Specifies the maximum number of results to return in a single call. The default value is 10, and the maximum value that can be requested is 1000.

Note that the server may enforce a lower limit than requested, depending on resource availability or other internal constraints. If this happens, the result set may be truncated. Always check the maxResults value in the response to confirm how many results were actually returned. (default: 10)

  • startAt (number): Zero-indexed starting position. Should be a multiple of maxResults. (default: 0)

  • projectKey (string): Jira project key filter

  • statusType (enum): Determines which type of entity the status belongs to.

Examples:

  1. Get the first 10 statuses

{
  "maxResults": 10,
  "startAt": 0
}

Expected Output: The first 10 statuses with their details from different projects and test artifact types

  1. Get 10 test case statuses

{
  "maxResults": 10,
  "statusType": "TEST_CASE"
}

Expected Output: A list of statuses related to test cases with their details

  1. Get five statuses from the project PROJ

{
  "maxResults": 5,
  "projectKey": "PROJ"
}

Expected Output: The first five statuses from the project PROJ with their details

zephyr_get_test_casesA

Get details of test cases in Zephyr

Toolset: Test Cases

Parameters:

  • projectKey (string): Jira project key filter

  • folderId (number): Folder ID filter

  • limit (number): Specifies the maximum number of results to return in a single call. The default value is 10, and the maximum value that can be requested is 1000.

Note that the server may enforce a lower limit than requested, depending on resource availability or other internal constraints. If this happens, the result set may be truncated. Always check the limit value in the response to confirm how many results were actually returned. (default: 10)

  • startAtId (number): Zero-indexed starting position for ID-based pagination. (default: 0)

  • updatedAfter (string): Filter only entities updated after the given time. Format: yyyy-MM-dd'T'HH:mm:ss'Z'

Examples:

  1. Get the first 10 Test Cases

{
  "limit": 10,
  "startAtId": 1
}

Expected Output: The first 10 Test Cases with their details

  1. Get any Test Case

{
  "limit": 1
}

Expected Output: One Test Case with its details

  1. Get five Test Cases starting from the ID 123

{
  "limit": 5,
  "startAtId": 123
}

Expected Output: Five Test Cases starting from the ID 123 with their details

  1. Get one Test Case from the project PROJ

{
  "projectKey": "PROJ",
  "limit": 1
}

Expected Output: One Test Case from project PROJ with its details

  1. Get one Test Case from the folder with ID 123

{
  "folderId": 123,
  "limit": 1
}

Expected Output: One Test Case from folder with ID 123 with its details

zephyr_get_environmentsA

Get environments in Zephyr

Toolset: Environment

Parameters:

  • projectKey (string): Jira project key filter

  • maxResults (number): Specifies the maximum number of results to return in a single call. The default value is 10, and the maximum value that can be requested is 1000.

Note that the server may enforce a lower limit than requested, depending on resource availability or other internal constraints. If this happens, the result set may be truncated. Always check the maxResults value in the response to confirm how many results were actually returned. (default: 10)

  • startAt (number): Zero-indexed starting position. Should be a multiple of maxResults. (default: 0)

Examples:

  1. Get the first 20 Environments

{
  "maxResults": 20,
  "startAt": 0
}

Expected Output: The first 20 Environments with their details from different projects

  1. Get the first 10 Environments from the project with projectKey TEST

{
  "projectKey": "TEST",
  "maxResults": 10,
  "startAt": 0
}

Expected Output: The first 10 Environments with their details from project with projectKey TEST

  1. Get second 10 Environments from the project with projectKey TEST

{
  "projectKey": "TEST",
  "maxResults": 10,
  "startAt": 10
}

Expected Output: The second 10 Environments with their details from project with projectKey TEST

  1. Get Environments starting from the 5th Environment from different projects

{
  "startAt": 5,
  "maxResults": 10
}

Expected Output: Environments starting from the 5th one with their details from different projects

  1. Get 5 Environments starting from the 10th Environment from the project with projectKey PROJ

{
  "startAt": 10,
  "maxResults": 5,
  "projectKey": "PROJ"
}

Expected Output: The five environments starting from the 10th Environment from the project PROJ with their details

zephyr_get_test_caseA

Get details of test case specified by key in Zephyr

Toolset: Test Cases

Parameters:

  • testCaseKey (string) required: The key of the test case. Test case keys are of the format [A-Z]+-T[0-9]+

Examples:

  1. Get the test case with key 'SA-T10'

{
  "testCaseKey": "SA-T10"
}

Expected Output: The test case with its details

  1. Get the test case with key 'MM2-T1'

{
  "testCaseKey": "MM2-T1"
}

Expected Output: The test case with its details

zephyr_get_test_case_linksA

Get all links (issue links and web links) associated with a test case in Zephyr

Toolset: Test Cases

Parameters:

  • testCaseKey (string) required: The key of the test case. Test case keys are of the format [A-Z]+-T[0-9]+

Examples:

  1. Get all links associated with the test case with key 'SA-T10'

{
  "testCaseKey": "SA-T10"
}

Expected Output: The links (issue links and web links) associated with the test case

zephyr_get_test_executionB

Get details of test execution specified by id or key in Zephyr

Toolset: Test Executions

Parameters:

  • testExecutionIdOrKey (string) required: The ID or key of the test execution. Test execution keys are of the format [A-Z]+-E[0-9]+

Examples:

  1. Get the test execution with id 1

{
  "testExecutionIdOrKey": "1"
}

Expected Output: The test execution with its details

  1. Get the test execution with key 'PROJ-E123'

{
  "testExecutionIdOrKey": "PROJ-E123"
}

Expected Output: The test execution with its details

zephyr_get_test_executionsA

Get test executions with optional filters

Toolset: Test Executions

Parameters:

  • projectKey (string): Jira project key filter

  • testCycle (string): Test cycle key filter.

  • testCase (string): Test case key filter.

  • actualEndDateAfter (string): Filter for 'Actual End Date' after the given time. Format: yyyy-MM-dd'T'HH:mm:ss'Z'

  • actualEndDateBefore (string): Filter for 'Actual End Date' before the given time. Format: yyyy-MM-dd'T'HH:mm:ss'Z'

  • includeStepLinks (boolean): If true, execution step issue links will be included in the response (default: false)

  • jiraProjectVersionId (number): Jira Project Version ID. Relates to 'Version' or 'Releases' in Jira projects.

  • onlyLastExecutions (boolean): If true, includes only the last execution of each test cycle item (test case), and all ad-hoc test executions. (default: false)

  • limit (number): Specifies the maximum number of results to return in a single call. The default value is 10, and the maximum value that can be requested is 1000.

Note that the server may enforce a lower limit than requested, depending on resource availability or other internal constraints. If this happens, the result set may be truncated. Always check the limit value in the response to confirm how many results were actually returned. (default: 10)

  • startAtId (number): Zero-indexed starting position for ID-based pagination. (default: 0)

  • updatedAfter (string): Filter only entities updated after the given time. Format: yyyy-MM-dd'T'HH:mm:ss'Z'

Examples:

  1. Get the first 10 test executions

{
  "limit": 10,
  "startAtId": 0
}

Expected Output: The first 10 test executions with their details

  1. Get 5 test executions for the project PROJ

{
  "projectKey": "PROJ",
  "limit": 5
}

Expected Output: Up to 5 test executions for project PROJ

  1. Get some test executions that finished after 01/Jan/2024

{
  "actualEndDateAfter": "2024-01-01T00:00:00Z"
}

Expected Output: Test executions that ended after 2024-01-01

  1. Get test executions with step links included

{
  "includeStepLinks": true
}

Expected Output: Test executions with step links included

zephyr_create_test_caseA

Create a new Test Case in Zephyr specified project

Toolset: Test Cases

Parameters:

  • projectKey (string) required: Jira project key.

  • name (string) required

  • objective (string): A description of the objective.

  • precondition (string): Any conditions that need to be met.

  • estimatedTime (number): Estimated duration in milliseconds.

  • componentId (number): ID of a component from Jira.

  • priorityName (string): The priority name.

  • statusName (string): The status name.

  • folderId (number): ID of a folder to place the entity within.

  • ownerId (string): Atlassian Account ID of the Jira user.

  • labels (array): Array of labels associated to this entity.

  • customFields (record<string, any>): Multi-line text fields support HTML and should denote new lines with the <br> tag. Dates should be in the format 'yyyy-MM-dd'. Users should have values of Jira User Account IDs.

Examples:

  1. Create a Test Case in project SA to ensure that the axial pump can be enabled

{
  "projectKey": "SA",
  "name": "Check axial pump",
  "objective": "Ensure the axial pump can be enabled"
}

Expected Output: The newly created Test Case with its details and key

  1. Create a Test Case to ensure that the axial pump can be enabled. The test should be in project MM2, have labels 'automated' and 'mcp', and priority 'High'

{
  "projectKey": "MM2",
  "name": "Check axial pump",
  "objective": "Ensure the axial pump can be enabled",
  "labels": [
    "automated",
    "mcp"
  ],
  "priorityName": "High"
}

Expected Output: The newly created Test Case with its details and key

  1. Create a Test Case for verifying strength of the axial pump with custom field 'Axial pump strength' having value '5' in project SA

{
  "projectKey": "SA",
  "name": "Check axial pump strength",
  "objective": "Make sure the axial pump operates at the required strength",
  "customFields": {
    "Axial pump strength": 5
  }
}

Expected Output: The newly created Test Case with its details and key

  1. Create a Test Case in project MM2 to verify the performance of the axial pump with Jira component having ID 10001, Jira owner having ID 10057 in folder 'Pumps'

{
  "projectKey": "MM2",
  "name": "Check axial pump performance",
  "objective": "Ensure the axial pump performs within acceptable limits",
  "componentId": 10001,
  "ownerJiraUserId": 10057,
  "folderId": 18
}

Expected Output: The newly created Test Case with its details and key

zephyr_create_test_cycleC

Create a new Test Cycle in Zephyr specified project

Toolset: Test Cycles

Parameters:

  • projectKey (string) required: Jira project key.

  • name (string) required

  • description (string): Description outlining the scope.

  • plannedStartDate (string): Planned start date of the test cycle. Format: yyyy-MM-dd'T'HH:mm:ss'Z'

  • plannedEndDate (string): The planned end date of the test cycle. Format: yyyy-MM-dd'T'HH:mm:ss'Z'

  • jiraProjectVersion (number): Jira Project Version ID. Relates to 'Version' or 'Releases' in Jira projects.

  • statusName (string): The status name.

  • folderId (number): ID of a folder to place the entity within.

  • ownerId (string): Atlassian Account ID of the Jira user.

  • customFields (record<string, any>): Multi-line text fields support HTML and should denote new lines with the <br> tag. Dates should be in the format 'yyyy-MM-dd'. Users should have values of Jira User Account IDs.

Examples:

  1. Create a Test Cycle in project SA to ensure that the axial pump can be enabled

{
  "projectKey": "SA",
  "name": "Check axial pump",
  "description": "Ensure the axial pump can be enabled"
}

Expected Output: The newly created Test Cycle with its details and key

  1. Create a Test Cycle to ensure that the axial pump can be enabled. The test cycle should be in project MM2, have status 'In Progress', and be planned from 2026-03-01 to 2026-03-10

{
  "projectKey": "MM2",
  "name": "Check axial pump",
  "description": "Ensure the axial pump can be enabled",
  "statusName": "In Progress",
  "plannedStartDate": "2026-03-01T00:00:00Z",
  "plannedEndDate": "2026-03-10T00:00:00Z"
}

Expected Output: The newly created Test Cycle with its details and key

  1. Create a Test Cycle for verifying strength of the axial pump with custom field 'Axial pump strength' having value '5' in project SA

{
  "projectKey": "SA",
  "name": "Check axial pump strength",
  "description": "Make sure the axial pump operates at the required strength",
  "customFields": {
    "Axial pump strength": 5
  }
}

Expected Output: The newly created Test Cycle with its details and key

  1. Create a Test Cycle in project MM2 to verify the performance of the axial pump with Jira Project Version ID 10001, owner Atlassian Account ID '12', in folder with ID 18

{
  "projectKey": "MM2",
  "name": "Check axial pump performance",
  "description": "Ensure the axial pump performs within acceptable limits",
  "jiraProjectVersion": 10001,
  "ownerId": "12",
  "folderId": 18
}

Expected Output: The newly created Test Cycle with its details and key

zephyr_update_test_caseA

Update an existing Test Case in Zephyr. This operation fetches the current test case and merges your updates with it to prevent accidental property deletion. Properties which are not included in the tool call will be left unchanged. To remove a property, set it to null explicitly. For fields that accept multiple values, such as labels, if the field is provided, it will override the previous values. For example, if labels is provided with the values ["label1", "label2"], the Test Case will now only have those two labels, and any previous labels will be removed. If you want to add a label, you would need to specify in the prompt the intention to add a label.

Toolset: Test Cases

Parameters:

  • testCaseKey (string) required: The key of the test case. Test case keys are of the format [A-Z]+-T[0-9]+

  • id (number): The ID of the entity

  • key (string): The test case key

  • name (string)

  • project (object): ID and link relative to Zephyr project.

  • objective (string): A description of the objective.

  • precondition (string): Any conditions that need to be met.

  • estimatedTime (number): Estimated duration in milliseconds.

  • labels (array): Array of labels associated to this entity.

  • component (number): The ID of the Jira component to associate.

  • priority (object): ID and link to the priority resource.

  • status (object): ID and link to the status resource.

  • folder (number): The ID of the folder to move the test case into.

  • owner (string): Atlassian Account ID of the Jira user to set as owner.

  • customFields (record<string, any>): Multi-line text fields support HTML and should denote new lines with the <br> tag. Dates should be in the format 'yyyy-MM-dd'. Users should have values of Jira User Account IDs.

Examples:

  1. Update the name of the test case 'SA-T10' to 'Check axial pump' and objective to 'To ensure the axial pump can be enabled'

{
  "testCaseKey": "SA-T10",
  "name": "Check axial pump",
  "objective": "To ensure the axial pump can be enabled"
}

Expected Output: The test case should be updated, but no output is expected.

  1. Update the test case 'MM2-T1' by setting labels 'Regression','Performance' and 'Automated' and changing the priority to the one with id 2.

{
  "testCaseKey": "MM2-T1",
  "priority": {
    "id": 2
  },
  "labels": [
    "Regression",
    "Performance",
    "Automated"
  ]
}

Expected Output: The test case should be updated, but no output is expected.

  1. Update test case 'SA-T5', by setting the custom field 'Build Number' to 20, 'Release Date' to '2020-01-01' and setting the Test Cases's estimated time to 3600000 milliseconds.

{
  "testCaseKey": "SA-T5",
  "estimatedTime": 3600000,
  "customFields": {
    "Build Number": 20,
    "Release Date": "2020-01-01"
  }
}

Expected Output: The test case should be updated, but no output is expected.

  1. Remove the component from test case 'SA-T20'.

{
  "testCaseKey": "SA-T20",
  "component": null
}

Expected Output: The test case should be updated, but no output is expected.

  1. Remove a specific custom field 'Pre-Condition(s)' from test case 'SA-T15' while keeping other custom fields intact

{
  "testCaseKey": "SA-T15",
  "customFields": {
    "Pre-Condition(s)": null,
    "Implemented": false
  }
}

Expected Output: The test case should be updated, but no output is expected.

  1. Remove test case from folder

{
  "testCaseKey": "SA-T15",
  "folder": null
}

Expected Output: The test case should be updated, but no output is expected.

zephyr_update_test_cycleA

Update an existing Test Cycle in Zephyr. This operation fetches the current test cycle and merges your updates with it to prevent accidental property deletion. To remove a property, set it to null explicitly. The plannedStartDate and plannedEndDate fields cannot be cleared

Toolset: Test Cycles

Parameters:

  • testCycleIdOrKey (string) required: The ID or key of the test cycle.

  • id (number): The ID of the entity

  • key (string): Unique key of the test cycle

  • name (string)

  • project (object): ID and link relative to Zephyr project.

  • jiraProjectVersion (number): The ID of the Jira project version (release) to associate.

  • status (object): ID and link to the status resource.

  • folder (number): The ID of the folder to move the test cycle into.

  • description (string): Description outlining the scope.

  • plannedStartDate (string): Planned start date of the test cycle. This field cannot be blank. Setting it as null or excluding it from the request will leave the field values unchanged. ISO 8601 Format (i.e., yyyy-MM-dd'T'HH:mm:ss'Z')

  • plannedEndDate (string): The planned end date of the test cycle. This field cannot be blank. Setting it as null or excluding it from the request will leave the field values unchanged. ISO 8601 Format (i.e., yyyy-MM-dd'T'HH:mm:ss'Z')

  • owner (string): Atlassian Account ID of the Jira user to set as owner.

  • customFields (record<string, any>): Multi-line text fields support HTML and should denote new lines with the <br> tag. Dates should be in the format 'yyyy-MM-dd'. Users should have values of Jira User Account IDs.

Examples:

  1. Update the name of the test cycle 'SA-R40' to 'Sprint 1 Regression - Updated' and set description.

{
  "testCycleIdOrKey": "SA-R40",
  "name": "Sprint 1 Regression - Updated",
  "description": "Updated regression scope for Sprint 1"
}

Expected Output: The test cycle should be updated, but no output is expected.

  1. Update planned dates for test cycle id '1' (keep everything else unchanged).

{
  "testCycleIdOrKey": "1",
  "plannedStartDate": "2018-05-19T13:15:13Z",
  "plannedEndDate": "2018-05-20T13:15:13Z"
}

Expected Output: The test cycle should be updated, but no output is expected.

  1. Change folder and status for test cycle 'SA-R40' by setting folder id and status id.

{
  "testCycleIdOrKey": "SA-R40",
  "folder": 100006,
  "status": {
    "id": 10000
  }
}

Expected Output: The test cycle should be updated, but no output is expected.

  1. Update custom fields on test cycle 'SA-R40' while keeping other custom fields intact.

{
  "testCycleIdOrKey": "SA-R40",
  "customFields": {
    "Build Number": 20,
    "Release Date": "2020-01-01"
  }
}

Expected Output: The test cycle should be updated, but no output is expected.

  1. Remove the owner from test cycle 'SA-R40'.

{
  "testCycleIdOrKey": "SA-R40",
  "owner": null
}

Expected Output: The test cycle should be updated, but no output is expected.

  1. Remove a specific custom field 'Pre-Condition(s)' from test cycle 'SA-R40' while keeping other custom fields intact.

{
  "testCycleIdOrKey": "SA-R40",
  "customFields": {
    "Pre-Condition(s)": null,
    "Implemented": false
  }
}

Expected Output: The test cycle should be updated, but no output is expected.

zephyr_create_test_executionA

Create a new Test Execution for a Test Case within a specific Test Cycle

Toolset: Test Executions

Parameters:

  • projectKey (string) required: Jira project key.

  • testCaseKey (string) required: Key of test case the execution applies to. NOTE: Test cases with call to test, parameters and test data are not supported.

  • testCycleKey (string) required: Key of test cycle the execution applies to.

  • statusName (string) required: The status name.

  • testScriptResults (array)

  • environmentName (string): Environment assigned to the test case.

  • actualEndDate (string): The actual end date of the test cycle. Format: yyyy-MM-dd'T'HH:mm:ss'Z'

  • executionTime (number): Actual test execution time in milliseconds.

  • executedById (string): Atlassian Account ID of the Jira user.

  • assignedToId (string): Atlassian Account ID of the Jira user.

  • comment (string): Comment added against overall test case execution.

  • customFields (record<string, any>): Multi-line text fields support HTML and should denote new lines with the <br> tag. Dates should be in the format 'yyyy-MM-dd'. Users should have values of Jira User Account IDs.

Examples:

  1. Create a Passed execution for test case SA-T1 in cycle SA-R1

{
  "projectKey": "SA",
  "testCaseKey": "SA-T1",
  "testCycleKey": "SA-R1",
  "statusName": "Pass"
}

Expected Output: The newly created Test Execution with execution details

  1. Create a Failed execution with execution time, environment and comment

{
  "projectKey": "MM2",
  "testCaseKey": "MM2-T15",
  "testCycleKey": "MM2-R3",
  "statusName": "Fail",
  "environmentName": "Staging",
  "executionTime": 125000,
  "comment": "Step 3 failed due to timeout<br>Logs attached."
}

Expected Output: The newly created Test Execution including environment and timing information

  1. Create execution with custom fields and assignment

{
  "projectKey": "SA",
  "testCaseKey": "SA-T5",
  "testCycleKey": "SA-R2",
  "statusName": "Pass",
  "executedById": "5b10ac8d82e05b22cc7d4ef5",
  "assignedToId": "5b10ac8d82e05b22cc7d4ef6",
  "actualEndDate": "2026-02-17T10:15:30Z",
  "customFields": {
    "Execution Build": "1.0.3",
    "Tested Browser": "Chrome",
    "Execution Date": "2026-02-17"
  }
}

Expected Output: The newly created Test Execution including custom field values

zephyr_create_test_case_web_linkA

Create a new Web Link for a Test Case in Zephyr

Toolset: Test Cases

Parameters:

  • description (string): The web link description

  • url (string) required: The web link URL

  • testCaseKey (string) required: The key of the test case. Test case keys are of the format [A-Z]+-T[0-9]+

Examples:

  1. Create a web link for test case SA-T1 pointing to Atlassian's homepage

{
  "testCaseKey": "SA-T1",
  "url": "https://www.atlassian.com",
  "description": "Link to Atlassian's homepage"
}

Expected Output: The newly created Web Link with its ID and self link

  1. Attach a documentation link to test case MM2-T15 for pump specifications

{
  "testCaseKey": "MM2-T15",
  "url": "https://docs.atlassian.com",
  "description": "Documentation for pump specifications"
}

Expected Output: The newly created Web Link with its ID and self link

zephyr_create_test_case_stepsA

Create steps for a Test Case in Zephyr. Supports inline step definitions or delegating execution to another test case (also known as 'call to test' via UI). Requires a mode: APPEND adds steps to the end of the existing list, OVERWRITE deletes all existing steps and replaces them with the provided ones. Always ask the user to choose between OVERWRITE or APPEND before calling this tool.

Toolset: Test Cases

Parameters:

  • testCaseKey (string) required: The key of the test case. Test case keys are of the format [A-Z]+-T[0-9]+

  • mode (string) required: Valid values: "APPEND", "OVERWRITE". OVERWRITE deletes and recreates the test steps and associated custom field values using the provided input. Attachments for existing steps are kept, but those for missing steps are deleted permanently APPEND only adds extra steps to your test steps.

  • items (array) required: The list of test steps. Each step should be an object containing inline or testCase. They should only include one of these fields at a time.

Examples:

  1. To the Test Case SA-T1, add steps that will test a login page.

{
  "testCaseKey": "SA-T1",
  "mode": "APPEND",
  "items": [
    {
      "inline": {
        "description": "Navigate to the login page",
        "expectedResult": "Login page is displayed"
      }
    },
    {
      "inline": {
        "description": "Enter valid credentials and click Submit",
        "expectedResult": "User is redirected to the dashboard"
      }
    }
  ]
}

Expected Output: The ID of the Test Steps resource and the API self URL to fetch it

  1. To the Test Case MM2-T15, replace all existing steps with new ones that test the settings page for an Admin user.

{
  "testCaseKey": "MM2-T15",
  "mode": "OVERWRITE",
  "items": [
    {
      "inline": {
        "description": "Open the settings page",
        "testData": "User role: Admin",
        "expectedResult": "Settings page is accessible"
      }
    },
    {
      "inline": {
        "description": "Change the notification preference",
        "testData": "Preference: Email only",
        "expectedResult": "Notification preference is updated successfully"
      }
    }
  ]
}

Expected Output: The ID of the Test Steps resource and the API self URL to fetch it

  1. To the Test Case SA-T1, add a step that reuses the steps from the Test Case PRJ-T42

{
  "testCaseKey": "SA-T1",
  "mode": "APPEND",
  "items": [
    {
      "testCase": {
        "testCaseKey": "PRJ-T42"
      }
    }
  ]
}

Expected Output: The ID of the Test Steps resource and the API self URL to fetch it

zephyr_create_test_case_issue_linkB

Create a new link between an issue in Jira and a Test Case in Zephyr

Toolset: Test Cases

Parameters:

  • testCaseKey (string) required: The key of the test case. Test case keys are of the format [A-Z]+-T[0-9]+

  • issueId (number): The Jira issue ID

Examples:

  1. Create a link between the test case SA-T1 and the Jira Issue ID 10100

{
  "testCaseKey": "SA-T1",
  "issueId": "10100"
}

Expected Output: The newly created Issue Link with its ID and self link

zephyr_create_test_cycle_issue_linkA

Create a new link between an issue in Jira and a Test Cycle in Zephyr

Toolset: Test Cycles

Parameters:

  • testCycleIdOrKey (string) required: The ID or key of the test cycle.

  • issueId (number) required: The Jira issue ID

Examples:

  1. Create a link between the test cycle with key SA-R1 and the Jira Issue ID 10100

{
  "testCycleIdOrKey": "SA-R1",
  "issueId": 10100
}

Expected Output: The link between Test Cycle and Jira issue should be created, but no output is expected.

  1. Create a link between the test cycle with ID 1001 and the Jira issue ID 20200

{
  "testCycleIdOrKey": "1001",
  "issueId": 20200
}

Expected Output: The link between Test Cycle and Jira issue should be created, but no output is expected.

zephyr_get_foldersA

Get folders, optionally filtered by project and folder type

Toolset: Folders

Parameters:

  • maxResults (number): Specifies the maximum number of results to return in a single call. The default value is 10, and the maximum value that can be requested is 1000.

Note that the server may enforce a lower limit than requested, depending on resource availability or other internal constraints. If this happens, the result set may be truncated. Always check the maxResults value in the response to confirm how many results were actually returned. (default: 10)

  • startAt (number): Zero-indexed starting position. Should be a multiple of maxResults. (default: 0)

  • projectKey (string): Jira project key filter

  • folderType (string): Folder type filter. Either "TEST_CASE", "TEST_PLAN" or "TEST_CYCLE"

Use Cases: 1. List folders in a Zephyr project 2. Get Test Case folders for a project 3. Get Test Plan folders for a project 4. Get Test Cycle folders for a project 5. Browse the folder structure in Zephyr

Examples:

  1. Get the first 10 Folders

{
  "maxResults": 10,
  "startAt": 0
}

Expected Output: The first 10 Folders with their details

  1. Get Folders from the project SA

{
  "projectKey": "SA",
  "maxResults": 10,
  "startAt": 0
}

Expected Output: Folders belonging to project SA with their details

  1. Get Test Case Folders from the project MM2

{
  "projectKey": "MM2",
  "folderType": "TEST_CASE",
  "maxResults": 10,
  "startAt": 0
}

Expected Output: Test Case Folders belonging to project MM2 with their details

  1. Get Test Cycle Folders across all projects

{
  "folderType": "TEST_CYCLE",
  "maxResults": 10,
  "startAt": 0
}

Expected Output: Test Cycle Folders from all projects with their details

zephyr_create_folderB

Create a folder called 'Axial Pump Tests' in the project SA for organizing test cases

Toolset: Folders

Parameters:

  • parentId (number): Folder ID of the parent folder. Must be null for root folders.

  • name (string) required: Folder name. Folder name must not contain / and \ characters.

  • projectKey (string) required: Jira project key.

  • folderType (string) required: Valid values: "TEST_CASE", "TEST_PLAN", "TEST_CYCLE"

Examples:

  1. Create a root Folder in project SA for organizing test cases

{
  "parentId": null,
  "name": "Axial Pump Tests",
  "projectKey": "SA",
  "folderType": "TEST_CASE"
}

Expected Output: The newly created Folder with its ID and self link

  1. Create a sub-folder under folder ID 5 in the project MM2 for test plans related to pumps

{
  "parentId": 5,
  "name": "Pump-related Test Plans",
  "projectKey": "MM2",
  "folderType": "TEST_PLAN"
}

Expected Output: The newly created Folder with its ID and self link

  1. Create a Folder called 'Regression Cycles' in project TIS for organizing test cycles

{
  "parentId": null,
  "name": "Regression Cycles",
  "projectKey": "TIS",
  "folderType": "TEST_CYCLE"
}

Expected Output: The newly created Folder with its ID and self link

zephyr_create_test_scriptA

Create a new Test Script of the types Plain Text or BDD in a Zephyr Test Case.

Toolset: Test Cases

Parameters:

  • testCaseKey (string) required: The key of the test case. Test case keys are of the format [A-Z]+-T[0-9]+

  • type (enum): Test scripts can be written in plain text or BDD format. The BDD type supports remote execution on a build system via API plugin.

Supported Keywords for BDD: Given, When, Then, And, But.

For more information about BDD and Gherkin syntax, see: https://support.smartbear.com/zephyr/docs/en/test-cases/gherkin-behavior-driven-development--bdd-.html

For Plain Text scripts, we support HTML fragments. To create a step-by-step test script, you should use the POST /testcases/{testCaseKey}/teststeps endpoint.

  • text (string)

Examples:

  1. Create a plain text test script for test case SA-T1 to verify that the axial pump can be enabled

{
  "testCaseKey": "SA-T1",
  "type": "plain",
  "text": "1. Navigate to Pump Settings</br>2. Enable Axial Pump</br>3. Verify pump status is 'Active'"
}

Expected Output: The created test script metadata including its id and self link

  1. Create a BDD test script for test case MM2-T15 to validate axial pump activation

{
  "testCaseKey": "MM2-T15",
  "type": "bdd",
  "text": "Given the axial pump is installed\nWhen the user enables the axial pump\nThen the pump status should be Active"
}

Expected Output: The created test script metadata including its id and self link

  1. Create a BDD test script for test case QA-T100 for axial pump performance validation

{
  "testCaseKey": "QA-T100",
  "type": "bdd",
  "text": "Given the system is running\nWhen the axial pump operates under load\nThen performance metrics should remain within thresholds"
}

Expected Output: The created test script metadata including its id and self link

zephyr_update_test_executionB

Update an existing Test Execution in Zephyr. This operation only updates specified fields in the payload and ignores null or undefined values.

Toolset: Test Executions

Parameters:

  • testExecutionIdOrKey (string) required: The ID or key of the test execution. Test execution keys are of the format [A-Z]+-E[0-9]+

  • statusName (string): The status name.

  • environmentName (string): Environment assigned to the test case.

  • actualEndDate (string): The actual end date of the test cycle. Format: yyyy-MM-dd'T'HH:mm:ss'Z'

  • executionTime (number): Actual test execution time in milliseconds.

  • executedById (string): Atlassian Account ID of the Jira user.

  • assignedToId (string): Atlassian Account ID of the Jira user.

  • comment (string): Comment added against overall test case execution.

Examples:

  1. Update the status name to 'PASS' and the environment name to 'ENV-1' in the test execution 'SA-E40'.

{
  "testExecutionIdOrKey": "SA-E40",
  "statusName": "PASS",
  "environmentName": "ENV-1"
}

Expected Output: The test execution should be updated, but no output is expected.

  1. Update execution time and actual end date for test execution id '1' (keep everything else unchanged).

{
  "testExecutionIdOrKey": "1",
  "executionTime": "2018-05-19T13:15:13Z",
  "actualEndDate": "2018-05-20T13:15:13Z"
}

Expected Output: The test execution should be updated, but no output is expected.

  1. For test execution 'SA-E40', update the test executor and assignee to be the user with ID 10000.

{
  "testExecutionIdOrKey": "SA-E40",
  "executedById": "10000",
  "assignedToId": "10000"
}

Expected Output: The test execution should be updated, but no output is expected.

  1. In test execution 'SA-E40', add a comment saying that this execution was updated via API.

{
  "testExecutionIdOrKey": "SA-E40",
  "comment": "execution updated via API"
}

Expected Output: The test execution should be updated, but no output is expected.

  1. Remove the assigned user from test execution 'SA-E40'.

{
  "testExecutionIdOrKey": "SA-E40",
  "assignedToId": null
}

Expected Output: The test execution should be updated, but no output is expected.

zephyr_create_test_execution_issue_linkB

Create a new link between a Jira issue and a Test Execution in Zephyr

Toolset: Test Executions

Parameters:

  • testExecutionIdOrKey (string) required: The ID or key of the test execution. Test execution keys are of the format [A-Z]+-E[0-9]+

  • issueId (number) required: The Jira issue ID

Examples:

  1. Create a link between the test execution with key SA-E40 and the Jira Issue ID 10100

{
  "testExecutionIdOrKey": "SA-E40",
  "issueId": 10100
}

Expected Output: The link between Test Execution and Jira issue should be created, but no output is expected.

  1. Create a link between the test execution with ID 1 and the Jira Issue ID 20050

{
  "testExecutionIdOrKey": "1",
  "issueId": 20050
}

Expected Output: The link between Test Execution and Jira issue should be created, but no output is expected.

zephyr_get_test_case_stepsA

Get details of test case steps in Zephyr

Toolset: Test Cases

Parameters:

  • testCaseKey (string) required: The key of the test case. Test case keys are of the format [A-Z]+-T[0-9]+

  • maxResults (number): Specifies the maximum number of results to return in a single call. The default value is 10, and the maximum value that can be requested is 1000.

Note that the server may enforce a lower limit than requested, depending on resource availability or other internal constraints. If this happens, the result set may be truncated. Always check the maxResults value in the response to confirm how many results were actually returned. (default: 10)

  • startAt (number): Zero-indexed starting position. Should be a multiple of maxResults. (default: 0)

Examples:

  1. Get the first 10 test case steps for test case with key 'SA-T1'

{
  "testCaseKey": "SA-T1",
  "maxResults": 10,
  "startAt": 0
}

Expected Output: The first 10 test case steps with their details

  1. Get any test case step for test case with key 'SA-T1'

{
  "testCaseKey": "SA-T1",
  "maxResults": 1
}

Expected Output: One test case step with its details

  1. Get five test case steps starting from the 7th test case step of the list for test case with key 'SA-T1'

{
  "testCaseKey": "SA-T1",
  "maxResults": 5,
  "startAt": 6
}

Expected Output: The 7th to the 11th test case steps with their details

zephyr_get_issue_link_test_casesA

Get test cases linked to a Jira issue in Zephyr

Toolset: Issue Links

Parameters:

  • issueKey (string) required: The key of the Jira issue

Examples:

  1. Check which test cases are linked to Jira issue PROJ-123

{
  "issueKey": "PROJ-123"
}

Expected Output: The List of test cases linked to Jira issue PROJ-123 with their keys and versions

zephyr_get_test_cycles_linked_to_a_jira_issueA

Get test cycles linked to a Jira issue in Zephyr

Toolset: Issue Links

Parameters:

  • issueKey (string) required: The key of the Jira issue

Examples:

  1. Check which test cycles are linked to Jira issue PROJ-123

{
  "issueKey": "PROJ-123"
}

Expected Output: The List of test cycles linked to Jira issue PROJ-123 with their IDs

zephyr_get_test_scriptA

Get the Test Script (Plain Text or BDD) for a given Test Case in Zephyr

Toolset: Test Cases

Parameters:

  • testCaseKey (string) required: The key of the test case. Test case keys are of the format [A-Z]+-T[0-9]+

Examples:

  1. Get the test script for test case with key 'SA-T1'

{
  "testCaseKey": "SA-T1"
}

Expected Output: The test script with its type (plain or bdd), text content, and id

  1. Retrieve the BDD test script content for test case with key 'MM2-T15'

{
  "testCaseKey": "MM2-T15"
}

Expected Output: The test script with its type (plain or bdd), text content, and id

  1. Get the test script for test case with key 'QA-T100' to review the test instructions

{
  "testCaseKey": "QA-T100"
}

Expected Output: The test script with its type (plain or bdd), text content, and id

zephyr_create_test_cycle_web_linkB

Create a new Web Link for a Test Cycle in Zephyr

Toolset: Test Cycles

Parameters:

  • testCycleIdOrKey (string) required: The ID or key of the test cycle.

  • description (string): The web link description

  • url (string): The web link URL

Examples:

  1. Create a link between the specified test cycle by Id '100001' and generic URL 'https://www.atlassian.com' with description 'Atlassian homepage'

{
  "testCycleIdOrKey": "100001",
  "url": "https://www.atlassian.com",
  "description": "Atlassian homepage"
}

Expected Output: The newly created Web Link with its ID and self link

  1. Create a web link for test cycle 'SA-R15' pointing to url: 'https://atlassian.com' with description 'Atlassian homepage'

{
  "testCycleIdOrKey": "SA-R15",
  "url": "https://atlassian.com",
  "description": "Documentation for pump specifications"
}

Expected Output: The newly created Web Link with its ID and self link

  1. Attach a documentation link 'https://docs.atlassian.com' to test cycle MM2-R15 for pump specifications

{
  "testCycleIdOrKey": "10001",
  "url": "https://docs.atlassian.com",
  "description": "Documentation for pump specifications"
}

Expected Output: The newly created Web Link with its ID and self link

zephyr_update_test_execution_stepsA

Update test steps for a given Test Execution in Zephyr. This operation updates the provided steps with their execution status and actual results. Only the fields included in the request will be modified.

Toolset: Test Executions

Parameters:

  • testExecutionIdOrKey (string) required: The ID or key of the test execution. Test execution keys are of the format [A-Z]+-E[0-9]+

  • steps (array)

Examples:

  1. Mark the status of all steps in the test execution 'SA-E1' as 'Pass'. Set the actual result of step 1 to 'Dashboard widgets loaded correctly' and step 2 to 'Navigation menu responded correctly to user interactions'.

{
  "testExecutionIdOrKey": "SA-E1",
  "steps": [
    {
      "statusName": "Pass",
      "actualResult": "Dashboard widgets loaded correctly"
    },
    {
      "statusName": "Pass",
      "actualResult": "Navigation menu responded correctly to user interactions"
    }
  ]
}

Expected Output: Test steps are updated successfully, but no output is expected.

  1. Update only the status of step 2 in test execution 'SA-E5' to 'Fail'. Do not modify any other fields.

{
  "testExecutionIdOrKey": "SA-E5",
  "steps": [
    {},
    {
      "statusName": "Fail"
    }
  ]
}

Expected Output: The test execution steps are updated, but no output is expected.

  1. Update only the actual results of the steps in test execution '10'. Set the actual result of step 1 to 'API returned 500 error' and step 2 actual result to 'API returned 200 success'

{
  "testExecutionIdOrKey": "10",
  "steps": [
    {
      "actualResult": "API returned 500 error"
    },
    {
      "actualResult": "API returned 200 success"
    }
  ]
}

Expected Output: Test steps are updated successfully, but no output is expected.

zephyr_get_test_execution_stepsA

Get details of test execution steps in Zephyr

Toolset: Test Executions

Parameters:

  • testExecutionIdOrKey (string) required: The ID or key of the test execution. Test execution keys are of the format [A-Z]+-E[0-9]+

  • maxResults (number): Specifies the maximum number of results to return in a single call. The default value is 10, and the maximum value that can be requested is 1000.

Note that the server may enforce a lower limit than requested, depending on resource availability or other internal constraints. If this happens, the result set may be truncated. Always check the maxResults value in the response to confirm how many results were actually returned. (default: 10)

  • startAt (number): Zero-indexed starting position. Should be a multiple of maxResults. (default: 0)

  • testDataRowNumber (number): The id of the test data row to retrieve.

Examples:

  1. Get the first 10 test execution steps for test execution with ID 1

{
  "testExecutionIdOrKey": "1",
  "maxResults": 10,
  "startAt": 0
}

Expected Output: The first 10 test execution steps with their details

  1. Get the first 10 test execution steps for test execution with key 'SA-E1'

{
  "testExecutionIdOrKey": "SA-E1",
  "maxResults": 10,
  "startAt": 0
}

Expected Output: The first 10 test execution steps with their details

  1. Get any test execution step for test execution with key 'SA-E1'

{
  "testExecutionIdOrKey": "SA-E1",
  "maxResults": 1
}

Expected Output: One test execution step with its details

  1. Get five test execution steps starting from the 7th test execution step for test execution with key 'SA-E1'

{
  "testExecutionIdOrKey": "SA-E1",
  "maxResults": 5,
  "startAt": 6
}

Expected Output: The 7th to the 11th test execution steps with their details

  1. Get test execution steps from the test data row 1 from test execution with key 'SA-E1'

{
  "testExecutionIdOrKey": "SA-E1",
  "testDataRowNumber": 1,
  "maxResults": 10,
  "startAt": 0
}

Expected Output: Test execution steps for the specified test data row

zephyr_get_test_execution_linksB

Get links for a specific test execution in Zephyr

Toolset: Test Executions

Parameters:

  • testExecutionIdOrKey (string) required: The ID or key of the test execution. Test execution keys are of the format [A-Z]+-E[0-9]+

Examples:

  1. Get the links oftest execution with id 1

{
  "testExecutionIdOrKey": "1"
}

Expected Output: The test execution links with its details

  1. Get the links of test execution with key 'PROJ-E123'

{
  "testExecutionIdOrKey": "PROJ-E123"
}

Expected Output: The test execution links with its details

zephyr_get_test_executions_linked_to_a_jira_issueA

Get test executions linked to a Jira issue in Zephyr

Toolset: Issue Links

Parameters:

  • issueKey (string) required: The key of the Jira issue

Examples:

  1. Check which test executions are linked to Jira issue PROJ-123

{
  "issueKey": "PROJ-123"
}

Expected Output: The List of test executions linked to Jira issue PROJ-123 with their keys and versions

zephyr_get_test_plansA

Get details of Test Plans in Zephyr

Toolset: Test Plans

Parameters:

  • projectKey (string): Jira project key filter

  • limit (number): Specifies the maximum number of results to return in a single call. The default value is 10, and the maximum value that can be requested is 1000.

Note that the server may enforce a lower limit than requested, depending on resource availability or other internal constraints. If this happens, the result set may be truncated. Always check the limit value in the response to confirm how many results were actually returned. (default: 10)

  • startAtId (number): Zero-indexed starting position for ID-based pagination. (default: 0)

  • updatedAfter (string): Filter only entities updated after the given time. Format: yyyy-MM-dd'T'HH:mm:ss'Z'

Examples:

  1. Get the first 10 Test Plans

{
  "limit": 10,
  "startAtId": 0
}

Expected Output: The first 10 Test Plans with their details

  1. Get any Test Plan

{
  "limit": 1
}

Expected Output: One Test Plan with its details

  1. Get five Test Plans starting from the ID 123

{
  "limit": 5,
  "startAtId": 123
}

Expected Output: Five Test Plans starting from the ID 123 with their details

  1. Get one Test Plan from the project PROJ

{
  "projectKey": "PROJ",
  "limit": 1
}

Expected Output: One Test Plan from project PROJ with its details

  1. Get Test Plans updated after a given time

{
  "updatedAfter": "2024-01-01T00:00:00Z",
  "limit": 10
}

Expected Output: Up to 10 Test Plans updated after 2024-01-01 with their details

qtm4j_get_projectsA

Get all projects from QTM4J with optional filtering

Toolset: Projects

Parameters:

  • projectId (number): Filter by specific project ID

  • search (string): Search text for project key or project name

  • qmetryEnabled (boolean): Filter by QMetry enabled status

  • startAt (number): Zero-indexed starting position for pagination (default: 0)

  • maxResults (number): Maximum number of results per page (1-100) (default: 100)

Output Description: JSON object containing paginated list of projects with IDs, keys, names, and QMetry status, along with pagination metadata

Use Cases: 1. Discover all projects available in QTM4J instance 2. Get project IDs and keys for reference in other operations 3. Find specific projects by ID 4. Search projects by text in project key or name 5. Filter projects by QMetry integration status 6. List projects with pagination for large QTM4J instances 7. Retrieve complete project details (ID, key, name, avatarUrl, projectTypeKey, qmetryEnabled, favorite) 8. Validate project access and permissions 9. Browse available projects before performing other operations

Examples:

  1. Get all projects (default pagination - first 100)

{}

Expected Output: List of all projects with IDs, keys, and names (first 100 projects)

  1. Get the first 10 projects

{
  "maxResults": 10
}

Expected Output: List of first 10 projects with their details

  1. Get a specific project by ID

{
  "projectId": 10000
}

Expected Output: Single project with ID 10000 including key, name, and QMetry status

  1. Search projects by text in project key or name

{
  "search": "SCRUM"
}

Expected Output: Projects matching 'SCRUM' search text in their project keys or names

  1. Get only QMetry-enabled projects

{
  "qmetryEnabled": true
}

Expected Output: List of projects that have QMetry integration enabled

  1. Get projects with custom pagination (page 2)

{
  "startAt": 50,
  "maxResults": 50
}

Expected Output: Second page of projects (items 51-100) with their details

  1. Search QMetry-enabled projects by text

{
  "search": "TEST",
  "qmetryEnabled": true
}

Expected Output: QMetry-enabled projects containing 'TEST' in their project keys

Hints: 1. Project IDs are numeric (e.g., 10000), project keys are strings (e.g., 'SCRUM') 2. Use 'projectId' parameter to filter by a specific project ID 3. Use 'search' parameter to search by text in project key or project name 4. Use 'qmetryEnabled' parameter to filter projects by QMetry integration status 5. Response contains complete project details: id, key, name, favorite, avatarUrl, projectTypeKey, qmetryEnabled 6. Pagination: startAt is zero-indexed, maxResults max is 100, default is 100 7. Default (no parameters) returns first 100 projects 8. Use 'isLast' in response to check if more pages are available 9. To get next page: increment startAt by maxResults (0 → 100 → 200) 10. Use 'total' in response for total count of matching projects

qtm4j_set_project_contextA

Set the active QTM4J project for the current session. Must be called before any project-specific operation. Pre-loads priority and status values so you can map user-provided names to valid options via NLP.

Toolset: Projects

Parameters:

  • projectKey (string) required: Project key (e.g., 'SCRUM'). Use the get_projects tool to discover available project keys.

Output Description: JSON object with projectId, projectKey, projectName, confirmation message, and availableFields. availableFields contains priority and status options for NLP mapping in subsequent tool calls.

Use Cases: 1. Set the active project at the start of a new conversation 2. Switch to a different project mid-conversation 3. Validate that a project key exists before performing operations 4. Establish project context required by all project-specific tools

Examples:

  1. Set SCRUM project as active

{
  "projectKey": "SCRUM"
}

Expected Output: Project context set to SCRUM (ID: 10000)

  1. Switch to AD project

{
  "projectKey": "AD"
}

Expected Output: Project context switched to AD

Hints: 1. CRITICAL: This tool MUST be called before ANY project-specific tool. 2. NEVER auto-select a project. If the user does not specify a project key, call get_projects first, present the list to the user and ask them to choose. Do NOT pick one on their behalf. 3. The project key must be an exact match (e.g., 'SCRUM', not 'scrum project'). 4. After calling this tool, use the availableFields in the response to map user input via NLP (e.g. user says 'Major' → send 'High', user says 'Critical' → send 'Blocker'). 5. Switching projects clears the cached field metadata of the previous project only. 6. If this tool is called again in the same session, it resets the context to the new project.

qtm4j_create_test_caseA

Create a new test case in a QTM4J project. Supports auto-resolving human-readable names for priority, status, labels, and components.

Toolset: Test Cases

Parameters:

  • summary (string) required: Test case summary/title

  • description (string): Test case description

  • folderId (number): Folder ID to place the test case in

  • priority (string): Priority name (e.g., 'High', 'Medium', 'Low'). Auto-resolved to ID.

  • status (string): Status name (e.g., 'To Do', 'In Progress', 'Done'). Auto-resolved to ID.

  • assignee (string): Assignee account ID

  • reporter (string): Reporter account ID

  • components (array): List of component names (e.g., ['UI', 'Cloud']). Auto-resolved to IDs.

  • labels (array): List of label names (e.g., ['Release_1', 'Sprint 1']). Auto-resolved to IDs.

  • steps (array): List of test steps

Output Description: JSON object with test case ID, key, version number, and summary. Warnings included if any fields were skipped.

Use Cases: 1. Create a basic test case with just a summary 2. Create a test case with priority and status using names from set_project_context response 3. Create a test case with labels and components by exact name 4. Add detailed test steps with step descriptions, test data, and expected results 5. Create a test case in a specific folder using folderId 6. Set assignee and reporter using Jira account IDs 7. Create test cases for manual testing with step-by-step instructions 8. Create test cases with all metadata fields for comprehensive test management

Examples:

  1. Create a simple test case (project must be set via set_project_context first)

{
  "summary": "Search Functionality"
}

Expected Output: Test case created with key 'SCRUM-TC-xxx'

  1. Create a test case with priority and status

{
  "summary": "Search Functionality",
  "description": "Verify search functionality works correctly",
  "priority": "High",
  "status": "To Do"
}

Expected Output: Test case created with resolved priority and status IDs

  1. Create a test case with labels, components, and steps

{
  "summary": "Search Functionality",
  "description": "Search Functionality Test",
  "priority": "High",
  "status": "To Do",
  "labels": [
    "Release_1",
    "Sprint 1"
  ],
  "components": [
    "UI",
    "Cloud"
  ],
  "steps": [
    {
      "stepDetails": "Enter a keyword in the search box",
      "testData": "Keyword = \"Test\"",
      "expectedResult": "The keyword should be visible in the search box"
    },
    {
      "stepDetails": "Click on the Search button",
      "testData": "Click on Search Button",
      "expectedResult": "Search results matching the keyword should be displayed"
    },
    {
      "stepDetails": "Verify the search results",
      "testData": "Expected results list",
      "expectedResult": "Results should be relevant to the entered keyword"
    }
  ]
}

Expected Output: Test case created with resolved labels/components/priority/status and 3 steps

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. Priority and status values were returned by set_project_context. Use NLP to map user input (e.g., 'Major' → 'High', 'Critical' → 'Blocker'). 3. If priority or status name is not found, the operation proceeds without that field and a warning is returned. 4. Labels and components are resolved on demand. If a name is not found, it is skipped with a warning. 5. Steps: ALWAYS include all three fields — stepDetails, testData, and expectedResult. Generate reasonable values if not provided. 6. folderId is optional. assignee and reporter accept Jira account IDs.

qtm4j_search_test_casesA

Search and filter test cases in a QTM4J project with support for pagination, field selection, and sorting.

Toolset: Test Cases

Parameters:

  • filter (object): Filter criteria — multiple fields are combined with AND; multiple values within one field use OR.

  • fields (array): Fields to include in each result object. If omitted, all fields are returned. Available fields: key, summary, description, priority, status, assignee, isAutomated, reporter, estimatedTime, labels, components, fixVersions, sprint, folders, updated, created, executed, flakyScore, passRateScore, aiGenerated, precondition, orderNo, seqNo, version. Example: ['key', 'summary', 'status', 'priority', 'assignee']

  • startAt (number): Zero-indexed offset for pagination (URL query param). First page: 0. Second page: 50 (when maxResults=50). Default: 0. (default: 0)

  • maxResults (number): Number of results per page (URL query param). Default: 50. Maximum: 50 (backend enforced). To page through results, increment startAt by 50 until startAt >= total. (default: 50)

  • sort (string): Sort pattern sent as a URL query param. Format: 'fieldName:order'. For multiple fields, comma-separate: 'priority:asc,created:desc'. Order values: 'asc' (oldest/lowest first) or 'desc' (newest/highest first). Sortable fields: key, summary, created, updated, status, priority, executed. Examples: 'created:desc', 'key:asc', 'priority:desc,created:asc'

Output Description: JSON object with total (total matching test cases), startAt, maxResults, and data (array of test case objects for this page).

Use Cases: 1. Search all test cases in a project 2. Filter test cases by status (e.g., 'Done', 'To Do', 'In Progress') 3. Filter test cases by priority (e.g., 'High', 'Medium', 'Low') 4. Filter test cases by labels and components 5. Search test cases by text in summary and description 6. Filter test cases by assignee or reporter 7. Filter test cases by creation/update date ranges 8. Filter test cases by automation status 9. Request only specific fields to reduce response size 10. Sort results using the sort query param (e.g., 'created:desc', 'priority:asc') 11. Paginate through large result sets using startAt and maxResults 12. Combine multiple filters for complex queries 13. Find all failed test cases that need attention (by status and execution date) 14. Get test cases for sprint planning (filter by sprint and status) 15. Audit test coverage by searching for untested areas (filter by executed date) 16. Find all manual test cases assigned to a specific tester 17. Generate test reports by filtering and sorting test cases 18. Track test case changes over time (filter by update date range) 19. Identify high-priority test cases pending review 20. Search for test cases related to specific features (using searchText) 21. Find duplicate or similar test cases (using searchText) 22. Get automated vs manual test distribution (filter by isAutomated) 23. Monitor test execution trends (filter by executed date ranges) 24. Prepare test execution schedules (filter by assignee and priority)

Examples:

  1. Search all test cases in the project

{}

Expected Output: Paginated list of all test cases with all fields (first 50 results)

  1. Filter test cases by status

{
  "filter": {
    "status": [
      "Done"
    ]
  }
}

Expected Output: List of test cases with 'Done' status

  1. Filter by multiple statuses and priorities with specific fields

{
  "filter": {
    "status": [
      "Done",
      "To Do"
    ],
    "priority": [
      "High",
      "Medium"
    ]
  },
  "fields": [
    "key",
    "summary",
    "status",
    "priority",
    "assignee"
  ]
}

Expected Output: Test cases matching the filters with only the selected fields returned

  1. Search test cases by text in summary/description

{
  "filter": {
    "searchText": "login functionality"
  }
}

Expected Output: Test cases containing 'login functionality' in summary or description

  1. Filter by labels and components

{
  "filter": {
    "labels": [
      "Release_1",
      "Sprint 1"
    ],
    "components": [
      "UI",
      "Cloud"
    ]
  }
}

Expected Output: Test cases tagged with the specified labels and components

  1. Filter by assignee and automation status

{
  "filter": {
    "assignee": [
      "712020:ddc8e24b-2de7-404b-b9ed-3d7b241e2ced"
    ],
    "isAutomated": false
  }
}

Expected Output: Manual test cases assigned to the specified user

  1. Filter by creation date range

{
  "filter": {
    "createdOnFrom": "01/Jan/2026",
    "createdOnTo": "31/Dec/2026"
  }
}

Expected Output: Test cases created during 2026

  1. Paginate and sort by creation date (newest first)

{
  "filter": {
    "status": [
      "Done"
    ]
  },
  "startAt": 0,
  "maxResults": 50,
  "sort": "created:desc"
}

Expected Output: First 50 'Done' test cases sorted by creation date, newest first

  1. Get all available fields for test cases

{
  "filter": {},
  "fields": [
    "key",
    "summary",
    "description",
    "priority",
    "status",
    "assignee",
    "isAutomated",
    "reporter",
    "estimatedTime",
    "labels",
    "components",
    "fixVersions",
    "sprint",
    "folders",
    "updated",
    "created",
    "executed",
    "flakyScore",
    "passRateScore",
    "aiGenerated",
    "precondition",
    "orderNo",
    "seqNo",
    "version"
  ]
}

Expected Output: Test cases with all available fields explicitly requested

  1. Filter by folder and fix version

{
  "filter": {
    "folders": [
      123,
      456
    ],
    "fixVersions": [
      789
    ]
  }
}

Expected Output: Test cases in the specified folders and fix versions

  1. Complex filter: multiple criteria combined with multi-field sort

{
  "filter": {
    "status": [
      "Done",
      "In Progress"
    ],
    "priority": [
      "High"
    ],
    "labels": [
      "Release_1"
    ],
    "isAutomated": false,
    "createdOnFrom": "01/Apr/2026",
    "createdOnTo": "30/Apr/2026"
  },
  "fields": [
    "key",
    "summary",
    "status",
    "priority",
    "created"
  ],
  "sort": "priority:asc,created:desc"
}

Expected Output: High-priority manual test cases created in April 2026 with 'Done' or 'In Progress' status, sorted by priority ascending then creation date descending

  1. Find all automated test cases for CI/CD pipeline

{
  "filter": {
    "isAutomated": true,
    "status": [
      "Done",
      "In Progress"
    ]
  },
  "fields": [
    "key",
    "summary",
    "status",
    "labels",
    "components"
  ]
}

Expected Output: Up to 50 automated test cases ready for execution in CI/CD

  1. Sprint planning: get pending test cases for a team, sorted by priority

{
  "filter": {
    "status": [
      "To Do",
      "In Progress"
    ],
    "assignee": [
      "712020:ddc8e24b-2de7-404b-b9ed-3d7b241e2ced",
      "712020:b8479b55-6d23-478c-a2ad-4c8ce176e1fc"
    ],
    "priority": [
      "High",
      "Medium"
    ]
  },
  "fields": [
    "key",
    "summary",
    "status",
    "priority",
    "assignee",
    "estimatedTime"
  ],
  "sort": "priority:desc"
}

Expected Output: Pending high and medium priority test cases assigned to the team, sorted by priority descending

  1. Test coverage report: find completed cases sorted oldest first

{
  "filter": {
    "status": [
      "Done"
    ]
  },
  "fields": [
    "key",
    "summary",
    "priority",
    "created",
    "assignee"
  ],
  "sort": "created:asc"
}

Expected Output: Completed test cases sorted by creation date, oldest first

  1. Find test cases by keyword for regression testing

{
  "filter": {
    "searchText": "authentication login",
    "status": [
      "Done"
    ]
  },
  "fields": [
    "key",
    "summary",
    "description",
    "labels",
    "components"
  ]
}

Expected Output: All completed test cases related to authentication/login functionality

  1. Weekly test execution summary

{
  "filter": {
    "executedOnFrom": "27/Apr/2026",
    "executedOnTo": "03/May/2026"
  },
  "fields": [
    "key",
    "summary",
    "status",
    "executed",
    "passRateScore",
    "flakyScore"
  ],
  "sort": "executed:desc"
}

Expected Output: Test cases executed in the past week with their pass rates and flaky scores, sorted most-recent first

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. REQUEST STRUCTURE: filter goes in the request body; fields, sort, startAt, and maxResults are URL query parameters. 3. The 'projectId' inside filter is auto-populated from the active project context if not provided. 4. All filter values accept string names directly — no ID resolution needed (e.g., status: ['Done'], priority: ['High']). 5. FIELDS: Pass as an array (sent as comma-separated URL param). Example: { fields: ['key', 'summary', 'status'] }. Omit to return all fields. 6. Available fields: key, summary, description, priority, status, assignee, isAutomated, reporter, estimatedTime, labels, components, fixVersions, sprint, folders, updated, created, executed, flakyScore, passRateScore, aiGenerated, precondition, orderNo, seqNo, version 7. SORTING: Use 'sort' with format 'fieldName:order' (asc/desc). Multiple fields: 'priority:asc,created:desc'. Sortable fields: key, summary, created, updated, status, priority, executed. 8. PAGINATION: startAt (default: 0) and maxResults (default: 50, max: 50) are sent as URL query params. Increment startAt by 50 to get the next page. Stop when startAt >= total. 9. Date format for all filter date fields: 'dd/MMM/yyyy' (e.g., '17/Apr/2026', '01/Jan/2026'). Case-sensitive. 10. FILTER LOGIC: Multiple values within one filter field use OR (status: ['Done', 'To Do'] = Done OR To Do). 11. FILTER LOGIC: Different filter fields are combined with AND (status + priority = both must match). 12. The 'searchText' filter searches both summary and description fields (case-insensitive). To get details of a specific test case by its key (e.g., 'SCRUM-TC-145'), pass the key as filter.searchText — there is no separate key filter field. 13. For assignee/reporter filters, use Jira account IDs (format: '712020:uuid'). Multiple IDs = OR logic. 14. Omitting filter entirely returns all test cases in the active project (paginated).

qtm4j_get_test_stepsA

Get test steps for a test case by its key and version. Accepts the human-readable key (e.g. 'SCRUM-TC-145') and resolves it to the internal ID automatically.

Toolset: Test Cases

Parameters:

  • key (string) required: Test case key in the format '{PROJECT_KEY}-TC-{number}', e.g. 'SCRUM-TC-145'. PROJECT_KEY is the Jira project key (e.g. 'SCRUM'). The number is the test case counter within that project (auto-incremented, not related to seqNo). Obtain keys from the search_test_cases tool or directly from QTM4J.

  • versionNo (number): Test case version number. Defaults to the latest version if omitted. Obtain from search_test_cases response field: version.versionNo

  • filter (object): Text filters for test steps — each field performs a substring match. Multiple fields are combined with AND.

  • startAt (number): Zero-indexed offset for pagination (URL query param). Default: 0. (default: 0)

  • maxResults (number): Number of steps per page (URL query param). Default: 50. Maximum: 100. (default: 50)

  • sort (string): Sort pattern (URL query param). Format: 'fieldName:order'. Sortable fields: stepDetails, testData, seqNo, expectedResult. Order values: 'asc' or 'desc'. Example: 'seqNo:asc'

Output Description: JSON object with total (total matching steps), startAt, maxResults, and data (array of step objects). Each step has: id, seqNo, stepDetails, testData, expectedResult, attachmentCount. Shared steps also have a 'shareable' object containing shareableTestcaseUID and shareableTestSteps array.

Use Cases: 1. View all steps of a test case before executing it 2. Review steps for a specific test case version 3. Filter steps by action text, test data, or expected result 4. Get steps for a test case found via search_test_cases 5. Inspect shared (reusable) steps embedded in a test case 6. Sort steps by sequence number to view them in execution order 7. Paginate through test cases that have a large number of steps

Examples:

  1. Get all steps for a test case (latest version)

{
  "key": "SCRUM-TC-145"
}

Expected Output: All steps for SCRUM-TC-145 with stepDetails, testData, expectedResult, and any shared step blocks

  1. Get steps for a specific version

{
  "key": "SCRUM-TC-145",
  "versionNo": 2
}

Expected Output: Steps for version 2 of SCRUM-TC-145

  1. Get steps in execution order

{
  "key": "SCRUM-TC-85",
  "sort": "seqNo:asc"
}

Expected Output: All steps sorted by sequence number ascending

  1. Filter steps by action text

{
  "key": "SCRUM-TC-32",
  "filter": {
    "stepDetails": "Open the application"
  }
}

Expected Output: Steps whose stepDetails contain 'Open the application'

  1. Filter steps by expected result

{
  "key": "SCRUM-TC-65",
  "filter": {
    "expectedResult": "logged in successfully"
  }
}

Expected Output: Steps whose expectedResult contains 'logged in successfully'

  1. Filter steps by test data

{
  "key": "SCRUM-TC-125",
  "filter": {
    "testData": "Username: user1"
  }
}

Expected Output: Steps with testData containing 'Username: user1'

  1. Paginate through many steps

{
  "key": "SCRUM-TC-105",
  "startAt": 0,
  "maxResults": 10,
  "sort": "seqNo:asc"
}

Expected Output: First 10 steps in sequence order

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. KEY FORMAT: '{PROJECT_KEY}-TC-{number}' — e.g. 'SCRUM-TC-145'. PROJECT_KEY is the Jira project key; the number is the test case counter within that project (auto-incremented, not the same as seqNo). 3. VERSION: versionNo defaults to the latest version. Get the version number from search_test_cases response: version.versionNo. 4. Use search_test_cases to discover test case keys before calling this tool. 5. SHAREABLE STEPS: Steps with a non-null 'shareable' field are references to shared/reusable test cases. The 'shareable.shareableTestSteps' array contains the embedded sub-steps with decimal seqNo values (e.g. '1.1', '1.2'). 6. FILTER: Each filter field is a substring match (case-insensitive). Multiple fields combine with AND. 7. SORT: 'seqNo:asc' shows steps in their natural execution order. Allowed sort fields: stepDetails, testData, seqNo, expectedResult. 8. PAGINATION: startAt and maxResults are URL query params. Default page size is 50, maximum is 100.

qtm4j_update_test_caseA

Update an existing test case in QTM4J. Supports auto-resolving human-readable names for priority, status, labels, and components. Labels and components support add/delete operations.

Toolset: Test Cases

Parameters:

  • key (string) required: Test case key in the format '{PROJECT_KEY}-TC-{number}', e.g. 'SCRUM-TC-145'. Automatically resolved to the internal ID and latest version.

  • versionNo (number): Test case version number to update. Defaults to the latest version if omitted.

  • summary (string): Updated test case summary/title.

  • description (string): Updated test case description.

  • precondition (string): Updated precondition — conditions that must be true before the test is executed.

  • priority (string): Priority name (e.g., 'High', 'Medium', 'Low'). Auto-resolved to ID. Use values from set_project_context response.

  • status (string): Status name (e.g., 'To Do', 'In Progress', 'Done'). Auto-resolved to ID. Use values from set_project_context response.

  • assignee (string): Assignee Jira account ID (e.g., '5b10a2844c20165700ede21f').

  • estimatedTime (string): Estimated time in HH:MM:SS format (e.g., '02:30:00').

  • labels (object): Labels to add or remove by name. Each name is auto-resolved to its ID.

  • components (object): Components to add or remove by name. Each name is auto-resolved to its ID.

Output Description: Confirmation object with the test case key, versionNo updated, and updated: true. Warnings are included if any field names could not be resolved.

Use Cases: 1. Change the priority of a test case (e.g., escalate to 'High') 2. Update the status of a test case after review 3. Add new labels or remove outdated ones without affecting other labels 4. Add or remove components from a test case 5. Update summary, description, or precondition text 6. Reassign a test case to a different team member 7. Set or update the estimated time for a test case 8. Batch-update metadata as part of sprint planning

Examples:

  1. Change the priority of a test case

{
  "key": "SCRUM-TC-145",
  "priority": "High"
}

Expected Output: Test case updated with new priority

  1. Add a label and remove an old one

{
  "key": "SCRUM-TC-145",
  "labels": {
    "add": [
      "Release_2"
    ],
    "delete": [
      "Release_1"
    ]
  }
}

Expected Output: Test case updated — Release_2 added, Release_1 removed

  1. Update summary, status, and add a component

{
  "key": "SCRUM-TC-32",
  "summary": "Verify login with MFA enabled",
  "status": "In Progress",
  "components": {
    "add": [
      "Auth"
    ]
  }
}

Expected Output: Test case summary and status updated, Auth component added

  1. Update a specific version

{
  "key": "SCRUM-TC-85",
  "versionNo": 2,
  "assignee": "5b10a2844c20165700ede21f",
  "estimatedTime": "01:30:00"
}

Expected Output: Version 2 of test case updated with new assignee and estimated time

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. KEY FORMAT: '{PROJECT_KEY}-TC-{number}' — e.g. 'SCRUM-TC-145'. 3. Priority and status values come from set_project_context. Use NLP to map user intent to available names. 4. If priority or status name is not found, the field is skipped with a warning and other fields are still updated. 5. Labels and components use add/delete — you can add and delete in a single call. Names are auto-resolved. 6. To delete ALL current entries of any add/delete field: first call search_test_cases with filter.searchText set to the test case key and include the relevant field in the fields list, extract all current names from the response, then pass them in the delete array of this tool. 7. Only provide the fields you want to change. Omitted fields remain unchanged on the server. 8. estimatedTime must be in HH:MM:SS format (e.g., '02:30:00'). 9. versionNo defaults to the latest version. Use search_test_cases to find available versions if needed.

qtm4j_create_test_cycleA

Create a new test cycle in a QTM4J project. Supports auto-resolving human-readable names for priority and status. Always creates in the 'MCP Generated' folder. projectId is injected automatically from the active project context.

Toolset: Test Cycles

Parameters:

  • summary (string) required: Short title of the test cycle. Must not be blank. Max 255 chars.

  • description (string): Detailed description of the test cycle. Max 65 535 characters.

  • priority (string): Priority name (e.g., 'High', 'Medium', 'Low'). Auto-resolved to ID.

  • status (string): Status name (e.g., 'To Do', 'In Progress', 'Done'). Auto-resolved to ID.

  • assignee (string): Assignee account ID

  • reporter (string): Reporter account ID

  • labels (array): List of label names (e.g., ['Release_1', 'Sprint 1']). Auto-resolved to IDs.

  • components (array): List of component names (e.g., ['UI', 'Cloud']). Auto-resolved to IDs.

  • plannedStartDate (string): Planned start date. Format: 'dd/MMM/yyyy HH:mm' e.g. '10/May/2026 00:00'. Must be ≤ plannedEndDate when both are provided.

  • plannedEndDate (string): Planned end date. Format: 'dd/MMM/yyyy HH:mm' e.g. '15/May/2026 00:00'. Must be ≥ plannedStartDate when both are provided.

Output Description: JSON object with the new test cycle's id and key (e.g. 'TRWT-TR-218'). Warnings included if any fields were skipped.

Use Cases: 1. Create a test cycle with summary, priority, status, labels, or components 2. Set planned start and end dates on a new test cycle

Examples:

  1. Create a simple test cycle (project must be set via set_project_context first)

{
  "summary": "Smoke Test Cycle"
}

Expected Output: Test cycle created with key 'SCRUM-TR-xxx'

  1. Create a test cycle with priority, status, labels, and components

{
  "summary": "Regression Suite – Sprint 42",
  "description": "End-to-end regression covering payment and checkout modules.",
  "priority": "High",
  "status": "To Do",
  "labels": [
    "Release_1",
    "Sprint 1"
  ],
  "components": [
    "UI",
    "Cloud"
  ],
  "plannedStartDate": "10/May/2026 00:00",
  "plannedEndDate": "15/May/2026 00:00"
}

Expected Output: Test cycle created with resolved priority, status, labels, and components

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. If any priority, status, label, or component name cannot be resolved, the cycle is still created but a warning is returned. Suggest the closest available value from the set_project_context response and ask the user to confirm before retrying. 3. All cycles are placed in the 'MCP Generated' folder — do not pass folderId. 4. Date format: 'dd/MMM/yyyy HH:mm' e.g. '10/May/2026 00:00'. Month must be capitalised. plannedStartDate must be ≤ plannedEndDate.

qtm4j_search_test_cyclesA

Search for test cycles in a QTM4J project by status, owner, folder, date range, or keyword. projectId is injected automatically from the active project context.

Toolset: Test Cycles

Parameters:

  • filter (object): Filter criteria — multiple fields are combined with AND; multiple values within one field use OR.

  • fields (array): Fields to include in each result object. If omitted, server returns its default set (NOTE: plannedStartDate and plannedEndDate are NOT in the default response — include them explicitly when needed). Available fields: key, summary, description, status, priority, assignee, reporter, isAutomated, plannedStartDate, plannedEndDate, labels, components, fixVersions, sprint, defectCount, estimatedTime, actualTime, created, updated. Example: ['key', 'summary', 'status', 'assignee', 'plannedStartDate', 'plannedEndDate']

  • startAt (number): Zero-indexed offset for pagination (URL query param). Default: 0. (default: 0)

  • maxResults (number): Number of results per page (URL query param). Default: 20. Maximum: 100. To page through results, increment startAt by 20 until startAt >= total. (default: 20)

  • sort (string): Sort pattern sent as a URL query param. Format: 'fieldName:order'. Default: 'key:asc'. Order values: 'asc' (lowest/oldest first) or 'desc' (highest/newest first). Sortable fields: key, summary, status, plannedStartDate, plannedEndDate, defectCount. Examples: 'key:asc', 'plannedStartDate:desc' (default: "key:asc")

Output Description: JSON object with total (matching cycles across all pages), startAt, maxResults, and data (array of test cycle objects for this page). Each item always has id and key. Other fields depend on what was requested via the fields parameter.

Use Cases: 1. Find test cycles by status, priority, assignee, reporter, or folder 2. Find test cycles by planned execution date range (plannedStartDate / plannedEndDate) 3. Find test cycles created or updated within a date range (createdOn / updatedOn) 4. Search test cycles by keyword across key, summary, and description 5. Paginate, sort, and select specific response fields

Examples:

  1. Find all in-progress and to-do cycles

{
  "filter": {
    "status": [
      "In Progress",
      "To Do"
    ]
  }
}

Expected Output: Paginated list of matching test cycles

  1. Find cycles owned by a specific user

{
  "filter": {
    "assignee": [
      "5b10a2844c20165700ede21f"
    ]
  }
}

Expected Output: Test cycles assigned to that user

  1. Find cycles with planned start date in a range, requesting date fields explicitly

{
  "filter": {
    "plannedStartDate": "01/Apr/2026,30/Apr/2026"
  },
  "fields": [
    "key",
    "summary",
    "status",
    "assignee",
    "plannedStartDate",
    "plannedEndDate"
  ]
}

Expected Output: Cycles with planned start date in April 2026 including date fields

  1. Keyword search with sort, pagination, and selected fields

{
  "filter": {
    "searchText": "regression"
  },
  "fields": [
    "key",
    "summary",
    "status",
    "assignee"
  ],
  "sort": "plannedStartDate:asc",
  "startAt": 0,
  "maxResults": 25
}

Expected Output: Cycles matching 'regression', sorted by planned start date

  1. Find cycles created last week

{
  "filter": {
    "createdOn": "01/May/2026,07/May/2026"
  },
  "fields": [
    "key",
    "summary",
    "status",
    "assignee"
  ],
  "sort": "key:asc"
}

Expected Output: Test cycles created between 01 May and 07 May 2026

  1. Find high-priority cycles updated recently by reporter

{
  "filter": {
    "priority": [
      "High"
    ],
    "reporter": [
      "5b10a2844c20165700ede21f"
    ],
    "updatedOn": "01/May/2026,21/May/2026"
  },
  "fields": [
    "key",
    "summary",
    "status",
    "priority",
    "assignee"
  ]
}

Expected Output: High-priority cycles updated in May 2026 reported by that user

  1. All filters combined with explicit field selection

{
  "filter": {
    "status": [
      "In Progress"
    ],
    "priority": [
      "High",
      "Medium"
    ],
    "assignee": [
      "5b10a2844c20165700ede21f"
    ],
    "folderId": 109987,
    "plannedStartDate": "02/Apr/2026,15/May/2026",
    "searchText": "regression"
  },
  "fields": [
    "key",
    "summary",
    "status",
    "priority",
    "assignee",
    "plannedStartDate"
  ],
  "sort": "plannedStartDate:asc",
  "maxResults": 25
}

Expected Output: Test cycles matching all specified filters with selected fields

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. SUPPORTED FILTER FIELDS: status, priority, assignee, reporter, folderId, labels, components, plannedStartDate, plannedEndDate, searchText, createdOn, updatedOn, isAutomated, aiGenerated. Do NOT use any other filter field names. 3. DATE FILTERS: createdOn = creation date; updatedOn = last-updated date; plannedStartDate / plannedEndDate = planned execution window. Format: 'dd/MMM/yyyy,dd/MMM/yyyy' e.g. '01/May/2026,21/May/2026'. Month is case-sensitive. 'Created last week' → createdOn, NOT plannedStartDate. 4. FIELDS: Pass as an array to select what to return. plannedStartDate and plannedEndDate are NOT in the default response — include them explicitly. Available: key, summary, description, status, priority, assignee, reporter, isAutomated, plannedStartDate, plannedEndDate, labels, components, fixVersions, sprint, defectCount, estimatedTime, actualTime, created, updated. 5. REQUEST STRUCTURE: filter → request body; fields, sort, startAt, maxResults → URL query params. 6. SORT: Allowed fields: key, summary, status, plannedStartDate, plannedEndDate, defectCount. Format: 'fieldName:asc' or 'fieldName:desc' e.g. 'plannedStartDate:asc'. 7. FOLDER ID: folderId in fields.testCycle and fields.testCase is a numeric ID. Tell the user they can get it by right-clicking the target folder in QTM4J and selecting 'Copy Folder Id'. Always ask the user for the numeric ID directly — never try to look it up.

qtm4j_update_test_cycleA

Update an existing test cycle in QTM4J by its human-readable key (e.g. 'SCRUM-TR-101'). Supports auto-resolving human-readable names for status and priority. Labels and components support add/delete operations. Only the fields you provide are changed — omitted fields are left as-is. projectId is injected automatically from the active project context.

Toolset: Test Cycles

Parameters:

  • key (string) required: Test cycle key in the format '{PROJECT_KEY}-TR-{number}', e.g. 'SCRUM-TR-101'. Used directly as the API path parameter.

  • summary (string): Updated test cycle name / title. Max 255 characters.

  • description (string): Updated description. Pass null to clear the existing value. Max 65 535 characters.

  • status (string): Status name (e.g., 'To Do', 'In Progress', 'Done'). Auto-resolved to ID. Use values from set_project_context response. Pass null to clear.

  • priority (string): Priority name (e.g., 'High', 'Medium', 'Low'). Auto-resolved to ID. Use values from set_project_context response. Pass null to clear.

  • plannedStartDate (string): Format: 'dd/MMM/yyyy HH:mm' e.g. '15/May/2026 09:00'. Month must be capitalised (May not may). Pass null to clear the existing value.

  • plannedEndDate (string): Format: 'dd/MMM/yyyy HH:mm' e.g. '15/May/2026 09:00'. Month must be capitalised (May not may). Pass null to clear the existing value.

  • assignee (string): Assignee Jira account ID (e.g., '5b10a2844c20165700ede21f'). Pass null to unassign.

  • reporter (string): Reporter Jira account ID (e.g., '5b10a2844c20165700ede21f'). Pass null to clear.

  • labels (object): Labels to add or remove by name. Each name is auto-resolved to its ID.

  • components (object): Components to add or remove by name. Each name is auto-resolved to its ID.

Output Description: Confirmation object with the test cycle key and updated: true. Warnings are included if any field names could not be resolved.

Use Cases: 1. Update summary, status, priority, planned dates, assignee, or reporter 2. Clear a nullable field by passing null (e.g. description: null removes text, assignee: null unassigns owner) 3. Add or remove labels and components atomically without affecting other entries 4. Apply multiple field updates in a single call

Examples:

  1. Rename a test cycle

{
  "key": "SCRUM-TR-101",
  "summary": "Regression Cycle - Sprint 12 Updated"
}

Expected Output: Test cycle updated with new summary

  1. Change status and update planned dates

{
  "key": "SCRUM-TR-101",
  "status": "In Progress",
  "plannedStartDate": "01/May/2026 09:00",
  "plannedEndDate": "31/May/2026 18:00"
}

Expected Output: Test cycle status and planned dates updated

  1. Add a label and remove an old one

{
  "key": "SCRUM-TR-101",
  "labels": {
    "add": [
      "Regression",
      "Smoke"
    ],
    "delete": [
      "Sprint1"
    ]
  }
}

Expected Output: Test cycle updated — Regression and Smoke labels added, Sprint1 removed

  1. Clear the description text

{
  "key": "SCRUM-TR-101",
  "description": null
}

Expected Output: Test cycle description cleared

  1. Unassign the owner and clear planned dates

{
  "key": "SCRUM-TR-101",
  "assignee": null,
  "plannedStartDate": null,
  "plannedEndDate": null
}

Expected Output: Test cycle owner unassigned and planned dates cleared

  1. Full update with all fields

{
  "key": "SCRUM-TR-101",
  "summary": "Final Regression Cycle",
  "description": "Updated for sprint 12.",
  "status": "In Progress",
  "priority": "High",
  "plannedStartDate": "15/May/2026 09:00",
  "plannedEndDate": "30/May/2026 18:00",
  "assignee": "5b10a2844c20165700ede21f",
  "labels": {
    "add": [
      "Regression"
    ],
    "delete": [
      "Sprint1"
    ]
  },
  "components": {
    "add": [
      "Backend"
    ],
    "delete": [
      "Frontend"
    ]
  }
}

Expected Output: Test cycle updated with all specified fields

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. KEY FORMAT: '{PROJECT_KEY}-TR-{number}' — e.g. 'SCRUM-TR-101'. 3. Pass explicit null to CLEAR a nullable field — e.g. description: null removes the description text, assignee: null unassigns the owner, plannedStartDate: null removes the date. Omitting a field leaves it unchanged. 4. Status and priority are auto-resolved from human-readable names loaded by set_project_context. If a name cannot be resolved, the cycle is still updated and a warning is returned. 5. Labels and components use add/delete — names are auto-resolved to IDs. Both operations can be combined in a single call. 6. Date format: 'dd/MMM/yyyy HH:mm' e.g. '15/May/2026 09:00'. Month must be capitalised (May not may or MAY). 7. Archived test cycles cannot be updated — the server returns 400. Unarchive first if needed.

qtm4j_start_new_executionA

Start a new test case execution within a test cycle. Looks up the internal map ID from testCycleKey and testCaseKey; resolves environmentId and buildId names to numeric IDs.

Toolset: Test Executions

Parameters:

  • testCycleKey (string) required: Test cycle key in the format '{PROJECT_KEY}-TR-{number}', e.g. 'SCRUM-TR-101'. Used directly as the API path parameter.

  • testCaseKey (string) required: Test case key in the format '{PROJECT_KEY}-TC-{number}', e.g. 'SCRUM-TC-145'.

  • assignee (string): Jira account ID of the user to assign this execution to (e.g. '5e4a642c1c9d440008f2a2b4'). This is the account ID, not a display name.

  • executionPlannedDate (string): Planned execution date. Format: 'dd/MMM/yyyy' e.g. '15/Oct/2025'. Month must be capitalised (Oct, not oct or OCT).

  • environmentId (string): Environment name (e.g. 'Production', 'Staging', 'Google Chrome', 'Firefox'). Auto-resolved to its numeric ID; an unresolved name is dropped and a warning is returned.

  • buildId (string): Build name (e.g. 'Build 2.0', '1.0.0'). Auto-resolved to its numeric ID; an unresolved name is dropped and a warning is returned.

  • actualTime (string): Time already spent on the execution. Format: 'HH:mm:ss' e.g. '02:30:00' (2 hours 30 minutes 0 seconds).

  • cloneFrom (number): Source testCaseExecutionId to clone. When set, the new execution copies the source's execution and all other body fields are ignored by the server.

  • cloneExecutionCustomFields (boolean): When true, custom field values from the previous execution of this test case are copied into the new execution.

Output Description: Confirmation object with testCycleKey, testCaseKey, and created: true (set when server returns 204).

Use Cases: 1. Start a fresh execution for a test case in a test cycle 2. Clone an existing execution

Examples:

  1. Start an execution for a test case (minimal)

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42"
}

Expected Output: { testCycleKey: 'PROJ-TR-101', testCaseKey: 'PROJ-TC-42', created: true }

  1. Start execution with environment, build and planned date

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "environmentId": "Production",
  "buildId": "Build 2.0",
  "executionPlannedDate": "15/Oct/2025",
  "assignee": "5e4a642c1c9d440008f2a2b4"
}

Expected Output: { testCycleKey: 'PROJ-TR-101', testCaseKey: 'PROJ-TC-42', created: true }

  1. Clone an existing execution

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "cloneFrom": 725981
}

Expected Output: { testCycleKey: 'PROJ-TR-101', testCaseKey: 'PROJ-TC-42', created: true }

  1. Start a fresh execution and carry over custom field values from the previous execution

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "cloneExecutionCustomFields": true
}

Expected Output: { testCycleKey: 'PROJ-TR-101', testCaseKey: 'PROJ-TC-42', created: true }

Hints: 1. Call set_project_context before this tool. 2. executionPlannedDate must be in 'dd/MMM/yyyy' format (e.g. '15/Oct/2025', month 3-letter capitalised). Normalize from any user-provided format before calling. 3. When cloneFrom is non-zero, the server ignores all body fields. 4. assignee must be a Jira account ID (e.g. '5e4a642c1c9d440008f2a2b4'), not a display name. 5. environmentId and buildId accept name as strings that are resolved to numeric IDs; unresolved names are dropped and a warning is returned. 6. actualTime must be in 'HH:mm:ss' format (e.g. '02:30:00'). Always include seconds.

qtm4j_update_test_case_executionA

Update a test case execution (execution result, comment, environment, build, assignee, planned date, actual time). Looks up testCaseExecutionId from testCycleKey and testCaseKey; resolves executionResultId, environmentId, and buildId names to numeric IDs.

Toolset: Test Executions

Parameters:

  • testCycleKey (string) required: Test cycle key in the format '{PROJECT_KEY}-TR-{number}', e.g. 'SCRUM-TR-101'. Used directly as the API path parameter.

  • testCaseKey (string) required: Test case key in the format '{PROJECT_KEY}-TC-{number}', e.g. 'SCRUM-TC-145'.

  • executionResultId (string): Execution result name, e.g. 'Pass', 'Fail', 'Blocked', 'In Progress', 'Not Executed'. Project-specific (custom results allowed); resolved case-insensitively to a numeric executionResultId.

  • comment (string): Execution comment. Pass null to clear the existing comment.

  • actualTime (string): Time already spent on the execution. Format: 'HH:mm:ss' e.g. '02:30:00' (2 hours 30 minutes 0 seconds). Pass null to clear.

  • executionAssignee (string): Jira account ID of the assignee (not a display name). Pass null to unassign.

  • environmentId (string): Environment name (e.g. 'Production', 'Staging', 'Google Chrome', 'Firefox'). Auto-resolved to its numeric ID; an unresolved name is dropped and a warning is returned.

  • executionPlannedDate (string): Planned execution date. Format: 'dd/MMM/yyyy' e.g. '15/Oct/2025'. Month must be capitalised (Oct, not oct or OCT). Pass null to clear.

  • buildId (string): Build name (e.g. 'Build 2.0', '1.0.0'). Auto-resolved to its numeric ID; an unresolved name is dropped and a warning is returned. Pass null to clear.

Output Description: Confirmation object with testCycleKey, testCaseKey, and updated: true. Warnings are returned in content if any resolvable field (executionResultId, environmentId, buildId) could not be resolved and was dropped.

Use Cases: 1. Set a test case execution result (e.g. Pass, Fail, Blocked) 2. Update comment, environment, build, assignee, planned date, or actual time on an execution

Examples:

  1. Mark test case as Pass

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "executionResultId": "Pass"
}

Expected Output: { testCycleKey: 'PROJ-TR-101', testCaseKey: 'PROJ-TC-42', updated: true }

  1. Update with comment, environment, and actual time

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "executionResultId": "Pass",
  "comment": "All smoke tests passed.",
  "environmentId": "Production",
  "actualTime": "01:30:00"
}

Expected Output: { testCycleKey: 'PROJ-TR-101', testCaseKey: 'PROJ-TC-42', updated: true }

  1. Clear comment

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "comment": null
}

Expected Output: { testCycleKey: 'PROJ-TR-101', testCaseKey: 'PROJ-TC-42', updated: true }

Hints: 1. Call set_project_context before this tool. 2. At least one updatable field must be provided. 3. environmentId and buildId accept environment/build name as strings that are resolved to numeric IDs; unresolved names are dropped and a warning is returned. 4. actualTime must be in 'HH:mm:ss' format (e.g. '01:30:00'). Always include seconds

qtm4j_update_test_step_executionA

Update a test step execution (execution result, actual result, comment). Looks up testStepExecutionId from testCycleKey, testCaseKey, and step sequence number; resolves executionResultId name to a numeric ID.

Toolset: Test Executions

Parameters:

  • testCycleKey (string) required: Test cycle key in the format '{PROJECT_KEY}-TR-{number}', e.g. 'SCRUM-TR-101'. Used directly as the API path parameter.

  • testCaseKey (string) required: Test case key in the format '{PROJECT_KEY}-TC-{number}', e.g. 'SCRUM-TC-145'.

  • testStepSeqNo (number) required: sequence number of the step to update (e.g. 2 = the second step).

  • executionResultId (string): Execution result name, e.g. 'Pass', 'Fail', 'Blocked', 'In Progress', 'Not Executed'. Project-specific (custom results allowed); resolved case-insensitively to a numeric executionResultId.

  • comment (string): Step execution comment. Pass null to clear the existing comment.

  • actualResult (string): Actual result for this test step. Set to null to clear the existing value.

Output Description: Confirmation object with testCycleKey, testCaseKey, testStepSeqNo, and updated: true. executionResultName is included when the server returns it. Warnings are returned in content if executionResultId name could not be resolved.

Use Cases: 1. Set a test step execution result (e.g. Pass, Fail, Blocked) 2. Update actualResult or comment on a test step execution

Examples:

  1. Mark step 2 as Pass

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "testStepSeqNo": 2,
  "executionResultId": "Pass"
}

Expected Output: { testCycleKey: 'PROJ-TR-101', testCaseKey: 'PROJ-TC-42', testStepSeqNo: 2, executionResultName: 'Pass', updated: true }

  1. Update step 3 with actualResult and comment

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "testStepSeqNo": 3,
  "executionResultId": "Fail",
  "actualResult": "Button not found on page.",
  "comment": "Reproduced consistently in Chrome."
}

Expected Output: { testCycleKey: 'PROJ-TR-101', testCaseKey: 'PROJ-TC-42', testStepSeqNo: 3, executionResultName: 'Fail', updated: true }

  1. Clear actualResult on step 1

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "testStepSeqNo": 1,
  "actualResult": null
}

Expected Output: { testCycleKey: 'PROJ-TR-101', testCaseKey: 'PROJ-TC-42', testStepSeqNo: 1, updated: true }

Hints: 1. Call set_project_context before this tool. 2. At least one updatable field must be provided.

qtm4j_link_bugs_to_test_case_executionA

Link Jira bug keys to a test case execution. Looks up testCaseExecutionId from testCycleKey and testCaseKey; resolves bug keys to numeric defect IDs automatically.

Toolset: Test Executions

Parameters:

  • testCycleKey (string) required: Test cycle key in the format '{PROJECT_KEY}-TR-{number}', e.g. 'SCRUM-TR-101'. Used directly as the API path parameter.

  • testCaseKey (string) required: Test case key in the format '{PROJECT_KEY}-TC-{number}', e.g. 'SCRUM-TC-145'.

  • defectIDs (any): Jira issue keys of the bugs to link (e.g. ['PROJ-456', 'PROJ-789']). Pass Jira keys — not numeric IDs. Required if filter.jql is not provided; duplicates removed automatically.

  • filter (object): JQL filter to select which bugs should be linked. Use instead of or in addition to defectIDs.

  • returnLinkedDefectCount (boolean): When true, the response includes linkedDefectCount (the number of bugs linked). Defaults to true. (default: true)

Output Description: Confirmation object with testCycleKey, testCaseKey, linked: true, and linkedDefectCount (by default). warningMessages is included when the server reports per-bug issues.

Use Cases: 1. Link one or more Jira bugs to a test case execution in a single request, supporting both single and bulk linking operations.

Examples:

  1. Link two bugs to a test case execution

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "defectIDs": [
    "PROJ-456",
    "PROJ-789"
  ]
}

Expected Output: { testCycleKey: 'PROJ-TR-101', testCaseKey: 'PROJ-TC-42', linked: true, linkedDefectCount: 2 }

  1. Link a bug and suppress defect count in response

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "defectIDs": [
    "PROJ-456"
  ],
  "returnLinkedDefectCount": false
}

Expected Output: { testCycleKey: 'PROJ-TR-101', testCaseKey: 'PROJ-TC-42', linked: true }

  1. Link bugs using a JQL filter

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "filter": {
    "jql": "project = PROJ AND issuetype = Bug AND status = 'To Do'"
  }
}

Expected Output: { testCycleKey: 'PROJ-TR-101', testCaseKey: 'PROJ-TC-42', linked: true, linkedDefectCount: 5 }

Hints: 1. Call set_project_context before this tool. 2. An execution must already be started for the test case before bugs can be linked. 3. If the user provides a JQL expression, pass it as the filter.jql field. Correct or normalize JQL before calling this tool if needed — the handler passes it through unchanged.

qtm4j_link_bugs_to_test_step_executionA

Link Jira bug keys to a test step execution. Looks up testStepExecutionId from testCycleKey, testCaseKey, and step sequence number; resolves bug keys to numeric defect IDs automatically.

Toolset: Test Executions

Parameters:

  • testCycleKey (string) required: Test cycle key in the format '{PROJECT_KEY}-TR-{number}', e.g. 'SCRUM-TR-101'. Used directly as the API path parameter.

  • testCaseKey (string) required: Test case key in the format '{PROJECT_KEY}-TC-{number}', e.g. 'SCRUM-TC-145'.

  • testStepSeqNo (number) required: sequence number of the test step within the test case (e.g. 2 = the second step).

  • defectIDs (any): Jira issue keys of the bugs to link (e.g. ['PROJ-456', 'PROJ-789']). Pass Jira keys — not numeric IDs. Required if filter.jql is not provided; duplicates removed automatically.

  • filter (object): JQL filter to select which bugs should be linked. Use instead of or in addition to defectIDs.

  • returnLinkedDefectCount (boolean): When true, the response includes linkedDefectCount (the number of bugs linked). Defaults to true. (default: true)

Output Description: Confirmation object with testCycleKey, testCaseKey, linked: true, and linkedDefectCount (by default). warningMessages is included when the server reports per-bug issues.

Use Cases: 1. Link one or more Jira bugs to a specific test step execution in a single request, supporting both single and bulk linking operations.

Examples:

  1. Link a bug to step 2 of a test case execution

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "testStepSeqNo": 2,
  "defectIDs": [
    "PROJ-456"
  ]
}

Expected Output: { testCycleKey: 'PROJ-TR-101', testCaseKey: 'PROJ-TC-42', linked: true, linkedDefectCount: 1 }

  1. Link multiple bugs to step 3 and suppress defect count

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "testStepSeqNo": 3,
  "defectIDs": [
    "PROJ-456",
    "PROJ-789"
  ],
  "returnLinkedDefectCount": false
}

Expected Output: { testCycleKey: 'PROJ-TR-101', testCaseKey: 'PROJ-TC-42', linked: true }

  1. Link bugs to a step using a JQL filter

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "testStepSeqNo": 1,
  "filter": {
    "jql": "project = PROJ AND status = Open"
  }
}

Expected Output: { testCycleKey: 'PROJ-TR-101', testCaseKey: 'PROJ-TC-42', linked: true, linkedDefectCount: 2 }

Hints: 1. Call set_project_context before this tool. 2. An execution must already be started for the test case before bugs can be linked. 3. If the user provides a JQL expression, pass it as the filter.jql field. Correct or normalize JQL before calling if needed — the handler passes it through unchanged.

qtm4j_get_linked_bugs_of_test_case_executionA

Retrieve Jira bugs linked to a test case execution with optional priority and status filtering. Looks up testCaseExecutionId from testCycleKey and testCaseKey; resolves filter names to numeric IDs.

Toolset: Test Executions

Parameters:

  • testCycleKey (string) required: Test cycle key in the format '{PROJECT_KEY}-TR-{number}', e.g. 'SCRUM-TR-101'. Used directly as the API path parameter.

  • testCaseKey (string) required: Test case key in the format '{PROJECT_KEY}-TC-{number}', e.g. 'SCRUM-TC-145'.

  • filter (object): Filter criteria for linked bugs. Omit to return all linked bugs. priority and status names are resolved to numeric IDs; unresolvable names are skipped with a warning.

  • level (string): Execution level filter. Default: 'testcase_execution, teststep_execution' (both levels). Use 'testcase_execution' for test-case-level links only, 'teststep_execution' for step-level links only. (default: "testcase_execution, teststep_execution")

  • startAt (number): Zero-based index of the first result to return (pagination offset). (default: 0)

  • maxResults (number): Maximum number of bugs to return per page. Range 1–100; defaults to 20. (default: 20)

Output Description: JSON object with startAt, maxResults, total, and data array of linked bug objects. Each bug has: id, key, summary, status, priority, issueType, level, stepSeqNo, parameterGroup.

Use Cases: 1. List all Jira bugs linked to a test case execution 2. Filter linked bugs by priority or status

Examples:

  1. Get all linked bugs for a test case execution

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42"
}

Expected Output: Paginated list of all bugs linked to the test case execution

  1. Filter by priority

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "filter": {
    "priority": [
      "High"
    ]
  }
}

Expected Output: Linked bugs with High priority

  1. Filter by status

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "filter": {
    "status": [
      "To Do",
      "In Progress"
    ]
  }
}

Expected Output: Linked bugs in To Do or In Progress status

Hints: 1. Call set_project_context before this tool. 2. An empty result (total = 0) means no bugs are linked — it is not an error. 3. priority and status names are resolved to numeric IDs; unresolved names are skipped with a warning. 4. Use get_linked_bugs_of_test_step_execution to retrieve bugs linked at a specific step level.

qtm4j_get_linked_bugs_of_test_step_executionA

Retrieve Jira bugs linked to a test step execution with optional priority and status filtering. Looks up testStepExecutionId from testCycleKey, testCaseKey, and step sequence number; resolves filter names to numeric IDs.

Toolset: Test Executions

Parameters:

  • testCycleKey (string) required: Test cycle key in the format '{PROJECT_KEY}-TR-{number}', e.g. 'SCRUM-TR-101'. Used directly as the API path parameter.

  • testCaseKey (string) required: Test case key in the format '{PROJECT_KEY}-TC-{number}', e.g. 'SCRUM-TC-145'.

  • testStepSeqNo (number) required: sequence number of the test step within the test case (e.g. 2 = the second step).

  • filter (object): Filter criteria for linked bugs. Omit to return all linked bugs. priority and status names are resolved to numeric IDs; unresolvable names are skipped with a warning.

  • startAt (number): Zero-based index of the first result to return (pagination offset). (default: 0)

  • maxResults (number): Maximum number of bugs to return per page. Range 1–100; defaults to 20. (default: 20)

Output Description: JSON object with startAt, maxResults, total, and data array of linked bug objects. Each bug has: id, key, summary, status, priority, issueType, level, stepSeqNo, parameterGroup.

Use Cases: 1. List all Jira bugs linked to a specific test step execution 2. Filter step-level linked bugs by priority or status

Examples:

  1. Get linked bugs for step 2

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "testStepSeqNo": 2
}

Expected Output: Bugs linked to step 2 of the execution

  1. Filter by priority

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "testStepSeqNo": 1,
  "filter": {
    "priority": [
      "High"
    ]
  }
}

Expected Output: High-priority bugs linked to step 1

  1. Filter by status

{
  "testCycleKey": "PROJ-TR-101",
  "testCaseKey": "PROJ-TC-42",
  "testStepSeqNo": 1,
  "filter": {
    "status": [
      "In Progress"
    ]
  }
}

Expected Output: In Progress bugs linked to step 1

Hints: 1. Call set_project_context before this tool. 2. An empty result (total = 0) means no bugs are linked — it is not an error. 3. priority and status names are resolved to numeric IDs; unresolved names are skipped with a warning. 4. Use get_linked_bugs_of_test_case_execution to retrieve all bugs on the test case execution across all steps.

qtm4j_upload_automation_resultA

Upload an automation result file to QTM4J and map the results to a test cycle. Supports JUnit XML, TestNG XML, Cucumber JSON, QAF, HP UFT, and SpecFlow formats.

Toolset: Test Automation

Parameters:

  • filePath (string) required: Path to the automation result file on disk. Filesystem contents can change between turns — always resolve this from a fresh scan, never from a previously seen path. Supported extensions: .xml, .json, .zip

  • format (enum) required: Format of the result file. Supported values: cucumber, testng, junit, qaf, hpuft, specflow

  • testCycleToReuse (string): Work key of an existing test cycle to reuse (e.g. 'TR-PRJ-1'). If omitted, a new test cycle is created.

  • environment (string): Name of the environment on which the test cycle was executed (e.g. 'Chrome', 'Staging'). Defaults to 'No Environment'.

  • build (string): Build name or version for the test cycle execution (e.g. '1.0.0-beta'). Defaults to blank.

  • isZip (boolean): Set to true when uploading a ZIP archive containing result files. Required for QAF format. (default: false)

  • attachFile (boolean): Set to true to upload attachments referenced in execution results. (default: false)

  • matchTestSteps (boolean): true — match test cases by summary AND test steps. false — match by summary or key only. (default: true)

  • appendTestName (boolean): Applicable to JUnit/TestNG only. Appends suite/test name to method name in test case summary.

  • fields (object): Additional fields to set on the test cycle, test case, and/or test case execution created during import.

Output Description: trackingId to poll import status, a message from the API, the filePath uploaded, and the format used.

Use Cases: 1. Upload automation results to QTM4J 2. Import test results from a CI/CD pipeline run 3. Link test results to an existing test cycle 4. Create a new test cycle from automation results 5. Upload JUnit, TestNG, Cucumber, QAF, HP UFT, or SpecFlow result files

Examples:

  1. User says 'upload my test results to QTM4J' — scan workspace, find single result file, confirm and upload

{
  "filePath": "./target/surefire-reports/TEST-results.xml",
  "format": "junit"
}

Expected Output: trackingId returned; import processing started in QTM4J

  1. User wants results linked to an existing test cycle

{
  "filePath": "./reports/cucumber.json",
  "format": "cucumber",
  "testCycleToReuse": "TR-PRJ-5",
  "environment": "Chrome",
  "build": "2.1.0"
}

Expected Output: Results mapped to test cycle TR-PRJ-5

  1. Upload QAF ZIP and set test cycle metadata

{
  "filePath": "./results/qaf-results.zip",
  "format": "qaf",
  "isZip": true,
  "fields": {
    "testCycle": {
      "summary": "Regression Run 2024-Q1",
      "labels": [
        "regression"
      ],
      "priority": "High"
    }
  }
}

Expected Output: ZIP uploaded; test cycle created with summary, labels, and priority

  1. User provides an unrecognised priority value — do NOT silently map to a similar word; ask the user first

{
  "filePath": "./reports/cucumber.json",
  "format": "cucumber",
  "fields": {
    "testCycle": {
      "priority": "critical"
    }
  }
}

Expected Output: Tool is NOT called yet. Inform the user that 'critical' was not recognised as a valid priority and ask them to confirm the correct value (e.g. from the available options). Do not map 'critical' to 'Blocker' or any other value without explicit user confirmation.

Hints: 1. NO PROJECT CONTEXT REQUIRED: Do NOT call set_project_context and do NOT ask the user for a project key, project ID, or any other project details. This tool works independently — never prompt the user for project information. 2. FILE DISCOVERY: Always do a fresh scan — never reuse a path from a previous turn. If no path is provided, search in order: target/surefire-reports, target/failsafe-reports, build/reports/tests, build/test-results, test-results, reports, cucumber-reports. If exactly one file is found, show the path and inferred format to the user and confirm before uploading. If multiple files are found, list them all and wait for the user to pick one. If nothing is found, ask for the path. Never pick or upload silently. 3. FORMAT INFERENCE: .json → cucumber (unambiguous). For .xml, infer from the file name — 'junit'/'surefire' → junit, 'testng' → testng, 'specflow' → specflow, 'hpuft'/'uft' → hpuft. For .zip, ALWAYS set isZip: true, but do NOT assume qaf — the zip could contain junit, testng, or cucumber results; if the format cannot be determined from the file name, ask the user. If the file name gives no clear signal for .xml either, ask the user to confirm the format. 4. TEST CYCLE: Only ask for testCycleToReuse if the user explicitly wants to link to an existing cycle. If not mentioned, omit it — QTM4J creates a new test cycle automatically. 5. DATE FORMAT: plannedStartDate and plannedEndDate in fields.testCycle MUST be formatted as 'dd/MMM/yyyy HH:mm' (e.g. '14/May/2026 10:30'). Convert any user-provided date (ISO, natural language, relative) to this exact format before sending. 6. FOLDER ID: folderId is a numeric ID. Apply it ONLY to the level the user specifies; if unspecified, default to fields.testCycle only — never copy it to both levels. Get the ID from the user directly (right-click folder in QTM4J → 'Copy Folder Id'). 7. ASSIGNEE / REPORTER: assignee and reporter in fields.testCycle and fields.testCase require a Jira Account ID (not a display name or email). Ask the user to provide their Account ID directly. 8. FIELD MAPPING CONFIRMATION: Apply formatting transformations (case correction, date/time conversion) automatically. Only ask for user confirmation when you cannot find a recognised match and need to substitute an unrecognised value with a guessed alternative — never silently substitute in that case. 9. TRACKING: Import processing is asynchronous. To check status, call get_automation_history and find the record whose trackingId matches the one returned from this tool.

qtm4j_get_automation_historyA

Retrieve a paginated history of past automation result uploads for a QTM4J project.

Toolset: Test Automation

Parameters:

  • startAt (number): Zero-indexed starting position for pagination (default: 0). (default: 0)

  • maxResults (number): Maximum number of records to return per page (default: 20, max: 100). (default: 20)

Output Description: Paginated list of automation import history. Each record includes: format, processStatus, importStatus, startTime, endTime, trackingId, detailedMessage, and a summary array. summary[0] contains: testCycleIssueKey, testCycleSummary, testCasesCreated, testCaseVersionsCreated, testCaseVersionsReused, testStepsCreated. Render as individual cards separated by dividers, NOT a table. Show '1–N of total' count above. Never show raw fileName.

Use Cases: 1. Review past automation result uploads for a project 2. Check the status of recent automation imports 3. Audit CI/CD automation upload history 4. Paginate through all historical automation uploads

Examples:

  1. Get the first page of automation upload history (default page size 20)

{}

Expected Output: Paginated list of automation history records with upload status and metadata

  1. Get the second page of automation upload history

{
  "startAt": 20,
  "maxResults": 20
}

Expected Output: Next 20 automation history records

  1. Get up to 50 records starting from the beginning

{
  "startAt": 0,
  "maxResults": 50
}

Expected Output: Up to 50 automation history records

Hints: 1. NO PROJECT CONTEXT REQUIRED: Do NOT call set_project_context and do NOT ask the user for a project key, project ID, or any other project details. This tool works independently. 2. PAGINATION: startAt is zero-indexed (default: 0), maxResults controls page size (default: 20, max: 100). Increment startAt by maxResults to fetch the next page. 3. Returns an empty data array (not an error) when no history records exist. 4. DISPLAY FORMAT: Show '1–N of ' above all cards. Render each record as a card separated by --- dividers. Each card has two sections:

PRIMARY SECTION (always first): heading with status emoji (✅ SUCCESS / ❌ FAILED) + test cycle key and name; then format, start→end time, message, summary stats (test cases/versions created/reused/test steps), tracking ID.

EXTRA DETAILS SECTION (at the bottom of the card, under a 'Details' sub-label): any remaining non-null fields from the record such as fileSize, extraAttributes values, etc.

Skip any field that is null, missing, or false. NEVER show the raw fileName. NEVER use a table.

qtm4j_link_requirements_to_test_caseA

Link one or more Jira requirements to a test case in QTM4J by requirement keys or JQL filter. Requirement keys are resolved to internal IDs automatically.

Toolset: Test Cases

Parameters:

  • key (string) required: Test case key in '{PROJECT_KEY}-TC-{number}' format (e.g., 'SCRUM-TC-145'). Required.

  • versionNo (number): Test case version number. Defaults to the latest version.

  • requirementKeys (array): List of requirement keys to link (e.g., ['SCRUM-1', 'SCRUM-2']). Resolved to internal IDs automatically. Provide this OR filter.jql — not both.

  • filter (object): JQL filter to select requirements to link. Use instead of requirementKeys when filtering by JQL.

Output Description: Confirmation with the test case key, version number, and linked: true. Warnings are included if any requirements could not be resolved or linked.

Use Cases: 1. Link one or more Jira requirements (stories, bugs, epics) to a test case 2. Associate requirements with a test case using a JQL filter 3. Build traceability between requirements and test cases 4. Link requirements to a specific test case version

Examples:

  1. Link two requirements by key

{
  "key": "SCRUM-TC-145",
  "requirementKeys": [
    "SCRUM-1",
    "SCRUM-2"
  ]
}

Expected Output: Requirements SCRUM-1 and SCRUM-2 linked to test case

  1. Link requirements by JQL filter

{
  "key": "SCRUM-TC-145",
  "filter": {
    "jql": "project = DEMO AND issuetype = Story"
  }
}

Expected Output: Requirements matched by JQL linked to test case

  1. Link a requirement to a specific version

{
  "key": "SCRUM-TC-85",
  "versionNo": 2,
  "requirementKeys": [
    "SCRUM-10"
  ]
}

Expected Output: Requirement linked to version 2 of test case

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. KEY FORMAT: '{PROJECT_KEY}-TC-{number}' — e.g. 'SCRUM-TC-145'. 3. Requirement keys follow the Jira issue key format: '{PROJECT_KEY}-{number}' (e.g. 'SCRUM-1'). 4. Provide either requirementKeys or filter.jql — not both. 5. If a requirement key cannot be resolved or linked, it is reported in warnings and other requirements are still linked. 6. versionNo defaults to the latest version. Use search_test_cases to find available versions if needed.

qtm4j_unlink_requirements_from_test_caseA

Unlink one or more Jira requirements from a test case in QTM4J by requirement keys, or unlink all requirements at once with unLinkAll.

Toolset: Test Cases

Parameters:

  • key (string) required: Test case key in '{PROJECT_KEY}-TC-{number}' format (e.g., 'SCRUM-TC-145'). Required.

  • versionNo (number): Test case version number. Defaults to the latest version.

  • requirementKeys (array): List of requirement keys to unlink (e.g., ['SCRUM-1', 'SCRUM-2']). Ignored when unLinkAll is true.

  • unLinkAll (boolean): If true, all linked requirements are unlinked from this test case. Ignores requirementKeys when set.

Output Description: Confirmation with the test case key, version number, and unlinked: true. Warnings are included if any requirements could not be resolved or unlinked.

Use Cases: 1. Remove specific requirements from a test case 2. Unlink all requirements from a test case at once 3. Clean up stale or incorrect requirement links from a test case 4. Remove requirement associations from a specific test case version

Examples:

  1. Unlink specific requirements by key

{
  "key": "SCRUM-TC-145",
  "requirementKeys": [
    "SCRUM-1",
    "SCRUM-2"
  ]
}

Expected Output: Requirements SCRUM-1 and SCRUM-2 unlinked from test case

  1. Unlink all requirements from a test case

{
  "key": "SCRUM-TC-145",
  "unLinkAll": true
}

Expected Output: All requirements unlinked from test case

  1. Unlink a requirement from a specific version

{
  "key": "SCRUM-TC-85",
  "versionNo": 2,
  "requirementKeys": [
    "SCRUM-10"
  ]
}

Expected Output: Requirement unlinked from version 2 of test case

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. KEY FORMAT: '{PROJECT_KEY}-TC-{number}' — e.g. 'SCRUM-TC-145'. 3. Requirement keys follow the Jira issue key format: '{PROJECT_KEY}-{number}' (e.g. 'SCRUM-1'). 4. Set unLinkAll to true to remove all requirements in one call — no need to list them individually. 5. If a requirement key cannot be resolved or unlinked, it is reported in warnings and others are still unlinked. 6. versionNo defaults to the latest version. Use search_test_cases to find available versions if needed.

qtm4j_link_test_cases_to_requirementA

Link test cases to a Jira requirement in QTM4J by test case keys or filter criteria. Test case keys are resolved to internal IDs automatically.

Toolset: Requirements

Parameters:

  • requirementKey (string) required: Jira requirement key (e.g., 'SCRUM-1'). Resolved to the internal Jira issue ID automatically.

  • testCaseKeys (array): Test case keys to link (e.g., ['SCRUM-TC-1', 'SCRUM-TC-2']). Resolved to internal IDs and latest versions automatically. Provide this OR filter — not both.

  • filter (object): Filter criteria to select test cases to link. Use instead of testCaseKeys when selecting by criteria. projectId is auto-filled from the active project context.

  • sort (string): Sort order for filter results in 'field:asc|desc' format (e.g., 'key:asc'). Allowable fields: key, summary, created, updated, estimatedTime, status, priority, latestVersionNo, flakyScore, passRateScore.

Output Description: Confirmation with the requirement key and linked: true. Warnings included if any test cases could not be resolved or linked.

Use Cases: 1. Link specific test cases to a Jira story or bug by requirement key 2. Build traceability between Jira requirements and QTM4J test cases 3. Link all test cases matching a filter to a requirement 4. Associate test cases with a requirement as part of sprint planning

Examples:

  1. Link two test cases by key

{
  "requirementKey": "SCRUM-1",
  "testCaseKeys": [
    "SCRUM-TC-10",
    "SCRUM-TC-11"
  ]
}

Expected Output: Test cases linked to requirement SCRUM-1

  1. Link test cases matching a filter

{
  "requirementKey": "SCRUM-1",
  "filter": {
    "priority": [
      "High"
    ],
    "status": [
      "To Do"
    ]
  }
}

Expected Output: Filtered test cases linked to requirement

  1. Link test cases in a specific folder

{
  "requirementKey": "SCRUM-5",
  "filter": {
    "folderId": 42,
    "withChild": true
  },
  "sort": "key:asc"
}

Expected Output: Folder test cases linked to requirement

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. REQUIREMENT KEY FORMAT: '{PROJECT_KEY}-{number}' — e.g. 'SCRUM-1'. 3. TEST CASE KEY FORMAT: '{PROJECT_KEY}-TC-{number}' — e.g. 'SCRUM-TC-145'. 4. Provide either testCaseKeys or filter — not both. 5. projectId in filter is auto-filled from the active project context — do not set it manually. 6. filter.excludeRequirementId excludes test cases already linked to that requirement ID. 7. If a test case key cannot be resolved, it is reported in warnings and other test cases are still linked.

qtm4j_unlink_test_cases_from_requirementA

Unlink test cases from a Jira requirement in QTM4J by test case keys or filter criteria. Test case keys are resolved to internal IDs automatically.

Toolset: Requirements

Parameters:

  • requirementKey (string) required: Jira requirement key (e.g., 'SCRUM-1'). Resolved to the internal Jira issue ID automatically.

  • testCaseKeys (array): Test case keys to unlink (e.g., ['SCRUM-TC-1', 'SCRUM-TC-2']). Resolved to internal IDs and latest versions automatically. Provide this OR filter — not both.

  • filter (object): Filter criteria to select test cases to unlink. Use instead of testCaseKeys when selecting by criteria. projectId is auto-filled from the active project context.

Output Description: Confirmation with the requirement key and unlinked: true. Warnings included if any test cases could not be resolved or unlinked.

Use Cases: 1. Remove specific test cases from a Jira requirement 2. Unlink test cases matching a filter from a requirement 3. Clean up stale or incorrect test case links on a requirement 4. Remove traceability links as part of sprint cleanup

Examples:

  1. Unlink specific test cases by key

{
  "requirementKey": "SCRUM-1",
  "testCaseKeys": [
    "SCRUM-TC-10",
    "SCRUM-TC-11"
  ]
}

Expected Output: Test cases unlinked from requirement SCRUM-1

  1. Unlink test cases matching a filter

{
  "requirementKey": "SCRUM-1",
  "filter": {
    "status": [
      "Done"
    ],
    "labels": [
      "Deprecated"
    ]
  }
}

Expected Output: Filtered test cases unlinked from requirement

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. REQUIREMENT KEY FORMAT: '{PROJECT_KEY}-{number}' — e.g. 'SCRUM-1'. 3. TEST CASE KEY FORMAT: '{PROJECT_KEY}-TC-{number}' — e.g. 'SCRUM-TC-145'. 4. Provide either testCaseKeys or filter — not both. 5. projectId in filter is auto-filled from the active project context — do not set it manually. 6. filter.excludeTestCases can be used to exclude specific test cases when using filter-based unlinking. 7. If a test case key cannot be resolved, it is reported in warnings and other test cases are still unlinked.

qtm4j_get_linked_requirementsA

Retrieve the Jira requirements linked to a specific test case in QTM4J. Test case key is resolved to internal ID automatically.

Toolset: Test Cases

Parameters:

  • key (string) required: Test case key in '{PROJECT_KEY}-TC-{number}' format (e.g., 'SCRUM-TC-145'). Required.

  • versionNo (number): Test case version number to retrieve linked requirements for. Defaults to the latest version.

  • maxResults (number): Maximum results per page (1-100). Default: 50.

  • startAt (number): Zero-indexed offset for pagination. Default: 0.

  • sort (string): Sort pattern in 'field:asc|desc' format. Default: 'key:desc'.

Output Description: Paginated list with total, startAt, maxResults, and data array of linked requirement objects (id, key, summary, status, priority, issueType).

Use Cases: 1. Check which Jira stories or bugs a test case covers 2. Audit requirement traceability for a test case 3. Retrieve requirement keys to use in other operations 4. Verify that the correct requirements are linked to a test case before a release

Examples:

  1. Get all requirements linked to a test case

{
  "key": "SCRUM-TC-145"
}

Expected Output: Paginated list of linked requirements with Jira metadata

  1. Get requirements for a specific version

{
  "key": "SCRUM-TC-85",
  "versionNo": 2,
  "maxResults": 20
}

Expected Output: Requirements linked to version 2 of the test case

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. KEY FORMAT: '{PROJECT_KEY}-TC-{number}' — e.g. 'SCRUM-TC-145'. 3. versionNo defaults to the latest version. Use search_test_cases to find available versions. 4. Paginate using startAt — increment by maxResults until startAt >= total.

qtm4j_get_linked_test_cases_for_requirementA

Retrieve the test cases linked to a Jira requirement in QTM4J. Requirement key is resolved to internal ID automatically.

Toolset: Requirements

Parameters:

  • requirementKey (string) required: Jira requirement key (e.g., 'SCRUM-1'). Resolved to the internal Jira issue ID automatically.

  • filter (object): Optional filter to narrow down the linked test cases. projectId is auto-filled from the active project context.

  • fields (string): Comma-separated field names to include in each result. Allowed: summary, priority, status, estimatedTime, executed, description, assignee, reporter, labels, components, fixVersions, sprint, isAutomated, folder, updated, created, seqNo, flakyScore, passRateScore.

  • maxResults (number): Maximum results per page (1-100). Default: 50.

  • startAt (number): Zero-indexed offset for pagination. Default: 0.

  • sort (string): Sort in 'field:asc|desc' format. Allowed fields: key, summary, created, updated, estimatedTime, status, priority, latestVersionNo, seqNo, flakyScore, passRateScore.

Output Description: Paginated response with total, startAt, maxResults, and data array of linked test case objects.

Use Cases: 1. Check which test cases cover a Jira story or bug 2. Audit requirement traceability — find all test cases for a given requirement 3. Filter linked test cases by status or priority before a release 4. Retrieve test case keys to use in update or link operations

Examples:

  1. Get all test cases linked to a requirement

{
  "requirementKey": "SCRUM-1"
}

Expected Output: Paginated list of linked test cases

  1. Get high priority linked test cases

{
  "requirementKey": "SCRUM-5",
  "filter": {
    "priority": [
      "High"
    ]
  },
  "fields": "key,summary,status,priority",
  "sort": "key:asc"
}

Expected Output: Filtered high-priority test cases linked to requirement

  1. Paginate through linked test cases

{
  "requirementKey": "SCRUM-1",
  "maxResults": 20,
  "startAt": 20
}

Expected Output: Second page of linked test cases

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. REQUIREMENT KEY FORMAT: '{PROJECT_KEY}-{number}' — e.g. 'SCRUM-1'. 3. projectId in filter is auto-filled from the active project context — do not set it manually. 4. Use the fields param to limit response size — only request fields you need. 5. Paginate using startAt — increment by maxResults until startAt >= total. 6. filter.testCaseStatus can be 'active', 'archived', or 'deleted' to filter by archive state.

qtm4j_link_test_cases_to_test_cycleA

Link test cases to a QTM4J test cycle by test case keys or filter criteria. Test case keys are resolved to internal IDs and latest versions automatically.

Toolset: Test Cycles

Parameters:

  • cycleKey (string) required: Test Cycle key (e.g., 'SCRUM-TR-1'). Resolved to the internal cycle UID automatically.

  • testCaseKeys (array): Test case keys to link (e.g., ['SCRUM-TC-1', 'SCRUM-TC-2']). Resolved to internal IDs and latest versions automatically. Provide this OR filter — not both.

  • filter (object): Filter criteria to select test cases to link. projectId is auto-filled from the active project context.

  • sort (string): Sort order in 'field:asc|desc' format (e.g., 'createdOn:desc'). Default is 'createdOn:desc'.

  • assignee (string): Jira account ID of the assignee for the linked executions.

  • environmentId (number): Environment ID from 'Get all environments in a project'.

  • buildId (number): Build ID from 'Get all builds in a project'.

  • actualTime (string): Actual time spent in HH:mm format (e.g., '02:30').

  • startNewExecution (boolean): Start a new execution for linked test cases. Default is false.

  • executionPlannedDate (string): Planned execution date in yyyy-MM-dd format (e.g., '2023-12-31').

  • qiGenerated (boolean): Flag indicating AI-generated test cases. Default is false.

Output Description: Confirmation with the cycle key and linked: true. Warnings included if any test cases could not be resolved or linked.

Use Cases: 1. Add specific test cases to a test cycle by key 2. Populate a test cycle with test cases matching a filter (e.g., all High priority test cases) 3. Link test cases from a specific folder to a test cycle 4. Add test cases to a cycle with a specific assignee or environment

Examples:

  1. Link two test cases by key

{
  "cycleKey": "SCRUM-TR-1",
  "testCaseKeys": [
    "SCRUM-TC-10",
    "SCRUM-TC-11"
  ]
}

Expected Output: Test cases linked to test cycle

  1. Link test cases matching a filter with assignee

{
  "cycleKey": "SCRUM-TR-1",
  "filter": {
    "priority": [
      "High"
    ],
    "status": [
      "To Do"
    ]
  },
  "assignee": "5b10a2844c20165700ede21f",
  "startNewExecution": true
}

Expected Output: Filtered test cases linked to cycle with assignee

  1. Link test cases in a folder to a cycle with planned date

{
  "cycleKey": "SCRUM-TR-5",
  "filter": {
    "folderId": 42,
    "withChild": true
  },
  "executionPlannedDate": "2024-03-31",
  "sort": "key:asc"
}

Expected Output: Folder test cases linked to cycle with planned date

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. CYCLE KEY FORMAT: '{PROJECT_KEY}-TR-{id}' — e.g. 'SCRUM-TR-1'. Resolved to internal UID automatically. 3. TEST CASE KEY FORMAT: '{PROJECT_KEY}-TC-{number}' — e.g. 'SCRUM-TC-145'. 4. Provide either testCaseKeys or filter — not both. 5. projectId in filter is auto-filled from the active project context — do not set it manually. 6. filter.excludeCycleId excludes test cases already in another cycle. 7. startNewExecution: true creates a fresh execution record for each linked test case. 8. executionPlannedDate must be in yyyy-MM-dd format (e.g., '2024-03-31'). 9. actualTime must be in HH:mm format (e.g., '02:30'). 10. If a test case key cannot be resolved, it is reported in warnings and others are still linked.

qtm4j_unlink_test_cases_from_test_cycleA

Unlink test cases from a QTM4J test cycle by test case keys, filter criteria, or all at once with unlinkAll.

Toolset: Test Cycles

Parameters:

  • cycleKey (string) required: Test Cycle key (e.g., 'SCRUM-TR-1'). Resolved to the internal cycle UID automatically.

  • testCaseKeys (array): Test case keys to unlink (e.g., ['SCRUM-TC-1', 'SCRUM-TC-2']). Resolved to internal IDs and latest versions automatically. Provide this OR filter or unlinkAll — not combined.

  • unlinkAll (boolean): If true, all test cases are unlinked from the cycle. Ignores testCaseKeys and filter.

  • filter (object): Filter criteria to select test cases to unlink. projectId is auto-filled from the active project context.

Output Description: Confirmation with the cycle key and unlinked: true. Warnings included if any test cases could not be resolved or unlinked.

Use Cases: 1. Remove specific test cases from a test cycle by key 2. Unlink all test cases from a test cycle at once 3. Remove test cases matching a filter from a cycle (e.g., all 'Done' test cases) 4. Clean up a test cycle before repopulating it

Examples:

  1. Unlink two specific test cases

{
  "cycleKey": "SCRUM-TR-1",
  "testCaseKeys": [
    "SCRUM-TC-10",
    "SCRUM-TC-11"
  ]
}

Expected Output: Test cases unlinked from test cycle

  1. Unlink all test cases from a cycle

{
  "cycleKey": "SCRUM-TR-1",
  "unlinkAll": true
}

Expected Output: All test cases unlinked from cycle

  1. Unlink test cases matching a status filter

{
  "cycleKey": "SCRUM-TR-5",
  "filter": {
    "status": [
      "Done"
    ],
    "labels": [
      "Deprecated"
    ]
  }
}

Expected Output: Filtered test cases unlinked from cycle

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. CYCLE KEY FORMAT: '{PROJECT_KEY}-TR-{id}' — e.g. 'SCRUM-TR-1'. Resolved to internal UID automatically. 3. TEST CASE KEY FORMAT: '{PROJECT_KEY}-TC-{number}' — e.g. 'SCRUM-TC-145'. 4. Provide exactly one of: testCaseKeys, unlinkAll, or filter. 5. unlinkAll: true removes every test case from the cycle — no need to list them individually. 6. projectId in filter is auto-filled from the active project context — do not set it manually. 7. If a test case key cannot be resolved, it is reported in warnings and others are still unlinked.

qtm4j_search_linked_test_cases_in_test_cycleA

Search and filter test case executions linked to a QTM4J test cycle. Supports pagination, field selection, sorting, and rich filter criteria.

Toolset: Test Cycles

Parameters:

  • cycleKey (string) required: Test Cycle key in '{PROJECT_KEY}-TR-{id}' format (e.g., 'SCRUM-TR-1'). Resolved to the internal cycle UID automatically.

  • fields (array): Fields to include in each result object. Allowed: id, key, summary, description, executionResult, status, priority, environment, tcWithDefects, estimatedTime, actualTime, createdOn, updatedOn, sprint, seqNo, latestTcExecutionId, customFields, flakyScore, passRateScore. Omit to return all fields.

  • maxResults (number): Maximum results per page (1-100). Default: 50. (default: 50)

  • sort (string): Sort pattern in 'field:asc|desc' format (e.g., 'key:desc'). Allowed sort fields: id, key, summary, description, executionResult, status, priority, environment, tcWithDefects, estimatedTime, actualTime, createdOn, updatedOn, sprint, flakyScore, passRateScore.

  • startAt (number): Zero-indexed offset for pagination. Default: 0. (default: 0)

  • filter (object): Optional filter criteria to narrow down results. projectId is auto-filled from the active project context.

Output Description: JSON object with total (total matching executions), startAt, maxResults, and data (array of test case execution objects for this page).

Use Cases: 1. List all test cases linked to a test cycle 2. Find failed or blocked test case executions in a cycle 3. Search for test cases in a cycle by execution result (Pass, Fail, Blocked) 4. Filter test cases in a cycle by priority or status 5. Retrieve test cases assigned to a specific executor in a cycle 6. Get test cases with defects in a cycle 7. Paginate through large test cycle execution lists 8. Request only specific fields to reduce response size

Examples:

  1. List all test cases in a cycle

{
  "cycleKey": "SCRUM-TR-1"
}

Expected Output: Paginated list of test case executions in the cycle (first 50 results)

  1. Find failed test cases in a cycle

{
  "cycleKey": "SCRUM-TR-1",
  "filter": {
    "executionResult": [
      "Fail"
    ]
  },
  "fields": [
    "key",
    "summary",
    "executionResult",
    "priority"
  ]
}

Expected Output: Test case executions with Fail result

  1. Search with pagination and sort

{
  "cycleKey": "SCRUM-TR-5",
  "maxResults": 25,
  "startAt": 0,
  "sort": "key:asc",
  "filter": {
    "status": [
      "To Do"
    ]
  }
}

Expected Output: First 25 To Do test cases in the cycle sorted by key ascending

  1. Filter by execution assignee and environment

{
  "cycleKey": "SCRUM-TR-2",
  "filter": {
    "executionAssignee": [
      "5b10a2844c20165700ede21f"
    ],
    "environment": [
      "Staging"
    ]
  },
  "fields": [
    "key",
    "summary",
    "executionResult",
    "environment",
    "actualTime"
  ]
}

Expected Output: Test cases assigned to the specified user in the Staging environment

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. CYCLE KEY FORMAT: '{PROJECT_KEY}-TR-{id}' — e.g. 'SCRUM-TR-1'. Resolved to internal UID automatically. 3. projectId in filter is auto-filled from the active project context — do not set it manually. 4. fields is sent as a query parameter; filter is sent in the request body. 5. Allowed fields: id, key, summary, description, executionResult, status, priority, environment, tcWithDefects, estimatedTime, actualTime, createdOn, updatedOn, sprint, seqNo, latestTcExecutionId, customFields, flakyScore, passRateScore. 6. Allowed sort fields: id, key, summary, description, executionResult, status, priority, environment, tcWithDefects, estimatedTime, actualTime, createdOn, updatedOn, sprint, flakyScore, passRateScore. 7. Date range format for filter fields: 'dd/mmm/yyyy,dd/mmm/yyyy' (e.g., '01/Jan/2024,31/Mar/2024'). 8. maxResults defaults to 50, maximum is 100. Use startAt to paginate. 9. executionResult filter accepts values like 'Pass', 'Fail', 'Blocked', 'Unexecuted'.

qtm4j_link_requirements_to_test_cycleA

Link one or more Jira requirements to a QTM4J test cycle by requirement keys or JQL filter. Requirement keys are resolved to internal IDs automatically.

Toolset: Test Cycles

Parameters:

  • cycleKey (string) required: Test cycle key in '{PROJECT_KEY}-TR-{id}' format (e.g., 'SCRUM-TR-1'). Resolved to the internal cycle UID automatically.

  • requirementKeys (array): List of Jira requirement keys to link (e.g., ['SCRUM-1', 'SCRUM-2']). Resolved to internal IDs automatically. Provide this OR filter.jql — not both.

  • filter (object): JQL filter to select requirements to link. Use instead of requirementKeys when filtering by JQL.

Output Description: Confirmation with the cycle key and linked: true. Warnings are included if any requirements could not be resolved or linked.

Use Cases: 1. Link one or more Jira requirements (stories, bugs, epics) to a test cycle 2. Associate requirements with a test cycle using a JQL filter 3. Build traceability between requirements and a test cycle 4. Link all stories from a sprint to a test cycle using JQL

Examples:

  1. Link two requirements by key

{
  "cycleKey": "SCRUM-TR-1",
  "requirementKeys": [
    "SCRUM-1",
    "SCRUM-2"
  ]
}

Expected Output: Requirements SCRUM-1 and SCRUM-2 linked to test cycle

  1. Link requirements by JQL filter

{
  "cycleKey": "SCRUM-TR-1",
  "filter": {
    "jql": "project = DEMO AND issuetype = Story"
  }
}

Expected Output: Requirements matched by JQL linked to test cycle

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. CYCLE KEY FORMAT: '{PROJECT_KEY}-TR-{id}' — e.g. 'SCRUM-TR-1'. Resolved to internal UID automatically. 3. Requirement keys follow Jira issue key format: '{PROJECT_KEY}-{number}' (e.g. 'SCRUM-1'). 4. Provide either requirementKeys or filter.jql — not both. 5. If a requirement key cannot be resolved or linked, it is reported in warnings and other requirements are still linked.

qtm4j_unlink_requirements_from_test_cycleA

Unlink one or more Jira requirements from a QTM4J test cycle by requirement keys, or unlink all requirements at once with unLinkAll.

Toolset: Test Cycles

Parameters:

  • cycleKey (string) required: Test cycle key in '{PROJECT_KEY}-TR-{id}' format (e.g., 'SCRUM-TR-1'). Resolved to the internal cycle UID automatically.

  • requirementKeys (array): List of Jira requirement keys to unlink (e.g., ['SCRUM-1', 'SCRUM-2']). Resolved to internal IDs automatically. Provide this OR unLinkAll — not both.

  • unLinkAll (boolean): If true, all requirements are unlinked from the cycle. Ignores requirementKeys.

Output Description: Confirmation with the cycle key and unlinked: true. Warnings are included if any requirements could not be resolved or unlinked.

Use Cases: 1. Remove one or more Jira requirements from a test cycle by key 2. Unlink all requirements from a test cycle at once 3. Clean up requirement links before repopulating a test cycle

Examples:

  1. Unlink two requirements by key

{
  "cycleKey": "SCRUM-TR-1",
  "requirementKeys": [
    "SCRUM-1",
    "SCRUM-2"
  ]
}

Expected Output: Requirements SCRUM-1 and SCRUM-2 unlinked from test cycle

  1. Unlink all requirements from a cycle

{
  "cycleKey": "SCRUM-TR-1",
  "unLinkAll": true
}

Expected Output: All requirements unlinked from test cycle

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. CYCLE KEY FORMAT: '{PROJECT_KEY}-TR-{id}' — e.g. 'SCRUM-TR-1'. Resolved to internal UID automatically. 3. Requirement keys follow Jira issue key format: '{PROJECT_KEY}-{number}' (e.g. 'SCRUM-1'). 4. Provide either requirementKeys or unLinkAll: true — not both. 5. unLinkAll: true removes every requirement from the cycle — no need to list them individually. 6. If a requirement key cannot be resolved or unlinked, it is reported in warnings and other requirements are still unlinked.

qtm4j_get_linked_requirements_for_test_cycleA

Retrieve Jira requirements linked to a QTM4J test cycle. Test cycle key is resolved to internal UID automatically.

Toolset: Test Cycles

Parameters:

  • cycleKey (string) required: Test cycle key in '{PROJECT_KEY}-TR-{id}' format (e.g., 'SCRUM-TR-1'). Resolved to the internal cycle UID automatically.

  • maxResults (number): Maximum results per page (1-100). Default: 50. (default: 50)

  • startAt (number): Zero-indexed offset for pagination. Default: 0. (default: 0)

  • sort (string): Sort pattern in 'field:asc|desc' format. Allowed fields: key, status, priority. Default: 'key:desc'.

Output Description: Paginated result with total, startAt, maxResults, and data array of linked requirement objects (id, key, summary, status, priority, issueType).

Use Cases: 1. Check which Jira stories or bugs are covered by a test cycle 2. Audit requirement traceability for a test cycle 3. Retrieve requirement keys linked to a cycle before a release 4. Verify correct requirements are linked to a test cycle

Examples:

  1. Get all requirements linked to a test cycle

{
  "cycleKey": "SCRUM-TR-1"
}

Expected Output: Paginated list of linked requirements with Jira metadata

  1. Get requirements sorted by priority with custom page size

{
  "cycleKey": "SCRUM-TR-5",
  "sort": "priority:asc",
  "maxResults": 20
}

Expected Output: Requirements linked to cycle sorted by priority ascending

Hints: 1. PREREQUISITE: set_project_context must be called before this tool. NEVER auto-select a project. 2. CYCLE KEY FORMAT: '{PROJECT_KEY}-TR-{id}' — e.g. 'SCRUM-TR-1'. Resolved to internal UID automatically. 3. Allowed sort fields: key, status, priority. Default sort: 'key:desc'. 4. Paginate using startAt — increment by maxResults until startAt >= total.

collaborator_find_review_by_idA

Finds a review in Collaborator by its review ID.

Toolset: Review Management

Parameters:

  • reviewId (string) required: The Collaborator review ID to find.

collaborator_create_reviewB

Creates a new review in Collaborator. All parameters are optional.

Toolset: Review Management

Parameters:

  • creator (string): Collaborator username of the review creator. Optional. Default: currently logged in user.

  • title (string): Title of the review. Optional. Default: null.

  • templateName (string): Review template name. Optional. Default: system default template.

  • accessPolicy (string): Access policy for the review. Optional. Default: ANYONE.

collaborator_reject_reviewC

Rejects a review in Collaborator by its review ID and reason.

Toolset: Review Management

Parameters:

  • reviewId (union) required: The Collaborator review ID to reject.

  • reason (string) required: Reason for rejecting the review.

collaborator_reviewservice_actionD

Invoke any ReviewService method by name and arguments. For finishReviewPhase and waitOnPhase, provide reviewId (required) and until (optional, defaults to 'ANY').

Toolset: Review Management

Parameters:

  • action (enum) required

  • args (record<string, any>) required

collaborator_get_reviewsB

Retrieves reviews from Collaborator using ReviewService.getReviews. All parameters are optional and only provided ones are sent.

Toolset: Review Management

Parameters:

  • login (string): Collaborator username to filter reviews.

  • role (string): Role to filter reviews (e.g., AUTHOR).

  • creator (boolean): Whether to filter by creator.

  • reviewPhase (string): Review phase to filter (e.g., PLANNING).

  • fullInfo (boolean): Whether to retrieve full review info.

  • fromDate (string): Minimal creation date in format "yyyy-MM-dd"

  • toDate (string): Maximal creation date in format "yyyy-MM-dd"

collaborator_create_remote_system_configurationC

Creates a remote system configuration in Collaborator (e.g., Bitbucket, GitHub, etc).

Toolset: Remote System Configuration Management

Parameters:

  • token (string) required: Remote system token, e.g., BITBUCKET, GITHUB, etc.

  • title (string) required: Remote system title.

  • config (string) required: JSON string containing configuration parameters for the remote system.

  • reviewTemplateId (string): Optional review template ID used by this remote system.

collaborator_edit_remote_system_configurationC

Edits parameters of an existing remote system configuration in Collaborator. Only title and config are editable after creation.

Toolset: Remote System Configuration Management

Parameters:

  • id (string) required: ID of the remote system Configuration to edit.

  • title (string): Remote system title.

  • config (string): JSON string containing configuration parameters for the remote system.

  • reviewTemplateId (string): Optional review template ID used by this remote system.

collaborator_delete_remote_system_configurationC

Deletes a remote system configuration in Collaborator by its ID.

Toolset: Remote System Configuration Management

Parameters:

  • id (union) required: ID of the remote system Configuration to delete.

collaborator_update_remote_system_configuration_webhookC

Updates the webhook for a remote system configuration in Collaborator by its ID.

Toolset: Remote System Configuration Management

Parameters:

  • id (union) required: ID of the remote system Configuration to update the webhook for.

collaborator_test_remote_system_configuration_connectionA

Tests the connection for a remote system configuration in Collaborator by its ID.

Toolset: Remote System Configuration Management

Parameters:

  • id (union) required: ID of the remote system Configuration to test connection for.

Prompts

Interactive templates invoked by user choice

NameDescription
reflect_sap_testGuidelines for creating a Reflect test against an SAP S4/HANA or SAP BTP application.
contract-testing_openapi_matcher_recommendationsGet an OpenAPI matcher recommendation

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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/SmartBear/smartbear-mcp'

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