@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,51 @@
|
|
|
1
|
+
import { createSuccessResponse, createErrorResponse } from "./utils.js";
|
|
2
|
+
import { getProjectSchema, } from "../../shared/schemas/projects.js";
|
|
3
|
+
/**
|
|
4
|
+
* Function to register project-related API tools
|
|
5
|
+
* @param server McpServer instance
|
|
6
|
+
* @param testRailClient TestRail client instance
|
|
7
|
+
*/
|
|
8
|
+
export function registerProjectTools(server, testRailClient) {
|
|
9
|
+
// Get all projects
|
|
10
|
+
server.tool("getProjects", "Retrieves all TestRail projects / すべてのTestRailプロジェクトを取得します", {}, async (args, extra) => {
|
|
11
|
+
try {
|
|
12
|
+
const projects = await testRailClient.projects.getProjects();
|
|
13
|
+
const successResponse = createSuccessResponse("Projects retrieved successfully", {
|
|
14
|
+
data: projects,
|
|
15
|
+
});
|
|
16
|
+
return {
|
|
17
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
const errorResponse = createErrorResponse("Error fetching projects", error);
|
|
22
|
+
return {
|
|
23
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
24
|
+
isError: true,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
// Get a specific project by ID
|
|
29
|
+
server.tool("getProject", "Retrieves details of a specific TestRail project by ID / 特定のTestRailプロジェクトの詳細をIDで取得します", {
|
|
30
|
+
projectId: getProjectSchema.shape.projectId.describe("TestRail Project ID to retrieve / 取得するTestRailプロジェクトID"),
|
|
31
|
+
}, async (args, extra) => {
|
|
32
|
+
try {
|
|
33
|
+
const { projectId } = args;
|
|
34
|
+
const project = await testRailClient.projects.getProject(projectId);
|
|
35
|
+
const successResponse = createSuccessResponse("Project retrieved successfully", {
|
|
36
|
+
project,
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
const errorResponse = createErrorResponse(`Error fetching project ${args.projectId}`, error);
|
|
44
|
+
return {
|
|
45
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
46
|
+
isError: true,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/server/api/projects.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAEN,gBAAgB,GAIhB,MAAM,kCAAkC,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CACnC,MAAiB,EACjB,cAA8B;IAE9B,mBAAmB;IACnB,MAAM,CAAC,IAAI,CACV,aAAa,EACb,4DAA4D,EAC5D,EAAE,EACF,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC7D,MAAM,eAAe,GAAG,qBAAqB,CAC5C,iCAAiC,EACjC;gBACC,IAAI,EAAE,QAAQ;aACd,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,yBAAyB,EACzB,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;IAEF,+BAA+B;IAC/B,MAAM,CAAC,IAAI,CACV,YAAY,EACZ,wFAAwF,EACxF;QACC,SAAS,EAAE,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CACnD,wDAAwD,CACxD;KACD,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,CAAC;YACJ,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;YAC3B,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACpE,MAAM,eAAe,GAAG,qBAAqB,CAC5C,gCAAgC,EAChC;gBACC,OAAO;aACP,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,0BAA0B,IAAI,CAAC,SAAS,EAAE,EAC1C,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 result-related API tools
|
|
5
|
+
* @param server McpServer instance
|
|
6
|
+
* @param testRailClient TestRail client instance
|
|
7
|
+
*/
|
|
8
|
+
export declare function registerResultTools(server: McpServer, testRailClient: TestRailClient): void;
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { createSuccessResponse, createErrorResponse } from "./utils.js";
|
|
2
|
+
import { getResultsSchema, getResultsForCaseSchema, getResultsForRunSchema, addResultForCaseSchema, addResultsForCasesSchema, } from "../../shared/schemas/results.js";
|
|
3
|
+
/**
|
|
4
|
+
* Function to register test result-related API tools
|
|
5
|
+
* @param server McpServer instance
|
|
6
|
+
* @param testRailClient TestRail client instance
|
|
7
|
+
*/
|
|
8
|
+
export function registerResultTools(server, testRailClient) {
|
|
9
|
+
// Get test results for a test
|
|
10
|
+
server.tool("getResults", "Retrieves test results for a specific test / 特定のテストのテスト結果を取得します", getResultsSchema, async ({ testId, ...filters }) => {
|
|
11
|
+
try {
|
|
12
|
+
const results = await testRailClient.results.getResults(testId, filters);
|
|
13
|
+
const successResponse = createSuccessResponse("Results retrieved successfully", {
|
|
14
|
+
results,
|
|
15
|
+
});
|
|
16
|
+
return {
|
|
17
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
const errorResponse = createErrorResponse(`Error fetching results for test ${testId}`, error);
|
|
22
|
+
return {
|
|
23
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
24
|
+
isError: true,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
// Get test results for a specific test case in a run
|
|
29
|
+
server.tool("getResultsForCase", "Retrieves test results for a specific test case in a test run / テスト実行内の特定のテストケースのテスト結果を取得します", getResultsForCaseSchema, async ({ runId, caseId, ...filters }) => {
|
|
30
|
+
try {
|
|
31
|
+
const results = await testRailClient.results.getResultsForCase(runId, caseId, filters);
|
|
32
|
+
const successResponse = createSuccessResponse("Results retrieved successfully", {
|
|
33
|
+
results,
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
const errorResponse = createErrorResponse(`Error fetching results for run ${runId} and case ${caseId}`, error);
|
|
41
|
+
return {
|
|
42
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
43
|
+
isError: true,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
// Get all test results for a test run
|
|
48
|
+
server.tool("getResultsForRun", "Retrieves all test results for a test run / テスト実行の全テスト結果を取得します", getResultsForRunSchema, async ({ runId, ...filters }) => {
|
|
49
|
+
try {
|
|
50
|
+
const results = await testRailClient.results.getResultsForRun(runId, filters);
|
|
51
|
+
const successResponse = createSuccessResponse("Results retrieved successfully", {
|
|
52
|
+
results,
|
|
53
|
+
});
|
|
54
|
+
return {
|
|
55
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
const errorResponse = createErrorResponse(`Error fetching results for run ${runId}`, error);
|
|
60
|
+
return {
|
|
61
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
62
|
+
isError: true,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
// Add a result for a specific test case in a run
|
|
67
|
+
server.tool("addResultForCase", "Adds a test result for a specific test case in a test run / テスト実行内の特定のテストケースにテスト結果を追加します", addResultForCaseSchema, async ({ runId, caseId, ...resultData }) => {
|
|
68
|
+
try {
|
|
69
|
+
// Prepare result data
|
|
70
|
+
const data = {};
|
|
71
|
+
// Add status ID if specified
|
|
72
|
+
if (resultData.statusId) {
|
|
73
|
+
data.status_id = resultData.statusId;
|
|
74
|
+
}
|
|
75
|
+
// Add comment if specified
|
|
76
|
+
if (resultData.comment) {
|
|
77
|
+
data.comment = resultData.comment;
|
|
78
|
+
}
|
|
79
|
+
// Add version if specified
|
|
80
|
+
if (resultData.version) {
|
|
81
|
+
data.version = resultData.version;
|
|
82
|
+
}
|
|
83
|
+
// Add elapsed time if specified
|
|
84
|
+
if (resultData.elapsed) {
|
|
85
|
+
data.elapsed = resultData.elapsed;
|
|
86
|
+
}
|
|
87
|
+
// Add defects if specified
|
|
88
|
+
if (resultData.defects) {
|
|
89
|
+
data.defects = resultData.defects;
|
|
90
|
+
}
|
|
91
|
+
// Add assignee ID if specified
|
|
92
|
+
if (resultData.assignedtoId) {
|
|
93
|
+
data.assignedto_id = resultData.assignedtoId;
|
|
94
|
+
}
|
|
95
|
+
const result = await testRailClient.results.addResultForCase(runId, caseId, data);
|
|
96
|
+
const successResponse = createSuccessResponse("Result added successfully", {
|
|
97
|
+
result,
|
|
98
|
+
});
|
|
99
|
+
return {
|
|
100
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
const errorResponse = createErrorResponse(`Error adding result for run ${runId} and case ${caseId}`, error);
|
|
105
|
+
return {
|
|
106
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
107
|
+
isError: true,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
// Add results for multiple test cases
|
|
112
|
+
server.tool("addResultsForCases", "Adds test results for multiple test cases in a test run / テスト実行内の複数のテストケースにテスト結果を追加します", addResultsForCasesSchema, async ({ runId, results }) => {
|
|
113
|
+
try {
|
|
114
|
+
// Prepare data to send to the API
|
|
115
|
+
const data = {
|
|
116
|
+
results: results.map((result) => {
|
|
117
|
+
const resultData = {
|
|
118
|
+
case_id: result.caseId,
|
|
119
|
+
};
|
|
120
|
+
// Add status ID if specified
|
|
121
|
+
if (result.statusId) {
|
|
122
|
+
resultData.status_id = result.statusId;
|
|
123
|
+
}
|
|
124
|
+
// Add comment if specified
|
|
125
|
+
if (result.comment) {
|
|
126
|
+
resultData.comment = result.comment;
|
|
127
|
+
}
|
|
128
|
+
// Add version if specified
|
|
129
|
+
if (result.version) {
|
|
130
|
+
resultData.version = result.version;
|
|
131
|
+
}
|
|
132
|
+
// Add elapsed time if specified
|
|
133
|
+
if (result.elapsed) {
|
|
134
|
+
resultData.elapsed = result.elapsed;
|
|
135
|
+
}
|
|
136
|
+
// Add defects if specified
|
|
137
|
+
if (result.defects) {
|
|
138
|
+
resultData.defects = result.defects;
|
|
139
|
+
}
|
|
140
|
+
// Add assignee ID if specified
|
|
141
|
+
if (result.assignedtoId) {
|
|
142
|
+
resultData.assignedto_id = result.assignedtoId;
|
|
143
|
+
}
|
|
144
|
+
return resultData;
|
|
145
|
+
}),
|
|
146
|
+
};
|
|
147
|
+
const addedResults = await testRailClient.results.addResultsForCases(runId, data);
|
|
148
|
+
const successResponse = createSuccessResponse("Results added successfully", {
|
|
149
|
+
results: addedResults,
|
|
150
|
+
});
|
|
151
|
+
return {
|
|
152
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
const errorResponse = createErrorResponse(`Error adding results for run ${runId}`, error);
|
|
157
|
+
return {
|
|
158
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
159
|
+
isError: true,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=results.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"results.js","sourceRoot":"","sources":["../../../src/server/api/results.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 run-related API tools
|
|
5
|
+
* @param server McpServer instance
|
|
6
|
+
* @param testRailClient TestRail client instance
|
|
7
|
+
*/
|
|
8
|
+
export declare function registerRunTools(server: McpServer, testRailClient: TestRailClient): void;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { createSuccessResponse, createErrorResponse } from "./utils.js";
|
|
2
|
+
import { getRunsSchema, getRunSchema, addRunSchema, updateRunSchema, } from "../../shared/schemas/runs.js";
|
|
3
|
+
/**
|
|
4
|
+
* Function to register test run-related API tools
|
|
5
|
+
* @param server McpServer instance
|
|
6
|
+
* @param testRailClient TestRail client instance
|
|
7
|
+
*/
|
|
8
|
+
export function registerRunTools(server, testRailClient) {
|
|
9
|
+
// Get all test runs for a project
|
|
10
|
+
server.tool("getRuns", "Retrieves all test runs for a specified TestRail project / 指定されたTestRailプロジェクトの全テスト実行を取得します", getRunsSchema, async ({ projectId, createdBy, ...filters }) => {
|
|
11
|
+
try {
|
|
12
|
+
// Convert createdBy to string format
|
|
13
|
+
const params = {
|
|
14
|
+
...filters,
|
|
15
|
+
};
|
|
16
|
+
if (createdBy) {
|
|
17
|
+
params.created_by = createdBy.join(",");
|
|
18
|
+
}
|
|
19
|
+
const runs = await testRailClient.runs.getRuns(projectId, params);
|
|
20
|
+
const successResponse = createSuccessResponse("Test runs retrieved successfully", {
|
|
21
|
+
runs,
|
|
22
|
+
});
|
|
23
|
+
return {
|
|
24
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
const errorResponse = createErrorResponse(`Error fetching test runs for project ${projectId}`, error);
|
|
29
|
+
return {
|
|
30
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
31
|
+
isError: true,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
// Get a specific test run
|
|
36
|
+
server.tool("getRun", "Retrieves details of a specific test run by ID / 特定のテスト実行の詳細をIDで取得します", getRunSchema, async ({ runId }) => {
|
|
37
|
+
try {
|
|
38
|
+
const run = await testRailClient.runs.getRun(runId);
|
|
39
|
+
const successResponse = createSuccessResponse("Test run retrieved successfully", {
|
|
40
|
+
run,
|
|
41
|
+
});
|
|
42
|
+
return {
|
|
43
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const errorResponse = createErrorResponse(`Error fetching test run ${runId}`, error);
|
|
48
|
+
return {
|
|
49
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
50
|
+
isError: true,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
// Create a new test run
|
|
55
|
+
server.tool("addRun", "Creates a new test run in a TestRail project / TestRailプロジェクトに新しいテスト実行を作成します", addRunSchema, async ({ projectId, suiteId, name, description, milestoneId, assignedtoId, includeAll, caseIds, configIds, refs, }) => {
|
|
56
|
+
try {
|
|
57
|
+
const data = {
|
|
58
|
+
name,
|
|
59
|
+
suite_id: suiteId,
|
|
60
|
+
description,
|
|
61
|
+
milestone_id: milestoneId,
|
|
62
|
+
assignedto_id: assignedtoId,
|
|
63
|
+
include_all: includeAll,
|
|
64
|
+
case_ids: caseIds,
|
|
65
|
+
config_ids: configIds,
|
|
66
|
+
refs,
|
|
67
|
+
};
|
|
68
|
+
const run = await testRailClient.runs.addRun(projectId, data);
|
|
69
|
+
const successResponse = createSuccessResponse("Test run created successfully", {
|
|
70
|
+
run,
|
|
71
|
+
});
|
|
72
|
+
return {
|
|
73
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
const errorResponse = createErrorResponse(`Error creating test run for project ${projectId}`, error);
|
|
78
|
+
return {
|
|
79
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
80
|
+
isError: true,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
// Update an existing test run
|
|
85
|
+
server.tool("updateRun", "Updates an existing test run / 既存のテスト実行を更新します", updateRunSchema, async ({ runId, name, description, milestoneId, assignedtoId, includeAll, caseIds, refs, }) => {
|
|
86
|
+
try {
|
|
87
|
+
const data = {
|
|
88
|
+
name,
|
|
89
|
+
description,
|
|
90
|
+
milestone_id: milestoneId,
|
|
91
|
+
assignedto_id: assignedtoId,
|
|
92
|
+
include_all: includeAll,
|
|
93
|
+
case_ids: caseIds,
|
|
94
|
+
refs,
|
|
95
|
+
};
|
|
96
|
+
const run = await testRailClient.runs.updateRun(runId, data);
|
|
97
|
+
const successResponse = createSuccessResponse("Test run updated successfully", {
|
|
98
|
+
run,
|
|
99
|
+
});
|
|
100
|
+
return {
|
|
101
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
const errorResponse = createErrorResponse(`Error updating test run ${runId}`, error);
|
|
106
|
+
return {
|
|
107
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
108
|
+
isError: true,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../../../src/server/api/runs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EACN,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,eAAe,GACf,MAAM,8BAA8B,CAAC;AAEtC;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC/B,MAAiB,EACjB,cAA8B;IAE9B,kCAAkC;IAClC,MAAM,CAAC,IAAI,CACV,SAAS,EACT,6FAA6F,EAC7F,aAAa,EACb,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE;QAC9C,IAAI,CAAC;YACJ,qCAAqC;YACrC,MAAM,MAAM,GAGR;gBACH,GAAG,OAAO;aACV,CAAC;YAEF,IAAI,SAAS,EAAE,CAAC;gBACf,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzC,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAClE,MAAM,eAAe,GAAG,qBAAqB,CAC5C,kCAAkC,EAClC;gBACC,IAAI;aACJ,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,wCAAwC,SAAS,EAAE,EACnD,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;IAEF,0BAA0B;IAC1B,MAAM,CAAC,IAAI,CACV,QAAQ,EACR,uEAAuE,EACvE,YAAY,EACZ,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QACnB,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,eAAe,GAAG,qBAAqB,CAC5C,iCAAiC,EACjC;gBACC,GAAG;aACH,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,2BAA2B,KAAK,EAAE,EAClC,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;IAEF,wBAAwB;IACxB,MAAM,CAAC,IAAI,CACV,QAAQ,EACR,8EAA8E,EAC9E,YAAY,EACZ,KAAK,EAAE,EACN,SAAS,EACT,OAAO,EACP,IAAI,EACJ,WAAW,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,OAAO,EACP,SAAS,EACT,IAAI,GACJ,EAAE,EAAE;QACJ,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG;gBACZ,IAAI;gBACJ,QAAQ,EAAE,OAAO;gBACjB,WAAW;gBACX,YAAY,EAAE,WAAW;gBACzB,aAAa,EAAE,YAAY;gBAC3B,WAAW,EAAE,UAAU;gBACvB,QAAQ,EAAE,OAAO;gBACjB,UAAU,EAAE,SAAS;gBACrB,IAAI;aACJ,CAAC;YAEF,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC9D,MAAM,eAAe,GAAG,qBAAqB,CAC5C,+BAA+B,EAC/B;gBACC,GAAG;aACH,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,uCAAuC,SAAS,EAAE,EAClD,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;IAEF,8BAA8B;IAC9B,MAAM,CAAC,IAAI,CACV,WAAW,EACX,+CAA+C,EAC/C,eAAe,EACf,KAAK,EAAE,EACN,KAAK,EACL,IAAI,EACJ,WAAW,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,OAAO,EACP,IAAI,GACJ,EAAE,EAAE;QACJ,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG;gBACZ,IAAI;gBACJ,WAAW;gBACX,YAAY,EAAE,WAAW;gBACzB,aAAa,EAAE,YAAY;gBAC3B,WAAW,EAAE,UAAU;gBACvB,QAAQ,EAAE,OAAO;gBACjB,IAAI;aACJ,CAAC;YAEF,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7D,MAAM,eAAe,GAAG,qBAAqB,CAC5C,+BAA+B,EAC/B;gBACC,GAAG;aACH,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,2BAA2B,KAAK,EAAE,EAClC,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 section-related API tools
|
|
5
|
+
* @param server McpServer instance
|
|
6
|
+
* @param testRailClient TestRail client instance
|
|
7
|
+
*/
|
|
8
|
+
export declare function registerSectionTools(server: McpServer, testRailClient: TestRailClient): void;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { createSuccessResponse, createErrorResponse } from "./utils.js";
|
|
2
|
+
import { getSectionSchema, getSectionsSchema, addSectionSchema, moveSectionSchema, updateSectionSchema, deleteSectionSchema, } from "../../shared/schemas/sections.js";
|
|
3
|
+
/**
|
|
4
|
+
* Function to register section-related API tools
|
|
5
|
+
* @param server McpServer instance
|
|
6
|
+
* @param testRailClient TestRail client instance
|
|
7
|
+
*/
|
|
8
|
+
export function registerSectionTools(server, testRailClient) {
|
|
9
|
+
// Get a specific section
|
|
10
|
+
server.tool("getSection", "Retrieves details of a specific section by ID / 特定のセクションの詳細をIDで取得します", getSectionSchema, async ({ sectionId }) => {
|
|
11
|
+
try {
|
|
12
|
+
const section = await testRailClient.sections.getSection(sectionId);
|
|
13
|
+
const successResponse = createSuccessResponse("Section retrieved successfully", {
|
|
14
|
+
section,
|
|
15
|
+
});
|
|
16
|
+
return {
|
|
17
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
const errorResponse = createErrorResponse(`Error fetching section ${sectionId}`, error);
|
|
22
|
+
return {
|
|
23
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
24
|
+
isError: true,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
// Get all sections for a project or suite
|
|
29
|
+
server.tool("getSections", "Retrieves all sections for a specified project and suite / 指定されたプロジェクトとスイートの全セクションを取得します", getSectionsSchema, async ({ projectId, suiteId }) => {
|
|
30
|
+
try {
|
|
31
|
+
const sections = await testRailClient.sections.getSections(projectId, suiteId);
|
|
32
|
+
const successResponse = createSuccessResponse("Sections retrieved successfully", {
|
|
33
|
+
sections,
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
const errorResponse = createErrorResponse(`Error fetching sections for project ${projectId}`, error);
|
|
41
|
+
return {
|
|
42
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
43
|
+
isError: true,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
// Create a new section
|
|
48
|
+
server.tool("addSection", "Creates a new section in a TestRail project / TestRailプロジェクトに新しいセクションを作成します", addSectionSchema, async ({ projectId, name, description, suiteId, parentId }) => {
|
|
49
|
+
try {
|
|
50
|
+
const data = {
|
|
51
|
+
name,
|
|
52
|
+
description,
|
|
53
|
+
suite_id: suiteId,
|
|
54
|
+
parent_id: parentId,
|
|
55
|
+
};
|
|
56
|
+
const section = await testRailClient.sections.addSection(projectId, data);
|
|
57
|
+
const successResponse = createSuccessResponse("Section created successfully", {
|
|
58
|
+
section,
|
|
59
|
+
});
|
|
60
|
+
return {
|
|
61
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
const errorResponse = createErrorResponse("Error creating section", error);
|
|
66
|
+
return {
|
|
67
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
68
|
+
isError: true,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
// Move a section
|
|
73
|
+
server.tool("moveSection", "Moves a section to a new position in the test hierarchy / テスト階層内の新しい位置にセクションを移動します", moveSectionSchema, async ({ sectionId, parentId, afterId }) => {
|
|
74
|
+
try {
|
|
75
|
+
const moveData = {};
|
|
76
|
+
if (parentId !== undefined)
|
|
77
|
+
moveData.parent_id = parentId;
|
|
78
|
+
if (afterId !== undefined)
|
|
79
|
+
moveData.after_id = afterId;
|
|
80
|
+
const section = await testRailClient.sections.moveSection(sectionId, moveData);
|
|
81
|
+
const successResponse = createSuccessResponse("Section moved successfully", {
|
|
82
|
+
section,
|
|
83
|
+
});
|
|
84
|
+
return {
|
|
85
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
const errorResponse = createErrorResponse(`Error moving section ${sectionId}`, error);
|
|
90
|
+
return {
|
|
91
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
92
|
+
isError: true,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
// Update a section
|
|
97
|
+
server.tool("updateSection", "Updates an existing section / 既存のセクションを更新します", updateSectionSchema, async ({ sectionId, name, description }) => {
|
|
98
|
+
try {
|
|
99
|
+
const updateData = {};
|
|
100
|
+
if (name)
|
|
101
|
+
updateData.name = name;
|
|
102
|
+
if (description)
|
|
103
|
+
updateData.description = description;
|
|
104
|
+
const section = await testRailClient.sections.updateSection(sectionId, updateData);
|
|
105
|
+
const successResponse = createSuccessResponse("Section updated successfully", {
|
|
106
|
+
section,
|
|
107
|
+
});
|
|
108
|
+
return {
|
|
109
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
const errorResponse = createErrorResponse(`Error updating section ${sectionId}`, error);
|
|
114
|
+
return {
|
|
115
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
116
|
+
isError: true,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
// Delete a section
|
|
121
|
+
server.tool("deleteSection", "Deletes a section / セクションを削除します", deleteSectionSchema, async ({ sectionId, soft }) => {
|
|
122
|
+
try {
|
|
123
|
+
await testRailClient.sections.deleteSection(sectionId, soft);
|
|
124
|
+
const successResponse = createSuccessResponse(`Section ${sectionId} deleted successfully`);
|
|
125
|
+
return {
|
|
126
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
const errorResponse = createErrorResponse(`Error deleting section ${sectionId}`, error);
|
|
131
|
+
return {
|
|
132
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
133
|
+
isError: true,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=sections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sections.js","sourceRoot":"","sources":["../../../src/server/api/sections.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 shared step-related API tools
|
|
5
|
+
* @param server McpServer instance
|
|
6
|
+
* @param testRailClient TestRail client instance
|
|
7
|
+
*/
|
|
8
|
+
export declare function registerSharedStepTools(server: McpServer, testRailClient: TestRailClient): void;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createSuccessResponse, createErrorResponse } from "./utils.js";
|
|
2
|
+
import { getSharedStepsSchema } from "../../shared/schemas/sharedSteps.js";
|
|
3
|
+
/**
|
|
4
|
+
* Function to register shared step-related API tools
|
|
5
|
+
* @param server McpServer instance
|
|
6
|
+
* @param testRailClient TestRail client instance
|
|
7
|
+
*/
|
|
8
|
+
export function registerSharedStepTools(server, testRailClient) {
|
|
9
|
+
server.tool("getSharedSteps", "Retrieves all shared steps for a specified TestRail project / 指定されたTestRailプロジェクトの全共有ステップを取得します", getSharedStepsSchema, async ({ projectId, ...filters }) => {
|
|
10
|
+
try {
|
|
11
|
+
const sharedSteps = await testRailClient.sharedSteps.getSharedSteps(projectId, filters);
|
|
12
|
+
const successResponse = createSuccessResponse("Shared steps retrieved successfully", { sharedSteps });
|
|
13
|
+
return {
|
|
14
|
+
content: [{ type: "text", text: JSON.stringify(successResponse) }],
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
const errorResponse = createErrorResponse(`Error fetching shared steps for project ${projectId}`, error);
|
|
19
|
+
return {
|
|
20
|
+
content: [{ type: "text", text: JSON.stringify(errorResponse) }],
|
|
21
|
+
isError: true,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=sharedSteps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharedSteps.js","sourceRoot":"","sources":["../../../src/server/api/sharedSteps.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACtC,MAAiB,EACjB,cAA8B;IAE9B,MAAM,CAAC,IAAI,CACV,gBAAgB,EAChB,iGAAiG,EACjG,oBAAoB,EACpB,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE;QACnC,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,cAAc,CAClE,SAAS,EACT,OAAO,CACP,CAAC;YACF,MAAM,eAAe,GAAG,qBAAqB,CAC5C,qCAAqC,EACrC,EAAE,WAAW,EAAE,CACf,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,2CAA2C,SAAS,EAAE,EACtD,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 suite-related API tools
|
|
5
|
+
* @param server McpServer instance
|
|
6
|
+
* @param testRailClient TestRail client instance
|
|
7
|
+
*/
|
|
8
|
+
export declare function registerSuiteTools(server: McpServer, testRailClient: TestRailClient): void;
|