@bun913/mcp-testrail 0.11.4

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.
Files changed (129) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +101 -0
  3. package/dist/client/api/baseClient.d.ts +39 -0
  4. package/dist/client/api/baseClient.js +103 -0
  5. package/dist/client/api/baseClient.js.map +1 -0
  6. package/dist/client/api/cases.d.ts +102 -0
  7. package/dist/client/api/cases.js +200 -0
  8. package/dist/client/api/cases.js.map +1 -0
  9. package/dist/client/api/index.d.ts +39 -0
  10. package/dist/client/api/index.js +50 -0
  11. package/dist/client/api/index.js.map +1 -0
  12. package/dist/client/api/milestones.d.ts +12 -0
  13. package/dist/client/api/milestones.js +22 -0
  14. package/dist/client/api/milestones.js.map +1 -0
  15. package/dist/client/api/plans.d.ts +12 -0
  16. package/dist/client/api/plans.js +20 -0
  17. package/dist/client/api/plans.js.map +1 -0
  18. package/dist/client/api/projects.d.ts +12 -0
  19. package/dist/client/api/projects.js +31 -0
  20. package/dist/client/api/projects.js.map +1 -0
  21. package/dist/client/api/results.d.ts +56 -0
  22. package/dist/client/api/results.js +125 -0
  23. package/dist/client/api/results.js.map +1 -0
  24. package/dist/client/api/runs.d.ts +40 -0
  25. package/dist/client/api/runs.js +79 -0
  26. package/dist/client/api/runs.js.map +1 -0
  27. package/dist/client/api/sections.d.ts +40 -0
  28. package/dist/client/api/sections.js +89 -0
  29. package/dist/client/api/sections.js.map +1 -0
  30. package/dist/client/api/sharedSteps.d.ts +11 -0
  31. package/dist/client/api/sharedSteps.js +20 -0
  32. package/dist/client/api/sharedSteps.js.map +1 -0
  33. package/dist/client/api/suites.d.ts +36 -0
  34. package/dist/client/api/suites.js +63 -0
  35. package/dist/client/api/suites.js.map +1 -0
  36. package/dist/client/api/tests.d.ts +32 -0
  37. package/dist/client/api/tests.js +47 -0
  38. package/dist/client/api/tests.js.map +1 -0
  39. package/dist/client/api/utils.d.ts +7 -0
  40. package/dist/client/api/utils.js +24 -0
  41. package/dist/client/api/utils.js.map +1 -0
  42. package/dist/index.d.ts +1 -0
  43. package/dist/index.js +5 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/server/api/cases.d.ts +8 -0
  46. package/dist/server/api/cases.js +431 -0
  47. package/dist/server/api/cases.js.map +1 -0
  48. package/dist/server/api/index.d.ts +18 -0
  49. package/dist/server/api/index.js +40 -0
  50. package/dist/server/api/index.js.map +1 -0
  51. package/dist/server/api/milestones.d.ts +8 -0
  52. package/dist/server/api/milestones.js +29 -0
  53. package/dist/server/api/milestones.js.map +1 -0
  54. package/dist/server/api/plans.d.ts +8 -0
  55. package/dist/server/api/plans.js +29 -0
  56. package/dist/server/api/plans.js.map +1 -0
  57. package/dist/server/api/projects.d.ts +8 -0
  58. package/dist/server/api/projects.js +51 -0
  59. package/dist/server/api/projects.js.map +1 -0
  60. package/dist/server/api/results.d.ts +8 -0
  61. package/dist/server/api/results.js +164 -0
  62. package/dist/server/api/results.js.map +1 -0
  63. package/dist/server/api/runs.d.ts +8 -0
  64. package/dist/server/api/runs.js +113 -0
  65. package/dist/server/api/runs.js.map +1 -0
  66. package/dist/server/api/sections.d.ts +8 -0
  67. package/dist/server/api/sections.js +138 -0
  68. package/dist/server/api/sections.js.map +1 -0
  69. package/dist/server/api/sharedSteps.d.ts +8 -0
  70. package/dist/server/api/sharedSteps.js +26 -0
  71. package/dist/server/api/sharedSteps.js.map +1 -0
  72. package/dist/server/api/suites.d.ts +8 -0
  73. package/dist/server/api/suites.js +111 -0
  74. package/dist/server/api/suites.js.map +1 -0
  75. package/dist/server/api/tests.d.ts +8 -0
  76. package/dist/server/api/tests.js +68 -0
  77. package/dist/server/api/tests.js.map +1 -0
  78. package/dist/server/api/utils.d.ts +7 -0
  79. package/dist/server/api/utils.js +25 -0
  80. package/dist/server/api/utils.js.map +1 -0
  81. package/dist/server/server.d.ts +2 -0
  82. package/dist/server/server.js +70 -0
  83. package/dist/server/server.js.map +1 -0
  84. package/dist/server/templates.d.ts +8 -0
  85. package/dist/server/templates.js +43 -0
  86. package/dist/server/templates.js.map +1 -0
  87. package/dist/shared/schemas/cases.d.ts +668 -0
  88. package/dist/shared/schemas/cases.js +178 -0
  89. package/dist/shared/schemas/cases.js.map +1 -0
  90. package/dist/shared/schemas/common.d.ts +117 -0
  91. package/dist/shared/schemas/common.js +50 -0
  92. package/dist/shared/schemas/common.js.map +1 -0
  93. package/dist/shared/schemas/index.d.ts +10 -0
  94. package/dist/shared/schemas/index.js +23 -0
  95. package/dist/shared/schemas/index.js.map +1 -0
  96. package/dist/shared/schemas/milestones.d.ts +59 -0
  97. package/dist/shared/schemas/milestones.js +26 -0
  98. package/dist/shared/schemas/milestones.js.map +1 -0
  99. package/dist/shared/schemas/plans.d.ts +416 -0
  100. package/dist/shared/schemas/plans.js +43 -0
  101. package/dist/shared/schemas/plans.js.map +1 -0
  102. package/dist/shared/schemas/projects.d.ts +135 -0
  103. package/dist/shared/schemas/projects.js +61 -0
  104. package/dist/shared/schemas/projects.js.map +1 -0
  105. package/dist/shared/schemas/results.d.ts +407 -0
  106. package/dist/shared/schemas/results.js +178 -0
  107. package/dist/shared/schemas/results.js.map +1 -0
  108. package/dist/shared/schemas/runs.d.ts +267 -0
  109. package/dist/shared/schemas/runs.js +133 -0
  110. package/dist/shared/schemas/runs.js.map +1 -0
  111. package/dist/shared/schemas/sections.d.ts +136 -0
  112. package/dist/shared/schemas/sections.js +68 -0
  113. package/dist/shared/schemas/sections.js.map +1 -0
  114. package/dist/shared/schemas/sharedSteps.d.ts +135 -0
  115. package/dist/shared/schemas/sharedSteps.js +65 -0
  116. package/dist/shared/schemas/sharedSteps.js.map +1 -0
  117. package/dist/shared/schemas/suites.d.ts +120 -0
  118. package/dist/shared/schemas/suites.js +44 -0
  119. package/dist/shared/schemas/suites.js.map +1 -0
  120. package/dist/shared/schemas/tests.d.ts +87 -0
  121. package/dist/shared/schemas/tests.js +52 -0
  122. package/dist/shared/schemas/tests.js.map +1 -0
  123. package/dist/sse.d.ts +1 -0
  124. package/dist/sse.js +5 -0
  125. package/dist/sse.js.map +1 -0
  126. package/dist/stdio.d.ts +1 -0
  127. package/dist/stdio.js +52 -0
  128. package/dist/stdio.js.map +1 -0
  129. package/package.json +48 -0
@@ -0,0 +1,431 @@
1
+ import { createSuccessResponse, createErrorResponse } from "./utils.js";
2
+ import { getTestCaseSchema, getTestCasesSchema, addTestCaseSchema, updateTestCaseSchema, deleteTestCaseSchema, copyTestCasesToSectionSchema, moveTestCasesToSectionSchema, getTestCaseHistorySchema, updateTestCasesSchema, TestRailCaseSchema, } from "../../shared/schemas/cases.js";
3
+ import { z } from "zod";
4
+ /**
5
+ * Function to register test case-related API tools
6
+ * @param server McpServer instance
7
+ * @param testRailClient TestRail client instance
8
+ */
9
+ export function registerCaseTools(server, testRailClient) {
10
+ const availableColumns = Object.keys(TestRailCaseSchema.shape);
11
+ // Default columns that exclude large text fields
12
+ const defaultColumns = [
13
+ "id",
14
+ "title",
15
+ "section_id",
16
+ "template_id",
17
+ "type_id",
18
+ "priority_id",
19
+ "milestone_id",
20
+ "refs",
21
+ "estimate",
22
+ "suite_id",
23
+ "display_order",
24
+ "is_deleted",
25
+ "status_id",
26
+ "updated_on",
27
+ "created_on",
28
+ "created_by",
29
+ "updated_by",
30
+ ];
31
+ // Get a specific test case
32
+ server.tool("getCase", "Retrieves complete details for a single test case, including all fields such as steps, expected results, and prerequisites.", {
33
+ caseId: getTestCaseSchema.shape.caseId,
34
+ }, async (args, extra) => {
35
+ try {
36
+ const { caseId } = args;
37
+ const testCase = await testRailClient.cases.getCase(caseId);
38
+ // Return full case data for individual case requests
39
+ const successResponse = createSuccessResponse("Test case retrieved successfully", {
40
+ case: testCase,
41
+ });
42
+ return {
43
+ content: [{ type: "text", text: JSON.stringify(successResponse) }],
44
+ };
45
+ }
46
+ catch (error) {
47
+ const errorResponse = createErrorResponse(`Error fetching test case ${args.caseId}`, error);
48
+ return {
49
+ content: [{ type: "text", text: JSON.stringify(errorResponse) }],
50
+ isError: true,
51
+ };
52
+ }
53
+ });
54
+ // Get all test cases for a project
55
+ server.tool("getCases", "Retrieves test cases for a project with limited fields to reduce response size. Large text fields (steps, expected results, etc.) are excluded. For complete case details, use getCase with a specific case ID.", {
56
+ projectId: getTestCasesSchema.shape.projectId,
57
+ suiteId: getTestCasesSchema.shape.suiteId,
58
+ limit: z
59
+ .number()
60
+ .min(1)
61
+ .optional()
62
+ .default(50)
63
+ .describe("Number of cases to return per page. If you cannot get all cases, try separating the request into multiple calls"),
64
+ offset: z
65
+ .number()
66
+ .optional()
67
+ .default(0)
68
+ .describe("Offset for pagination"),
69
+ }, async (args, extra) => {
70
+ try {
71
+ const { projectId, suiteId, limit = 50, offset = 0 } = args;
72
+ const testCases = await testRailClient.cases.getCases(projectId, suiteId, {
73
+ suite_id: suiteId,
74
+ limit,
75
+ offset,
76
+ });
77
+ // Always filter to default columns to reduce response size
78
+ const responseData = testCases.cases.map((testCase) => {
79
+ // Always include id
80
+ const filtered = {
81
+ id: testCase.id,
82
+ };
83
+ // Add only the default columns
84
+ for (const column of defaultColumns) {
85
+ if (column in testCase && column !== "id") {
86
+ // Use type assertion more carefully
87
+ filtered[column] = testCase[column];
88
+ }
89
+ }
90
+ return filtered;
91
+ });
92
+ const successResponse = createSuccessResponse("Test cases retrieved successfully", {
93
+ cases: responseData,
94
+ pagination: {
95
+ limit,
96
+ offset,
97
+ total: testCases.size,
98
+ hasMore: testCases._links.next !== null,
99
+ },
100
+ });
101
+ return {
102
+ content: [{ type: "text", text: JSON.stringify(successResponse) }],
103
+ };
104
+ }
105
+ catch (error) {
106
+ const errorResponse = createErrorResponse(`Error fetching test cases for project ${args.projectId}`, error);
107
+ return {
108
+ content: [{ type: "text", text: JSON.stringify(errorResponse) }],
109
+ isError: true,
110
+ };
111
+ }
112
+ });
113
+ // Add a new test case
114
+ server.tool("addCase", "Creates a new test case in TestRail with specified details including steps, prerequisites, and expected results / 指定された詳細(ステップ、前提条件、期待される結果を含む)で新しいテストケースをTestRailに作成します", {
115
+ sectionId: addTestCaseSchema.shape.sectionId,
116
+ title: addTestCaseSchema.shape.title,
117
+ typeId: addTestCaseSchema.shape.typeId,
118
+ priorityId: addTestCaseSchema.shape.priorityId,
119
+ estimate: addTestCaseSchema.shape.estimate,
120
+ milestoneId: addTestCaseSchema.shape.milestoneId,
121
+ refs: addTestCaseSchema.shape.refs,
122
+ customPrerequisites: addTestCaseSchema.shape.customPrerequisites,
123
+ customSteps: addTestCaseSchema.shape.customSteps,
124
+ customExpected: addTestCaseSchema.shape.customExpected,
125
+ }, async (args, extra) => {
126
+ try {
127
+ const { sectionId, title, typeId, priorityId, estimate, milestoneId, refs, customPrerequisites, customSteps, customExpected, } = args;
128
+ // Build test case data
129
+ const data = {};
130
+ // Add title if specified
131
+ if (title) {
132
+ data.title = title;
133
+ }
134
+ // Add type ID if specified
135
+ if (typeId) {
136
+ data.type_id = typeId;
137
+ }
138
+ // Add priority ID if specified
139
+ if (priorityId) {
140
+ data.priority_id = priorityId;
141
+ }
142
+ // Add estimate if specified
143
+ if (estimate) {
144
+ data.estimate = estimate;
145
+ }
146
+ // Add milestone ID if specified
147
+ if (milestoneId) {
148
+ data.milestone_id = milestoneId;
149
+ }
150
+ // Add references if specified
151
+ if (refs) {
152
+ data.refs = refs;
153
+ }
154
+ // Remove empty or undefined fields
155
+ for (const key of Object.keys(data)) {
156
+ const value = data[key];
157
+ if (value === undefined || value === null || value === "") {
158
+ delete data[key];
159
+ }
160
+ }
161
+ const testCase = await testRailClient.cases.addCase(sectionId, data);
162
+ const successResponse = createSuccessResponse("Test case created successfully", {
163
+ case: testCase,
164
+ });
165
+ return {
166
+ content: [{ type: "text", text: JSON.stringify(successResponse) }],
167
+ };
168
+ }
169
+ catch (error) {
170
+ const errorResponse = createErrorResponse(`Error creating test case in section ${args.sectionId}`, error);
171
+ return {
172
+ content: [{ type: "text", text: JSON.stringify(errorResponse) }],
173
+ isError: true,
174
+ };
175
+ }
176
+ });
177
+ // Update an existing test case
178
+ server.tool("updateCase", "Updates an existing test case with specified details such as title, type, priority, and custom fields / 既存のテストケースをタイトル、タイプ、優先度、カスタムフィールドなどの指定された詳細で更新します", {
179
+ caseId: updateTestCaseSchema.shape.caseId,
180
+ title: updateTestCaseSchema.shape.title,
181
+ typeId: updateTestCaseSchema.shape.typeId,
182
+ priorityId: updateTestCaseSchema.shape.priorityId,
183
+ estimate: updateTestCaseSchema.shape.estimate,
184
+ milestoneId: updateTestCaseSchema.shape.milestoneId,
185
+ refs: updateTestCaseSchema.shape.refs,
186
+ customPrerequisites: updateTestCaseSchema.shape.customPrerequisites,
187
+ customSteps: updateTestCaseSchema.shape.customSteps,
188
+ customExpected: updateTestCaseSchema.shape.customExpected,
189
+ }, async (args, extra) => {
190
+ try {
191
+ const { caseId, title, typeId, priorityId, estimate, milestoneId, refs, customPrerequisites, customSteps, customExpected, } = args;
192
+ // Build update data
193
+ const data = {};
194
+ // Add title if specified
195
+ if (title) {
196
+ data.title = title;
197
+ }
198
+ // Add type ID if specified
199
+ if (typeId) {
200
+ data.type_id = typeId;
201
+ }
202
+ // Add priority ID if specified
203
+ if (priorityId) {
204
+ data.priority_id = priorityId;
205
+ }
206
+ // Add estimate if specified
207
+ if (estimate) {
208
+ data.estimate = estimate;
209
+ }
210
+ // Add milestone ID if specified
211
+ if (milestoneId) {
212
+ data.milestone_id = milestoneId;
213
+ }
214
+ // Add references if specified
215
+ if (refs) {
216
+ data.refs = refs;
217
+ }
218
+ const testCase = await testRailClient.cases.updateCase(caseId, data);
219
+ const successResponse = createSuccessResponse("Test case updated successfully", {
220
+ case: testCase,
221
+ });
222
+ return {
223
+ content: [{ type: "text", text: JSON.stringify(successResponse) }],
224
+ };
225
+ }
226
+ catch (error) {
227
+ const errorResponse = createErrorResponse(`Error updating test case ${args.caseId}`, error);
228
+ return {
229
+ content: [{ type: "text", text: JSON.stringify(errorResponse) }],
230
+ isError: true,
231
+ };
232
+ }
233
+ });
234
+ // Delete a test case
235
+ server.tool("deleteCase", "Deletes a test case from TestRail / TestRailからテストケースを削除します", { caseId: deleteTestCaseSchema.shape.caseId }, async (args, extra) => {
236
+ try {
237
+ const { caseId } = args;
238
+ await testRailClient.cases.deleteCase(caseId);
239
+ const successResponse = createSuccessResponse(`Test case ${caseId} deleted successfully`);
240
+ return {
241
+ content: [{ type: "text", text: JSON.stringify(successResponse) }],
242
+ };
243
+ }
244
+ catch (error) {
245
+ const errorResponse = createErrorResponse(`Error deleting test case ${args.caseId}`, error);
246
+ return {
247
+ content: [{ type: "text", text: JSON.stringify(errorResponse) }],
248
+ isError: true,
249
+ };
250
+ }
251
+ });
252
+ // Get all test case types
253
+ server.tool("getCaseTypes", "Retrieves all available test case types in TestRail / TestRailで利用可能な全テストケースタイプを取得します", {}, async (args, extra) => {
254
+ try {
255
+ const caseTypes = await testRailClient.cases.getCaseTypes();
256
+ const successResponse = createSuccessResponse("Test case types retrieved successfully", {
257
+ caseTypes,
258
+ });
259
+ return {
260
+ content: [{ type: "text", text: JSON.stringify(successResponse) }],
261
+ };
262
+ }
263
+ catch (error) {
264
+ const errorResponse = createErrorResponse("Error fetching test case types", error);
265
+ return {
266
+ content: [{ type: "text", text: JSON.stringify(errorResponse) }],
267
+ isError: true,
268
+ };
269
+ }
270
+ });
271
+ // Get all test case fields
272
+ server.tool("getCaseFields", "Retrieves all available test case fields in TestRail / TestRailで利用可能な全テストケースフィールドを取得します", {}, async (args, extra) => {
273
+ try {
274
+ const caseFields = await testRailClient.cases.getCaseFields();
275
+ const successResponse = createSuccessResponse("Test case fields retrieved successfully", {
276
+ caseFields,
277
+ });
278
+ return {
279
+ content: [{ type: "text", text: JSON.stringify(successResponse) }],
280
+ };
281
+ }
282
+ catch (error) {
283
+ const errorResponse = createErrorResponse("Error fetching test case fields", error);
284
+ return {
285
+ content: [{ type: "text", text: JSON.stringify(errorResponse) }],
286
+ isError: true,
287
+ };
288
+ }
289
+ });
290
+ // Copy test cases to section
291
+ server.tool("copyToSection", "Copies specified test cases to a target section while keeping the originals / 指定されたテストケースを対象のセクションにコピーし、元のケースは保持します", {
292
+ caseIds: copyTestCasesToSectionSchema.shape.caseIds,
293
+ sectionId: copyTestCasesToSectionSchema.shape.sectionId,
294
+ }, async (args, extra) => {
295
+ try {
296
+ const { caseIds, sectionId } = args;
297
+ const result = await testRailClient.cases.copyToSection(caseIds, sectionId);
298
+ const successResponse = createSuccessResponse("Test cases copied successfully", {
299
+ result,
300
+ });
301
+ return {
302
+ content: [{ type: "text", text: JSON.stringify(successResponse) }],
303
+ };
304
+ }
305
+ catch (error) {
306
+ const errorResponse = createErrorResponse(`Error copying test cases to section ${args.sectionId}`, error);
307
+ return {
308
+ content: [{ type: "text", text: JSON.stringify(errorResponse) }],
309
+ isError: true,
310
+ };
311
+ }
312
+ });
313
+ // Move test cases to section
314
+ server.tool("moveToSection", "Moves specified test cases to a target section / 指定されたテストケースを対象のセクションに移動します", {
315
+ caseIds: moveTestCasesToSectionSchema.shape.caseIds,
316
+ sectionId: moveTestCasesToSectionSchema.shape.sectionId,
317
+ }, async (args, extra) => {
318
+ try {
319
+ const { caseIds, sectionId } = args;
320
+ const result = await testRailClient.cases.moveToSection(caseIds, sectionId);
321
+ const successResponse = createSuccessResponse("Test cases moved successfully", {
322
+ result,
323
+ });
324
+ return {
325
+ content: [{ type: "text", text: JSON.stringify(successResponse) }],
326
+ };
327
+ }
328
+ catch (error) {
329
+ const errorResponse = createErrorResponse(`Error moving test cases to section ${args.sectionId}`, error);
330
+ return {
331
+ content: [{ type: "text", text: JSON.stringify(errorResponse) }],
332
+ isError: true,
333
+ };
334
+ }
335
+ });
336
+ // Get test case history
337
+ server.tool("getCaseHistory", "Retrieves the change history of a test case including updates to fields and custom fields / テストケースの変更履歴(フィールドとカスタムフィールドの更新を含む)を取得します", { caseId: getTestCaseHistorySchema.shape.caseId }, async (args, extra) => {
338
+ try {
339
+ const { caseId } = args;
340
+ const history = await testRailClient.cases.getCaseHistory(caseId);
341
+ const successResponse = createSuccessResponse("Test case history retrieved successfully", {
342
+ history,
343
+ });
344
+ return {
345
+ content: [{ type: "text", text: JSON.stringify(successResponse) }],
346
+ };
347
+ }
348
+ catch (error) {
349
+ const errorResponse = createErrorResponse(`Error fetching history for test case ${args.caseId}`, error);
350
+ return {
351
+ content: [{ type: "text", text: JSON.stringify(errorResponse) }],
352
+ isError: true,
353
+ };
354
+ }
355
+ });
356
+ // Update multiple test cases
357
+ server.tool("updateCases", "Updates multiple test cases simultaneously with the same field values / 複数のテストケースを同じフィールド値で一括更新します", {
358
+ projectId: updateTestCasesSchema.shape.projectId,
359
+ suiteId: updateTestCasesSchema.shape.suiteId,
360
+ caseIds: updateTestCasesSchema.shape.caseIds,
361
+ title: updateTestCasesSchema.shape.title,
362
+ typeId: updateTestCasesSchema.shape.typeId,
363
+ priorityId: updateTestCasesSchema.shape.priorityId,
364
+ estimate: updateTestCasesSchema.shape.estimate,
365
+ milestoneId: updateTestCasesSchema.shape.milestoneId,
366
+ refs: updateTestCasesSchema.shape.refs,
367
+ customPrerequisites: updateTestCasesSchema.shape.customPrerequisites,
368
+ customSteps: updateTestCasesSchema.shape.customSteps,
369
+ customExpected: updateTestCasesSchema.shape.customExpected,
370
+ }, async (args, extra) => {
371
+ try {
372
+ const { projectId, suiteId, caseIds, title, typeId, priorityId, estimate, milestoneId, refs, customPrerequisites, customSteps, customExpected, } = args;
373
+ // Build update data
374
+ const data = {};
375
+ // Add title if specified
376
+ if (title) {
377
+ data.title = title;
378
+ }
379
+ // Add type ID if specified
380
+ if (typeId) {
381
+ data.type_id = typeId;
382
+ }
383
+ // Add priority ID if specified
384
+ if (priorityId) {
385
+ data.priority_id = priorityId;
386
+ }
387
+ // Add estimate if specified
388
+ if (estimate) {
389
+ data.estimate = estimate;
390
+ }
391
+ // Add milestone ID if specified
392
+ if (milestoneId) {
393
+ data.milestone_id = milestoneId;
394
+ }
395
+ // Add references if specified
396
+ if (refs) {
397
+ data.refs = refs;
398
+ }
399
+ // Add custom fields if specified
400
+ if (customPrerequisites) {
401
+ data.custom_preconds = customPrerequisites;
402
+ }
403
+ if (customSteps) {
404
+ data.custom_steps = customSteps;
405
+ }
406
+ if (customExpected) {
407
+ data.custom_expected = customExpected;
408
+ }
409
+ // Remove empty or undefined fields
410
+ for (const key of Object.keys(data)) {
411
+ const value = data[key];
412
+ if (value === undefined || value === null || value === "") {
413
+ delete data[key];
414
+ }
415
+ }
416
+ await testRailClient.cases.updateCases(projectId, suiteId, data, caseIds);
417
+ const successResponse = createSuccessResponse("Test cases updated successfully");
418
+ return {
419
+ content: [{ type: "text", text: JSON.stringify(successResponse) }],
420
+ };
421
+ }
422
+ catch (error) {
423
+ const errorResponse = createErrorResponse(`Error updating test cases for project ${args.projectId}`, error);
424
+ return {
425
+ content: [{ type: "text", text: JSON.stringify(errorResponse) }],
426
+ isError: true,
427
+ };
428
+ }
429
+ });
430
+ }
431
+ //# sourceMappingURL=cases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cases.js","sourceRoot":"","sources":["../../../src/server/api/cases.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { TestRailClient } from "../../client/api/index.js";
3
+ /**
4
+ * Function to register all API tools to the server
5
+ * @param server McpServer server instance
6
+ * @param testRailClient TestRail client instance
7
+ */
8
+ export declare function registerAllTools(server: McpServer, testRailClient: TestRailClient): void;
9
+ export * from "./projects.js";
10
+ export * from "./cases.js";
11
+ export * from "./sections.js";
12
+ export * from "./sharedSteps.js";
13
+ export * from "./milestones.js";
14
+ export * from "./suites.js";
15
+ export * from "./plans.js";
16
+ export * from "./runs.js";
17
+ export * from "./tests.js";
18
+ export * from "./results.js";
@@ -0,0 +1,40 @@
1
+ import { registerProjectTools } from "./projects.js";
2
+ import { registerCaseTools } from "./cases.js";
3
+ import { registerSectionTools } from "./sections.js";
4
+ import { registerSharedStepTools } from "./sharedSteps.js";
5
+ import { registerMilestoneTools } from "./milestones.js";
6
+ import { registerSuiteTools } from "./suites.js";
7
+ import { registerPlanTools } from "./plans.js";
8
+ import { registerRunTools } from "./runs.js";
9
+ import { registerTestTools } from "./tests.js";
10
+ import { registerResultTools } from "./results.js";
11
+ /**
12
+ * Function to register all API tools to the server
13
+ * @param server McpServer server instance
14
+ * @param testRailClient TestRail client instance
15
+ */
16
+ export function registerAllTools(server, testRailClient) {
17
+ // Register tools for each resource type
18
+ registerSuiteTools(server, testRailClient);
19
+ registerProjectTools(server, testRailClient);
20
+ registerCaseTools(server, testRailClient);
21
+ registerSectionTools(server, testRailClient);
22
+ registerRunTools(server, testRailClient);
23
+ registerTestTools(server, testRailClient);
24
+ registerResultTools(server, testRailClient);
25
+ registerPlanTools(server, testRailClient);
26
+ registerMilestoneTools(server, testRailClient);
27
+ registerSharedStepTools(server, testRailClient);
28
+ }
29
+ // Export all tool modules
30
+ export * from "./projects.js";
31
+ export * from "./cases.js";
32
+ export * from "./sections.js";
33
+ export * from "./sharedSteps.js";
34
+ export * from "./milestones.js";
35
+ export * from "./suites.js";
36
+ export * from "./plans.js";
37
+ export * from "./runs.js";
38
+ export * from "./tests.js";
39
+ export * from "./results.js";
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/api/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC/B,MAAiB,EACjB,cAA8B;IAE9B,wCAAwC;IACxC,kBAAkB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC3C,oBAAoB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC7C,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,oBAAoB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC7C,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzC,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,mBAAmB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5C,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,sBAAsB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC/C,uBAAuB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AACjD,CAAC;AAED,0BAA0B;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { TestRailClient } from "../../client/api/index.js";
3
+ /**
4
+ * Function to register milestone-related API tools
5
+ * @param server McpServer instance
6
+ * @param testRailClient TestRail client instance
7
+ */
8
+ export declare function registerMilestoneTools(server: McpServer, testRailClient: TestRailClient): void;
@@ -0,0 +1,29 @@
1
+ import { createSuccessResponse, createErrorResponse } from "./utils.js";
2
+ import { getMilestonesSchema } from "../../shared/schemas/milestones.js";
3
+ /**
4
+ * Function to register milestone-related API tools
5
+ * @param server McpServer instance
6
+ * @param testRailClient TestRail client instance
7
+ */
8
+ export function registerMilestoneTools(server, testRailClient) {
9
+ // Get all milestones for a project
10
+ server.tool("getMilestones", "Retrieves all milestones for a specified TestRail project / 指定されたTestRailプロジェクトの全マイルストーンを取得します", getMilestonesSchema, async ({ projectId }) => {
11
+ try {
12
+ const milestones = await testRailClient.milestones.getMilestones(projectId);
13
+ const successResponse = createSuccessResponse("Milestones retrieved successfully", {
14
+ milestones,
15
+ });
16
+ return {
17
+ content: [{ type: "text", text: JSON.stringify(successResponse) }],
18
+ };
19
+ }
20
+ catch (error) {
21
+ const errorResponse = createErrorResponse(`Error fetching milestones for project ${projectId}`, error);
22
+ return {
23
+ content: [{ type: "text", text: JSON.stringify(errorResponse) }],
24
+ isError: true,
25
+ };
26
+ }
27
+ });
28
+ }
29
+ //# sourceMappingURL=milestones.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"milestones.js","sourceRoot":"","sources":["../../../src/server/api/milestones.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACrC,MAAiB,EACjB,cAA8B;IAE9B,mCAAmC;IACnC,MAAM,CAAC,IAAI,CACV,eAAe,EACf,gGAAgG,EAChG,mBAAmB,EACnB,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC;YACJ,MAAM,UAAU,GACf,MAAM,cAAc,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAC1D,MAAM,eAAe,GAAG,qBAAqB,CAC5C,mCAAmC,EACnC;gBACC,UAAU;aACV,CACD,CAAC;YACF,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;aAClE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,aAAa,GAAG,mBAAmB,CACxC,yCAAyC,SAAS,EAAE,EACpD,KAAK,CACL,CAAC;YACF,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC;gBAChE,OAAO,EAAE,IAAI;aACb,CAAC;QACH,CAAC;IACF,CAAC,CACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { TestRailClient } from "../../client/api/index.js";
3
+ /**
4
+ * Function to register test plan-related API tools
5
+ * @param server McpServer instance
6
+ * @param testRailClient TestRail client instance
7
+ */
8
+ export declare function registerPlanTools(server: McpServer, testRailClient: TestRailClient): void;
@@ -0,0 +1,29 @@
1
+ import { createSuccessResponse, createErrorResponse } from "./utils.js";
2
+ import { getPlansSchema } from "../../shared/schemas/plans.js";
3
+ /**
4
+ * Function to register test plan-related API tools
5
+ * @param server McpServer instance
6
+ * @param testRailClient TestRail client instance
7
+ */
8
+ export function registerPlanTools(server, testRailClient) {
9
+ // Get all test plans for a project
10
+ server.tool("getPlans", "Retrieves all test plans for a specified TestRail project / 指定されたTestRailプロジェクトの全テストプランを取得します", getPlansSchema, async ({ projectId }) => {
11
+ try {
12
+ const plans = await testRailClient.plans.getPlans(projectId);
13
+ const successResponse = createSuccessResponse("Test plans retrieved successfully", {
14
+ plans,
15
+ });
16
+ return {
17
+ content: [{ type: "text", text: JSON.stringify(successResponse) }],
18
+ };
19
+ }
20
+ catch (error) {
21
+ const errorResponse = createErrorResponse(`Error fetching test plans for project ${projectId}`, error);
22
+ return {
23
+ content: [{ type: "text", text: JSON.stringify(errorResponse) }],
24
+ isError: true,
25
+ };
26
+ }
27
+ });
28
+ }
29
+ //# sourceMappingURL=plans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plans.js","sourceRoot":"","sources":["../../../src/server/api/plans.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAChC,MAAiB,EACjB,cAA8B;IAE9B,mCAAmC;IACnC,MAAM,CAAC,IAAI,CACV,UAAU,EACV,+FAA+F,EAC/F,cAAc,EACd,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC7D,MAAM,eAAe,GAAG,qBAAqB,CAC5C,mCAAmC,EACnC;gBACC,KAAK;aACL,CACD,CAAC;YACF,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;aAClE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,aAAa,GAAG,mBAAmB,CACxC,yCAAyC,SAAS,EAAE,EACpD,KAAK,CACL,CAAC;YACF,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC;gBAChE,OAAO,EAAE,IAAI;aACb,CAAC;QACH,CAAC;IACF,CAAC,CACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { TestRailClient } from "../../client/api/index.js";
3
+ /**
4
+ * Function to register project-related API tools
5
+ * @param server McpServer instance
6
+ * @param testRailClient TestRail client instance
7
+ */
8
+ export declare function registerProjectTools(server: McpServer, testRailClient: TestRailClient): void;