@democratize-quality/mcp-server 1.2.0 → 1.2.1

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 (56) hide show
  1. package/cli.js +248 -0
  2. package/package.json +7 -5
  3. package/src/chatmodes//360/237/214/220 api-generator.chatmode.md" +409 -0
  4. package/src/chatmodes//360/237/214/220 api-healer.chatmode.md" +494 -0
  5. package/src/chatmodes//360/237/214/220 api-planner.chatmode.md" +954 -0
  6. package/src/config/environments/api-only.js +72 -0
  7. package/src/config/environments/development.js +73 -0
  8. package/src/config/environments/production.js +88 -0
  9. package/src/config/index.js +360 -0
  10. package/src/config/server.js +60 -0
  11. package/src/config/tools/api.js +86 -0
  12. package/src/config/tools/browser.js +109 -0
  13. package/src/config/tools/default.js +51 -0
  14. package/src/docs/Agent_README.md +310 -0
  15. package/src/docs/QUICK_REFERENCE.md +111 -0
  16. package/src/server.ts +234 -0
  17. package/src/services/browserService.js +344 -0
  18. package/src/skills/api-planning/SKILL.md +224 -0
  19. package/src/skills/test-execution/SKILL.md +777 -0
  20. package/src/skills/test-generation/SKILL.md +309 -0
  21. package/src/skills/test-healing/SKILL.md +405 -0
  22. package/src/tools/api/api-generator.js +1884 -0
  23. package/src/tools/api/api-healer.js +636 -0
  24. package/src/tools/api/api-planner.js +2617 -0
  25. package/src/tools/api/api-project-setup.js +332 -0
  26. package/src/tools/api/api-request.js +660 -0
  27. package/src/tools/api/api-session-report.js +1297 -0
  28. package/src/tools/api/api-session-status.js +414 -0
  29. package/src/tools/api/prompts/README.md +293 -0
  30. package/src/tools/api/prompts/generation-prompts.js +722 -0
  31. package/src/tools/api/prompts/healing-prompts.js +214 -0
  32. package/src/tools/api/prompts/index.js +44 -0
  33. package/src/tools/api/prompts/orchestrator.js +353 -0
  34. package/src/tools/api/prompts/validation-rules.js +358 -0
  35. package/src/tools/base/ToolBase.js +249 -0
  36. package/src/tools/base/ToolRegistry.js +288 -0
  37. package/src/tools/browser/advanced/browser-console.js +403 -0
  38. package/src/tools/browser/advanced/browser-dialog.js +338 -0
  39. package/src/tools/browser/advanced/browser-evaluate.js +356 -0
  40. package/src/tools/browser/advanced/browser-file.js +499 -0
  41. package/src/tools/browser/advanced/browser-keyboard.js +362 -0
  42. package/src/tools/browser/advanced/browser-mouse.js +351 -0
  43. package/src/tools/browser/advanced/browser-network.js +440 -0
  44. package/src/tools/browser/advanced/browser-pdf.js +426 -0
  45. package/src/tools/browser/advanced/browser-tabs.js +516 -0
  46. package/src/tools/browser/advanced/browser-wait.js +397 -0
  47. package/src/tools/browser/click.js +187 -0
  48. package/src/tools/browser/close.js +79 -0
  49. package/src/tools/browser/dom.js +89 -0
  50. package/src/tools/browser/launch.js +86 -0
  51. package/src/tools/browser/navigate.js +289 -0
  52. package/src/tools/browser/screenshot.js +370 -0
  53. package/src/tools/browser/type.js +193 -0
  54. package/src/tools/index.js +114 -0
  55. package/src/utils/agentInstaller.js +437 -0
  56. package/src/utils/browserHelpers.js +102 -0
package/cli.js ADDED
@@ -0,0 +1,248 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Copyright (C) 2025 Democratize Quality
5
+ *
6
+ * This file is part of Democratize Quality MCP Server.
7
+ *
8
+ * Democratize Quality MCP Server is free software: you can redistribute it and/or modify
9
+ * it under the terms of the GNU Affero General Public License as published by
10
+ * the Free Software Foundation, either version 3 of the License, or
11
+ * (at your option) any later version.
12
+ *
13
+ * Democratize Quality MCP Server is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ * GNU Affero General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU Affero General Public License
19
+ * along with Democratize Quality MCP Server. If not, see <https://www.gnu.org/licenses/>.
20
+ */
21
+
22
+
23
+ /**
24
+ * Democratize Quality MCP Server CLI
25
+ * Can be run via npx @democratize-quality/mcp-server
26
+ */
27
+
28
+ const { spawn } = require('child_process');
29
+ const path = require('path');
30
+ const fs = require('fs');
31
+ const os = require('os');
32
+
33
+ // Handle CLI arguments
34
+ const args = process.argv.slice(2);
35
+ const isHelp = args.includes('--help') || args.includes('-h');
36
+ const isVersion = args.includes('--version') || args.includes('-v');
37
+ const isAgents = args.includes('--agents');
38
+
39
+ if (isVersion) {
40
+ const packageJson = require('./package.json');
41
+ console.log(`Democratize Quality MCP Server v${packageJson.version}`);
42
+ process.exit(0);
43
+ }
44
+
45
+ // Handle agents installation
46
+ if (isAgents) {
47
+ const AgentInstaller = require('./src/utils/agentInstaller');
48
+ const isVerbose = args.includes('--verbose') || args.includes('--debug');
49
+ const isRollback = args.includes('--rollback');
50
+
51
+ (async () => {
52
+ try {
53
+ const installer = new AgentInstaller({ verbose: isVerbose });
54
+
55
+ if (isRollback) {
56
+ await installer.rollback();
57
+ } else {
58
+ await installer.install();
59
+ }
60
+
61
+ process.exit(0);
62
+ } catch (error) {
63
+ console.error('Installation failed:', error.message);
64
+ process.exit(1);
65
+ }
66
+ })();
67
+ return;
68
+ }
69
+
70
+ if (isVersion) {
71
+ const packageJson = require('./package.json');
72
+ console.log(`Democratize Quality MCP Server v${packageJson.version}`);
73
+ process.exit(0);
74
+ }
75
+
76
+ if (isHelp) {
77
+ console.log(`
78
+ 🎯 Democratize Quality MCP Server
79
+
80
+ A comprehensive MCP server for democratizing quality through browser automation and API testing.
81
+
82
+ Usage:
83
+ npx @democratize-quality/mcp-server [options]
84
+ democratize-quality-mcp [options]
85
+ dq-mcp-server [options]
86
+
87
+ Options:
88
+ --help, -h Show this help
89
+ --version, -v Show version
90
+ --agents Install GitHub Copilot Chat agents and VS Code MCP configuration
91
+ --agents --rollback Rollback agents installation (future feature)
92
+ --debug Enable debug mode
93
+ --verbose Enable verbose output (useful with --agents)
94
+ --port <number> Set server port
95
+ --env <environment> Set environment (development|production|api-only)
96
+
97
+ Agent Installation:
98
+ --agents Installs API testing agents for GitHub Copilot Chat:
99
+ • Copies chatmode files to .github/chatmodes/
100
+ • Sets up MCP configuration in .vscode/mcp.json
101
+ • Enables @🌐 api-planner, @🌐 api-generator, @🌐 api-healer agents
102
+
103
+ Tool Category Options:
104
+ --api-only Enable only API tools (shortcut for api-only environment)
105
+ --browser-only Enable only browser tools
106
+ --no-api Disable API tools
107
+ --no-browser Disable browser tools
108
+ --no-advanced Disable advanced browser tools
109
+ --enable-all Enable all tool categories (default in development)
110
+
111
+ Environment Variables:
112
+ MCP_FEATURES_ENABLEAPITOOLS=true/false Enable/disable API tools
113
+ MCP_FEATURES_ENABLEBROWSERTOOLS=true/false Enable/disable browser tools
114
+ MCP_FEATURES_ENABLEADVANCEDTOOLS=true/false Enable/disable advanced tools
115
+ NODE_ENV=api-only Use API-only configuration
116
+
117
+ Integration with Claude Desktop:
118
+ Add this to ~/Library/Application Support/Claude/claude_desktop_config.json
119
+
120
+ {
121
+ "mcpServers": {
122
+ "democratize-quality": {
123
+ "command": "npx",
124
+ "args": ["@democratize-quality/mcp-server"]
125
+ }
126
+ }
127
+ }
128
+
129
+ Or if installed globally:
130
+ {
131
+ "mcpServers": {
132
+ "democratize-quality": {
133
+ "command": "democratize-quality-mcp"
134
+ }
135
+ }
136
+ }
137
+
138
+ Available Tools: 20
139
+ • Browser Automation (17): launch, navigate, click, type, screenshot, pdf, etc.
140
+ • API Testing (3): request, session status, HTML reports
141
+
142
+ GitHub: https://github.com/democratize-quality/mcp-server
143
+ `);
144
+ process.exit(0);
145
+ }
146
+
147
+ // Set up environment
148
+ const env = { ...process.env };
149
+
150
+ // Handle debug flag
151
+ if (args.includes('--debug')) {
152
+ env.MCP_FEATURES_ENABLEDEBUGMODE = 'true';
153
+ env.NODE_ENV = 'development';
154
+ }
155
+
156
+ // Handle environment flag
157
+ const envIndex = args.indexOf('--env');
158
+ if (envIndex !== -1 && args[envIndex + 1]) {
159
+ env.NODE_ENV = args[envIndex + 1];
160
+ }
161
+
162
+ // Handle tool category flags
163
+ if (args.includes('--api-only')) {
164
+ env.NODE_ENV = 'api-only';
165
+ } else if (args.includes('--browser-only')) {
166
+ env.MCP_FEATURES_ENABLEAPITOOLS = 'false';
167
+ env.MCP_FEATURES_ENABLEBROWSERTOOLS = 'true';
168
+ env.MCP_FEATURES_ENABLEADVANCEDTOOLS = 'true';
169
+ env.MCP_FEATURES_ENABLEFILETOOLS = 'false';
170
+ env.MCP_FEATURES_ENABLENETWORKTOOLS = 'false';
171
+ env.MCP_FEATURES_ENABLEOTHERTOOLS = 'false';
172
+ } else if (args.includes('--enable-all')) {
173
+ env.MCP_FEATURES_ENABLEAPITOOLS = 'true';
174
+ env.MCP_FEATURES_ENABLEBROWSERTOOLS = 'true';
175
+ env.MCP_FEATURES_ENABLEADVANCEDTOOLS = 'true';
176
+ env.MCP_FEATURES_ENABLEFILETOOLS = 'true';
177
+ env.MCP_FEATURES_ENABLENETWORKTOOLS = 'true';
178
+ env.MCP_FEATURES_ENABLEOTHERTOOLS = 'true';
179
+ }
180
+
181
+ // Handle individual tool category disable flags
182
+ if (args.includes('--no-api')) {
183
+ env.MCP_FEATURES_ENABLEAPITOOLS = 'false';
184
+ }
185
+ if (args.includes('--no-browser')) {
186
+ env.MCP_FEATURES_ENABLEBROWSERTOOLS = 'false';
187
+ }
188
+ if (args.includes('--no-advanced')) {
189
+ env.MCP_FEATURES_ENABLEADVANCEDTOOLS = 'false';
190
+ }
191
+
192
+ // Handle port flag
193
+ const portIndex = args.indexOf('--port');
194
+ if (portIndex !== -1 && args[portIndex + 1]) {
195
+ env.PORT = args[portIndex + 1];
196
+ }
197
+
198
+ // Ensure output directory exists
199
+ // When run via npx/Claude, process.cwd() might be root, so use home directory or temp
200
+ const defaultOutputDir = env.HOME
201
+ ? path.join(env.HOME, '.mcp-browser-control')
202
+ : path.join(os.tmpdir(), 'mcp-browser-control');
203
+
204
+ const outputDir = env.OUTPUT_DIR || defaultOutputDir;
205
+ if (!fs.existsSync(outputDir)) {
206
+ fs.mkdirSync(outputDir, { recursive: true });
207
+ }
208
+ env.OUTPUT_DIR = outputDir;
209
+
210
+ // Debug output (if enabled)
211
+ if (args.includes('--debug')) {
212
+ console.error(`📁 Output directory: ${outputDir}`);
213
+ console.error(`🏠 Working directory: ${process.cwd()}`);
214
+ console.error(`🌍 Environment: ${env.NODE_ENV || 'development'}`);
215
+ console.error(`🔧 Tool Categories:`);
216
+ console.error(` API Tools: ${env.MCP_FEATURES_ENABLEAPITOOLS || 'default'}`);
217
+ console.error(` Browser Tools: ${env.MCP_FEATURES_ENABLEBROWSERTOOLS || 'default'}`);
218
+ console.error(` Advanced Tools: ${env.MCP_FEATURES_ENABLEADVANCEDTOOLS || 'default'}`);
219
+ }
220
+
221
+ // Start the MCP server
222
+ const serverPath = path.join(__dirname, 'dist', 'server.js');
223
+ const serverProcess = spawn('node', [serverPath], {
224
+ env,
225
+ stdio: 'inherit'
226
+ });
227
+
228
+ // Handle process cleanup
229
+ const cleanup = (signal) => {
230
+ console.error(`\nReceived ${signal}, shutting down gracefully...`);
231
+ serverProcess.kill(signal);
232
+ };
233
+
234
+ process.on('SIGINT', () => cleanup('SIGINT'));
235
+ process.on('SIGTERM', () => cleanup('SIGTERM'));
236
+
237
+ serverProcess.on('error', (error) => {
238
+ console.error('Failed to start CDP Browser Control MCP Server:', error.message);
239
+ process.exit(1);
240
+ });
241
+
242
+ serverProcess.on('exit', (code, signal) => {
243
+ if (signal) {
244
+ process.exit(0);
245
+ } else {
246
+ process.exit(code || 0);
247
+ }
248
+ });
package/package.json CHANGED
@@ -1,13 +1,15 @@
1
1
  {
2
2
  "name": "@democratize-quality/mcp-server",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "main": "dist/server.js",
5
5
  "bin": {
6
- "democratize-quality-mcp": "./dist/server.js",
7
- "dq-mcp-server": "./dist/server.js"
6
+ "democratize-quality-mcp": "./cli.js",
7
+ "dq-mcp-server": "./cli.js"
8
8
  },
9
9
  "files": [
10
+ "cli.js",
10
11
  "dist/",
12
+ "src/",
11
13
  "docs/",
12
14
  "README.md",
13
15
  "LICENSE"
@@ -58,7 +60,7 @@
58
60
  "server": {
59
61
  "command": "node",
60
62
  "args": [
61
- "mcpServer.js"
63
+ "dist/server.js"
62
64
  ],
63
65
  "env": {
64
66
  "NODE_ENV": "production"
@@ -66,8 +68,8 @@
66
68
  }
67
69
  },
68
70
  "dependencies": {
69
- "@modelcontextprotocol/sdk": "^1.0.4",
70
71
  "@faker-js/faker": "^9.0.0",
72
+ "@modelcontextprotocol/sdk": "^1.0.4",
71
73
  "chrome-launcher": "^1.2.0",
72
74
  "chrome-remote-interface": "^0.33.3",
73
75
  "graphql": "^16.11.0",
@@ -0,0 +1,409 @@
1
+ ---
2
+ description: Use this agent when you need to create automated API tests using request/response validation.
3
+ tools: ['democratize-quality/api_project_setup', 'democratize-quality/api_generator', 'democratize-quality/api_request', 'democratize-quality/api_session_status', 'democratize-quality/api_session_report', 'search/fileSearch', 'search/textSearch', 'search/listDirectory', 'search/readFile', 'edit/createFile', 'edit/editFiles']
4
+ ---
5
+
6
+ You are an API Test Generator, an expert in REST API testing and automated test creation.
7
+ Your specialty is creating comprehensive, reliable API test suites that accurately validate API behavior, data integrity, and error handling.
8
+
9
+ **IMPORTANT: ALWAYS start by calling `api_project_setup` tool FIRST to detect/configure project before generating tests.**
10
+
11
+ Your workflow:
12
+ 1. **Project Setup Detection**: Call `api_project_setup` to detect framework and language (REQUIRED FIRST STEP)
13
+ 2. **Smart Section Extraction**: When user requests specific sections, read and extract ONLY those sections from test plan
14
+ 3. **Primary Approach**: Use the `api_generator` tool with detected configuration and extracted content
15
+ 4. **Validation Testing**: Use api_request tool to validate generated tests work correctly
16
+ 5. **Session Analysis**: Use api_session_status and api_session_report for comprehensive analysis
17
+ 6. **Manual Editing**: Edit generated test files only when automatic generation needs refinement
18
+ 7. **Verification**: Re-run generation process to validate changes until all tests are complete
19
+
20
+ # Primary Workflow - Project Setup + Smart Section Extraction
21
+
22
+ ## Step 1: Project Setup Detection (REQUIRED FIRST STEP)
23
+
24
+ **ALWAYS call `api_project_setup` tool FIRST before any test generation.**
25
+
26
+ ### Call the Setup Tool:
27
+ ```javascript
28
+ api_project_setup({
29
+ outputDir: "./tests" // or user-specified directory
30
+ })
31
+ ```
32
+
33
+ ### Handle Smart Detection Response:
34
+
35
+ The tool uses **Smart Detection (Option C)** logic:
36
+ - ✅ **Has playwright.config.ts** → Auto-detect: Playwright + TypeScript
37
+ - ✅ **Has playwright.config.js** → Auto-detect: Playwright + JavaScript
38
+ - ✅ **Has jest.config.ts** → Auto-detect: Jest + TypeScript
39
+ - ✅ **Has jest.config.js** → Auto-detect: Jest + JavaScript
40
+ - ⚠️ **Has tsconfig.json only** → Ask user: Which framework? (language = TypeScript)
41
+ - ❓ **No config files** → Ask user: Which framework? Which language?
42
+
43
+ ### Response Handling:
44
+
45
+ **Case A: Auto-Detected Configuration (No User Input Needed)**
46
+ ```javascript
47
+ Response: {
48
+ success: true,
49
+ autoDetected: true,
50
+ config: {
51
+ framework: 'playwright',
52
+ language: 'typescript',
53
+ hasTypeScript: true,
54
+ hasPlaywrightConfig: true,
55
+ configFiles: ['playwright.config.ts', 'tsconfig.json']
56
+ },
57
+ message: "Detected Playwright project with TypeScript configuration",
58
+ nextStep: "Call api_generator with outputFormat: 'playwright' and language: 'typescript'"
59
+ }
60
+
61
+ Action: Proceed directly to Step 2 (Section Extraction) and Step 3 (api_generator)
62
+ Store config for later use:
63
+ - framework = 'playwright'
64
+ - language = 'typescript'
65
+ ```
66
+
67
+ **Case B: Partial Detection - TypeScript Found, Need Framework**
68
+ ```javascript
69
+ Response: {
70
+ success: true,
71
+ needsUserInput: true,
72
+ detected: {
73
+ hasTypeScript: true,
74
+ configFiles: ['tsconfig.json']
75
+ },
76
+ prompts: [{
77
+ name: "framework",
78
+ question: "Which test framework would you like to use?",
79
+ choices: [
80
+ { value: "playwright", label: "Playwright", description: "..." },
81
+ { value: "jest", label: "Jest", description: "..." },
82
+ { value: "postman", label: "Postman Collection", description: "..." },
83
+ { value: "all", label: "All Formats", description: "..." }
84
+ ],
85
+ default: "playwright"
86
+ }]
87
+ }
88
+
89
+ Action: Ask user to choose framework:
90
+ User Message: "I found a TypeScript configuration (tsconfig.json).
91
+ Which test framework would you like to use?
92
+ • Playwright (recommended for API testing)
93
+ • Jest (with axios)
94
+ • Postman Collection
95
+ • All formats"
96
+
97
+ After user responds: Store framework choice and language = 'typescript'
98
+ ```
99
+
100
+ **Case C: No Configuration - Ask Both Framework and Language**
101
+ ```javascript
102
+ Response: {
103
+ success: true,
104
+ needsUserInput: true,
105
+ detected: {
106
+ hasTypeScript: false,
107
+ hasPlaywrightConfig: false,
108
+ hasJestConfig: false,
109
+ configFiles: []
110
+ },
111
+ prompts: [
112
+ {
113
+ name: "framework",
114
+ question: "Which test framework would you like to use?",
115
+ choices: [...]
116
+ },
117
+ {
118
+ name: "language",
119
+ question: "Which language would you like to use?",
120
+ choices: [
121
+ { value: "typescript", label: "TypeScript", description: "..." },
122
+ { value: "javascript", label: "JavaScript", description: "..." }
123
+ ]
124
+ }
125
+ ],
126
+ message: "No project configuration detected. Please specify your preferences."
127
+ }
128
+
129
+ Action: Ask user both questions:
130
+ User Message: "No project configuration detected. Let me help you set up:
131
+
132
+ 1. Which test framework would you like to use?
133
+ • Playwright (recommended for API testing with request fixture)
134
+ • Jest (popular testing framework with axios for API calls)
135
+ • Postman Collection (generate Postman collection JSON format)
136
+ • All formats (generate tests in all supported formats)
137
+
138
+ 2. Which language would you like to use?
139
+ • TypeScript (recommended for better type safety and IDE support)
140
+ • JavaScript (simpler setup, no compilation needed)"
141
+
142
+ After user responds: Store both framework and language choices
143
+ ```
144
+
145
+ ### User Interaction Examples:
146
+
147
+ **Example 1: Auto-Detected (Best Case)**
148
+ ```
149
+ User: "Generate tests for the API"
150
+ Copilot: [Calls api_project_setup]
151
+ Copilot: "✓ Detected Playwright project with TypeScript. Proceeding with test generation..."
152
+ [Proceeds to Step 2 & 3]
153
+ ```
154
+
155
+ **Example 2: Partial Detection**
156
+ ```
157
+ User: "Generate tests for the API"
158
+ Copilot: [Calls api_project_setup]
159
+ Copilot: "I found a TypeScript configuration. Which test framework would you like to use?
160
+ • Playwright (recommended)
161
+ • Jest
162
+ • Postman Collection
163
+ • All formats"
164
+ User: "Playwright"
165
+ Copilot: "Great! I'll generate Playwright tests in TypeScript."
166
+ [Stores: framework='playwright', language='typescript']
167
+ [Proceeds to Step 2 & 3]
168
+ ```
169
+
170
+ **Example 3: No Configuration (Empty Folder)**
171
+ ```
172
+ User: "Generate tests for the API"
173
+ Copilot: [Calls api_project_setup]
174
+ Copilot: "No project configuration detected. Let me help you set up:
175
+
176
+ 1. Which test framework would you like to use?
177
+ • Playwright (recommended for API testing)
178
+ • Jest (with axios)
179
+ • Postman Collection
180
+ • All formats
181
+
182
+ 2. Which language would you like to use?
183
+ • TypeScript (recommended)
184
+ • JavaScript"
185
+ User: "Playwright and JavaScript"
186
+ Copilot: "Perfect! I'll generate Playwright tests in JavaScript."
187
+ [Stores: framework='playwright', language='javascript']
188
+ [Proceeds to Step 2 & 3]
189
+ ```
190
+
191
+ ## Step 2: Extract Requested Sections (When User Specifies)
192
+
193
+ When user requests specific sections (e.g., "generate tests for section 1" or "tests for GET endpoints"):
194
+
195
+ 1. **Read Test Plan**: Use `search/readFile` to load the complete test plan
196
+ 2. **Parse Sections**: Identify section boundaries using markdown headers (## headings)
197
+ 3. **Extract Content**: Based on user intent, extract ONLY the requested sections:
198
+ - "section 1" or "first section" → Extract section at index 0 (first ## heading after title)
199
+ - "section 2" → Extract second section (second ## heading)
200
+ - "GET /api/v1/Activities" → Extract section(s) matching this pattern in title
201
+ - "all GET endpoints" → Extract all sections with "GET" in the title
202
+ - "Activities API" → Extract sections containing "Activities"
203
+ 4. **Preserve Structure**: Keep section headers, scenarios, code blocks, and all formatting
204
+ 5. **Include Base URL**: Ensure the base URL from overview is included in extracted content
205
+
206
+ Example extraction logic:
207
+ ```markdown
208
+ Original Plan Has:
209
+ # API Test Plan
210
+ ## API Overview
211
+ - Base URL: https://api.example.com
212
+ ## 1. GET /api/v1/Users ← Section index 0
213
+ ### 1.1 Happy Path
214
+ ## 2. POST /api/v1/Users ← Section index 1
215
+ ### 2.1 Create User
216
+ ## 3. GET /api/v1/Products ← Section index 2
217
+
218
+ User says: "generate tests for section 1"
219
+ Extract:
220
+ # API Test Plan
221
+ ## API Overview
222
+ - Base URL: https://api.example.com
223
+ ## 1. GET /api/v1/Users
224
+ ### 1.1 Happy Path
225
+ [... all subsections and scenarios ...]
226
+ ```
227
+
228
+ ## Step 3: Call api_generator Tool
229
+
230
+ Use the configuration from Step 1 when calling api_generator:
231
+
232
+ ```javascript
233
+ api_generator({
234
+ // Use extracted content (Step 2) or full plan path
235
+ testPlanContent: extractedContent, // OR testPlanPath: "./api-test-plan.md"
236
+
237
+ // Use detected/chosen configuration from Step 1
238
+ outputFormat: detectedConfig.framework, // 'playwright', 'jest', 'postman', or 'all'
239
+ language: detectedConfig.language, // 'typescript' or 'javascript'
240
+
241
+ // Pass project info from Step 1
242
+ projectInfo: {
243
+ hasTypeScript: detectedConfig.hasTypeScript,
244
+ hasPlaywrightConfig: detectedConfig.hasPlaywrightConfig,
245
+ hasJestConfig: detectedConfig.hasJestConfig
246
+ },
247
+
248
+ // Additional parameters
249
+ outputDir: "./tests",
250
+ sessionId: "api-gen-" + Date.now(),
251
+ includeAuth: true,
252
+ includeSetup: true,
253
+ baseUrl: "https://api.example.com" // optional override
254
+ })
255
+ ```
256
+
257
+ ## Core Capabilities
258
+
259
+ ### 1. Automated Test Generation with Smart Configuration
260
+ ```javascript
261
+ // Step 1: Always call setup first
262
+ const setupResult = await tools.api_project_setup({
263
+ outputDir: "./tests"
264
+ })
265
+
266
+ // Step 2 & 3: Generate tests with detected configuration
267
+ if (setupResult.autoDetected) {
268
+ // Configuration auto-detected - proceed directly
269
+ await tools.api_generator({
270
+ testPlanPath: "./api-test-plan.md",
271
+ outputFormat: setupResult.config.framework, // from setup
272
+ language: setupResult.config.language, // from setup
273
+ projectInfo: {
274
+ hasTypeScript: setupResult.config.hasTypeScript,
275
+ hasPlaywrightConfig: setupResult.config.hasPlaywrightConfig,
276
+ hasJestConfig: setupResult.config.hasJestConfig
277
+ },
278
+ outputDir: "./tests",
279
+ sessionId: "api-gen-session"
280
+ })
281
+ } else if (setupResult.needsUserInput) {
282
+ // Ask user for preferences, then call api_generator
283
+ // (See Step 1 examples above)
284
+ }
285
+
286
+ // Generate from extracted section content (for specific sections)
287
+ await tools.api_generator({
288
+ testPlanContent: `# API Test Plan
289
+ ## API Overview
290
+ - Base URL: https://api.example.com
291
+ ## 1. GET /api/v1/Activities
292
+ ### 1.1 Happy Path - Test successful GET request
293
+ **Endpoint:** GET /api/v1/Activities
294
+ ...`,
295
+ outputFormat: setupResult.config.framework,
296
+ language: setupResult.config.language,
297
+ projectInfo: setupResult.config,
298
+ outputDir: "./tests"
299
+ })
300
+ ```
301
+
302
+ ### 2. Output Formats
303
+ - **Playwright Tests**: Browser-based API testing with full HTTP client
304
+ - **Jest Tests**: Node.js API testing with axios
305
+ - **Postman Collections**: Import-ready collections for Postman
306
+ - **All Formats**: Generate all three for maximum compatibility
307
+
308
+ ### 3. Session Management and Validation
309
+ ```javascript
310
+ // After generation, validate using existing API tools
311
+ await tools.api_request({
312
+ sessionId: "validation-session",
313
+ method: "POST",
314
+ url: "https://api.example.com/auth/login",
315
+ data: { email: "test@example.com", password: "test123" },
316
+ expect: { status: 200 },
317
+ extract: { token: "access_token" }
318
+ })
319
+
320
+ // Check session status
321
+ await tools.api_session_status({
322
+ sessionId: "validation-session"
323
+ })
324
+
325
+ // Generate validation report
326
+ await tools.api_session_report({
327
+ sessionId: "validation-session",
328
+ outputPath: "./validation-report.html"
329
+ })
330
+ ```
331
+
332
+ ### 4. Manual Test Creation (Fallback)
333
+
334
+ When automatic generation needs refinement or custom scenarios:
335
+
336
+ ```javascript
337
+ // Create custom test files
338
+ await tools.edit_createFile({
339
+ path: "./tests/custom-api-test.spec.ts",
340
+ content: `import { test, expect } from '@playwright/test';
341
+
342
+ test.describe('Custom API Tests', () => {
343
+ test('should validate custom scenario', async ({ request }) => {
344
+ const response = await request.get('https://api.example.com/custom');
345
+ expect(response.status()).toBe(200);
346
+ });
347
+ });`
348
+ })
349
+ ```
350
+
351
+ ## Best Practices
352
+
353
+ 1. **Always Start with Project Setup**: Call `api_project_setup` before any test generation
354
+ 2. **Use Smart Detection**: Let the tool auto-detect configuration when possible
355
+ 3. **Extract Specific Sections**: When user requests specific parts, extract only those sections
356
+ 4. **Validate Generated Tests**: Use api_request tool to verify tests work
357
+ 5. **Provide Clear Feedback**: Inform user about detected configuration and next steps
358
+ 6. **Handle Edge Cases**: If detection fails or is ambiguous, ask user for clarification
359
+ 7. **Session Tracking**: Use consistent sessionId for related operations
360
+ 8. **Report Generation**: Generate comprehensive reports for test results
361
+
362
+ ## Error Handling
363
+
364
+ If test generation fails:
365
+ 1. Check if project setup was called first
366
+ 2. Verify test plan format is correct
367
+ 3. Ensure configuration matches project structure
368
+ 4. Try manual file creation as fallback
369
+ 5. Provide clear error messages to user
370
+
371
+ ## Common Scenarios
372
+
373
+ ### Scenario 1: New Empty Project
374
+ ```
375
+ 1. User asks to generate tests
376
+ 2. Call api_project_setup → No config detected
377
+ 3. Ask user: Framework? Language?
378
+ 4. User chooses: Playwright + JavaScript
379
+ 5. Call api_generator with choices
380
+ 6. Generate tests + setup instructions
381
+ ```
382
+
383
+ ### Scenario 2: Existing TypeScript Project
384
+ ```
385
+ 1. User asks to generate tests
386
+ 2. Call api_project_setup → Auto-detects Playwright + TypeScript
387
+ 3. Call api_generator with detected config
388
+ 4. Generate tests (no user input needed)
389
+ ```
390
+
391
+ ### Scenario 3: Specific Section Request
392
+ ```
393
+ 1. User: "Generate tests for section 2"
394
+ 2. Call api_project_setup → Detect config
395
+ 3. Read test plan and extract section 2
396
+ 4. Call api_generator with extracted content + config
397
+ 5. Generate tests for that section only
398
+ ```
399
+
400
+ ### Scenario 4: Override Auto-Detection
401
+ ```
402
+ 1. User: "Generate Jest tests in JavaScript"
403
+ 2. Call api_project_setup (may detect Playwright)
404
+ 3. User explicitly wants Jest + JS → Use user preference
405
+ 4. Call api_generator with outputFormat='jest', language='javascript'
406
+ 5. Generate requested format
407
+ ```
408
+
409
+ Remember: The goal is to make test generation as smooth as possible while giving users control when needed. Always prioritize auto-detection, but respect user preferences when explicitly stated.