@syn7xx/testops-mcp-server 0.1.2 → 0.1.5
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/CHANGELOG.md +55 -0
- package/README.md +147 -89
- package/dist/args.d.ts +2 -3
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +57 -19
- package/dist/args.js.map +1 -1
- package/dist/domain/project/service.d.ts.map +1 -1
- package/dist/domain/project/service.js +1 -1
- package/dist/domain/project/service.js.map +1 -1
- package/dist/domain/project/types.d.ts.map +1 -1
- package/dist/domain/test-case/service.d.ts +13 -1
- package/dist/domain/test-case/service.d.ts.map +1 -1
- package/dist/domain/test-case/service.js +22 -6
- package/dist/domain/test-case/service.js.map +1 -1
- package/dist/domain/test-case/types.d.ts +17 -0
- package/dist/domain/test-case/types.d.ts.map +1 -1
- package/dist/domain/test-plan/service.d.ts.map +1 -1
- package/dist/domain/test-plan/service.js +1 -1
- package/dist/domain/test-plan/service.js.map +1 -1
- package/dist/domain/test-plan/types.d.ts.map +1 -1
- package/dist/presentation/project/tools.d.ts +2 -1
- package/dist/presentation/project/tools.d.ts.map +1 -1
- package/dist/presentation/project/tools.js +30 -8
- package/dist/presentation/project/tools.js.map +1 -1
- package/dist/presentation/test-case/tools.d.ts +2 -1
- package/dist/presentation/test-case/tools.d.ts.map +1 -1
- package/dist/presentation/test-case/tools.js +138 -32
- package/dist/presentation/test-case/tools.js.map +1 -1
- package/dist/presentation/test-plan/tools.d.ts +2 -1
- package/dist/presentation/test-plan/tools.d.ts.map +1 -1
- package/dist/presentation/test-plan/tools.js +17 -5
- package/dist/presentation/test-plan/tools.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +8 -5
- package/dist/server.js.map +1 -1
- package/dist/shared/api.d.ts +2 -4
- package/dist/shared/api.d.ts.map +1 -1
- package/dist/shared/api.js +34 -31
- package/dist/shared/api.js.map +1 -1
- package/dist/shared/pagination.d.ts.map +1 -1
- package/dist/shared/pagination.js.map +1 -1
- package/dist/shared/result.d.ts.map +1 -1
- package/dist/shared/result.js +7 -4
- package/dist/shared/result.js.map +1 -1
- package/package.json +18 -4
- package/dist/services/config.d.ts +0 -43
- package/dist/services/config.d.ts.map +0 -1
- package/dist/services/config.js +0 -99
- package/dist/services/config.js.map +0 -1
- package/dist/services/index.d.ts +0 -8
- package/dist/services/index.d.ts.map +0 -1
- package/dist/services/index.js +0 -8
- package/dist/services/index.js.map +0 -1
- package/dist/services/project.d.ts +0 -17
- package/dist/services/project.d.ts.map +0 -1
- package/dist/services/project.js +0 -27
- package/dist/services/project.js.map +0 -1
- package/dist/services/test-case.d.ts +0 -59
- package/dist/services/test-case.d.ts.map +0 -1
- package/dist/services/test-case.js +0 -138
- package/dist/services/test-case.js.map +0 -1
- package/dist/services/test-plan.d.ts +0 -20
- package/dist/services/test-plan.d.ts.map +0 -1
- package/dist/services/test-plan.js +0 -18
- package/dist/services/test-plan.js.map +0 -1
- package/dist/services/testops-client.d.ts +0 -96
- package/dist/services/testops-client.d.ts.map +0 -1
- package/dist/services/testops-client.js +0 -392
- package/dist/services/testops-client.js.map +0 -1
- package/dist/services/testops-types.d.ts +0 -62
- package/dist/services/testops-types.d.ts.map +0 -1
- package/dist/services/testops-types.js +0 -3
- package/dist/services/testops-types.js.map +0 -1
- package/dist/tools/index.d.ts +0 -8
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -8
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/project.d.ts +0 -5
- package/dist/tools/project.d.ts.map +0 -1
- package/dist/tools/project.js +0 -62
- package/dist/tools/project.js.map +0 -1
- package/dist/tools/test-case.d.ts +0 -5
- package/dist/tools/test-case.d.ts.map +0 -1
- package/dist/tools/test-case.js +0 -185
- package/dist/tools/test-case.js.map +0 -1
- package/dist/tools/test-plan.d.ts +0 -5
- package/dist/tools/test-plan.d.ts.map +0 -1
- package/dist/tools/test-plan.js +0 -57
- package/dist/tools/test-plan.js.map +0 -1
- package/dist/tools/testops.d.ts +0 -6
- package/dist/tools/testops.d.ts.map +0 -1
- package/dist/tools/testops.js +0 -302
- package/dist/tools/testops.js.map +0 -1
package/dist/tools/testops.js
DELETED
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TestOps Tools — MCP tools for the TestOps HTTP API.
|
|
3
|
-
*/
|
|
4
|
-
import * as z from 'zod';
|
|
5
|
-
import { getTestOpsProjects, getTestOpsProjectByName, getTestOpsTestPlan, getTestOpsTestPlanLeaves, getTestOpsTestCaseDetail, getTestOpsTestCaseScenario, patchTestOpsScenarioStep, setTestOpsTestCaseScenario, getTestOpsTestCaseCustomFields, updateTestOpsTestCaseCustomFields, getTestOpsTestPlanTestCases, searchTestCasesByAQL, } from '../services/testops-client.js';
|
|
6
|
-
/** Registers TestOps-related tools on the server. */
|
|
7
|
-
export function initializeTestOpsTools(server) {
|
|
8
|
-
// List TestOps Projects
|
|
9
|
-
server.registerTool('testops_list_projects', {
|
|
10
|
-
title: 'List TestOps Projects',
|
|
11
|
-
description: 'List all projects from TestOps',
|
|
12
|
-
inputSchema: z.object({
|
|
13
|
-
filter: z
|
|
14
|
-
.string()
|
|
15
|
-
.optional()
|
|
16
|
-
.describe('Optional substring filter on project name'),
|
|
17
|
-
}),
|
|
18
|
-
}, async (args) => {
|
|
19
|
-
const projects = await getTestOpsProjects();
|
|
20
|
-
if (args.filter) {
|
|
21
|
-
const lowerFilter = args.filter.toLowerCase();
|
|
22
|
-
return {
|
|
23
|
-
content: [
|
|
24
|
-
{
|
|
25
|
-
type: 'text',
|
|
26
|
-
text: JSON.stringify(projects.filter((p) => p.name.toLowerCase().includes(lowerFilter)), null, 2),
|
|
27
|
-
},
|
|
28
|
-
],
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
return {
|
|
32
|
-
content: [{ type: 'text', text: JSON.stringify(projects, null, 2) }],
|
|
33
|
-
};
|
|
34
|
-
});
|
|
35
|
-
// Get TestOps Project by Name
|
|
36
|
-
server.registerTool('testops_get_project_by_name', {
|
|
37
|
-
title: 'Get TestOps Project by Name',
|
|
38
|
-
description: 'Resolve a TestOps project by exact or partial name match',
|
|
39
|
-
inputSchema: z.object({
|
|
40
|
-
projectName: z.string().describe('Project name to search for'),
|
|
41
|
-
}),
|
|
42
|
-
}, async (args) => {
|
|
43
|
-
const project = await getTestOpsProjectByName(args.projectName);
|
|
44
|
-
if (!project) {
|
|
45
|
-
return {
|
|
46
|
-
content: [{ type: 'text', text: `Project "${args.projectName}" not found` }],
|
|
47
|
-
isError: true,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
return {
|
|
51
|
-
content: [{ type: 'text', text: JSON.stringify(project, null, 2) }],
|
|
52
|
-
};
|
|
53
|
-
});
|
|
54
|
-
// Get TestOps Test Plan
|
|
55
|
-
server.registerTool('testops_get_test_plan', {
|
|
56
|
-
title: 'Get TestOps Test Plan',
|
|
57
|
-
description: 'Fetch a test plan by ID',
|
|
58
|
-
inputSchema: z.object({
|
|
59
|
-
testPlanId: z.number().describe('Test plan ID'),
|
|
60
|
-
}),
|
|
61
|
-
}, async (args) => {
|
|
62
|
-
try {
|
|
63
|
-
const testPlan = await getTestOpsTestPlan(args.testPlanId);
|
|
64
|
-
return {
|
|
65
|
-
content: [{ type: 'text', text: JSON.stringify(testPlan, null, 2) }],
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
catch (error) {
|
|
69
|
-
return {
|
|
70
|
-
content: [{ type: 'text', text: `Error: ${error.message}` }],
|
|
71
|
-
isError: true,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
// Get Test Plan Leaves (Test Case IDs)
|
|
76
|
-
server.registerTool('testops_get_test_plan_leaves', {
|
|
77
|
-
title: 'Get Test Plan Leaves',
|
|
78
|
-
description: 'List test case IDs attached under a test plan tree (leaf nodes)',
|
|
79
|
-
inputSchema: z.object({
|
|
80
|
-
testPlanId: z.number().describe('Test plan ID'),
|
|
81
|
-
}),
|
|
82
|
-
}, async (args) => {
|
|
83
|
-
try {
|
|
84
|
-
const leaves = await getTestOpsTestPlanLeaves(args.testPlanId);
|
|
85
|
-
return {
|
|
86
|
-
content: [{ type: 'text', text: JSON.stringify(leaves, null, 2) }],
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
catch (error) {
|
|
90
|
-
return {
|
|
91
|
-
content: [{ type: 'text', text: `Error: ${error.message}` }],
|
|
92
|
-
isError: true,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
// Get Test Case Details
|
|
97
|
-
server.registerTool('testops_get_test_case', {
|
|
98
|
-
title: 'Get Test Case Details',
|
|
99
|
-
description: 'Fetch a test case with steps, tags, and custom fields',
|
|
100
|
-
inputSchema: z.object({
|
|
101
|
-
testCaseId: z.number().describe('Test case ID'),
|
|
102
|
-
}),
|
|
103
|
-
}, async (args) => {
|
|
104
|
-
try {
|
|
105
|
-
const testCase = await getTestOpsTestCaseDetail(args.testCaseId);
|
|
106
|
-
return {
|
|
107
|
-
content: [{ type: 'text', text: JSON.stringify(testCase, null, 2) }],
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
return {
|
|
112
|
-
content: [{ type: 'text', text: `Error: ${error.message}` }],
|
|
113
|
-
isError: true,
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
// Get Test Case Scenario (Steps + Expected Results)
|
|
118
|
-
server.registerTool('testops_get_test_case_scenario', {
|
|
119
|
-
title: 'Get Test Case Scenario',
|
|
120
|
-
description: 'Fetch steps and expected results for a test case',
|
|
121
|
-
inputSchema: z.object({
|
|
122
|
-
testCaseId: z.number().describe('Test case ID'),
|
|
123
|
-
}),
|
|
124
|
-
}, async (args) => {
|
|
125
|
-
try {
|
|
126
|
-
const scenario = await getTestOpsTestCaseScenario(args.testCaseId);
|
|
127
|
-
return {
|
|
128
|
-
content: [{ type: 'text', text: JSON.stringify(scenario, null, 2) }],
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
catch (error) {
|
|
132
|
-
return {
|
|
133
|
-
content: [{ type: 'text', text: `Error: ${error.message}` }],
|
|
134
|
-
isError: true,
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
// Update Scenario Step
|
|
139
|
-
server.registerTool('testops_update_scenario_step', {
|
|
140
|
-
title: 'Update Scenario Step',
|
|
141
|
-
description: 'Update a step (action and/or expected result) in a test case scenario',
|
|
142
|
-
inputSchema: z.object({
|
|
143
|
-
testCaseId: z.number().describe('Test case ID'),
|
|
144
|
-
stepId: z.number().describe('Step ID to update'),
|
|
145
|
-
body: z.string().optional().describe('New step action text'),
|
|
146
|
-
expectedResult: z.string().optional().describe('New expected result text'),
|
|
147
|
-
}),
|
|
148
|
-
}, async (args) => {
|
|
149
|
-
try {
|
|
150
|
-
const scenario = await patchTestOpsScenarioStep(args.testCaseId, args.stepId, {
|
|
151
|
-
body: args.body,
|
|
152
|
-
expectedResult: args.expectedResult,
|
|
153
|
-
});
|
|
154
|
-
return {
|
|
155
|
-
content: [{ type: 'text', text: JSON.stringify(scenario, null, 2) }],
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
catch (error) {
|
|
159
|
-
return {
|
|
160
|
-
content: [{ type: 'text', text: `Error: ${error.message}` }],
|
|
161
|
-
isError: true,
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
// Set Full Scenario (All Steps)
|
|
166
|
-
server.registerTool('testops_set_scenario', {
|
|
167
|
-
title: 'Set Test Case Scenario',
|
|
168
|
-
description: 'Replace all steps and expected results in a test case',
|
|
169
|
-
inputSchema: z.object({
|
|
170
|
-
testCaseId: z.number().describe('Test case ID'),
|
|
171
|
-
steps: z
|
|
172
|
-
.array(z.object({
|
|
173
|
-
action: z.string().describe('Step action text'),
|
|
174
|
-
expectedResult: z.string().optional().describe('Expected result text'),
|
|
175
|
-
}))
|
|
176
|
-
.describe('Array of steps with actions and expected results'),
|
|
177
|
-
}),
|
|
178
|
-
}, async (args) => {
|
|
179
|
-
try {
|
|
180
|
-
const scenario = await setTestOpsTestCaseScenario(args.testCaseId, args.steps);
|
|
181
|
-
return {
|
|
182
|
-
content: [{ type: 'text', text: JSON.stringify(scenario, null, 2) }],
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
catch (error) {
|
|
186
|
-
return {
|
|
187
|
-
content: [{ type: 'text', text: `Error: ${error.message}` }],
|
|
188
|
-
isError: true,
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
// Get Test Case Custom Fields
|
|
193
|
-
server.registerTool('testops_get_test_case_custom_fields', {
|
|
194
|
-
title: 'Get Test Case Custom Fields',
|
|
195
|
-
description: 'Fetch custom field values for a test case',
|
|
196
|
-
inputSchema: z.object({
|
|
197
|
-
testCaseId: z.number().describe('Test case ID'),
|
|
198
|
-
}),
|
|
199
|
-
}, async (args) => {
|
|
200
|
-
try {
|
|
201
|
-
const customFields = await getTestOpsTestCaseCustomFields(args.testCaseId);
|
|
202
|
-
return {
|
|
203
|
-
content: [{ type: 'text', text: JSON.stringify(customFields, null, 2) }],
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
catch (error) {
|
|
207
|
-
return {
|
|
208
|
-
content: [{ type: 'text', text: `Error: ${error.message}` }],
|
|
209
|
-
isError: true,
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
});
|
|
213
|
-
// Update Test Case Custom Fields
|
|
214
|
-
server.registerTool('testops_update_test_case_custom_fields', {
|
|
215
|
-
title: 'Update Test Case Custom Fields',
|
|
216
|
-
description: 'Update custom field values for a test case',
|
|
217
|
-
inputSchema: z.object({
|
|
218
|
-
testCaseId: z.number().describe('Test case ID'),
|
|
219
|
-
customFields: z
|
|
220
|
-
.array(z.object({
|
|
221
|
-
customFieldId: z.number().describe('Custom field ID'),
|
|
222
|
-
valueIds: z
|
|
223
|
-
.array(z.number())
|
|
224
|
-
.describe('Array of custom field value IDs to set'),
|
|
225
|
-
}))
|
|
226
|
-
.describe('Custom fields to update'),
|
|
227
|
-
}),
|
|
228
|
-
}, async (args) => {
|
|
229
|
-
try {
|
|
230
|
-
await updateTestOpsTestCaseCustomFields(args.testCaseId, args.customFields);
|
|
231
|
-
return {
|
|
232
|
-
content: [{ type: 'text', text: 'Custom fields updated successfully' }],
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
catch (error) {
|
|
236
|
-
return {
|
|
237
|
-
content: [{ type: 'text', text: `Error: ${error.message}` }],
|
|
238
|
-
isError: true,
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
});
|
|
242
|
-
// Get Test Cases from Test Plan
|
|
243
|
-
server.registerTool('testops_get_test_plan_test_cases', {
|
|
244
|
-
title: 'Get Test Plan Test Cases',
|
|
245
|
-
description: 'Fetch test cases attached to a test plan',
|
|
246
|
-
inputSchema: z.object({
|
|
247
|
-
testPlanId: z.number().describe('Test plan ID'),
|
|
248
|
-
page: z.number().optional().describe('Page number (zero-based)'),
|
|
249
|
-
size: z.number().optional().describe('Page size'),
|
|
250
|
-
sort: z.string().optional().describe('Sort criteria (e.g., "name,ASC")'),
|
|
251
|
-
}),
|
|
252
|
-
}, async (args) => {
|
|
253
|
-
try {
|
|
254
|
-
const testCases = await getTestOpsTestPlanTestCases(args.testPlanId, {
|
|
255
|
-
page: args.page,
|
|
256
|
-
size: args.size,
|
|
257
|
-
sort: args.sort,
|
|
258
|
-
});
|
|
259
|
-
return {
|
|
260
|
-
content: [{ type: 'text', text: JSON.stringify(testCases, null, 2) }],
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
catch (error) {
|
|
264
|
-
return {
|
|
265
|
-
content: [{ type: 'text', text: `Error: ${error.message}` }],
|
|
266
|
-
isError: true,
|
|
267
|
-
};
|
|
268
|
-
}
|
|
269
|
-
});
|
|
270
|
-
// Search Test Cases by AQL
|
|
271
|
-
server.registerTool('testops_search_test_cases_by_aql', {
|
|
272
|
-
title: 'Search Test Cases by AQL',
|
|
273
|
-
description: 'Search test cases using AQL (Advanced Query Language)',
|
|
274
|
-
inputSchema: z.object({
|
|
275
|
-
projectId: z.number().describe('Project ID'),
|
|
276
|
-
rql: z.string().describe('AQL query string'),
|
|
277
|
-
deleted: z.boolean().optional().describe('Include deleted test cases'),
|
|
278
|
-
page: z.number().optional().describe('Page number (zero-based)'),
|
|
279
|
-
size: z.number().optional().describe('Page size'),
|
|
280
|
-
sort: z.string().optional().describe('Sort criteria (e.g., "id,DESC")'),
|
|
281
|
-
}),
|
|
282
|
-
}, async (args) => {
|
|
283
|
-
try {
|
|
284
|
-
const result = await searchTestCasesByAQL(args.projectId, args.rql, {
|
|
285
|
-
deleted: args.deleted,
|
|
286
|
-
page: args.page,
|
|
287
|
-
size: args.size,
|
|
288
|
-
sort: args.sort,
|
|
289
|
-
});
|
|
290
|
-
return {
|
|
291
|
-
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
292
|
-
};
|
|
293
|
-
}
|
|
294
|
-
catch (error) {
|
|
295
|
-
return {
|
|
296
|
-
content: [{ type: 'text', text: `Error: ${error.message}` }],
|
|
297
|
-
isError: true,
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
});
|
|
301
|
-
}
|
|
302
|
-
//# sourceMappingURL=testops.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testops.js","sourceRoot":"","sources":["../../src/tools/testops.ts"],"names":[],"mappings":"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"}
|