cucumberstudio-mcp 1.1.3 → 1.1.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/README.md +53 -7
- package/build/api/client.js +0 -1
- package/build/api/types.js +0 -1
- package/build/config/settings.js +8 -6
- package/build/constants.js +0 -1
- package/build/generated/version.js +1 -2
- package/build/index.dxt.js +39 -0
- package/build/index.js +0 -1
- package/build/mcp-server.js +0 -1
- package/build/tools/action-words.js +0 -1
- package/build/tools/projects.js +0 -1
- package/build/tools/scenarios.js +0 -1
- package/build/tools/test-runs.js +0 -1
- package/build/transports/http.js +0 -1
- package/build/transports/index.js +0 -1
- package/build/transports/stdio.js +0 -1
- package/build/utils/errors.js +10 -2
- package/build/utils/logger-constants.js +0 -1
- package/build/utils/logger.js +0 -1
- package/build/utils/validation.js +0 -1
- package/manifest.json +127 -0
- package/package.json +11 -3
- package/build/api/client.d.ts +0 -49
- package/build/api/client.d.ts.map +0 -1
- package/build/api/client.js.map +0 -1
- package/build/api/types.d.ts +0 -113
- package/build/api/types.d.ts.map +0 -1
- package/build/api/types.js.map +0 -1
- package/build/config/settings.d.ts +0 -123
- package/build/config/settings.d.ts.map +0 -1
- package/build/config/settings.js.map +0 -1
- package/build/constants.d.ts +0 -16
- package/build/constants.d.ts.map +0 -1
- package/build/constants.js.map +0 -1
- package/build/generated/version.d.ts +0 -3
- package/build/generated/version.d.ts.map +0 -1
- package/build/generated/version.js.map +0 -1
- package/build/index.d.ts +0 -3
- package/build/index.d.ts.map +0 -1
- package/build/index.js.map +0 -1
- package/build/mcp-server.d.ts +0 -6
- package/build/mcp-server.d.ts.map +0 -1
- package/build/mcp-server.js.map +0 -1
- package/build/tools/action-words.d.ts +0 -18
- package/build/tools/action-words.d.ts.map +0 -1
- package/build/tools/action-words.js.map +0 -1
- package/build/tools/projects.d.ts +0 -19
- package/build/tools/projects.d.ts.map +0 -1
- package/build/tools/projects.js.map +0 -1
- package/build/tools/scenarios.d.ts +0 -18
- package/build/tools/scenarios.d.ts.map +0 -1
- package/build/tools/scenarios.js.map +0 -1
- package/build/tools/test-runs.d.ts +0 -21
- package/build/tools/test-runs.d.ts.map +0 -1
- package/build/tools/test-runs.js.map +0 -1
- package/build/transports/http.d.ts +0 -38
- package/build/transports/http.d.ts.map +0 -1
- package/build/transports/http.js.map +0 -1
- package/build/transports/index.d.ts +0 -22
- package/build/transports/index.d.ts.map +0 -1
- package/build/transports/index.js.map +0 -1
- package/build/transports/stdio.d.ts +0 -13
- package/build/transports/stdio.d.ts.map +0 -1
- package/build/transports/stdio.js.map +0 -1
- package/build/utils/errors.d.ts +0 -10
- package/build/utils/errors.d.ts.map +0 -1
- package/build/utils/errors.js.map +0 -1
- package/build/utils/logger-constants.d.ts +0 -15
- package/build/utils/logger-constants.d.ts.map +0 -1
- package/build/utils/logger-constants.js.map +0 -1
- package/build/utils/logger.d.ts +0 -55
- package/build/utils/logger.d.ts.map +0 -1
- package/build/utils/logger.js.map +0 -1
- package/build/utils/validation.d.ts +0 -89
- package/build/utils/validation.d.ts.map +0 -1
- package/build/utils/validation.js.map +0 -1
package/README.md
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
[](https://www.typescriptlang.org/)
|
|
10
10
|
[](https://github.com/HeroSizy/cucumberstudio-mcp/blob/master/LICENSE)
|
|
11
11
|
|
|
12
|
+
> *Vibe Coded with Claude Code and Pu-Er 🍵*
|
|
13
|
+
|
|
12
14
|
A Model Context Protocol (MCP) server that provides LLM access to Cucumber Studio's testing platform. This server enables AI assistants to retrieve test scenarios, action words, test runs, and project information from Cucumber Studio.
|
|
13
15
|
|
|
14
16
|
## Features
|
|
@@ -26,7 +28,20 @@ A Model Context Protocol (MCP) server that provides LLM access to Cucumber Studi
|
|
|
26
28
|
|
|
27
29
|
## Installation
|
|
28
30
|
|
|
29
|
-
###
|
|
31
|
+
### Desktop Extension (DXT) Installation
|
|
32
|
+
|
|
33
|
+
The easiest way to use this MCP server is as a Desktop Extension:
|
|
34
|
+
|
|
35
|
+
1. **Download Extension**: Get the latest `.dxt` file from the [releases page](https://github.com/HeroSizy/cucumberstudio-mcp/releases) (automatically built from each release)
|
|
36
|
+
2. **Install Extension**: Import the extension in your compatible AI desktop application
|
|
37
|
+
3. **Configure Credentials**: Set up your Cucumber Studio API credentials through the extension settings:
|
|
38
|
+
- **Access Token**: Your Cucumber Studio API access token
|
|
39
|
+
- **Client ID**: Your Cucumber Studio client ID
|
|
40
|
+
- **User ID**: Your Cucumber Studio user ID
|
|
41
|
+
|
|
42
|
+
The extension will automatically handle the MCP server setup and communication.
|
|
43
|
+
|
|
44
|
+
### Quick Start (Command Line)
|
|
30
45
|
|
|
31
46
|
Run directly with npx (no installation required):
|
|
32
47
|
```bash
|
|
@@ -118,7 +133,7 @@ npm run docker:build
|
|
|
118
133
|
npm run docker:run
|
|
119
134
|
```
|
|
120
135
|
|
|
121
|
-
The Docker setup includes health checks and automatic restarts for production use.
|
|
136
|
+
The Docker setup includes health checks and automatic restarts for production use. The multi-stage build process creates optimized production images with only runtime dependencies (~150MB).
|
|
122
137
|
|
|
123
138
|
## Configuration
|
|
124
139
|
|
|
@@ -169,9 +184,16 @@ npm run start:http
|
|
|
169
184
|
```
|
|
170
185
|
|
|
171
186
|
|
|
172
|
-
### Using with
|
|
187
|
+
### Using with MCP Clients
|
|
173
188
|
|
|
174
|
-
####
|
|
189
|
+
#### Desktop Extension (Recommended)
|
|
190
|
+
Import the `.dxt` extension file directly into your compatible AI desktop application. The extension handles all configuration through its settings interface.
|
|
191
|
+
|
|
192
|
+
#### Manual MCP Configuration
|
|
193
|
+
|
|
194
|
+
For manual MCP client configuration:
|
|
195
|
+
|
|
196
|
+
##### Option 1: NPX (Recommended)
|
|
175
197
|
```json
|
|
176
198
|
{
|
|
177
199
|
"mcpServers": {
|
|
@@ -188,7 +210,7 @@ npm run start:http
|
|
|
188
210
|
}
|
|
189
211
|
```
|
|
190
212
|
|
|
191
|
-
|
|
213
|
+
##### Option 2: Local Installation
|
|
192
214
|
```json
|
|
193
215
|
{
|
|
194
216
|
"mcpServers": {
|
|
@@ -205,7 +227,7 @@ npm run start:http
|
|
|
205
227
|
}
|
|
206
228
|
```
|
|
207
229
|
|
|
208
|
-
|
|
230
|
+
##### Option 3: Docker Hub Image
|
|
209
231
|
```json
|
|
210
232
|
{
|
|
211
233
|
"mcpServers": {
|
|
@@ -217,7 +239,7 @@ npm run start:http
|
|
|
217
239
|
}
|
|
218
240
|
```
|
|
219
241
|
|
|
220
|
-
|
|
242
|
+
##### Option 4: Local Docker Build
|
|
221
243
|
```json
|
|
222
244
|
{
|
|
223
245
|
"mcpServers": {
|
|
@@ -295,6 +317,30 @@ npm run test:coverage
|
|
|
295
317
|
npm run test:ui
|
|
296
318
|
```
|
|
297
319
|
|
|
320
|
+
### Build Options
|
|
321
|
+
```bash
|
|
322
|
+
# Production build (default) - optimized for size, no .d.ts/.js.map files
|
|
323
|
+
npm run build
|
|
324
|
+
|
|
325
|
+
# Development build - includes source maps and type declarations for debugging
|
|
326
|
+
npm run build:dev
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### DXT Extension Development
|
|
330
|
+
```bash
|
|
331
|
+
# Validate manifest.json
|
|
332
|
+
npm run dxt:validate
|
|
333
|
+
|
|
334
|
+
# Build complete DXT extension for local testing (optimized production build)
|
|
335
|
+
npm run dxt:build
|
|
336
|
+
|
|
337
|
+
# Check info about built extension
|
|
338
|
+
npm run dxt:info
|
|
339
|
+
|
|
340
|
+
# Clean up build artifacts
|
|
341
|
+
npm run dxt:clean
|
|
342
|
+
```
|
|
343
|
+
|
|
298
344
|
## Architecture
|
|
299
345
|
|
|
300
346
|
The server is built with a modular, production-ready architecture:
|
package/build/api/client.js
CHANGED
package/build/api/types.js
CHANGED
package/build/config/settings.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { config as loadDotenv } from 'dotenv';
|
|
2
1
|
import { z } from 'zod';
|
|
3
2
|
import { SERVER_NAME, SERVER_VERSION, DEFAULT_API_BASE_URL, DEFAULT_PORT, DEFAULT_HOST, DEFAULT_LOG_LEVEL, } from '../constants.js';
|
|
4
3
|
// Configuration schema for type safety and validation
|
|
@@ -29,10 +28,12 @@ export class ConfigManager {
|
|
|
29
28
|
config = null;
|
|
30
29
|
/**
|
|
31
30
|
* Load configuration from environment variables
|
|
31
|
+
* Supports both traditional environment variables and DXT user configuration
|
|
32
|
+
* Note: .env file loading is handled by entry points (index.ts), not here
|
|
32
33
|
*/
|
|
33
34
|
loadFromEnvironment() {
|
|
34
|
-
//
|
|
35
|
-
|
|
35
|
+
// Environment variables are read from process.env
|
|
36
|
+
// .env loading is handled at application startup in entry points
|
|
36
37
|
const rawConfig = {
|
|
37
38
|
cucumberStudio: {
|
|
38
39
|
baseUrl: process.env.CUCUMBERSTUDIO_BASE_URL,
|
|
@@ -64,8 +65,10 @@ export class ConfigManager {
|
|
|
64
65
|
if (error instanceof z.ZodError) {
|
|
65
66
|
const missingFields = error.errors.map((e) => e.path.join('.')).join(', ');
|
|
66
67
|
throw new Error(`Configuration validation failed. Missing or invalid fields: ${missingFields}. ` +
|
|
67
|
-
'Please ensure all required
|
|
68
|
-
'
|
|
68
|
+
'Please ensure all required credentials are configured: ' +
|
|
69
|
+
'Access Token, Client ID, and User ID. ' +
|
|
70
|
+
'In DXT environments, these should be configured through the extension settings. ' +
|
|
71
|
+
'For development, set environment variables: CUCUMBERSTUDIO_ACCESS_TOKEN, CUCUMBERSTUDIO_CLIENT_ID, CUCUMBERSTUDIO_UID');
|
|
69
72
|
}
|
|
70
73
|
throw error;
|
|
71
74
|
}
|
|
@@ -94,4 +97,3 @@ export class ConfigManager {
|
|
|
94
97
|
}
|
|
95
98
|
// Singleton instance
|
|
96
99
|
export const configManager = new ConfigManager();
|
|
97
|
-
//# sourceMappingURL=settings.js.map
|
package/build/constants.js
CHANGED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
2
|
+
import { createCucumberStudioMcpServer } from './mcp-server.js';
|
|
3
|
+
/**
|
|
4
|
+
* DXT-optimized entry point for the Cucumber Studio MCP Server
|
|
5
|
+
* STDIO transport only - HTTP transport code excluded from bundle
|
|
6
|
+
* Environment variables provided by DXT runtime (no .env files needed)
|
|
7
|
+
*/
|
|
8
|
+
async function main() {
|
|
9
|
+
// DXT provides environment variables through manifest configuration
|
|
10
|
+
// No need for dotenv in DXT runtime
|
|
11
|
+
console.error(`🎯 Starting Cucumber Studio MCP Server with stdio transport...`);
|
|
12
|
+
try {
|
|
13
|
+
// STDIO transport only (DXT optimization)
|
|
14
|
+
const server = createCucumberStudioMcpServer();
|
|
15
|
+
const stdioTransport = new StdioServerTransport();
|
|
16
|
+
console.error('🚀 CucumberStudio MCP Server running on stdio');
|
|
17
|
+
console.error('📡 Transport: STDIO (standard input/output)');
|
|
18
|
+
console.error('🔄 Protocol: MCP');
|
|
19
|
+
await server.connect(stdioTransport);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
console.error(`❌ stdio transport failed to start:`, error);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Handle graceful shutdown for STDIO transport
|
|
27
|
+
process.on('SIGINT', () => {
|
|
28
|
+
console.error('🛑 Received SIGINT, shutting down gracefully...');
|
|
29
|
+
process.exit(0);
|
|
30
|
+
});
|
|
31
|
+
process.on('SIGTERM', () => {
|
|
32
|
+
console.error('🛑 Received SIGTERM, shutting down gracefully...');
|
|
33
|
+
process.exit(0);
|
|
34
|
+
});
|
|
35
|
+
// Run main function
|
|
36
|
+
main().catch((error) => {
|
|
37
|
+
console.error('❌ Unhandled error:', error);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
});
|
package/build/index.js
CHANGED
package/build/mcp-server.js
CHANGED
package/build/tools/projects.js
CHANGED
package/build/tools/scenarios.js
CHANGED
package/build/tools/test-runs.js
CHANGED
package/build/transports/http.js
CHANGED
package/build/utils/errors.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Convert various error types into MCP-compatible errors
|
|
4
|
+
* Enhanced for DXT extension compatibility with detailed error context
|
|
4
5
|
*/
|
|
5
6
|
export function createMcpError(error, context) {
|
|
6
7
|
if (error instanceof McpError) {
|
|
@@ -11,10 +12,18 @@ export function createMcpError(error, context) {
|
|
|
11
12
|
if (error.name === 'CucumberStudioApiError') {
|
|
12
13
|
return new McpError(ErrorCode.InternalError, `Cucumber Studio API error${context ? ` (${context})` : ''}: ${error.message}`);
|
|
13
14
|
}
|
|
14
|
-
// Handle validation errors
|
|
15
|
+
// Handle validation errors (including configuration)
|
|
15
16
|
if (error.name === 'ZodError') {
|
|
16
17
|
return new McpError(ErrorCode.InvalidParams, `Validation error${context ? ` (${context})` : ''}: ${error.message}`);
|
|
17
18
|
}
|
|
19
|
+
// Handle configuration errors specifically for DXT
|
|
20
|
+
if (error.message.includes('Configuration validation failed')) {
|
|
21
|
+
return new McpError(ErrorCode.InvalidRequest, `Configuration error: ${error.message}. Please check your DXT extension settings.`);
|
|
22
|
+
}
|
|
23
|
+
// Handle network/timeout errors
|
|
24
|
+
if (error.name === 'AxiosError' || error.message.includes('timeout')) {
|
|
25
|
+
return new McpError(ErrorCode.InternalError, `Network error${context ? ` (${context})` : ''}: ${error.message}. Please check your connection and API credentials.`);
|
|
26
|
+
}
|
|
18
27
|
// Handle general errors
|
|
19
28
|
return new McpError(ErrorCode.InternalError, `${context ? `${context}: ` : ''}${error.message}`);
|
|
20
29
|
}
|
|
@@ -32,4 +41,3 @@ export async function safeExecute(operation, context) {
|
|
|
32
41
|
throw createMcpError(error, context);
|
|
33
42
|
}
|
|
34
43
|
}
|
|
35
|
-
//# sourceMappingURL=errors.js.map
|
package/build/utils/logger.js
CHANGED
package/manifest.json
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
{
|
|
2
|
+
"dxt_version": "0.1",
|
|
3
|
+
"name": "cucumberstudio-mcp",
|
|
4
|
+
"display_name": "Cucumber Studio MCP",
|
|
5
|
+
"version": "1.1.3",
|
|
6
|
+
"description": "MCP server for Cucumber Studio API integration - access test scenarios, action words, and execution data",
|
|
7
|
+
"long_description": "A Model Context Protocol (MCP) server that provides LLM access to Cucumber Studio's testing platform. This server enables AI assistants to retrieve test scenarios, action words, test runs, and project information from Cucumber Studio. Features include project management, scenario browsing, reusable test steps access, and test execution monitoring with comprehensive error handling and type safety.",
|
|
8
|
+
"author": {
|
|
9
|
+
"name": "HeroSizy",
|
|
10
|
+
"url": "https://github.com/HeroSizy/cucumberstudio-mcp"
|
|
11
|
+
},
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "https://github.com/HeroSizy/cucumberstudio-mcp.git"
|
|
16
|
+
},
|
|
17
|
+
"homepage": "https://github.com/HeroSizy/cucumberstudio-mcp#readme",
|
|
18
|
+
"documentation": "https://github.com/HeroSizy/cucumberstudio-mcp/blob/master/README.md",
|
|
19
|
+
"support": "https://github.com/HeroSizy/cucumberstudio-mcp/issues",
|
|
20
|
+
"keywords": [
|
|
21
|
+
"cucumber",
|
|
22
|
+
"testing",
|
|
23
|
+
"api",
|
|
24
|
+
"automation",
|
|
25
|
+
"bdd",
|
|
26
|
+
"cucumber-studio",
|
|
27
|
+
"test-management",
|
|
28
|
+
"scenarios",
|
|
29
|
+
"action-words"
|
|
30
|
+
],
|
|
31
|
+
"server": {
|
|
32
|
+
"type": "node",
|
|
33
|
+
"entry_point": "bundle.js",
|
|
34
|
+
"mcp_config": {
|
|
35
|
+
"command": "node",
|
|
36
|
+
"args": ["${__dirname}/bundle.js"],
|
|
37
|
+
"env": {
|
|
38
|
+
"CUCUMBERSTUDIO_ACCESS_TOKEN": "${user_config.access_token}",
|
|
39
|
+
"CUCUMBERSTUDIO_CLIENT_ID": "${user_config.client_id}",
|
|
40
|
+
"CUCUMBERSTUDIO_UID": "${user_config.uid}",
|
|
41
|
+
"MCP_TRANSPORT": "stdio"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"user_config": {
|
|
46
|
+
"access_token": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"title": "Access Token",
|
|
49
|
+
"description": "Your Cucumber Studio API access token. Get this from your Cucumber Studio account settings under API tokens.",
|
|
50
|
+
"required": true,
|
|
51
|
+
"sensitive": true
|
|
52
|
+
},
|
|
53
|
+
"client_id": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"title": "Client ID",
|
|
56
|
+
"description": "Your Cucumber Studio client ID. This is provided when you create an API application in Cucumber Studio.",
|
|
57
|
+
"required": true
|
|
58
|
+
},
|
|
59
|
+
"uid": {
|
|
60
|
+
"type": "string",
|
|
61
|
+
"title": "User ID",
|
|
62
|
+
"description": "Your Cucumber Studio user ID. This can be found in your account settings or profile information.",
|
|
63
|
+
"required": true
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"tools": [
|
|
67
|
+
{
|
|
68
|
+
"name": "cucumberstudio_list_projects",
|
|
69
|
+
"description": "List all projects accessible to the authenticated user with optional pagination and filtering"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "cucumberstudio_get_project",
|
|
73
|
+
"description": "Get detailed information about a specific project including settings and metadata"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"name": "cucumberstudio_list_scenarios",
|
|
77
|
+
"description": "List test scenarios in a project with support for folder filtering and pagination"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "cucumberstudio_get_scenario",
|
|
81
|
+
"description": "Get detailed scenario information including steps, tags, and execution history"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"name": "cucumberstudio_find_scenarios_by_tags",
|
|
85
|
+
"description": "Search and filter scenarios by tags across projects for targeted test execution"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"name": "cucumberstudio_list_action_words",
|
|
89
|
+
"description": "List reusable action words (test steps) with pagination and filtering capabilities"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"name": "cucumberstudio_get_action_word",
|
|
93
|
+
"description": "Get detailed action word information including parameters and usage examples"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"name": "cucumberstudio_find_action_words_by_tags",
|
|
97
|
+
"description": "Search action words by tags to find reusable test components"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"name": "cucumberstudio_list_test_runs",
|
|
101
|
+
"description": "List test execution runs with filtering by status, dates, and execution environments"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"name": "cucumberstudio_get_test_run",
|
|
105
|
+
"description": "Get detailed test run information including execution status and results summary"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"name": "cucumberstudio_get_test_executions",
|
|
109
|
+
"description": "Get individual test execution results and detailed failure information"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"name": "cucumberstudio_list_builds",
|
|
113
|
+
"description": "List builds associated with test executions for CI/CD integration tracking"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"name": "cucumberstudio_get_build",
|
|
117
|
+
"description": "Get detailed build information including test results and execution metadata"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"name": "cucumberstudio_list_execution_environments",
|
|
121
|
+
"description": "List available execution environments for test runs and build configurations"
|
|
122
|
+
}
|
|
123
|
+
],
|
|
124
|
+
"compatibility": {
|
|
125
|
+
"node": ">=20.0.0"
|
|
126
|
+
}
|
|
127
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cucumberstudio-mcp",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"description": "MCP server for Cucumber Studio API integration",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"files": [
|
|
11
11
|
"build/**/*",
|
|
12
12
|
"scripts/**/*",
|
|
13
|
+
"manifest.json",
|
|
13
14
|
"README.md",
|
|
14
15
|
"LICENSE",
|
|
15
16
|
"CHANGELOG.md"
|
|
@@ -18,7 +19,8 @@
|
|
|
18
19
|
"prepare": "npm run build",
|
|
19
20
|
"prepublishOnly": "node scripts/prepublish.js",
|
|
20
21
|
"prebuild": "node scripts/generate-version.js",
|
|
21
|
-
"build": "tsc -p tsconfig.
|
|
22
|
+
"build": "tsc -p tsconfig.prod.json && tsc-alias -p tsconfig.prod.json && node scripts/prepare-package.js",
|
|
23
|
+
"build:dev": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && node scripts/prepare-package.js",
|
|
22
24
|
"start": "node build/index.js",
|
|
23
25
|
"start:http": "MCP_TRANSPORT=http node build/index.js",
|
|
24
26
|
"dev": "tsx --watch -r tsconfig-paths/register src/index.ts",
|
|
@@ -40,7 +42,12 @@
|
|
|
40
42
|
"docker:compose:up": "docker-compose up",
|
|
41
43
|
"docker:compose:up:dev": "docker-compose --profile dev up cucumberstudio-mcp-dev",
|
|
42
44
|
"docker:compose:down": "docker-compose down",
|
|
43
|
-
"docker:compose:build": "docker-compose build"
|
|
45
|
+
"docker:compose:build": "docker-compose build",
|
|
46
|
+
"bundle": "node esbuild.config.js",
|
|
47
|
+
"dxt:validate": "dxt validate manifest.json",
|
|
48
|
+
"dxt:build": "npm run bundle && dxt pack . cucumberstudio-mcp-local.dxt",
|
|
49
|
+
"dxt:info": "dxt info cucumberstudio-mcp-local.dxt",
|
|
50
|
+
"dxt:clean": "rm -f cucumberstudio-mcp-local.dxt bundle.js"
|
|
44
51
|
},
|
|
45
52
|
"keywords": [
|
|
46
53
|
"mcp",
|
|
@@ -80,6 +87,7 @@
|
|
|
80
87
|
"@typescript-eslint/parser": "^8.34.0",
|
|
81
88
|
"@vitest/coverage-v8": "^3.2.2",
|
|
82
89
|
"@vitest/ui": "^3.2.2",
|
|
90
|
+
"esbuild": "^0.25.5",
|
|
83
91
|
"eslint": "^9.28.0",
|
|
84
92
|
"eslint-config-prettier": "^9.0.0",
|
|
85
93
|
"eslint-import-resolver-typescript": "^4.4.3",
|
package/build/api/client.d.ts
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { Config } from '../config/settings.js';
|
|
2
|
-
import { Logger } from '../utils/logger.js';
|
|
3
|
-
import { CucumberStudioResponse, CucumberStudioError, ListParams, Project, Scenario, ActionWord, Folder, TestRun, TestExecution, Build, ExecutionEnvironment } from './types.js';
|
|
4
|
-
export declare class CucumberStudioApiError extends Error {
|
|
5
|
-
status?: number | undefined;
|
|
6
|
-
details?: CucumberStudioError | undefined;
|
|
7
|
-
constructor(message: string, status?: number | undefined, details?: CucumberStudioError | undefined);
|
|
8
|
-
}
|
|
9
|
-
export declare class CucumberStudioApiClient {
|
|
10
|
-
private config;
|
|
11
|
-
private logger;
|
|
12
|
-
private client;
|
|
13
|
-
constructor(config: Config, logger: Logger);
|
|
14
|
-
/**
|
|
15
|
-
* Get logging configuration with safe defaults
|
|
16
|
-
*/
|
|
17
|
-
private getLoggingConfig;
|
|
18
|
-
/**
|
|
19
|
-
* Sanitize headers to avoid logging sensitive information
|
|
20
|
-
*/
|
|
21
|
-
private sanitizeHeaders;
|
|
22
|
-
/**
|
|
23
|
-
* Generic GET request handler
|
|
24
|
-
*/
|
|
25
|
-
private get;
|
|
26
|
-
getProjects(params?: ListParams): Promise<CucumberStudioResponse<Project[]>>;
|
|
27
|
-
getProject(projectId: string): Promise<CucumberStudioResponse<Project>>;
|
|
28
|
-
getScenarios(projectId: string, params?: ListParams): Promise<CucumberStudioResponse<Scenario[]>>;
|
|
29
|
-
getScenario(projectId: string, scenarioId: string): Promise<CucumberStudioResponse<Scenario>>;
|
|
30
|
-
findScenariosByTag(projectId: string, tags: string, params?: ListParams): Promise<CucumberStudioResponse<Scenario[]>>;
|
|
31
|
-
getActionWords(projectId: string, params?: ListParams): Promise<CucumberStudioResponse<ActionWord[]>>;
|
|
32
|
-
getActionWord(projectId: string, actionWordId: string): Promise<CucumberStudioResponse<ActionWord>>;
|
|
33
|
-
findActionWordsByTag(projectId: string, tags: string, params?: ListParams): Promise<CucumberStudioResponse<ActionWord[]>>;
|
|
34
|
-
getFolders(projectId: string, params?: ListParams): Promise<CucumberStudioResponse<Folder[]>>;
|
|
35
|
-
getFolder(projectId: string, folderId: string): Promise<CucumberStudioResponse<Folder>>;
|
|
36
|
-
getFolderChildren(projectId: string, folderId: string, params?: ListParams): Promise<CucumberStudioResponse<Folder[]>>;
|
|
37
|
-
getFolderScenarios(projectId: string, folderId: string, params?: ListParams): Promise<CucumberStudioResponse<Scenario[]>>;
|
|
38
|
-
getTestRuns(projectId: string, params?: ListParams): Promise<CucumberStudioResponse<TestRun[]>>;
|
|
39
|
-
getTestRun(projectId: string, testRunId: string): Promise<CucumberStudioResponse<TestRun>>;
|
|
40
|
-
getTestExecutions(projectId: string, testRunId: string, params?: ListParams): Promise<CucumberStudioResponse<TestExecution[]>>;
|
|
41
|
-
getBuilds(projectId: string, params?: ListParams): Promise<CucumberStudioResponse<Build[]>>;
|
|
42
|
-
getBuild(projectId: string, buildId: string): Promise<CucumberStudioResponse<Build>>;
|
|
43
|
-
getExecutionEnvironments(projectId: string, params?: ListParams): Promise<CucumberStudioResponse<ExecutionEnvironment[]>>;
|
|
44
|
-
/**
|
|
45
|
-
* Test the connection to Cucumber Studio API
|
|
46
|
-
*/
|
|
47
|
-
testConnection(): Promise<boolean>;
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
|
package/build/api/client.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAA;AAG3D,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAiBlF,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAGtC;IACA;IAHT,YACE,OAAe,EACR,MAAe,EACf,OAA6B;QAEpC,KAAK,CAAC,OAAO,CAAC,CAAA;QAHP,WAAM,GAAN,MAAM,CAAS;QACf,YAAO,GAAP,OAAO,CAAsB;QAGpC,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAA;IACtC,CAAC;CACF;AAED,MAAM,OAAO,uBAAuB;IAIxB;IACA;IAJF,MAAM,CAAe;IAE7B,YACU,MAAc,EACd,MAAc;QADd,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;QAEtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,OAAO;YACtC,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,cAAc,EAAE,kBAAkB;gBAClC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,WAAW;gBACjD,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,QAAQ;gBACtC,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG;aAC/B;YACD,OAAO,EAAE,WAAW;SACrB,CAAC,CAAA;QAEF,sCAAsC;QACtC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAClC,CAAC,MAAM,EAAE,EAAE;YACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,MAAM,CAAC,GAAG,EAAE,EAAE;gBAC7E,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC7C,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aAC/D,CAAC,CAAA;YAEF,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;YACpD,CAAC;YAED,OAAO,MAAM,CAAA;QACf,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;YACR,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA;YAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC9B,CAAC,CACF,CAAA;QAED,0DAA0D;QAC1D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACnC,CAAC,QAAQ,EAAE,EAAE;YACX,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,eAAe,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,EAChG;gBACE,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACnE,CACF,CAAA;YAED,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC,iBAAiB,EAAE,CAAC;gBACzF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;oBAChD,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG;oBACxB,IAAI,EAAE,QAAQ,CAAC,IAAI;iBACpB,CAAC,CAAA;YACJ,CAAC;YAED,OAAO,QAAQ,CAAA;QACjB,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;YACR,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAA;gBACpC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAA2B,CAAA;gBAEvD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;oBACtG,MAAM;oBACN,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU;oBACrC,IAAI;oBACJ,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO;iBAChC,CAAC,CAAA;gBAEF,IAAI,OAAO,GAAG,kCAAkC,MAAM,EAAE,CAAA;gBACxD,IAAI,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACvD,CAAC;gBAED,MAAM,IAAI,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;YACzD,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE;oBACnC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG;oBACtB,OAAO,EAAE,KAAK,CAAC,IAAI,KAAK,cAAc;iBACvC,CAAC,CAAA;gBACF,MAAM,IAAI,sBAAsB,CAAC,+CAA+C,CAAC,CAAA;YACnF,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;gBAC3D,MAAM,IAAI,sBAAsB,CAAC,yBAAyB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;YAC5E,CAAC;QACH,CAAC,CACF,CAAA;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,OAAO,CACL,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI;YACrB,KAAK,EAAE,MAAe;YACtB,eAAe,EAAE,KAAK;YACtB,gBAAgB,EAAE,KAAK;YACvB,iBAAiB,EAAE,KAAK;SACzB,CACF,CAAA;IACH,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,OAAgC;QACtD,IAAI,CAAC,OAAO;YAAE,OAAO,OAAO,CAAA;QAE5B,MAAM,SAAS,GAAG,EAAE,GAAG,OAAO,EAAE,CAAA;QAChC,MAAM,aAAa,GAAG,CAAC,cAAc,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAA;QAE9E,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;gBACrB,SAAS,CAAC,GAAG,CAAC,GAAG,eAAe,CAAA;YAClC,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,GAAG,CAAI,QAAgB,EAAE,MAAgC;QACrE,MAAM,QAAQ,GAA6C,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QACtG,OAAO,QAAQ,CAAC,IAAI,CAAA;IACtB,CAAC;IAED,oBAAoB;IACpB,KAAK,CAAC,WAAW,CAAC,MAAmB;QACnC,OAAO,IAAI,CAAC,GAAG,CAAY,WAAW,EAAE,MAAM,CAAC,CAAA;IACjD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,OAAO,IAAI,CAAC,GAAG,CAAU,aAAa,SAAS,EAAE,CAAC,CAAA;IACpD,CAAC;IAED,qBAAqB;IACrB,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,MAAmB;QACvD,OAAO,IAAI,CAAC,GAAG,CAAa,aAAa,SAAS,YAAY,EAAE,MAAM,CAAC,CAAA;IACzE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,UAAkB;QACrD,OAAO,IAAI,CAAC,GAAG,CAAW,aAAa,SAAS,cAAc,UAAU,EAAE,CAAC,CAAA;IAC7E,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,SAAiB,EACjB,IAAY,EACZ,MAAmB;QAEnB,OAAO,IAAI,CAAC,GAAG,CAAa,aAAa,SAAS,yBAAyB,EAAE;YAC3E,GAAG,MAAM;YACT,cAAc,EAAE,IAAI;SACrB,CAAC,CAAA;IACJ,CAAC;IAED,wBAAwB;IACxB,KAAK,CAAC,cAAc,CAAC,SAAiB,EAAE,MAAmB;QACzD,OAAO,IAAI,CAAC,GAAG,CAAe,aAAa,SAAS,cAAc,EAAE,MAAM,CAAC,CAAA;IAC7E,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,YAAoB;QACzD,OAAO,IAAI,CAAC,GAAG,CAAa,aAAa,SAAS,gBAAgB,YAAY,EAAE,CAAC,CAAA;IACnF,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,SAAiB,EACjB,IAAY,EACZ,MAAmB;QAEnB,OAAO,IAAI,CAAC,GAAG,CAAe,aAAa,SAAS,2BAA2B,EAAE;YAC/E,GAAG,MAAM;YACT,cAAc,EAAE,IAAI;SACrB,CAAC,CAAA;IACJ,CAAC;IAED,mBAAmB;IACnB,KAAK,CAAC,UAAU,CAAC,SAAiB,EAAE,MAAmB;QACrD,OAAO,IAAI,CAAC,GAAG,CAAW,aAAa,SAAS,UAAU,EAAE,MAAM,CAAC,CAAA;IACrE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,QAAgB;QACjD,OAAO,IAAI,CAAC,GAAG,CAAS,aAAa,SAAS,YAAY,QAAQ,EAAE,CAAC,CAAA;IACvE,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,SAAiB,EACjB,QAAgB,EAChB,MAAmB;QAEnB,OAAO,IAAI,CAAC,GAAG,CAAW,aAAa,SAAS,YAAY,QAAQ,WAAW,EAAE,MAAM,CAAC,CAAA;IAC1F,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,SAAiB,EACjB,QAAgB,EAChB,MAAmB;QAEnB,OAAO,IAAI,CAAC,GAAG,CAAa,aAAa,SAAS,YAAY,QAAQ,YAAY,EAAE,MAAM,CAAC,CAAA;IAC7F,CAAC;IAED,qBAAqB;IACrB,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,MAAmB;QACtD,OAAO,IAAI,CAAC,GAAG,CAAY,aAAa,SAAS,YAAY,EAAE,MAAM,CAAC,CAAA;IACxE,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAiB,EAAE,SAAiB;QACnD,OAAO,IAAI,CAAC,GAAG,CAAU,aAAa,SAAS,cAAc,SAAS,EAAE,CAAC,CAAA;IAC3E,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,SAAiB,EACjB,SAAiB,EACjB,MAAmB;QAEnB,OAAO,IAAI,CAAC,GAAG,CAAkB,aAAa,SAAS,cAAc,SAAS,kBAAkB,EAAE,MAAM,CAAC,CAAA;IAC3G,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,MAAmB;QACpD,OAAO,IAAI,CAAC,GAAG,CAAU,aAAa,SAAS,SAAS,EAAE,MAAM,CAAC,CAAA;IACnE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAiB,EAAE,OAAe;QAC/C,OAAO,IAAI,CAAC,GAAG,CAAQ,aAAa,SAAS,WAAW,OAAO,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,wBAAwB,CAC5B,SAAiB,EACjB,MAAmB;QAEnB,OAAO,IAAI,CAAC,GAAG,CAAyB,aAAa,SAAS,yBAAyB,EAAE,MAAM,CAAC,CAAA;IAClG,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAA;YAC3C,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;CACF"}
|