@smartbear/mcp 0.13.4 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,20 @@
1
+ function deepMerge(baseObject, objectWithUpdates) {
2
+ const result = { ...baseObject };
3
+ for (const key in objectWithUpdates) {
4
+ if (objectWithUpdates[key] === void 0) {
5
+ continue;
6
+ }
7
+ if (objectsCanBeMerged(baseObject, objectWithUpdates, key)) {
8
+ result[key] = deepMerge(baseObject[key], objectWithUpdates[key]);
9
+ } else {
10
+ result[key] = objectWithUpdates[key];
11
+ }
12
+ }
13
+ return result;
14
+ }
15
+ function objectsCanBeMerged(baseObject, objectWithUpdates, key) {
16
+ return objectWithUpdates[key] && typeof objectWithUpdates[key] === "object" && !Array.isArray(objectWithUpdates[key]) && baseObject[key] && typeof baseObject[key] === "object" && !Array.isArray(baseObject[key]);
17
+ }
18
+ export {
19
+ deepMerge
20
+ };
@@ -1,5 +1,5 @@
1
1
  import { Tool } from "../../../common/tools.js";
2
- import { listEnvironmentsResponse, listEnvironmentsQueryParams } from "../../common/rest-api-schemas.js";
2
+ import { listEnvironments200Response, listEnvironmentsQueryParams } from "../../common/rest-api-schemas.js";
3
3
  class GetEnvironments extends Tool {
4
4
  specification = {
5
5
  title: "Get Environments",
@@ -7,7 +7,7 @@ class GetEnvironments extends Tool {
7
7
  readOnly: true,
8
8
  idempotent: true,
9
9
  inputSchema: listEnvironmentsQueryParams,
10
- outputSchema: listEnvironmentsResponse,
10
+ outputSchema: listEnvironments200Response,
11
11
  examples: [
12
12
  {
13
13
  description: "Get the first 20 Environments",
@@ -1,5 +1,5 @@
1
1
  import { Tool } from "../../../common/tools.js";
2
- import { listPrioritiesResponse, listPrioritiesQueryParams } from "../../common/rest-api-schemas.js";
2
+ import { listPriorities200Response, listPrioritiesQueryParams } from "../../common/rest-api-schemas.js";
3
3
  class GetPriorities extends Tool {
4
4
  specification = {
5
5
  title: "Get priorities",
@@ -7,7 +7,7 @@ class GetPriorities extends Tool {
7
7
  readOnly: true,
8
8
  idempotent: true,
9
9
  inputSchema: listPrioritiesQueryParams,
10
- outputSchema: listPrioritiesResponse,
10
+ outputSchema: listPriorities200Response,
11
11
  examples: [
12
12
  {
13
13
  description: "Get the first 10 priorities",
@@ -1,5 +1,5 @@
1
1
  import { Tool } from "../../../common/tools.js";
2
- import { getProjectResponse, getProjectParams } from "../../common/rest-api-schemas.js";
2
+ import { getProject200Response, getProjectParams } from "../../common/rest-api-schemas.js";
3
3
  class GetProject extends Tool {
4
4
  specification = {
5
5
  title: "Get Project",
@@ -7,7 +7,7 @@ class GetProject extends Tool {
7
7
  readOnly: true,
8
8
  idempotent: true,
9
9
  inputSchema: getProjectParams,
10
- outputSchema: getProjectResponse,
10
+ outputSchema: getProject200Response,
11
11
  examples: [
12
12
  {
13
13
  description: "Get the project with id 1",
@@ -1,5 +1,5 @@
1
1
  import { Tool } from "../../../common/tools.js";
2
- import { listProjectsResponse, listProjectsQueryParams } from "../../common/rest-api-schemas.js";
2
+ import { listProjects200Response, listProjectsQueryParams } from "../../common/rest-api-schemas.js";
3
3
  class GetProjects extends Tool {
4
4
  specification = {
5
5
  title: "Get Projects",
@@ -7,7 +7,7 @@ class GetProjects extends Tool {
7
7
  readOnly: true,
8
8
  idempotent: true,
9
9
  inputSchema: listProjectsQueryParams,
10
- outputSchema: listProjectsResponse,
10
+ outputSchema: listProjects200Response,
11
11
  examples: [
12
12
  {
13
13
  description: "Get the first 10 projects",
@@ -1,5 +1,5 @@
1
1
  import { Tool } from "../../../common/tools.js";
2
- import { listStatusesResponse, listStatusesQueryParams } from "../../common/rest-api-schemas.js";
2
+ import { listStatuses200Response, listStatusesQueryParams } from "../../common/rest-api-schemas.js";
3
3
  class GetStatuses extends Tool {
4
4
  specification = {
5
5
  title: "Get Statuses",
@@ -7,7 +7,7 @@ class GetStatuses extends Tool {
7
7
  readOnly: true,
8
8
  idempotent: true,
9
9
  inputSchema: listStatusesQueryParams,
10
- outputSchema: listStatusesResponse,
10
+ outputSchema: listStatuses200Response,
11
11
  examples: [
12
12
  {
13
13
  description: "Get the first 10 statuses",
@@ -0,0 +1,69 @@
1
+ import { Tool } from "../../../common/tools.js";
2
+ import { createTestCase201Response, createTestCaseBody } from "../../common/rest-api-schemas.js";
3
+ class CreateTestCase extends Tool {
4
+ specification = {
5
+ title: "Create Test Case",
6
+ summary: "Create a new Test Case in Zephyr specified project",
7
+ readOnly: false,
8
+ idempotent: false,
9
+ inputSchema: createTestCaseBody,
10
+ outputSchema: createTestCase201Response,
11
+ examples: [
12
+ {
13
+ description: "Create a Test Case in project SA to ensure that the axial pump can be enabled",
14
+ parameters: {
15
+ projectKey: "SA",
16
+ name: "Check axial pump",
17
+ objective: "Ensure the axial pump can be enabled"
18
+ },
19
+ expectedOutput: "The newly created Test Case with its details and key"
20
+ },
21
+ {
22
+ description: "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'",
23
+ parameters: {
24
+ projectKey: "MM2",
25
+ name: "Check axial pump",
26
+ objective: "Ensure the axial pump can be enabled",
27
+ labels: ["automated", "mcp"],
28
+ priorityName: "High"
29
+ },
30
+ expectedOutput: "The newly created Test Case with its details and key"
31
+ },
32
+ {
33
+ description: "Create a Test Case for verifying strength of the axial pump with custom field 'Axial pump strength' having value '5' in project SA",
34
+ parameters: {
35
+ projectKey: "SA",
36
+ name: "Check axial pump strength",
37
+ objective: "Make sure the axial pump operates at the required strength",
38
+ customFields: {
39
+ "Axial pump strength": 5
40
+ }
41
+ },
42
+ expectedOutput: "The newly created Test Case with its details and key"
43
+ },
44
+ {
45
+ description: "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'",
46
+ parameters: {
47
+ projectKey: "MM2",
48
+ name: "Check axial pump performance",
49
+ objective: "Ensure the axial pump performs within acceptable limits",
50
+ componentId: 10001,
51
+ ownerJiraUserId: 10057,
52
+ folderId: 18
53
+ },
54
+ expectedOutput: "The newly created Test Case with its details and key"
55
+ }
56
+ ]
57
+ };
58
+ handle = async (args) => {
59
+ const body = createTestCaseBody.parse(args);
60
+ const response = await this.client.getApiClient().post(`/testcases/`, body);
61
+ return {
62
+ structuredContent: response,
63
+ content: []
64
+ };
65
+ };
66
+ }
67
+ export {
68
+ CreateTestCase
69
+ };
@@ -0,0 +1,46 @@
1
+ import { Tool } from "../../../common/tools.js";
2
+ import { createTestCaseWebLink201Response, createTestCaseWebLinkBody, createTestCaseWebLinkParams } from "../../common/rest-api-schemas.js";
3
+ class CreateTestCaseWebLink extends Tool {
4
+ specification = {
5
+ title: "Create Test Case Web Link",
6
+ summary: "Create a new Web Link for a Test Case in Zephyr",
7
+ readOnly: false,
8
+ idempotent: false,
9
+ inputSchema: createTestCaseWebLinkBody.extend({
10
+ testCaseKey: createTestCaseWebLinkParams.shape.testCaseKey
11
+ }),
12
+ outputSchema: createTestCaseWebLink201Response,
13
+ examples: [
14
+ {
15
+ description: "Create a web link for test case SA-T1 pointing to Atlassian's homepage",
16
+ parameters: {
17
+ testCaseKey: "SA-T1",
18
+ url: "https://www.atlassian.com",
19
+ description: "Link to Atlassian's homepage"
20
+ },
21
+ expectedOutput: "The newly created Web Link with its ID and self link"
22
+ },
23
+ {
24
+ description: "Attach a documentation link to test case MM2-T15 for pump specifications",
25
+ parameters: {
26
+ testCaseKey: "MM2-T15",
27
+ url: "https://docs.atlassian.com",
28
+ description: "Documentation for pump specifications"
29
+ },
30
+ expectedOutput: "The newly created Web Link with its ID and self link"
31
+ }
32
+ ]
33
+ };
34
+ handle = async (args) => {
35
+ const { testCaseKey } = createTestCaseWebLinkParams.parse(args);
36
+ const body = createTestCaseWebLinkBody.parse(args);
37
+ const response = await this.client.getApiClient().post(`/testcases/${testCaseKey}/links/weblinks`, body);
38
+ return {
39
+ structuredContent: response,
40
+ content: []
41
+ };
42
+ };
43
+ }
44
+ export {
45
+ CreateTestCaseWebLink
46
+ };
@@ -1,5 +1,5 @@
1
1
  import { Tool } from "../../../common/tools.js";
2
- import { getTestCaseResponse, getTestCaseParams } from "../../common/rest-api-schemas.js";
2
+ import { getTestCase200Response, getTestCaseParams } from "../../common/rest-api-schemas.js";
3
3
  class GetTestCase extends Tool {
4
4
  specification = {
5
5
  title: "Get Test Case",
@@ -7,7 +7,7 @@ class GetTestCase extends Tool {
7
7
  readOnly: true,
8
8
  idempotent: true,
9
9
  inputSchema: getTestCaseParams,
10
- outputSchema: getTestCaseResponse,
10
+ outputSchema: getTestCase200Response,
11
11
  examples: [
12
12
  {
13
13
  description: "Get the test case with key 'SA-T10'",
@@ -1,5 +1,5 @@
1
1
  import { Tool } from "../../../common/tools.js";
2
- import { listTestCasesCursorPaginatedResponse, listTestCasesCursorPaginatedQueryParams } from "../../common/rest-api-schemas.js";
2
+ import { listTestCasesCursorPaginated200Response, listTestCasesCursorPaginatedQueryParams } from "../../common/rest-api-schemas.js";
3
3
  class GetTestCases extends Tool {
4
4
  specification = {
5
5
  title: "Get Test Cases",
@@ -7,7 +7,7 @@ class GetTestCases extends Tool {
7
7
  readOnly: true,
8
8
  idempotent: true,
9
9
  inputSchema: listTestCasesCursorPaginatedQueryParams,
10
- outputSchema: listTestCasesCursorPaginatedResponse,
10
+ outputSchema: listTestCasesCursorPaginated200Response,
11
11
  examples: [
12
12
  {
13
13
  description: "Get the first 10 Test Cases",
@@ -0,0 +1,77 @@
1
+ import { Tool } from "../../../common/tools.js";
2
+ import { updateTestCaseParams, updateTestCaseBody } from "../../common/rest-api-schemas.js";
3
+ import { deepMerge } from "../../common/utils.js";
4
+ class UpdateTestCase extends Tool {
5
+ specification = {
6
+ title: "Update Test Case",
7
+ summary: '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.',
8
+ readOnly: false,
9
+ idempotent: true,
10
+ inputSchema: updateTestCaseParams.and(updateTestCaseBody.partial()),
11
+ examples: [
12
+ {
13
+ description: "Update the name of the test case 'SA-T10' to 'Check axial pump' and objective to 'To ensure the axial pump can be enabled'",
14
+ parameters: {
15
+ testCaseKey: "SA-T10",
16
+ name: "Check axial pump",
17
+ objective: "To ensure the axial pump can be enabled"
18
+ },
19
+ expectedOutput: "The test case should be updated, but no output is expected."
20
+ },
21
+ {
22
+ description: "Update the test case 'MM2-T1' by setting labels 'Regression','Performance' and 'Automated' and changing the priority to the one with id 2.",
23
+ parameters: {
24
+ testCaseKey: "MM2-T1",
25
+ priority: { id: 2 },
26
+ labels: ["Regression", "Performance", "Automated"]
27
+ },
28
+ expectedOutput: "The test case should be updated, but no output is expected."
29
+ },
30
+ {
31
+ description: "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.",
32
+ parameters: {
33
+ testCaseKey: "SA-T5",
34
+ estimatedTime: 36e5,
35
+ customFields: {
36
+ "Build Number": 20,
37
+ "Release Date": "2020-01-01"
38
+ }
39
+ },
40
+ expectedOutput: "The test case should be updated, but no output is expected."
41
+ },
42
+ {
43
+ description: "Remove the component from test case 'SA-T20'.",
44
+ parameters: {
45
+ testCaseKey: "SA-T20",
46
+ component: null
47
+ },
48
+ expectedOutput: "The test case should be updated, but no output is expected."
49
+ },
50
+ {
51
+ description: "Remove a specific custom field 'Pre-Condition(s)' from test case 'SA-T15' while keeping other custom fields intact",
52
+ parameters: {
53
+ testCaseKey: "SA-T15",
54
+ customFields: {
55
+ "Pre-Condition(s)": null,
56
+ Implemented: false
57
+ }
58
+ },
59
+ expectedOutput: "The test case should be updated, but no output is expected."
60
+ }
61
+ ]
62
+ };
63
+ handle = async (args) => {
64
+ const parsed = updateTestCaseParams.and(updateTestCaseBody.partial()).parse(args);
65
+ const { testCaseKey, ...updates } = parsed;
66
+ const existingTestCase = await this.client.getApiClient().get(`/testcases/${testCaseKey}`);
67
+ const mergedBody = deepMerge(existingTestCase, updates);
68
+ await this.client.getApiClient().put(`/testcases/${testCaseKey}`, mergedBody);
69
+ return {
70
+ structuredContent: {},
71
+ content: []
72
+ };
73
+ };
74
+ }
75
+ export {
76
+ UpdateTestCase
77
+ };
@@ -0,0 +1,70 @@
1
+ import { Tool } from "../../../common/tools.js";
2
+ import { createTestCycle201Response, createTestCycleBody } from "../../common/rest-api-schemas.js";
3
+ class CreateTestCycle extends Tool {
4
+ specification = {
5
+ title: "Create Test Cycle",
6
+ summary: "Create a new Test Cycle in Zephyr specified project",
7
+ readOnly: false,
8
+ idempotent: false,
9
+ inputSchema: createTestCycleBody,
10
+ outputSchema: createTestCycle201Response,
11
+ examples: [
12
+ {
13
+ description: "Create a Test Cycle in project SA to ensure that the axial pump can be enabled",
14
+ parameters: {
15
+ projectKey: "SA",
16
+ name: "Check axial pump",
17
+ description: "Ensure the axial pump can be enabled"
18
+ },
19
+ expectedOutput: "The newly created Test Cycle with its details and key"
20
+ },
21
+ {
22
+ description: "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",
23
+ parameters: {
24
+ projectKey: "MM2",
25
+ name: "Check axial pump",
26
+ description: "Ensure the axial pump can be enabled",
27
+ statusName: "In Progress",
28
+ plannedStartDate: "2026-03-01T00:00:00Z",
29
+ plannedEndDate: "2026-03-10T00:00:00Z"
30
+ },
31
+ expectedOutput: "The newly created Test Cycle with its details and key"
32
+ },
33
+ {
34
+ description: "Create a Test Cycle for verifying strength of the axial pump with custom field 'Axial pump strength' having value '5' in project SA",
35
+ parameters: {
36
+ projectKey: "SA",
37
+ name: "Check axial pump strength",
38
+ description: "Make sure the axial pump operates at the required strength",
39
+ customFields: {
40
+ "Axial pump strength": 5
41
+ }
42
+ },
43
+ expectedOutput: "The newly created Test Cycle with its details and key"
44
+ },
45
+ {
46
+ description: "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",
47
+ parameters: {
48
+ projectKey: "MM2",
49
+ name: "Check axial pump performance",
50
+ description: "Ensure the axial pump performs within acceptable limits",
51
+ jiraProjectVersion: 10001,
52
+ ownerId: "12",
53
+ folderId: 18
54
+ },
55
+ expectedOutput: "The newly created Test Cycle with its details and key"
56
+ }
57
+ ]
58
+ };
59
+ handle = async (args) => {
60
+ const body = createTestCycleBody.parse(args);
61
+ const response = await this.client.getApiClient().post(`/testcycles/`, body);
62
+ return {
63
+ structuredContent: response,
64
+ content: []
65
+ };
66
+ };
67
+ }
68
+ export {
69
+ CreateTestCycle
70
+ };
@@ -1,5 +1,5 @@
1
1
  import { Tool } from "../../../common/tools.js";
2
- import { getTestCycleResponse, getTestCycleParams } from "../../common/rest-api-schemas.js";
2
+ import { getTestCycle200Response, getTestCycleParams } from "../../common/rest-api-schemas.js";
3
3
  class GetTestCycle extends Tool {
4
4
  specification = {
5
5
  title: "Get Test Cycle",
@@ -7,7 +7,7 @@ class GetTestCycle extends Tool {
7
7
  readOnly: true,
8
8
  idempotent: true,
9
9
  inputSchema: getTestCycleParams,
10
- outputSchema: getTestCycleResponse,
10
+ outputSchema: getTestCycle200Response,
11
11
  examples: [
12
12
  {
13
13
  description: "Get the test cycle with id 1",
@@ -1,5 +1,5 @@
1
1
  import { Tool } from "../../../common/tools.js";
2
- import { listTestCyclesResponse, listTestCyclesQueryParams } from "../../common/rest-api-schemas.js";
2
+ import { listTestCycles200Response, listTestCyclesQueryParams } from "../../common/rest-api-schemas.js";
3
3
  class GetTestCycles extends Tool {
4
4
  specification = {
5
5
  title: "Get Test Cycles",
@@ -7,7 +7,7 @@ class GetTestCycles extends Tool {
7
7
  readOnly: true,
8
8
  idempotent: true,
9
9
  inputSchema: listTestCyclesQueryParams,
10
- outputSchema: listTestCyclesResponse,
10
+ outputSchema: listTestCycles200Response,
11
11
  examples: [
12
12
  {
13
13
  description: "Get the first 10 Test Cycles",
@@ -0,0 +1,88 @@
1
+ import { Tool } from "../../../common/tools.js";
2
+ import { updateTestCycleParams, updateTestCycleBody } from "../../common/rest-api-schemas.js";
3
+ import { deepMerge } from "../../common/utils.js";
4
+ class UpdateTestCycle extends Tool {
5
+ specification = {
6
+ title: "Update Test Cycle",
7
+ summary: "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",
8
+ readOnly: false,
9
+ idempotent: true,
10
+ inputSchema: updateTestCycleParams.and(updateTestCycleBody.partial()),
11
+ examples: [
12
+ {
13
+ description: "Update the name of the test cycle 'SA-R40' to 'Sprint 1 Regression - Updated' and set description.",
14
+ parameters: {
15
+ testCycleIdOrKey: "SA-R40",
16
+ name: "Sprint 1 Regression - Updated",
17
+ description: "Updated regression scope for Sprint 1"
18
+ },
19
+ expectedOutput: "The test cycle should be updated, but no output is expected."
20
+ },
21
+ {
22
+ description: "Update planned dates for test cycle id '1' (keep everything else unchanged).",
23
+ parameters: {
24
+ testCycleIdOrKey: "1",
25
+ plannedStartDate: "2018-05-19T13:15:13Z",
26
+ plannedEndDate: "2018-05-20T13:15:13Z"
27
+ },
28
+ expectedOutput: "The test cycle should be updated, but no output is expected."
29
+ },
30
+ {
31
+ description: "Change folder and status for test cycle 'SA-R40' by setting folder id and status id.",
32
+ parameters: {
33
+ testCycleIdOrKey: "SA-R40",
34
+ folder: { id: 100006 },
35
+ status: { id: 1e4 }
36
+ },
37
+ expectedOutput: "The test cycle should be updated, but no output is expected."
38
+ },
39
+ {
40
+ description: "Update custom fields on test cycle 'SA-R40' while keeping other custom fields intact.",
41
+ parameters: {
42
+ testCycleIdOrKey: "SA-R40",
43
+ customFields: {
44
+ "Build Number": 20,
45
+ "Release Date": "2020-01-01"
46
+ }
47
+ },
48
+ expectedOutput: "The test cycle should be updated, but no output is expected."
49
+ },
50
+ {
51
+ description: "Remove the owner from test cycle 'SA-R40'.",
52
+ parameters: {
53
+ testCycleIdOrKey: "SA-R40",
54
+ owner: null
55
+ },
56
+ expectedOutput: "The test cycle should be updated, but no output is expected."
57
+ },
58
+ {
59
+ description: "Remove a specific custom field 'Pre-Condition(s)' from test cycle 'SA-R40' while keeping other custom fields intact.",
60
+ parameters: {
61
+ testCycleIdOrKey: "SA-R40",
62
+ customFields: {
63
+ "Pre-Condition(s)": null,
64
+ Implemented: false
65
+ }
66
+ },
67
+ expectedOutput: "The test cycle should be updated, but no output is expected."
68
+ }
69
+ ]
70
+ };
71
+ handle = async (args) => {
72
+ const parsed = updateTestCycleParams.and(updateTestCycleBody.partial()).parse(args);
73
+ const { testCycleIdOrKey, ...updatesRaw } = parsed;
74
+ const updates = { ...updatesRaw };
75
+ if (updates.plannedStartDate === null) delete updates.plannedStartDate;
76
+ if (updates.plannedEndDate === null) delete updates.plannedEndDate;
77
+ const existingTestCycle = await this.client.getApiClient().get(`/testcycles/${testCycleIdOrKey}`);
78
+ const mergedBody = deepMerge(existingTestCycle, updates);
79
+ await this.client.getApiClient().put(`/testcycles/${testCycleIdOrKey}`, mergedBody);
80
+ return {
81
+ structuredContent: {},
82
+ content: []
83
+ };
84
+ };
85
+ }
86
+ export {
87
+ UpdateTestCycle
88
+ };
@@ -0,0 +1,66 @@
1
+ import { Tool } from "../../../common/tools.js";
2
+ import { createTestExecution201Response, createTestExecutionBody } from "../../common/rest-api-schemas.js";
3
+ class CreateTestExecution extends Tool {
4
+ specification = {
5
+ title: "Create Test Execution",
6
+ summary: "Create a new Test Execution for a Test Case within a specific Test Cycle",
7
+ readOnly: false,
8
+ idempotent: false,
9
+ inputSchema: createTestExecutionBody,
10
+ outputSchema: createTestExecution201Response,
11
+ examples: [
12
+ {
13
+ description: "Create a Passed execution for test case SA-T1 in cycle SA-R1",
14
+ parameters: {
15
+ projectKey: "SA",
16
+ testCaseKey: "SA-T1",
17
+ testCycleKey: "SA-R1",
18
+ statusName: "Pass"
19
+ },
20
+ expectedOutput: "The newly created Test Execution with execution details"
21
+ },
22
+ {
23
+ description: "Create a Failed execution with execution time, environment and comment",
24
+ parameters: {
25
+ projectKey: "MM2",
26
+ testCaseKey: "MM2-T15",
27
+ testCycleKey: "MM2-R3",
28
+ statusName: "Fail",
29
+ environmentName: "Staging",
30
+ executionTime: 125e3,
31
+ comment: "Step 3 failed due to timeout<br>Logs attached."
32
+ },
33
+ expectedOutput: "The newly created Test Execution including environment and timing information"
34
+ },
35
+ {
36
+ description: "Create execution with custom fields and assignment",
37
+ parameters: {
38
+ projectKey: "SA",
39
+ testCaseKey: "SA-T5",
40
+ testCycleKey: "SA-R2",
41
+ statusName: "Pass",
42
+ executedById: "5b10ac8d82e05b22cc7d4ef5",
43
+ assignedToId: "5b10ac8d82e05b22cc7d4ef6",
44
+ actualEndDate: "2026-02-17T10:15:30Z",
45
+ customFields: {
46
+ "Execution Build": "1.0.3",
47
+ "Tested Browser": "Chrome",
48
+ "Execution Date": "2026-02-17"
49
+ }
50
+ },
51
+ expectedOutput: "The newly created Test Execution including custom field values"
52
+ }
53
+ ]
54
+ };
55
+ handle = async (args) => {
56
+ const body = createTestExecutionBody.parse(args);
57
+ const response = await this.client.getApiClient().post(`/testexecutions/`, body);
58
+ return {
59
+ structuredContent: response,
60
+ content: []
61
+ };
62
+ };
63
+ }
64
+ export {
65
+ CreateTestExecution
66
+ };
@@ -1,5 +1,5 @@
1
1
  import { Tool } from "../../../common/tools.js";
2
- import { getTestExecutionResponse, getTestExecutionParams } from "../../common/rest-api-schemas.js";
2
+ import { getTestExecution200Response, getTestExecutionParams } from "../../common/rest-api-schemas.js";
3
3
  class GetTestExecution extends Tool {
4
4
  specification = {
5
5
  title: "Get Test Execution",
@@ -7,7 +7,7 @@ class GetTestExecution extends Tool {
7
7
  readOnly: true,
8
8
  idempotent: true,
9
9
  inputSchema: getTestExecutionParams,
10
- outputSchema: getTestExecutionResponse,
10
+ outputSchema: getTestExecution200Response,
11
11
  examples: [
12
12
  {
13
13
  description: "Get the test execution with id 1",
@@ -1,5 +1,5 @@
1
1
  import { Tool } from "../../../common/tools.js";
2
- import { listTestExecutionsNextgenResponse, listTestExecutionsNextgenQueryParams } from "../../common/rest-api-schemas.js";
2
+ import { listTestExecutionsNextgen200Response, listTestExecutionsNextgenQueryParams } from "../../common/rest-api-schemas.js";
3
3
  class GetTestExecutions extends Tool {
4
4
  specification = {
5
5
  title: "Get Test Executions",
@@ -7,7 +7,7 @@ class GetTestExecutions extends Tool {
7
7
  readOnly: true,
8
8
  idempotent: true,
9
9
  inputSchema: listTestExecutionsNextgenQueryParams,
10
- outputSchema: listTestExecutionsNextgenResponse,
10
+ outputSchema: listTestExecutionsNextgen200Response,
11
11
  examples: [
12
12
  {
13
13
  description: "Get the first 10 test executions",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartbear/mcp",
3
- "version": "0.13.4",
3
+ "version": "0.14.0",
4
4
  "description": "MCP server for interacting SmartBear Products",
5
5
  "keywords": [
6
6
  "smartbear",