cucumberstudio-mcp 1.1.0

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 (130) hide show
  1. package/.env.example +36 -0
  2. package/.github/workflows/pr-checks.yml +41 -0
  3. package/.github/workflows/release.yml +194 -0
  4. package/.prettierignore +26 -0
  5. package/.prettierrc +14 -0
  6. package/CLAUDE.md +140 -0
  7. package/Dockerfile +50 -0
  8. package/Dockerfile.dev +31 -0
  9. package/LICENSE +21 -0
  10. package/README.md +395 -0
  11. package/build/api/client.d.ts +49 -0
  12. package/build/api/client.d.ts.map +1 -0
  13. package/build/api/client.js +204 -0
  14. package/build/api/client.js.map +1 -0
  15. package/build/api/types.d.ts +113 -0
  16. package/build/api/types.d.ts.map +1 -0
  17. package/build/api/types.js +2 -0
  18. package/build/api/types.js.map +1 -0
  19. package/build/config/settings.d.ts +123 -0
  20. package/build/config/settings.d.ts.map +1 -0
  21. package/build/config/settings.js +97 -0
  22. package/build/config/settings.js.map +1 -0
  23. package/build/constants.d.ts +16 -0
  24. package/build/constants.d.ts.map +1 -0
  25. package/build/constants.js +24 -0
  26. package/build/constants.js.map +1 -0
  27. package/build/generated/version.d.ts +3 -0
  28. package/build/generated/version.d.ts.map +1 -0
  29. package/build/generated/version.js +5 -0
  30. package/build/generated/version.js.map +1 -0
  31. package/build/index.d.ts +3 -0
  32. package/build/index.d.ts.map +1 -0
  33. package/build/index.js +81 -0
  34. package/build/index.js.map +1 -0
  35. package/build/mcp-server.d.ts +6 -0
  36. package/build/mcp-server.d.ts.map +1 -0
  37. package/build/mcp-server.js +263 -0
  38. package/build/mcp-server.js.map +1 -0
  39. package/build/tools/action-words.d.ts +18 -0
  40. package/build/tools/action-words.d.ts.map +1 -0
  41. package/build/tools/action-words.js +191 -0
  42. package/build/tools/action-words.js.map +1 -0
  43. package/build/tools/projects.d.ts +19 -0
  44. package/build/tools/projects.d.ts.map +1 -0
  45. package/build/tools/projects.js +123 -0
  46. package/build/tools/projects.js.map +1 -0
  47. package/build/tools/scenarios.d.ts +18 -0
  48. package/build/tools/scenarios.d.ts.map +1 -0
  49. package/build/tools/scenarios.js +194 -0
  50. package/build/tools/scenarios.js.map +1 -0
  51. package/build/tools/test-runs.d.ts +21 -0
  52. package/build/tools/test-runs.d.ts.map +1 -0
  53. package/build/tools/test-runs.js +324 -0
  54. package/build/tools/test-runs.js.map +1 -0
  55. package/build/transports/http.d.ts +38 -0
  56. package/build/transports/http.d.ts.map +1 -0
  57. package/build/transports/http.js +381 -0
  58. package/build/transports/http.js.map +1 -0
  59. package/build/transports/index.d.ts +22 -0
  60. package/build/transports/index.d.ts.map +1 -0
  61. package/build/transports/index.js +10 -0
  62. package/build/transports/index.js.map +1 -0
  63. package/build/transports/stdio.d.ts +13 -0
  64. package/build/transports/stdio.d.ts.map +1 -0
  65. package/build/transports/stdio.js +24 -0
  66. package/build/transports/stdio.js.map +1 -0
  67. package/build/utils/errors.d.ts +10 -0
  68. package/build/utils/errors.d.ts.map +1 -0
  69. package/build/utils/errors.js +35 -0
  70. package/build/utils/errors.js.map +1 -0
  71. package/build/utils/logger-constants.d.ts +15 -0
  72. package/build/utils/logger-constants.d.ts.map +1 -0
  73. package/build/utils/logger-constants.js +16 -0
  74. package/build/utils/logger-constants.js.map +1 -0
  75. package/build/utils/logger.d.ts +55 -0
  76. package/build/utils/logger.d.ts.map +1 -0
  77. package/build/utils/logger.js +113 -0
  78. package/build/utils/logger.js.map +1 -0
  79. package/build/utils/validation.d.ts +89 -0
  80. package/build/utils/validation.d.ts.map +1 -0
  81. package/build/utils/validation.js +78 -0
  82. package/build/utils/validation.js.map +1 -0
  83. package/docker-compose.yml +20 -0
  84. package/eslint.config.js +97 -0
  85. package/package.json +92 -0
  86. package/scripts/generate-version.js +31 -0
  87. package/src/api/client.ts +286 -0
  88. package/src/api/types.ts +137 -0
  89. package/src/config/settings.ts +113 -0
  90. package/src/constants.ts +29 -0
  91. package/src/index.ts +99 -0
  92. package/src/mcp-server.ts +342 -0
  93. package/src/tools/action-words.ts +240 -0
  94. package/src/tools/projects.ts +144 -0
  95. package/src/tools/scenarios.ts +231 -0
  96. package/src/tools/test-runs.ts +400 -0
  97. package/src/transports/http.ts +467 -0
  98. package/src/transports/index.ts +26 -0
  99. package/src/transports/stdio.ts +28 -0
  100. package/src/utils/errors.ts +45 -0
  101. package/src/utils/logger-constants.ts +18 -0
  102. package/src/utils/logger.ts +150 -0
  103. package/src/utils/validation.ts +94 -0
  104. package/test/api/client-with-msw.test.ts +122 -0
  105. package/test/api/client.test.ts +326 -0
  106. package/test/api/types.test.ts +88 -0
  107. package/test/config/settings.test.ts +204 -0
  108. package/test/mocks/data/action-words.ts +40 -0
  109. package/test/mocks/data/index.ts +13 -0
  110. package/test/mocks/data/projects.ts +38 -0
  111. package/test/mocks/data/scenarios.ts +53 -0
  112. package/test/mocks/data/test-runs.ts +101 -0
  113. package/test/mocks/handlers/action-words.ts +52 -0
  114. package/test/mocks/handlers/index.ts +10 -0
  115. package/test/mocks/handlers/projects.ts +45 -0
  116. package/test/mocks/handlers/scenarios.ts +72 -0
  117. package/test/mocks/handlers/test-runs.ts +106 -0
  118. package/test/mocks/server.ts +26 -0
  119. package/test/setup/vitest.setup.ts +18 -0
  120. package/test/tools/coverage-boost.test.ts +252 -0
  121. package/test/tools/projects.test.ts +290 -0
  122. package/test/tools/tools-basic.test.ts +146 -0
  123. package/test/transports/http-basic.test.ts +87 -0
  124. package/test/transports/http-simple.test.ts +33 -0
  125. package/test/transports/stdio.test.ts +73 -0
  126. package/test/utils/errors.test.ts +117 -0
  127. package/test/utils/validation.test.ts +261 -0
  128. package/tsconfig.build.json +8 -0
  129. package/tsconfig.json +27 -0
  130. package/vitest.config.ts +43 -0
@@ -0,0 +1,18 @@
1
+ import { Tool, CallToolRequest, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import { CucumberStudioApiClient } from '../api/client.js';
3
+ export declare class ScenarioTools {
4
+ private apiClient;
5
+ constructor(apiClient: CucumberStudioApiClient);
6
+ /**
7
+ * Get all available MCP tools for scenarios
8
+ */
9
+ getTools(): Tool[];
10
+ /**
11
+ * Handle tool calls for scenario-related operations
12
+ */
13
+ handleToolCall(request: CallToolRequest): Promise<CallToolResult>;
14
+ listScenarios(args: unknown): Promise<CallToolResult>;
15
+ getScenario(args: unknown): Promise<CallToolResult>;
16
+ findScenariosByTags(args: unknown): Promise<CallToolResult>;
17
+ }
18
+ //# sourceMappingURL=scenarios.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenarios.d.ts","sourceRoot":"","sources":["../../src/tools/scenarios.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAAe,MAAM,oCAAoC,CAAA;AAGvG,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAsB1D,qBAAa,aAAa;IACZ,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,uBAAuB;IAEtD;;OAEG;IACH,QAAQ,IAAI,IAAI,EAAE;IAmElB;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAgBjE,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAsCrD,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAsCnD,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;CAqClE"}
@@ -0,0 +1,194 @@
1
+ import { z } from 'zod';
2
+ import { safeExecute } from '../utils/errors.js';
3
+ import { validateInput, ProjectIdSchema, ScenarioIdSchema, ListParamsSchema, convertToApiParams, } from '../utils/validation.js';
4
+ const FindByTagsSchema = z.object({
5
+ projectId: ProjectIdSchema,
6
+ tags: z.string().min(1, 'Tags parameter is required'),
7
+ pagination: z
8
+ .object({
9
+ page: z.number().int().min(1).optional(),
10
+ pageSize: z.number().int().min(1).max(100).optional(),
11
+ })
12
+ .optional(),
13
+ });
14
+ export class ScenarioTools {
15
+ apiClient;
16
+ constructor(apiClient) {
17
+ this.apiClient = apiClient;
18
+ }
19
+ /**
20
+ * Get all available MCP tools for scenarios
21
+ */
22
+ getTools() {
23
+ return [
24
+ {
25
+ name: 'cucumberstudio_list_scenarios',
26
+ description: 'List all scenarios in a project',
27
+ inputSchema: {
28
+ type: 'object',
29
+ properties: {
30
+ projectId: { type: 'string', description: 'The ID of the project' },
31
+ pagination: {
32
+ type: 'object',
33
+ properties: {
34
+ page: { type: 'number', minimum: 1, description: 'Page number' },
35
+ pageSize: { type: 'number', minimum: 1, maximum: 100, description: 'Number of items per page' },
36
+ },
37
+ additionalProperties: false,
38
+ },
39
+ filter: {
40
+ type: 'object',
41
+ properties: {
42
+ name: { type: 'string', description: 'Filter scenarios by name' },
43
+ tags: { type: 'string', description: 'Filter scenarios by tags' },
44
+ },
45
+ additionalProperties: false,
46
+ },
47
+ },
48
+ required: ['projectId'],
49
+ additionalProperties: false,
50
+ },
51
+ },
52
+ {
53
+ name: 'cucumberstudio_get_scenario',
54
+ description: 'Get detailed information about a specific scenario',
55
+ inputSchema: {
56
+ type: 'object',
57
+ properties: {
58
+ projectId: { type: 'string', description: 'The ID of the project' },
59
+ scenarioId: { type: 'string', description: 'The ID of the scenario to retrieve' },
60
+ },
61
+ required: ['projectId', 'scenarioId'],
62
+ additionalProperties: false,
63
+ },
64
+ },
65
+ {
66
+ name: 'cucumberstudio_find_scenarios_by_tags',
67
+ description: 'Find scenarios by tags in a project',
68
+ inputSchema: {
69
+ type: 'object',
70
+ properties: {
71
+ projectId: { type: 'string', description: 'The ID of the project' },
72
+ tags: { type: 'string', description: 'Tags to search for (comma-separated)' },
73
+ pagination: {
74
+ type: 'object',
75
+ properties: {
76
+ page: { type: 'number', minimum: 1, description: 'Page number' },
77
+ pageSize: { type: 'number', minimum: 1, maximum: 100, description: 'Number of items per page' },
78
+ },
79
+ additionalProperties: false,
80
+ },
81
+ },
82
+ required: ['projectId', 'tags'],
83
+ additionalProperties: false,
84
+ },
85
+ },
86
+ ];
87
+ }
88
+ /**
89
+ * Handle tool calls for scenario-related operations
90
+ */
91
+ async handleToolCall(request) {
92
+ switch (request.params.name) {
93
+ case 'cucumberstudio_list_scenarios':
94
+ return this.listScenarios(request.params.arguments);
95
+ case 'cucumberstudio_get_scenario':
96
+ return this.getScenario(request.params.arguments);
97
+ case 'cucumberstudio_find_scenarios_by_tags':
98
+ return this.findScenariosByTags(request.params.arguments);
99
+ default:
100
+ throw new Error(`Unknown tool: ${request.params.name}`);
101
+ }
102
+ }
103
+ async listScenarios(args) {
104
+ return safeExecute(async () => {
105
+ const projectId = validateInput(ProjectIdSchema, args?.projectId, 'list_scenarios');
106
+ const listParams = validateInput(ListParamsSchema, args, 'list_scenarios');
107
+ const apiParams = convertToApiParams(listParams);
108
+ const response = await this.apiClient.getScenarios(projectId, apiParams);
109
+ const scenarios = Array.isArray(response.data) ? response.data : [response.data];
110
+ const scenarioList = scenarios.map((scenario) => ({
111
+ id: scenario.id,
112
+ name: scenario.attributes.name,
113
+ description: scenario.attributes.description || '',
114
+ definition: scenario.attributes.definition || '',
115
+ folder_id: scenario.attributes.folder_id,
116
+ created_at: scenario.attributes.created_at,
117
+ updated_at: scenario.attributes.updated_at,
118
+ }));
119
+ return {
120
+ content: [
121
+ {
122
+ type: 'text',
123
+ text: JSON.stringify({
124
+ scenarios: scenarioList,
125
+ meta: response.meta || {},
126
+ total_count: scenarioList.length,
127
+ }, null, 2),
128
+ },
129
+ ],
130
+ };
131
+ }, 'listing scenarios');
132
+ }
133
+ async getScenario(args) {
134
+ return safeExecute(async () => {
135
+ const projectId = validateInput(ProjectIdSchema, args?.projectId, 'get_scenario');
136
+ const scenarioId = validateInput(ScenarioIdSchema, args?.scenarioId, 'get_scenario');
137
+ const response = await this.apiClient.getScenario(projectId, scenarioId);
138
+ const scenario = response.data;
139
+ const scenarioDetails = {
140
+ id: scenario.id,
141
+ type: scenario.type,
142
+ name: scenario.attributes.name,
143
+ description: scenario.attributes.description || '',
144
+ definition: scenario.attributes.definition || '',
145
+ folder_id: scenario.attributes.folder_id,
146
+ created_at: scenario.attributes.created_at,
147
+ updated_at: scenario.attributes.updated_at,
148
+ relationships: scenario.relationships || {},
149
+ };
150
+ return {
151
+ content: [
152
+ {
153
+ type: 'text',
154
+ text: JSON.stringify({
155
+ scenario: scenarioDetails,
156
+ included: response.included || [],
157
+ }, null, 2),
158
+ },
159
+ ],
160
+ };
161
+ }, 'getting scenario details');
162
+ }
163
+ async findScenariosByTags(args) {
164
+ return safeExecute(async () => {
165
+ const { projectId, tags, pagination } = validateInput(FindByTagsSchema, args, 'find_scenarios_by_tags');
166
+ const apiParams = convertToApiParams({ pagination });
167
+ const response = await this.apiClient.findScenariosByTag(projectId, tags, apiParams);
168
+ const scenarios = Array.isArray(response.data) ? response.data : [response.data];
169
+ const scenarioList = scenarios.map((scenario) => ({
170
+ id: scenario.id,
171
+ name: scenario.attributes.name,
172
+ description: scenario.attributes.description || '',
173
+ definition: scenario.attributes.definition || '',
174
+ folder_id: scenario.attributes.folder_id,
175
+ created_at: scenario.attributes.created_at,
176
+ updated_at: scenario.attributes.updated_at,
177
+ }));
178
+ return {
179
+ content: [
180
+ {
181
+ type: 'text',
182
+ text: JSON.stringify({
183
+ scenarios: scenarioList,
184
+ search_tags: tags,
185
+ meta: response.meta || {},
186
+ total_count: scenarioList.length,
187
+ }, null, 2),
188
+ },
189
+ ],
190
+ };
191
+ }, 'finding scenarios by tags');
192
+ }
193
+ }
194
+ //# sourceMappingURL=scenarios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenarios.js","sourceRoot":"","sources":["../../src/tools/scenarios.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { Tool, CallToolRequest, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import { CucumberStudioApiClient } from '../api/client.js';
3
+ export declare class TestRunTools {
4
+ private apiClient;
5
+ constructor(apiClient: CucumberStudioApiClient);
6
+ /**
7
+ * Get all available MCP tools for test runs
8
+ */
9
+ getTools(): Tool[];
10
+ /**
11
+ * Handle tool calls for test run-related operations
12
+ */
13
+ handleToolCall(request: CallToolRequest): Promise<CallToolResult>;
14
+ listTestRuns(args: unknown): Promise<CallToolResult>;
15
+ getTestRun(args: unknown): Promise<CallToolResult>;
16
+ getTestExecutions(args: unknown): Promise<CallToolResult>;
17
+ listBuilds(args: unknown): Promise<CallToolResult>;
18
+ getBuild(args: unknown): Promise<CallToolResult>;
19
+ listExecutionEnvironments(args: unknown): Promise<CallToolResult>;
20
+ }
21
+ //# sourceMappingURL=test-runs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-runs.d.ts","sourceRoot":"","sources":["../../src/tools/test-runs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAAe,MAAM,oCAAoC,CAAA;AAEvG,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAY1D,qBAAa,YAAY;IACX,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,uBAAuB;IAEtD;;OAEG;IACH,QAAQ,IAAI,IAAI,EAAE;IAuHlB;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAyBjE,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAqCpD,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAqClD,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IA+CzD,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAoClD,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAoChD,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;CAuCxE"}
@@ -0,0 +1,324 @@
1
+ import { safeExecute } from '../utils/errors.js';
2
+ import { validateInput, ProjectIdSchema, TestRunIdSchema, BuildIdSchema, ListParamsSchema, convertToApiParams, } from '../utils/validation.js';
3
+ export class TestRunTools {
4
+ apiClient;
5
+ constructor(apiClient) {
6
+ this.apiClient = apiClient;
7
+ }
8
+ /**
9
+ * Get all available MCP tools for test runs
10
+ */
11
+ getTools() {
12
+ return [
13
+ {
14
+ name: 'cucumberstudio_list_test_runs',
15
+ description: 'List all test runs in a project',
16
+ inputSchema: {
17
+ type: 'object',
18
+ properties: {
19
+ projectId: { type: 'string', description: 'The ID of the project' },
20
+ pagination: {
21
+ type: 'object',
22
+ properties: {
23
+ page: { type: 'number', minimum: 1, description: 'Page number' },
24
+ pageSize: { type: 'number', minimum: 1, maximum: 100, description: 'Number of items per page' },
25
+ },
26
+ additionalProperties: false,
27
+ },
28
+ filter: {
29
+ type: 'object',
30
+ properties: {
31
+ name: { type: 'string', description: 'Filter test runs by name' },
32
+ },
33
+ additionalProperties: false,
34
+ },
35
+ },
36
+ required: ['projectId'],
37
+ additionalProperties: false,
38
+ },
39
+ },
40
+ {
41
+ name: 'cucumberstudio_get_test_run',
42
+ description: 'Get detailed information about a specific test run',
43
+ inputSchema: {
44
+ type: 'object',
45
+ properties: {
46
+ projectId: { type: 'string', description: 'The ID of the project' },
47
+ testRunId: { type: 'string', description: 'The ID of the test run to retrieve' },
48
+ },
49
+ required: ['projectId', 'testRunId'],
50
+ additionalProperties: false,
51
+ },
52
+ },
53
+ {
54
+ name: 'cucumberstudio_get_test_executions',
55
+ description: 'Get test executions (individual test results) for a test run',
56
+ inputSchema: {
57
+ type: 'object',
58
+ properties: {
59
+ projectId: { type: 'string', description: 'The ID of the project' },
60
+ testRunId: { type: 'string', description: 'The ID of the test run' },
61
+ pagination: {
62
+ type: 'object',
63
+ properties: {
64
+ page: { type: 'number', minimum: 1, description: 'Page number' },
65
+ pageSize: { type: 'number', minimum: 1, maximum: 100, description: 'Number of items per page' },
66
+ },
67
+ additionalProperties: false,
68
+ },
69
+ },
70
+ required: ['projectId', 'testRunId'],
71
+ additionalProperties: false,
72
+ },
73
+ },
74
+ {
75
+ name: 'cucumberstudio_list_builds',
76
+ description: 'List all builds in a project',
77
+ inputSchema: {
78
+ type: 'object',
79
+ properties: {
80
+ projectId: { type: 'string', description: 'The ID of the project' },
81
+ pagination: {
82
+ type: 'object',
83
+ properties: {
84
+ page: { type: 'number', minimum: 1, description: 'Page number' },
85
+ pageSize: { type: 'number', minimum: 1, maximum: 100, description: 'Number of items per page' },
86
+ },
87
+ additionalProperties: false,
88
+ },
89
+ },
90
+ required: ['projectId'],
91
+ additionalProperties: false,
92
+ },
93
+ },
94
+ {
95
+ name: 'cucumberstudio_get_build',
96
+ description: 'Get detailed information about a specific build',
97
+ inputSchema: {
98
+ type: 'object',
99
+ properties: {
100
+ projectId: { type: 'string', description: 'The ID of the project' },
101
+ buildId: { type: 'string', description: 'The ID of the build to retrieve' },
102
+ },
103
+ required: ['projectId', 'buildId'],
104
+ additionalProperties: false,
105
+ },
106
+ },
107
+ {
108
+ name: 'cucumberstudio_list_execution_environments',
109
+ description: 'List all execution environments in a project',
110
+ inputSchema: {
111
+ type: 'object',
112
+ properties: {
113
+ projectId: { type: 'string', description: 'The ID of the project' },
114
+ pagination: {
115
+ type: 'object',
116
+ properties: {
117
+ page: { type: 'number', minimum: 1, description: 'Page number' },
118
+ pageSize: { type: 'number', minimum: 1, maximum: 100, description: 'Number of items per page' },
119
+ },
120
+ additionalProperties: false,
121
+ },
122
+ },
123
+ required: ['projectId'],
124
+ additionalProperties: false,
125
+ },
126
+ },
127
+ ];
128
+ }
129
+ /**
130
+ * Handle tool calls for test run-related operations
131
+ */
132
+ async handleToolCall(request) {
133
+ switch (request.params.name) {
134
+ case 'cucumberstudio_list_test_runs':
135
+ return this.listTestRuns(request.params.arguments);
136
+ case 'cucumberstudio_get_test_run':
137
+ return this.getTestRun(request.params.arguments);
138
+ case 'cucumberstudio_get_test_executions':
139
+ return this.getTestExecutions(request.params.arguments);
140
+ case 'cucumberstudio_list_builds':
141
+ return this.listBuilds(request.params.arguments);
142
+ case 'cucumberstudio_get_build':
143
+ return this.getBuild(request.params.arguments);
144
+ case 'cucumberstudio_list_execution_environments':
145
+ return this.listExecutionEnvironments(request.params.arguments);
146
+ default:
147
+ throw new Error(`Unknown tool: ${request.params.name}`);
148
+ }
149
+ }
150
+ async listTestRuns(args) {
151
+ return safeExecute(async () => {
152
+ const projectId = validateInput(ProjectIdSchema, args?.projectId, 'list_test_runs');
153
+ const listParams = validateInput(ListParamsSchema, args, 'list_test_runs');
154
+ const apiParams = convertToApiParams(listParams);
155
+ const response = await this.apiClient.getTestRuns(projectId, apiParams);
156
+ const testRuns = Array.isArray(response.data) ? response.data : [response.data];
157
+ const testRunList = testRuns.map((testRun) => ({
158
+ id: testRun.id,
159
+ name: testRun.attributes.name,
160
+ description: testRun.attributes.description || '',
161
+ execution_environment: testRun.attributes.execution_environment || '',
162
+ created_at: testRun.attributes.created_at,
163
+ updated_at: testRun.attributes.updated_at,
164
+ }));
165
+ return {
166
+ content: [
167
+ {
168
+ type: 'text',
169
+ text: JSON.stringify({
170
+ test_runs: testRunList,
171
+ meta: response.meta || {},
172
+ total_count: testRunList.length,
173
+ }, null, 2),
174
+ },
175
+ ],
176
+ };
177
+ }, 'listing test runs');
178
+ }
179
+ async getTestRun(args) {
180
+ return safeExecute(async () => {
181
+ const projectId = validateInput(ProjectIdSchema, args?.projectId, 'get_test_run');
182
+ const testRunId = validateInput(TestRunIdSchema, args?.testRunId, 'get_test_run');
183
+ const response = await this.apiClient.getTestRun(projectId, testRunId);
184
+ const testRun = response.data;
185
+ const testRunDetails = {
186
+ id: testRun.id,
187
+ type: testRun.type,
188
+ name: testRun.attributes.name,
189
+ description: testRun.attributes.description || '',
190
+ execution_environment: testRun.attributes.execution_environment || '',
191
+ created_at: testRun.attributes.created_at,
192
+ updated_at: testRun.attributes.updated_at,
193
+ relationships: testRun.relationships || {},
194
+ };
195
+ return {
196
+ content: [
197
+ {
198
+ type: 'text',
199
+ text: JSON.stringify({
200
+ test_run: testRunDetails,
201
+ included: response.included || [],
202
+ }, null, 2),
203
+ },
204
+ ],
205
+ };
206
+ }, 'getting test run details');
207
+ }
208
+ async getTestExecutions(args) {
209
+ return safeExecute(async () => {
210
+ const projectId = validateInput(ProjectIdSchema, args?.projectId, 'get_test_executions');
211
+ const testRunId = validateInput(TestRunIdSchema, args?.testRunId, 'get_test_executions');
212
+ const listParams = validateInput(ListParamsSchema, args, 'get_test_executions');
213
+ const apiParams = convertToApiParams(listParams);
214
+ const response = await this.apiClient.getTestExecutions(projectId, testRunId, apiParams);
215
+ const executions = Array.isArray(response.data) ? response.data : [response.data];
216
+ const executionList = executions.map((execution) => ({
217
+ id: execution.id,
218
+ status: execution.attributes.status,
219
+ scenario_id: execution.attributes.scenario_id,
220
+ test_run_id: execution.attributes.test_run_id,
221
+ created_at: execution.attributes.created_at,
222
+ updated_at: execution.attributes.updated_at,
223
+ }));
224
+ return {
225
+ content: [
226
+ {
227
+ type: 'text',
228
+ text: JSON.stringify({
229
+ test_executions: executionList,
230
+ test_run_id: testRunId,
231
+ meta: response.meta || {},
232
+ total_count: executionList.length,
233
+ }, null, 2),
234
+ },
235
+ ],
236
+ };
237
+ }, 'getting test executions');
238
+ }
239
+ async listBuilds(args) {
240
+ return safeExecute(async () => {
241
+ const projectId = validateInput(ProjectIdSchema, args?.projectId, 'list_builds');
242
+ const listParams = validateInput(ListParamsSchema, args, 'list_builds');
243
+ const apiParams = convertToApiParams(listParams);
244
+ const response = await this.apiClient.getBuilds(projectId, apiParams);
245
+ const builds = Array.isArray(response.data) ? response.data : [response.data];
246
+ const buildList = builds.map((build) => ({
247
+ id: build.id,
248
+ name: build.attributes.name,
249
+ description: build.attributes.description || '',
250
+ created_at: build.attributes.created_at,
251
+ updated_at: build.attributes.updated_at,
252
+ }));
253
+ return {
254
+ content: [
255
+ {
256
+ type: 'text',
257
+ text: JSON.stringify({
258
+ builds: buildList,
259
+ meta: response.meta || {},
260
+ total_count: buildList.length,
261
+ }, null, 2),
262
+ },
263
+ ],
264
+ };
265
+ }, 'listing builds');
266
+ }
267
+ async getBuild(args) {
268
+ return safeExecute(async () => {
269
+ const projectId = validateInput(ProjectIdSchema, args?.projectId, 'get_build');
270
+ const buildId = validateInput(BuildIdSchema, args?.buildId, 'get_build');
271
+ const response = await this.apiClient.getBuild(projectId, buildId);
272
+ const build = response.data;
273
+ const buildDetails = {
274
+ id: build.id,
275
+ type: build.type,
276
+ name: build.attributes.name,
277
+ description: build.attributes.description || '',
278
+ created_at: build.attributes.created_at,
279
+ updated_at: build.attributes.updated_at,
280
+ relationships: build.relationships || {},
281
+ };
282
+ return {
283
+ content: [
284
+ {
285
+ type: 'text',
286
+ text: JSON.stringify({
287
+ build: buildDetails,
288
+ included: response.included || [],
289
+ }, null, 2),
290
+ },
291
+ ],
292
+ };
293
+ }, 'getting build details');
294
+ }
295
+ async listExecutionEnvironments(args) {
296
+ return safeExecute(async () => {
297
+ const projectId = validateInput(ProjectIdSchema, args?.projectId, 'list_execution_environments');
298
+ const listParams = validateInput(ListParamsSchema, args, 'list_execution_environments');
299
+ const apiParams = convertToApiParams(listParams);
300
+ const response = await this.apiClient.getExecutionEnvironments(projectId, apiParams);
301
+ const environments = Array.isArray(response.data) ? response.data : [response.data];
302
+ const environmentList = environments.map((env) => ({
303
+ id: env.id,
304
+ name: env.attributes.name,
305
+ description: env.attributes.description || '',
306
+ created_at: env.attributes.created_at,
307
+ updated_at: env.attributes.updated_at,
308
+ }));
309
+ return {
310
+ content: [
311
+ {
312
+ type: 'text',
313
+ text: JSON.stringify({
314
+ execution_environments: environmentList,
315
+ meta: response.meta || {},
316
+ total_count: environmentList.length,
317
+ }, null, 2),
318
+ },
319
+ ],
320
+ };
321
+ }, 'listing execution environments');
322
+ }
323
+ }
324
+ //# sourceMappingURL=test-runs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-runs.js","sourceRoot":"","sources":["../../src/tools/test-runs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { Logger } from '../utils/logger.js';
3
+ declare global {
4
+ namespace Express {
5
+ interface Request {
6
+ requestId?: string;
7
+ }
8
+ }
9
+ }
10
+ export interface HttpTransportOptions {
11
+ port: number;
12
+ host?: string;
13
+ cors?: {
14
+ origin?: string | string[] | boolean;
15
+ credentials?: boolean;
16
+ };
17
+ }
18
+ /**
19
+ * Creates an HTTP server using MCP's official Streamable HTTP transport
20
+ */
21
+ export declare class StreamableHttpTransport {
22
+ private options;
23
+ private logger;
24
+ private app;
25
+ private httpServer;
26
+ private transports;
27
+ private createMcpServer;
28
+ constructor(createMcpServer: () => McpServer, options: HttpTransportOptions, logger: Logger);
29
+ private setupMiddleware;
30
+ private setupRoutes;
31
+ private handlePost;
32
+ private handleGet;
33
+ private handleDelete;
34
+ private isValidOrigin;
35
+ start(): Promise<void>;
36
+ close(): Promise<void>;
37
+ }
38
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAOnE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAG3C,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,OAAO;YACf,SAAS,CAAC,EAAE,MAAM,CAAA;SACnB;KACF;CACF;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAA;QACpC,WAAW,CAAC,EAAE,OAAO,CAAA;KACtB,CAAA;CACF;AAED;;GAEG;AACH,qBAAa,uBAAuB;IAQhC,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IARhB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,UAAU,CAAmD;IACrE,OAAO,CAAC,eAAe,CAAiB;gBAGtC,eAAe,EAAE,MAAM,SAAS,EACxB,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,MAAM;IAQxB,OAAO,CAAC,eAAe;IA2EvB,OAAO,CAAC,WAAW;YAkCL,UAAU;YA8FV,SAAS;YAiFT,YAAY;IA+E1B,OAAO,CAAC,aAAa;IAQf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB7B"}