zephyr-scale-mcp-server 0.0.2 → 0.0.3

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.
package/build/index.js CHANGED
@@ -235,6 +235,20 @@ class ZephyrServer {
235
235
  required: ['test_run_key'],
236
236
  },
237
237
  },
238
+ {
239
+ name: 'delete_test_case',
240
+ description: 'Delete a specific test case',
241
+ inputSchema: {
242
+ type: 'object',
243
+ properties: {
244
+ test_case_key: {
245
+ type: 'string',
246
+ description: 'Test case key to delete (e.g., PROJ-T123)',
247
+ },
248
+ },
249
+ required: ['test_case_key'],
250
+ },
251
+ },
238
252
  ],
239
253
  }));
240
254
  this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
@@ -252,6 +266,8 @@ class ZephyrServer {
252
266
  return await this.createFolder(request.params.arguments);
253
267
  case 'get_test_run_cases':
254
268
  return await this.getTestRunCases(request.params.arguments);
269
+ case 'delete_test_case':
270
+ return await this.deleteTestCase(request.params.arguments);
255
271
  default:
256
272
  throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${request.params.name}`);
257
273
  }
@@ -551,6 +567,44 @@ class ZephyrServer {
551
567
  throw new McpError(ErrorCode.InternalError, `Failed to get test run cases: ${error instanceof Error ? error.message : String(error)}`);
552
568
  }
553
569
  }
570
+ async deleteTestCase(args) {
571
+ const { test_case_key } = args;
572
+ try {
573
+ const response = await this.axiosInstance.delete(`/rest/atm/1.0/testcase/${test_case_key}`);
574
+ if (response.status === 204) {
575
+ return {
576
+ content: [
577
+ {
578
+ type: 'text',
579
+ text: `✅ Test case ${test_case_key} deleted successfully`,
580
+ },
581
+ ],
582
+ };
583
+ }
584
+ else {
585
+ throw new Error(`Unexpected status code: ${response.status}`);
586
+ }
587
+ }
588
+ catch (error) {
589
+ let errorMessage = 'Unknown error';
590
+ if (error instanceof Error && 'response' in error) {
591
+ const axiosError = error;
592
+ if (axiosError.response?.status === 404) {
593
+ errorMessage = `Test case ${test_case_key} not found`;
594
+ }
595
+ else {
596
+ errorMessage = `Status: ${axiosError.response?.status}, Data: ${JSON.stringify(axiosError.response?.data)}`;
597
+ }
598
+ }
599
+ else if (error instanceof Error) {
600
+ errorMessage = error.message;
601
+ }
602
+ else {
603
+ errorMessage = String(error);
604
+ }
605
+ throw new McpError(ErrorCode.InternalError, `Failed to delete test case: ${errorMessage}`);
606
+ }
607
+ }
554
608
  async run() {
555
609
  const transport = new StdioServerTransport();
556
610
  await this.server.connect(transport);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zephyr-scale-mcp-server",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "Model Context Protocol (MCP) server for Zephyr Scale test case management with comprehensive STEP_BY_STEP, PLAIN_TEXT, and BDD support",
5
5
  "type": "module",
6
6
  "main": "./build/index.js",
package/src/index.ts CHANGED
@@ -252,6 +252,20 @@ class ZephyrServer {
252
252
  required: ['test_run_key'],
253
253
  },
254
254
  },
255
+ {
256
+ name: 'delete_test_case',
257
+ description: 'Delete a specific test case',
258
+ inputSchema: {
259
+ type: 'object',
260
+ properties: {
261
+ test_case_key: {
262
+ type: 'string',
263
+ description: 'Test case key to delete (e.g., PROJ-T123)',
264
+ },
265
+ },
266
+ required: ['test_case_key'],
267
+ },
268
+ },
255
269
  ],
256
270
  }));
257
271
 
@@ -270,6 +284,8 @@ class ZephyrServer {
270
284
  return await this.createFolder(request.params.arguments);
271
285
  case 'get_test_run_cases':
272
286
  return await this.getTestRunCases(request.params.arguments);
287
+ case 'delete_test_case':
288
+ return await this.deleteTestCase(request.params.arguments);
273
289
  default:
274
290
  throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${request.params.name}`);
275
291
  }
@@ -605,6 +621,45 @@ class ZephyrServer {
605
621
  }
606
622
  }
607
623
 
624
+ private async deleteTestCase(args: any) {
625
+ const { test_case_key } = args;
626
+
627
+ try {
628
+ const response = await this.axiosInstance.delete(`/rest/atm/1.0/testcase/${test_case_key}`);
629
+
630
+ if (response.status === 204) {
631
+ return {
632
+ content: [
633
+ {
634
+ type: 'text',
635
+ text: `✅ Test case ${test_case_key} deleted successfully`,
636
+ },
637
+ ],
638
+ };
639
+ } else {
640
+ throw new Error(`Unexpected status code: ${response.status}`);
641
+ }
642
+ } catch (error) {
643
+ let errorMessage = 'Unknown error';
644
+ if (error instanceof Error && 'response' in error) {
645
+ const axiosError = error as any;
646
+ if (axiosError.response?.status === 404) {
647
+ errorMessage = `Test case ${test_case_key} not found`;
648
+ } else {
649
+ errorMessage = `Status: ${axiosError.response?.status}, Data: ${JSON.stringify(axiosError.response?.data)}`;
650
+ }
651
+ } else if (error instanceof Error) {
652
+ errorMessage = error.message;
653
+ } else {
654
+ errorMessage = String(error);
655
+ }
656
+ throw new McpError(
657
+ ErrorCode.InternalError,
658
+ `Failed to delete test case: ${errorMessage}`
659
+ );
660
+ }
661
+ }
662
+
608
663
  async run() {
609
664
  const transport = new StdioServerTransport();
610
665
  await this.server.connect(transport);