wopee-mcp 1.11.1 → 1.13.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.
package/README.md CHANGED
@@ -70,6 +70,59 @@ If you're unsure about your proxy settings, check your VS Code settings (`settin
70
70
  - `http://10.x.x.x:8080`
71
71
  - `http://username:password@proxy.company.com:8080` (if authentication is required)
72
72
 
73
+ ### TLS / Certificate Issues
74
+
75
+ **This is not required for MCP to work.** If you see HTTPS or certificate-related errors, that indicates a TLS or certificate trust issue in your environment.
76
+
77
+ If the server fails with errors such as **`UNABLE_TO_VERIFY_LEAF_SIGNATURE`** or **`certificate has expired`**, it may be due to:
78
+
79
+ - **Self-signed certificates** (e.g. when `WOPEE_API_URL` points to an internal or dev server)
80
+ - **Corporate proxy / SSL inspection** (traffic re-encrypted with a corporate CA your machine doesn’t trust)
81
+ - **Missing CA certificates** in Node’s trust store
82
+
83
+ #### Preferred solutions (secure)
84
+
85
+ 1. **Use a valid TLS certificate** – e.g. Let’s Encrypt, or an internal CA – and ensure the **full certificate chain** is served.
86
+ 2. **Install the corporate or internal CA** so Node trusts it:
87
+
88
+ Example:
89
+
90
+ ```bash
91
+ export NODE_EXTRA_CA_CERTS=/etc/ssl/certs/internal-ca.pem
92
+ ```
93
+
94
+ In MCP config `env`:
95
+
96
+ ```json
97
+ "env": {
98
+ "WOPEE_PROJECT_UUID": "your-project-uuid-here",
99
+ "WOPEE_API_KEY": "your-api-key-here",
100
+ "NODE_EXTRA_CA_CERTS": "/path/to/ca.pem"
101
+ }
102
+ ```
103
+
104
+ #### Insecure workaround (not recommended)
105
+
106
+ For **local debugging only**, you may disable TLS verification in Node. This should **never** be used in production, as it disables HTTPS security and exposes traffic to interception.
107
+
108
+ ```bash
109
+ export NODE_TLS_REJECT_UNAUTHORIZED=0
110
+ ```
111
+
112
+ Or in MCP config `env`:
113
+
114
+ ```json
115
+ "env": {
116
+ "WOPEE_PROJECT_UUID": "your-project-uuid-here",
117
+ "WOPEE_API_KEY": "your-api-key-here",
118
+ "NODE_TLS_REJECT_UNAUTHORIZED": "0"
119
+ }
120
+ ```
121
+
122
+ Treat this as a **debug-only escape hatch**, not a normal setup step.
123
+
124
+ **Note:** Some users have reported setting `PYTHONHTTPSVERIFY=0` as well. This MCP server does not use Python; that variable has no effect on it. It would only apply if you run a Python-based MCP host or other tooling that also performs HTTPS in the same environment—outside the scope of this server.
125
+
73
126
  ## Getting Started
74
127
 
75
128
  Most tools in this MCP server require a `suiteUuid` to operate. You have two options to get started:
@@ -86,13 +139,21 @@ This will return a list of all analysis suites with their UUIDs, which you can t
86
139
 
87
140
  ### Option 2: Create a New Suite
88
141
 
89
- If you don't have any suites yet, create a fresh analysis suite:
142
+ If you don't have any suites yet, you have two options:
143
+
144
+ **Automatic Analysis:** Create and dispatch a full analysis/crawling suite:
90
145
 
91
146
  ```
92
147
  Use the wopee_dispatch_analysis tool to create and dispatch a new analysis/crawling suite.
93
148
  ```
94
149
 
95
- This will create a new suite and return its UUID, which you can use for subsequent operations.
150
+ **Blank Suite:** Create an empty suite for manual configuration:
151
+
152
+ ```
153
+ Use the wopee_create_blank_suite tool to create a blank analysis suite.
154
+ ```
155
+
156
+ Both options will return a suite UUID, which you can use for subsequent operations.
96
157
 
97
158
  ## Available Tools
98
159
 
@@ -122,6 +183,18 @@ Creates and dispatches a new analysis/crawling suite for your project. Use this
122
183
  Dispatch a new analysis suite
123
184
  ```
124
185
 
186
+ #### `wopee_create_blank_suite`
187
+
188
+ Creates a blank analysis suite for your project. Use this when you want to manually configure and populate a suite rather than having it automatically analyzed.
189
+
190
+ - **Returns:** The created suite information including its UUID
191
+
192
+ **Example Usage:**
193
+
194
+ ```
195
+ Create a blank analysis suite for my project
196
+ ```
197
+
125
198
  ### Generation Tools
126
199
 
127
200
  These tools generate various artifacts for a specific suite. All require a `suiteUuid` and `type` to generate.
@@ -3,8 +3,10 @@ import { wopeeUpdateArtifact } from "./wopee_update_artifact/index.js";
3
3
  import { wopeeGenerateArtifact } from "./wopee_generate_artifact/index.js";
4
4
  import { wopeeDispatchAgent } from "./wopee_dispatch_agent/index.js";
5
5
  import { wopeeDispatchAnalysis } from "./wopee_dispatch_analysis/index.js";
6
+ import { wopeeCreateBlankSuite } from "./wopee_create_blank_suite/index.js";
6
7
  import { wopeeFetchAnalysisSuites } from "./wopee_fetch_analysis_suites/index.js";
7
8
  export const TOOLS = [
9
+ wopeeCreateBlankSuite,
8
10
  wopeeFetchAnalysisSuites,
9
11
  wopeeDispatchAnalysis,
10
12
  wopeeDispatchAgent,
@@ -155,3 +155,41 @@ export const GenerateReusableTestCaseSteps = `
155
155
  generateReusableTestCaseSteps(input: $input)
156
156
  }
157
157
  `;
158
+ export const CreateBlankAnalysisSuite = `
159
+ mutation CreateBlankAnalysisSuite($projectUuid: ID!) {
160
+ createBlankAnalysisSuite(projectUuid: $projectUuid) {
161
+ uuid
162
+ name
163
+ suiteType
164
+ executionStatus
165
+ createdAt
166
+ updatedAt
167
+ analysisIdentifier
168
+ suiteRunningStatus
169
+ generatedAnalysisDataState {
170
+ suiteUuid
171
+ appContext {
172
+ isGenerated
173
+ status
174
+ }
175
+ generalUserStories {
176
+ isGenerated
177
+ status
178
+ }
179
+ userStories {
180
+ isGenerated
181
+ status
182
+ }
183
+ testCases {
184
+ isGenerated
185
+ status
186
+ }
187
+ reusableTestCases {
188
+ isGenerated
189
+ status
190
+ }
191
+ testCaseSteps
192
+ }
193
+ }
194
+ }
195
+ `;
@@ -1,5 +1,6 @@
1
1
  export var ToolName;
2
2
  (function (ToolName) {
3
+ ToolName["WOPEE_CREATE_BLANK_SUITE"] = "wopee_create_blank_suite";
3
4
  ToolName["WOPEE_FETCH_ANALYSIS_SUITES"] = "wopee_fetch_analysis_suites";
4
5
  ToolName["WOPEE_DISPATCH_ANALYSIS"] = "wopee_dispatch_analysis";
5
6
  ToolName["WOPEE_DISPATCH_AGENT"] = "wopee_dispatch_agent";
@@ -0,0 +1,43 @@
1
+ import { getConfig } from "../../utils/getConfig.js";
2
+ import { requestClient } from "../../utils/requestClient.js";
3
+ import { ToolName } from "../shared/types.js";
4
+ import { CreateBlankAnalysisSuite } from "../shared/gql-queries.js";
5
+ export const wopeeCreateBlankSuite = {
6
+ name: ToolName.WOPEE_CREATE_BLANK_SUITE,
7
+ config: {
8
+ title: "Create blank analysis suite",
9
+ description: "Create a blank analysis suite for a project",
10
+ },
11
+ handler: async () => {
12
+ const { WOPEE_PROJECT_UUID } = getConfig();
13
+ if (!WOPEE_PROJECT_UUID)
14
+ return {
15
+ content: [
16
+ {
17
+ type: "text",
18
+ text: "WOPEE_PROJECT_UUID is not set",
19
+ },
20
+ ],
21
+ };
22
+ const result = await requestClient(CreateBlankAnalysisSuite, {
23
+ projectUuid: WOPEE_PROJECT_UUID,
24
+ });
25
+ if (!result || !result.createBlankAnalysisSuite)
26
+ return {
27
+ content: [
28
+ {
29
+ type: "text",
30
+ text: "Failed to fetch analysis suites",
31
+ },
32
+ ],
33
+ };
34
+ return {
35
+ content: [
36
+ {
37
+ type: "text",
38
+ text: JSON.stringify(result.createBlankAnalysisSuite, null, 2),
39
+ },
40
+ ],
41
+ };
42
+ },
43
+ };
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "bin": {
5
5
  "wopee-mcp": "./build/index.js"
6
6
  },
7
- "version": "1.11.1",
7
+ "version": "1.13.0",
8
8
  "description": "Wopee.io MCP server",
9
9
  "main": "./build/index.js",
10
10
  "scripts": {