@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,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":"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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 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;