@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.
- package/LICENSE +21 -0
- package/README.md +101 -0
- package/dist/client/api/baseClient.d.ts +39 -0
- package/dist/client/api/baseClient.js +103 -0
- package/dist/client/api/baseClient.js.map +1 -0
- package/dist/client/api/cases.d.ts +102 -0
- package/dist/client/api/cases.js +200 -0
- package/dist/client/api/cases.js.map +1 -0
- package/dist/client/api/index.d.ts +39 -0
- package/dist/client/api/index.js +50 -0
- package/dist/client/api/index.js.map +1 -0
- package/dist/client/api/milestones.d.ts +12 -0
- package/dist/client/api/milestones.js +22 -0
- package/dist/client/api/milestones.js.map +1 -0
- package/dist/client/api/plans.d.ts +12 -0
- package/dist/client/api/plans.js +20 -0
- package/dist/client/api/plans.js.map +1 -0
- package/dist/client/api/projects.d.ts +12 -0
- package/dist/client/api/projects.js +31 -0
- package/dist/client/api/projects.js.map +1 -0
- package/dist/client/api/results.d.ts +56 -0
- package/dist/client/api/results.js +125 -0
- package/dist/client/api/results.js.map +1 -0
- package/dist/client/api/runs.d.ts +40 -0
- package/dist/client/api/runs.js +79 -0
- package/dist/client/api/runs.js.map +1 -0
- package/dist/client/api/sections.d.ts +40 -0
- package/dist/client/api/sections.js +89 -0
- package/dist/client/api/sections.js.map +1 -0
- package/dist/client/api/sharedSteps.d.ts +11 -0
- package/dist/client/api/sharedSteps.js +20 -0
- package/dist/client/api/sharedSteps.js.map +1 -0
- package/dist/client/api/suites.d.ts +36 -0
- package/dist/client/api/suites.js +63 -0
- package/dist/client/api/suites.js.map +1 -0
- package/dist/client/api/tests.d.ts +32 -0
- package/dist/client/api/tests.js +47 -0
- package/dist/client/api/tests.js.map +1 -0
- package/dist/client/api/utils.d.ts +7 -0
- package/dist/client/api/utils.js +24 -0
- package/dist/client/api/utils.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/server/api/cases.d.ts +8 -0
- package/dist/server/api/cases.js +431 -0
- package/dist/server/api/cases.js.map +1 -0
- package/dist/server/api/index.d.ts +18 -0
- package/dist/server/api/index.js +40 -0
- package/dist/server/api/index.js.map +1 -0
- package/dist/server/api/milestones.d.ts +8 -0
- package/dist/server/api/milestones.js +29 -0
- package/dist/server/api/milestones.js.map +1 -0
- package/dist/server/api/plans.d.ts +8 -0
- package/dist/server/api/plans.js +29 -0
- package/dist/server/api/plans.js.map +1 -0
- package/dist/server/api/projects.d.ts +8 -0
- package/dist/server/api/projects.js +51 -0
- package/dist/server/api/projects.js.map +1 -0
- package/dist/server/api/results.d.ts +8 -0
- package/dist/server/api/results.js +164 -0
- package/dist/server/api/results.js.map +1 -0
- package/dist/server/api/runs.d.ts +8 -0
- package/dist/server/api/runs.js +113 -0
- package/dist/server/api/runs.js.map +1 -0
- package/dist/server/api/sections.d.ts +8 -0
- package/dist/server/api/sections.js +138 -0
- package/dist/server/api/sections.js.map +1 -0
- package/dist/server/api/sharedSteps.d.ts +8 -0
- package/dist/server/api/sharedSteps.js +26 -0
- package/dist/server/api/sharedSteps.js.map +1 -0
- package/dist/server/api/suites.d.ts +8 -0
- package/dist/server/api/suites.js +111 -0
- package/dist/server/api/suites.js.map +1 -0
- package/dist/server/api/tests.d.ts +8 -0
- package/dist/server/api/tests.js +68 -0
- package/dist/server/api/tests.js.map +1 -0
- package/dist/server/api/utils.d.ts +7 -0
- package/dist/server/api/utils.js +25 -0
- package/dist/server/api/utils.js.map +1 -0
- package/dist/server/server.d.ts +2 -0
- package/dist/server/server.js +70 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/templates.d.ts +8 -0
- package/dist/server/templates.js +43 -0
- package/dist/server/templates.js.map +1 -0
- package/dist/shared/schemas/cases.d.ts +668 -0
- package/dist/shared/schemas/cases.js +178 -0
- package/dist/shared/schemas/cases.js.map +1 -0
- package/dist/shared/schemas/common.d.ts +117 -0
- package/dist/shared/schemas/common.js +50 -0
- package/dist/shared/schemas/common.js.map +1 -0
- package/dist/shared/schemas/index.d.ts +10 -0
- package/dist/shared/schemas/index.js +23 -0
- package/dist/shared/schemas/index.js.map +1 -0
- package/dist/shared/schemas/milestones.d.ts +59 -0
- package/dist/shared/schemas/milestones.js +26 -0
- package/dist/shared/schemas/milestones.js.map +1 -0
- package/dist/shared/schemas/plans.d.ts +416 -0
- package/dist/shared/schemas/plans.js +43 -0
- package/dist/shared/schemas/plans.js.map +1 -0
- package/dist/shared/schemas/projects.d.ts +135 -0
- package/dist/shared/schemas/projects.js +61 -0
- package/dist/shared/schemas/projects.js.map +1 -0
- package/dist/shared/schemas/results.d.ts +407 -0
- package/dist/shared/schemas/results.js +178 -0
- package/dist/shared/schemas/results.js.map +1 -0
- package/dist/shared/schemas/runs.d.ts +267 -0
- package/dist/shared/schemas/runs.js +133 -0
- package/dist/shared/schemas/runs.js.map +1 -0
- package/dist/shared/schemas/sections.d.ts +136 -0
- package/dist/shared/schemas/sections.js +68 -0
- package/dist/shared/schemas/sections.js.map +1 -0
- package/dist/shared/schemas/sharedSteps.d.ts +135 -0
- package/dist/shared/schemas/sharedSteps.js +65 -0
- package/dist/shared/schemas/sharedSteps.js.map +1 -0
- package/dist/shared/schemas/suites.d.ts +120 -0
- package/dist/shared/schemas/suites.js +44 -0
- package/dist/shared/schemas/suites.js.map +1 -0
- package/dist/shared/schemas/tests.d.ts +87 -0
- package/dist/shared/schemas/tests.js +52 -0
- package/dist/shared/schemas/tests.js.map +1 -0
- package/dist/sse.d.ts +1 -0
- package/dist/sse.js +5 -0
- package/dist/sse.js.map +1 -0
- package/dist/stdio.d.ts +1 -0
- package/dist/stdio.js +52 -0
- package/dist/stdio.js.map +1 -0
- 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;
|