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,113 @@
1
+ export interface CucumberStudioResponse<T = unknown> {
2
+ data: T;
3
+ included?: Record<string, unknown>[];
4
+ meta?: {
5
+ count?: number;
6
+ total_count?: number;
7
+ };
8
+ }
9
+ export interface BaseAttributes {
10
+ id: string;
11
+ type: string;
12
+ attributes: Record<string, unknown>;
13
+ relationships?: Record<string, unknown>;
14
+ }
15
+ export interface Project extends BaseAttributes {
16
+ type: 'projects';
17
+ attributes: {
18
+ name: string;
19
+ description?: string;
20
+ created_at: string;
21
+ updated_at: string;
22
+ };
23
+ }
24
+ export interface Scenario extends BaseAttributes {
25
+ type: 'scenarios';
26
+ attributes: {
27
+ name: string;
28
+ description?: string;
29
+ definition?: string;
30
+ created_at: string;
31
+ updated_at: string;
32
+ folder_id?: string;
33
+ };
34
+ }
35
+ export interface ActionWord extends BaseAttributes {
36
+ type: 'actionwords';
37
+ attributes: {
38
+ name: string;
39
+ description?: string;
40
+ definition?: string;
41
+ created_at: string;
42
+ updated_at: string;
43
+ };
44
+ }
45
+ export interface Folder extends BaseAttributes {
46
+ type: 'folders';
47
+ attributes: {
48
+ name: string;
49
+ description?: string;
50
+ created_at: string;
51
+ updated_at: string;
52
+ parent_id?: string;
53
+ };
54
+ }
55
+ export interface TestRun extends BaseAttributes {
56
+ type: 'test_runs';
57
+ attributes: {
58
+ name: string;
59
+ description?: string;
60
+ created_at: string;
61
+ updated_at: string;
62
+ execution_environment?: string;
63
+ };
64
+ }
65
+ export interface TestExecution extends BaseAttributes {
66
+ type: 'test_executions';
67
+ attributes: {
68
+ status: 'passed' | 'failed' | 'wip' | 'retest' | 'blocked' | 'skipped' | 'undefined';
69
+ created_at: string;
70
+ updated_at: string;
71
+ scenario_id: string;
72
+ test_run_id: string;
73
+ };
74
+ }
75
+ export interface Build extends BaseAttributes {
76
+ type: 'builds';
77
+ attributes: {
78
+ name: string;
79
+ description?: string;
80
+ created_at: string;
81
+ updated_at: string;
82
+ };
83
+ }
84
+ export interface ExecutionEnvironment extends BaseAttributes {
85
+ type: 'execution_environments';
86
+ attributes: {
87
+ name: string;
88
+ description?: string;
89
+ created_at: string;
90
+ updated_at: string;
91
+ };
92
+ }
93
+ export interface Tag extends BaseAttributes {
94
+ type: 'tags';
95
+ attributes: {
96
+ key: string;
97
+ value?: string;
98
+ };
99
+ }
100
+ export interface CucumberStudioError {
101
+ errors: Array<{
102
+ detail: string;
103
+ status: string;
104
+ title: string;
105
+ }>;
106
+ }
107
+ export interface ListParams extends Record<string, unknown> {
108
+ 'page[number]'?: number;
109
+ 'page[size]'?: number;
110
+ 'filter[name]'?: string;
111
+ 'filter[tags]'?: string;
112
+ }
113
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,123 @@
1
+ import { z } from 'zod';
2
+ declare const ConfigSchema: z.ZodObject<{
3
+ cucumberStudio: z.ZodObject<{
4
+ baseUrl: z.ZodDefault<z.ZodString>;
5
+ accessToken: z.ZodString;
6
+ clientId: z.ZodString;
7
+ uid: z.ZodString;
8
+ }, "strip", z.ZodTypeAny, {
9
+ baseUrl: string;
10
+ accessToken: string;
11
+ clientId: string;
12
+ uid: string;
13
+ }, {
14
+ accessToken: string;
15
+ clientId: string;
16
+ uid: string;
17
+ baseUrl?: string | undefined;
18
+ }>;
19
+ server: z.ZodObject<{
20
+ name: z.ZodDefault<z.ZodString>;
21
+ version: z.ZodDefault<z.ZodString>;
22
+ transport: z.ZodDefault<z.ZodEnum<["stdio", "http", "streamable-http"]>>;
23
+ port: z.ZodDefault<z.ZodNumber>;
24
+ host: z.ZodDefault<z.ZodString>;
25
+ }, "strip", z.ZodTypeAny, {
26
+ name: string;
27
+ version: string;
28
+ transport: "stdio" | "http" | "streamable-http";
29
+ port: number;
30
+ host: string;
31
+ }, {
32
+ name?: string | undefined;
33
+ version?: string | undefined;
34
+ transport?: "stdio" | "http" | "streamable-http" | undefined;
35
+ port?: number | undefined;
36
+ host?: string | undefined;
37
+ }>;
38
+ logging: z.ZodObject<{
39
+ level: z.ZodDefault<z.ZodEnum<["error", "warn", "info", "debug", "trace"]>>;
40
+ logApiResponses: z.ZodDefault<z.ZodBoolean>;
41
+ logRequestBodies: z.ZodDefault<z.ZodBoolean>;
42
+ logResponseBodies: z.ZodDefault<z.ZodBoolean>;
43
+ transport: z.ZodDefault<z.ZodEnum<["console", "file", "stderr", "none"]>>;
44
+ filePath: z.ZodOptional<z.ZodString>;
45
+ }, "strip", z.ZodTypeAny, {
46
+ transport: "console" | "file" | "stderr" | "none";
47
+ level: "info" | "error" | "warn" | "debug" | "trace";
48
+ logApiResponses: boolean;
49
+ logRequestBodies: boolean;
50
+ logResponseBodies: boolean;
51
+ filePath?: string | undefined;
52
+ }, {
53
+ transport?: "console" | "file" | "stderr" | "none" | undefined;
54
+ level?: "info" | "error" | "warn" | "debug" | "trace" | undefined;
55
+ logApiResponses?: boolean | undefined;
56
+ logRequestBodies?: boolean | undefined;
57
+ logResponseBodies?: boolean | undefined;
58
+ filePath?: string | undefined;
59
+ }>;
60
+ }, "strip", z.ZodTypeAny, {
61
+ cucumberStudio: {
62
+ baseUrl: string;
63
+ accessToken: string;
64
+ clientId: string;
65
+ uid: string;
66
+ };
67
+ server: {
68
+ name: string;
69
+ version: string;
70
+ transport: "stdio" | "http" | "streamable-http";
71
+ port: number;
72
+ host: string;
73
+ };
74
+ logging: {
75
+ transport: "console" | "file" | "stderr" | "none";
76
+ level: "info" | "error" | "warn" | "debug" | "trace";
77
+ logApiResponses: boolean;
78
+ logRequestBodies: boolean;
79
+ logResponseBodies: boolean;
80
+ filePath?: string | undefined;
81
+ };
82
+ }, {
83
+ cucumberStudio: {
84
+ accessToken: string;
85
+ clientId: string;
86
+ uid: string;
87
+ baseUrl?: string | undefined;
88
+ };
89
+ server: {
90
+ name?: string | undefined;
91
+ version?: string | undefined;
92
+ transport?: "stdio" | "http" | "streamable-http" | undefined;
93
+ port?: number | undefined;
94
+ host?: string | undefined;
95
+ };
96
+ logging: {
97
+ transport?: "console" | "file" | "stderr" | "none" | undefined;
98
+ level?: "info" | "error" | "warn" | "debug" | "trace" | undefined;
99
+ logApiResponses?: boolean | undefined;
100
+ logRequestBodies?: boolean | undefined;
101
+ logResponseBodies?: boolean | undefined;
102
+ filePath?: string | undefined;
103
+ };
104
+ }>;
105
+ export type Config = z.infer<typeof ConfigSchema>;
106
+ export declare class ConfigManager {
107
+ private config;
108
+ /**
109
+ * Load configuration from environment variables
110
+ */
111
+ loadFromEnvironment(): Config;
112
+ /**
113
+ * Get current configuration
114
+ */
115
+ getConfig(): Config;
116
+ /**
117
+ * Validate that all required configuration is present
118
+ */
119
+ validate(): boolean;
120
+ }
121
+ export declare const configManager: ConfigManager;
122
+ export {};
123
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/config/settings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAYvB,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsBhB,CAAA;AAEF,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAEjD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsB;IAEpC;;OAEG;IACI,mBAAmB,IAAI,MAAM;IA2CpC;;OAEG;IACI,SAAS,IAAI,MAAM;IAO1B;;OAEG;IACI,QAAQ,IAAI,OAAO;CAQ3B;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAA"}
@@ -0,0 +1,97 @@
1
+ import { config as loadDotenv } from 'dotenv';
2
+ import { z } from 'zod';
3
+ import { SERVER_NAME, SERVER_VERSION, DEFAULT_API_BASE_URL, DEFAULT_PORT, DEFAULT_HOST, DEFAULT_LOG_LEVEL, } from '../constants.js';
4
+ // Configuration schema for type safety and validation
5
+ const ConfigSchema = z.object({
6
+ cucumberStudio: z.object({
7
+ baseUrl: z.string().url().default(DEFAULT_API_BASE_URL),
8
+ accessToken: z.string().min(1),
9
+ clientId: z.string().min(1),
10
+ uid: z.string().min(1),
11
+ }),
12
+ server: z.object({
13
+ name: z.string().default(SERVER_NAME),
14
+ version: z.string().default(SERVER_VERSION),
15
+ transport: z.enum(['stdio', 'http', 'streamable-http']).default('stdio'),
16
+ port: z.number().int().min(1).max(65535).default(DEFAULT_PORT),
17
+ host: z.string().default(DEFAULT_HOST),
18
+ }),
19
+ logging: z.object({
20
+ level: z.enum(['error', 'warn', 'info', 'debug', 'trace']).default(DEFAULT_LOG_LEVEL),
21
+ logApiResponses: z.boolean().default(false),
22
+ logRequestBodies: z.boolean().default(false),
23
+ logResponseBodies: z.boolean().default(false),
24
+ transport: z.enum(['console', 'file', 'stderr', 'none']).default('stderr'),
25
+ filePath: z.string().optional(),
26
+ }),
27
+ });
28
+ export class ConfigManager {
29
+ config = null;
30
+ /**
31
+ * Load configuration from environment variables
32
+ */
33
+ loadFromEnvironment() {
34
+ // Auto-load .env file if it exists
35
+ loadDotenv({ path: '.env' });
36
+ const rawConfig = {
37
+ cucumberStudio: {
38
+ baseUrl: process.env.CUCUMBERSTUDIO_BASE_URL,
39
+ accessToken: process.env.CUCUMBERSTUDIO_ACCESS_TOKEN,
40
+ clientId: process.env.CUCUMBERSTUDIO_CLIENT_ID,
41
+ uid: process.env.CUCUMBERSTUDIO_UID,
42
+ },
43
+ server: {
44
+ name: process.env.MCP_SERVER_NAME,
45
+ version: process.env.MCP_SERVER_VERSION,
46
+ transport: process.env.MCP_TRANSPORT,
47
+ port: process.env.MCP_PORT ? parseInt(process.env.MCP_PORT, 10) : undefined,
48
+ host: process.env.MCP_HOST,
49
+ },
50
+ logging: {
51
+ level: process.env.LOG_LEVEL,
52
+ logApiResponses: process.env.LOG_API_RESPONSES === 'true',
53
+ logRequestBodies: process.env.LOG_REQUEST_BODIES === 'true',
54
+ logResponseBodies: process.env.LOG_RESPONSE_BODIES === 'true',
55
+ transport: process.env.LOG_TRANSPORT,
56
+ filePath: process.env.LOG_FILE,
57
+ },
58
+ };
59
+ try {
60
+ this.config = ConfigSchema.parse(rawConfig);
61
+ return this.config;
62
+ }
63
+ catch (error) {
64
+ if (error instanceof z.ZodError) {
65
+ const missingFields = error.errors.map((e) => e.path.join('.')).join(', ');
66
+ throw new Error(`Configuration validation failed. Missing or invalid fields: ${missingFields}. ` +
67
+ 'Please ensure all required environment variables are set: ' +
68
+ 'CUCUMBERSTUDIO_ACCESS_TOKEN, CUCUMBERSTUDIO_CLIENT_ID, CUCUMBERSTUDIO_UID');
69
+ }
70
+ throw error;
71
+ }
72
+ }
73
+ /**
74
+ * Get current configuration
75
+ */
76
+ getConfig() {
77
+ if (!this.config) {
78
+ throw new Error('Configuration not loaded. Call loadFromEnvironment() first.');
79
+ }
80
+ return this.config;
81
+ }
82
+ /**
83
+ * Validate that all required configuration is present
84
+ */
85
+ validate() {
86
+ try {
87
+ this.getConfig();
88
+ return true;
89
+ }
90
+ catch {
91
+ return false;
92
+ }
93
+ }
94
+ }
95
+ // Singleton instance
96
+ export const configManager = new ConfigManager();
97
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/config/settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export declare const SERVER_NAME = "cucumberstudio-mcp";
2
+ export declare const SERVER_VERSION = "1.1.0";
3
+ export declare const PROTOCOL_VERSION = "2025-03-26";
4
+ export declare const API_VERSION_HEADER = "application/vnd.api+json; version=1";
5
+ export declare const API_TIMEOUT = 30000;
6
+ export declare const DEFAULT_API_BASE_URL = "https://studio.cucumberstudio.com/api";
7
+ export declare const DEFAULT_PORT = 3000;
8
+ export declare const DEFAULT_HOST = "0.0.0.0";
9
+ export declare const JSON_BODY_LIMIT = "10mb";
10
+ export declare const DEFAULT_CORS_ORIGINS: string[];
11
+ export declare const MAX_PAGE_SIZE = 100;
12
+ export declare const DEFAULT_PAGE_SIZE = 20;
13
+ export declare const REDACTED_STRING = "***REDACTED***";
14
+ export declare const LOG_PREFIX = "\uD83E\uDD52 API";
15
+ export declare const DEFAULT_LOG_LEVEL = "info";
16
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,uBAAe,CAAA;AACvC,eAAO,MAAM,cAAc,UAAkB,CAAA;AAC7C,eAAO,MAAM,gBAAgB,eAAe,CAAA;AAG5C,eAAO,MAAM,kBAAkB,wCAAwC,CAAA;AACvE,eAAO,MAAM,WAAW,QAAQ,CAAA;AAChC,eAAO,MAAM,oBAAoB,0CAA0C,CAAA;AAG3E,eAAO,MAAM,YAAY,OAAO,CAAA;AAChC,eAAO,MAAM,YAAY,YAAY,CAAA;AACrC,eAAO,MAAM,eAAe,SAAS,CAAA;AACrC,eAAO,MAAM,oBAAoB,UAAwC,CAAA;AAGzE,eAAO,MAAM,aAAa,MAAM,CAAA;AAChC,eAAO,MAAM,iBAAiB,KAAK,CAAA;AAGnC,eAAO,MAAM,eAAe,mBAAmB,CAAA;AAG/C,eAAO,MAAM,UAAU,qBAAW,CAAA;AAClC,eAAO,MAAM,iBAAiB,SAAS,CAAA"}
@@ -0,0 +1,24 @@
1
+ // Import build-time generated version
2
+ import { PACKAGE_VERSION, PACKAGE_NAME } from './generated/version.js';
3
+ // Server Configuration
4
+ export const SERVER_NAME = PACKAGE_NAME;
5
+ export const SERVER_VERSION = PACKAGE_VERSION; // Build-time constant from package.json
6
+ export const PROTOCOL_VERSION = '2025-03-26'; // MCP protocol version
7
+ // API Configuration
8
+ export const API_VERSION_HEADER = 'application/vnd.api+json; version=1';
9
+ export const API_TIMEOUT = 30000; // 30 seconds
10
+ export const DEFAULT_API_BASE_URL = 'https://studio.cucumberstudio.com/api';
11
+ // Network Configuration
12
+ export const DEFAULT_PORT = 3000;
13
+ export const DEFAULT_HOST = '0.0.0.0';
14
+ export const JSON_BODY_LIMIT = '10mb';
15
+ export const DEFAULT_CORS_ORIGINS = ['localhost', '127.0.0.1', '0.0.0.0'];
16
+ // Pagination
17
+ export const MAX_PAGE_SIZE = 100;
18
+ export const DEFAULT_PAGE_SIZE = 20;
19
+ // Security
20
+ export const REDACTED_STRING = '***REDACTED***';
21
+ // Logger
22
+ export const LOG_PREFIX = '🥒 API';
23
+ export const DEFAULT_LOG_LEVEL = 'info';
24
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAEtE,uBAAuB;AACvB,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAA;AACvC,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAA,CAAC,wCAAwC;AACtF,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAA,CAAC,uBAAuB;AAEpE,oBAAoB;AACpB,MAAM,CAAC,MAAM,kBAAkB,GAAG,qCAAqC,CAAA;AACvE,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAA,CAAC,aAAa;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,uCAAuC,CAAA;AAE3E,wBAAwB;AACxB,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAA;AAChC,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAA;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAA;AACrC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;AAEzE,aAAa;AACb,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAA;AAChC,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAA;AAEnC,WAAW;AACX,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAA;AAE/C,SAAS;AACT,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAA;AAClC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAA"}
@@ -0,0 +1,3 @@
1
+ export declare const PACKAGE_VERSION = "1.1.0";
2
+ export declare const PACKAGE_NAME = "cucumberstudio-mcp";
3
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/generated/version.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,UAAU,CAAA;AACtC,eAAO,MAAM,YAAY,uBAAuB,CAAA"}
@@ -0,0 +1,5 @@
1
+ // Auto-generated version info - DO NOT EDIT
2
+ // Generated at build time from package.json
3
+ export const PACKAGE_VERSION = '1.1.0';
4
+ export const PACKAGE_NAME = 'cucumberstudio-mcp';
5
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/generated/version.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,4CAA4C;AAE5C,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAA;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAA"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/build/index.js ADDED
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { config as loadDotenv } from 'dotenv';
4
+ import { createCucumberStudioMcpServer } from './mcp-server.js';
5
+ import { StreamableHttpTransport, TransportType } from './transports/index.js';
6
+ import { StderrLogger, getLogLevel } from './utils/logger.js';
7
+ /**
8
+ * Main entry point for the Cucumber Studio MCP Server
9
+ * Supports both STDIO and HTTP transports based on environment variables
10
+ */
11
+ async function main() {
12
+ // Load .env file first to ensure environment variables are available
13
+ loadDotenv({ path: '.env' });
14
+ // Determine transport based on environment variable
15
+ const transportString = process.env.MCP_TRANSPORT?.toLowerCase() || 'stdio';
16
+ const transport = Object.values(TransportType).includes(transportString)
17
+ ? transportString
18
+ : TransportType.STDIO;
19
+ const port = parseInt(process.env.MCP_PORT || '3000', 10);
20
+ const host = process.env.MCP_HOST || '127.0.0.1';
21
+ console.error(`🎯 Starting Cucumber Studio MCP Server with ${transport} transport...`);
22
+ try {
23
+ switch (transport) {
24
+ case TransportType.HTTP:
25
+ case TransportType.STREAMABLE_HTTP: {
26
+ // HTTP/Streamable HTTP transport
27
+ const httpLogger = new StderrLogger({ level: getLogLevel(), prefix: '🌐 HTTP' });
28
+ const httpTransport = new StreamableHttpTransport(createCucumberStudioMcpServer, {
29
+ port,
30
+ host,
31
+ cors: {
32
+ origin: process.env.MCP_CORS_ORIGIN === 'false' ? false : true,
33
+ credentials: true,
34
+ },
35
+ }, httpLogger);
36
+ await httpTransport.start();
37
+ // Handle graceful shutdown for HTTP transport
38
+ const shutdown = async () => {
39
+ console.error('🛑 Shutting down HTTP transport...');
40
+ await httpTransport.close();
41
+ process.exit(0);
42
+ };
43
+ process.on('SIGINT', shutdown);
44
+ process.on('SIGTERM', shutdown);
45
+ break;
46
+ }
47
+ case TransportType.STDIO:
48
+ default: {
49
+ // STDIO transport (default)
50
+ const server = createCucumberStudioMcpServer();
51
+ const stdioTransport = new StdioServerTransport();
52
+ console.error('🚀 CucumberStudio MCP Server running on stdio');
53
+ console.error('📡 Transport: STDIO (standard input/output)');
54
+ console.error('🔄 Protocol: MCP');
55
+ await server.connect(stdioTransport);
56
+ break;
57
+ }
58
+ }
59
+ }
60
+ catch (error) {
61
+ console.error(`❌ ${transport} transport failed to start:`, error);
62
+ process.exit(1);
63
+ }
64
+ }
65
+ // Handle graceful shutdown for STDIO transport
66
+ process.on('SIGINT', () => {
67
+ console.error('🛑 Received SIGINT, shutting down gracefully...');
68
+ process.exit(0);
69
+ });
70
+ process.on('SIGTERM', () => {
71
+ console.error('🛑 Received SIGTERM, shutting down gracefully...');
72
+ process.exit(0);
73
+ });
74
+ // Run if this file is executed directly
75
+ if (import.meta.url === `file://${process.argv[1]}`) {
76
+ main().catch((error) => {
77
+ console.error('❌ Unhandled error:', error);
78
+ process.exit(1);
79
+ });
80
+ }
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC9E,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE7D;;;GAGG;AACH,KAAK,UAAU,IAAI;IACjB,qEAAqE;IACrE,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;IAE5B,oDAAoD;IACpD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,IAAI,OAAO,CAAA;IAC3E,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,eAAgC,CAAC;QACvF,CAAC,CAAE,eAAiC;QACpC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAA;IAEvB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,EAAE,EAAE,CAAC,CAAA;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,WAAW,CAAA;IAEhD,OAAO,CAAC,KAAK,CAAC,+CAA+C,SAAS,eAAe,CAAC,CAAA;IAEtF,IAAI,CAAC;QACH,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,aAAa,CAAC,IAAI,CAAC;YACxB,KAAK,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC;gBACnC,iCAAiC;gBACjC,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;gBAChF,MAAM,aAAa,GAAG,IAAI,uBAAuB,CAC/C,6BAA6B,EAC7B;oBACE,IAAI;oBACJ,IAAI;oBACJ,IAAI,EAAE;wBACJ,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;wBAC9D,WAAW,EAAE,IAAI;qBAClB;iBACF,EACD,UAAU,CACX,CAAA;gBAED,MAAM,aAAa,CAAC,KAAK,EAAE,CAAA;gBAE3B,8CAA8C;gBAC9C,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;oBAC1B,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;oBACnD,MAAM,aAAa,CAAC,KAAK,EAAE,CAAA;oBAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACjB,CAAC,CAAA;gBAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;gBAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;gBAC/B,MAAK;YACP,CAAC;YAED,KAAK,aAAa,CAAC,KAAK,CAAC;YACzB,OAAO,CAAC,CAAC,CAAC;gBACR,4BAA4B;gBAC5B,MAAM,MAAM,GAAG,6BAA6B,EAAE,CAAA;gBAC9C,MAAM,cAAc,GAAG,IAAI,oBAAoB,EAAE,CAAA;gBAEjD,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAA;gBAC9D,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAA;gBAC5D,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;gBAEjC,MAAM,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;gBACpC,MAAK;YACP,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS,6BAA6B,EAAE,KAAK,CAAC,CAAA;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAA;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAA;IACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA;AAEF,wCAAwC;AACxC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAA;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ /**
3
+ * Create and configure a new CucumberStudio MCP Server
4
+ */
5
+ export declare function createCucumberStudioMcpServer(): McpServer;
6
+ //# sourceMappingURL=mcp-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAanE;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,SAAS,CAYzD"}