@democratize-quality/mcp-server 1.1.7 → 1.1.8

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
@@ -18,7 +18,7 @@ npx @democratize-quality/mcp-server@latest --agents
18
18
 
19
19
  **What this does:**
20
20
  - ✅ Installs the MCP server
21
- - ✅ Sets up 3 AI-powered testing skills
21
+ - ✅ Sets up 4 AI-powered testing skills
22
22
  - ✅ Configures VS Code integration automatically
23
23
  - ✅ Creates project folders (`.agents/skills/`, `.github/skills/`, `.claude/skills/`, `.vscode/`)
24
24
  - ✅ Works with: GitHub Copilot, Codex CLI, Claude Code, Cursor, and 10+ other tools
@@ -292,7 +292,7 @@ This MCP server provides **7 powerful tools** for comprehensive API testing:
292
292
 
293
293
  ## 🌐 Agent Skills (Universal AI Capabilities)
294
294
 
295
- When you install with `--agents`, you get 3 intelligent testing skills that work across all major AI coding tools:
295
+ When you install with `--agents`, you get 4 intelligent testing skills that work across all major AI coding tools:
296
296
 
297
297
  ### 1. 📋 /api-planning - The Strategist
298
298
 
@@ -378,7 +378,114 @@ Sample Collection includes:
378
378
  Import into Postman and start testing!
379
379
  ```
380
380
 
381
- ### 3. 🔬 /test-healing - The Fixer
381
+ ### 3. /test-execution - The Runner
382
+
383
+ **What it does:** Executes API tests directly from test plans without code
384
+
385
+ **Best for:**
386
+ - Running tests immediately after planning
387
+ - Quick API validation without writing code
388
+ - Executing specific test sections
389
+ - Generating comprehensive HTML test reports
390
+
391
+ **Example: Execute Tests from Plan**
392
+ ```
393
+ 1. After creating a test plan, type /test-execution or mention test execution
394
+
395
+ You: Execute tests from section 1 of the test plan
396
+
397
+ 2. Skill: I'll execute the tests from section 1 of your test plan using the api_request tool with a unique session ID. After execution, I'll generate an HTML report with all results.
398
+
399
+ 3. When prompted, allow the tool call "Run api_request democratize-quality (MCP Server)"
400
+
401
+ Execution Results:
402
+ ✅ GET /api/v1/Books - List all books (200 OK, 145ms)
403
+ ✅ GET /api/v1/Books/1 - Get book by ID (200 OK, 98ms)
404
+ ✅ POST /api/v1/Books - Create new book (201 Created, 203ms)
405
+ ✅ PUT /api/v1/Books/1 - Update book (200 OK, 156ms)
406
+ ✅ DELETE /api/v1/Books/1 - Delete book (204 No Content, 87ms)
407
+
408
+ Test Summary:
409
+ - Total: 5 tests
410
+ - Passed: 5 (100%)
411
+ - Failed: 0 (0%)
412
+ - Total Time: 689ms
413
+
414
+ 📊 HTML Report: ./api-test-reports/test-execution-1739597400000-report.html
415
+ ```
416
+
417
+ **Example: Execute Full Test Plan**
418
+ ```
419
+ You: /test-execution run all tests from the test plan and generate a report
420
+
421
+ Skill: Executing entire test plan...
422
+
423
+ Progress:
424
+ 📋 Section 1: Books API (5 tests)
425
+ ✅ GET /api/v1/Books
426
+ ✅ GET /api/v1/Books/{id}
427
+ ✅ POST /api/v1/Books
428
+ ✅ PUT /api/v1/Books/{id}
429
+ ✅ DELETE /api/v1/Books/{id}
430
+
431
+ 📋 Section 2: Authors API (4 tests)
432
+ ✅ GET /api/v1/Authors
433
+ ✅ GET /api/v1/Authors/{id}
434
+ ✅ POST /api/v1/Authors
435
+ ✅ DELETE /api/v1/Authors/{id}
436
+
437
+ 📋 Section 3: Users API (4 tests)
438
+ ✅ GET /api/v1/Users
439
+ ✅ POST /api/v1/Users
440
+ ❌ PUT /api/v1/Users/{id} - 404 Not Found
441
+ ✅ DELETE /api/v1/Users/{id}
442
+
443
+ Final Summary:
444
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
445
+ Total: 13 tests
446
+ Passed: 12 (92.3%)
447
+ Failed: 1 (7.7%)
448
+ Total Time: 1.8s
449
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
450
+
451
+ 📊 Comprehensive HTML Report Generated:
452
+ ./api-test-reports/full-plan-execution-report.html
453
+
454
+ Open in browser for:
455
+ - Detailed request/response logs
456
+ - Timing analysis and charts
457
+ - Visual pass/fail indicators
458
+ - Validation results
459
+ ```
460
+
461
+ **Example: Execute with CRUD Workflow**
462
+ ```
463
+ You: /test-execution run the Books CRUD tests with request chaining
464
+
465
+ Skill: Executing CRUD workflow with request chaining...
466
+
467
+ Step 1: CREATE book
468
+ ✅ POST /api/v1/Books
469
+ 📌 Extracted: bookId = 42
470
+
471
+ Step 2: READ created book
472
+ ✅ GET /api/v1/Books/42
473
+ 📌 Verified: Book exists with correct data
474
+
475
+ Step 3: UPDATE book
476
+ ✅ PUT /api/v1/Books/42
477
+ 📌 Verified: Book updated successfully
478
+
479
+ Step 4: DELETE book
480
+ ✅ DELETE /api/v1/Books/42
481
+ 📌 Verified: Book deleted (204 No Content)
482
+
483
+ Workflow Complete: All 4 operations successful! ✅
484
+
485
+ 📊 Report: ./api-test-reports/crud-workflow-report.html
486
+ ```
487
+
488
+ ### 4. 🔬 /test-healing - The Fixer
382
489
 
383
490
  **What it does:** Automatically diagnoses and repairs failing tests
384
491
 
@@ -540,13 +647,56 @@ Import the generated collection into Postman and start testing!
540
647
 
541
648
  **Result:** Professional Postman collection ready to share with your team
542
649
 
650
+ ### Scenario 3: Quick API Validation Without Code
651
+
652
+ **Goal:** Execute API tests immediately without generating code files
653
+
654
+ ```
655
+ Step 1:
656
+ /api-planning create test plan from
657
+ https://fakerestapi.azurewebsites.net/swagger/v1/swagger.json
658
+ focusing on Books and Users endpoints
659
+
660
+ Step 2:
661
+ /test-execution run all tests from the test plan and generate HTML report
662
+
663
+ Step 3:
664
+ Open the generated HTML report to see detailed results!
665
+ ```
666
+
667
+ **What you get:**
668
+ - ⚡ Instant test execution without writing code
669
+ - 📊 Interactive HTML report with:
670
+ - Pass/fail indicators for each endpoint
671
+ - Request/response details
672
+ - Response timing analysis
673
+ - Visual charts and statistics
674
+ - ✅ Quick validation of API before writing automated tests
675
+ - 🔄 Easy to re-run for regression testing
676
+
677
+ **Use cases:**
678
+ - Quick API health checks
679
+ - Validating API after deployments
680
+ - API exploration and documentation
681
+ - Testing APIs before committing to test code
682
+ - Sharing test results with non-technical stakeholders
683
+
684
+ **Alternative workflow with specific sections:**
685
+ ```
686
+ You: /test-execution execute section 1 (Books API) from the test plan
687
+
688
+ Result:
689
+ ✅ 5/5 tests passed
690
+ 📊 Report: ./api-test-reports/books-section-report.html
691
+ ```
692
+
543
693
  ---
544
694
 
545
695
  ## 🔧 Calling Individual Tools
546
696
 
547
697
  ### When to Use Individual Tools
548
698
 
549
- **Use skills (/api-planning, /test-generation, /test-healing) when:**
699
+ **Use skills (/api-planning, /test-generation, /test-execution, /test-healing) when:**
550
700
  - You want AI assistance and recommendations
551
701
  - You're working on complex, multi-step workflows
552
702
  - You need explanations and best practices
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@democratize-quality/mcp-server",
3
- "version": "1.1.7",
3
+ "version": "1.1.8",
4
4
  "main": "mcpServer.js",
5
5
  "bin": {
6
6
  "democratize-quality-mcp": "cli.js",
@@ -0,0 +1,728 @@
1
+ ````skill
2
+ ---
3
+ name: test-execution
4
+ description: Execute API tests directly from test plans using actual API requests. Run tests section-by-section or entirely, validate responses, chain requests, and generate comprehensive HTML reports. Use when user wants to run tests, execute API calls from test plan, validate endpoints, or create test execution reports.
5
+ ---
6
+
7
+ # API Test Execution Skill
8
+
9
+ Use this skill to execute API tests directly from test plans without writing code. Run comprehensive test sequences, validate responses, and generate visual HTML reports.
10
+
11
+ ## When to Use This Skill
12
+
13
+ - User has a test plan and wants to execute tests immediately
14
+ - User mentions running tests without generating code
15
+ - User needs to validate API endpoints from test plan
16
+ - User wants to execute specific sections of a test plan
17
+ - User requests test execution reports or validation results
18
+ - User needs quick API testing without setup
19
+
20
+ ## Core Workflow
21
+
22
+ ### Step 1: Load Test Plan
23
+
24
+ **Read the test plan file** that was generated by `api_planner`:
25
+
26
+ ```javascript
27
+ // User provides test plan path
28
+ const testPlanPath = "./api-test-reports/api-test-plan.md";
29
+
30
+ // Read the test plan content
31
+ const testPlanContent = await readFile(testPlanPath);
32
+
33
+ // Parse sections using markdown headers (##)
34
+ // Each section represents a testable API endpoint or feature
35
+ ```
36
+
37
+ ### Step 2: Select Section or Full Execution
38
+
39
+ **Ask user what to execute** (if not specified):
40
+
41
+ ```javascript
42
+ // Parse test plan sections
43
+ const sections = parseTestPlanSections(testPlanContent);
44
+
45
+ // User can specify:
46
+ // - "Execute section 1" or "Run tests for GET /api/v1/Books"
47
+ // - "Execute all sections" or "Run entire test plan"
48
+ // - "Run sections 1, 3, and 5"
49
+
50
+ // Section structure example:
51
+ // ## 1. GET /api/v1/Books - Retrieve all books
52
+ // - Endpoint: GET /api/v1/Books
53
+ // - Expected Status: 200
54
+ // - Sample Request: [details]
55
+ // - Expected Response: [structure]
56
+ ```
57
+
58
+ **Section Selection Examples:**
59
+ - Section number: "Execute section 1"
60
+ - Endpoint match: "Run tests for Books API"
61
+ - Multiple sections: "Execute sections 1, 2, and 4"
62
+ - Full plan: "Run all tests" or "Execute entire test plan"
63
+
64
+ ### Step 3: Parse Test Data from Section
65
+
66
+ **Extract test information** from the selected section(s):
67
+
68
+ ```javascript
69
+ // For each test section, extract:
70
+ const testData = {
71
+ method: "GET", // HTTP method
72
+ endpoint: "/api/v1/Books", // API endpoint
73
+ baseUrl: "https://api.example.com", // From test plan overview
74
+ expectedStatus: 200, // Expected HTTP status
75
+ headers: { // Authentication and headers
76
+ "Content-Type": "application/json",
77
+ "Authorization": "Bearer token-if-needed"
78
+ },
79
+ data: { // Request body (for POST/PUT/PATCH)
80
+ // Parsed from sample request in test plan
81
+ },
82
+ expectedResponse: { // Expected response structure
83
+ // Parsed from expected response section
84
+ }
85
+ }
86
+ ```
87
+
88
+ **Parsing Rules:**
89
+ - Extract HTTP method from section title or endpoint line
90
+ - Get endpoint URL from "Endpoint:" line
91
+ - Parse expected status from "Expected Status:" or "Status Code:" line
92
+ - Extract request body from "Sample Request:" or "Request Body:" section
93
+ - Get expected response from "Expected Response:" or "Response Structure:" section
94
+ - Identify authentication requirements from test plan
95
+
96
+ ### Step 4: Execute Tests with Unique Session ID
97
+
98
+ **Create a unique session** and execute tests:
99
+
100
+ ```javascript
101
+ // Generate unique session ID
102
+ const sessionId = `test-execution-${Date.now()}`;
103
+ // Or use meaningful name: `test-execution-books-api-${Date.now()}`
104
+
105
+ // Execute each test in the section
106
+ for (const test of testsInSection) {
107
+ await tools.api_request({
108
+ sessionId: sessionId,
109
+ method: test.method,
110
+ url: `${test.baseUrl}${test.endpoint}`,
111
+ headers: test.headers,
112
+ data: test.data, // Only for POST/PUT/PATCH/DELETE
113
+ expect: {
114
+ status: test.expectedStatus,
115
+ // Optional: Add response validation
116
+ body: {
117
+ // Expected fields from test plan
118
+ }
119
+ },
120
+ extract: {
121
+ // Extract data for chained requests
122
+ // Example: { "bookId": "id" } to use in next request
123
+ }
124
+ })
125
+
126
+ console.log(`✅ Test passed: ${test.method} ${test.endpoint}`);
127
+ }
128
+ ```
129
+
130
+ **Request Chaining Example:**
131
+ ```javascript
132
+ // Step 1: Create a book and extract its ID
133
+ await tools.api_request({
134
+ sessionId: sessionId,
135
+ method: "POST",
136
+ url: "https://api.example.com/api/v1/Books",
137
+ data: {
138
+ title: "Test Book",
139
+ author: "Test Author"
140
+ },
141
+ expect: { status: 201 },
142
+ extract: { "bookId": "id" } // Save book ID for next request
143
+ })
144
+
145
+ // Step 2: Use extracted bookId in next request
146
+ await tools.api_request({
147
+ sessionId: sessionId,
148
+ method: "GET",
149
+ url: "https://api.example.com/api/v1/Books/{{bookId}}", // Uses extracted ID
150
+ expect: { status: 200 }
151
+ })
152
+
153
+ // Step 3: Update the book
154
+ await tools.api_request({
155
+ sessionId: sessionId,
156
+ method: "PUT",
157
+ url: "https://api.example.com/api/v1/Books/{{bookId}}",
158
+ data: {
159
+ title: "Updated Test Book",
160
+ author: "Test Author"
161
+ },
162
+ expect: { status: 200 }
163
+ })
164
+
165
+ // Step 4: Delete the book
166
+ await tools.api_request({
167
+ sessionId: sessionId,
168
+ method: "DELETE",
169
+ url: "https://api.example.com/api/v1/Books/{{bookId}}",
170
+ expect: { status: 204 }
171
+ })
172
+ ```
173
+
174
+ ### Step 5: Generate HTML Test Report
175
+
176
+ **After all tests execute**, generate comprehensive report:
177
+
178
+ ```javascript
179
+ await tools.api_session_report({
180
+ sessionId: sessionId,
181
+ outputPath: `./api-test-reports/${sessionId}-report.html`
182
+ })
183
+
184
+ // Optionally check final status
185
+ await tools.api_session_status({
186
+ sessionId: sessionId
187
+ })
188
+ ```
189
+
190
+ ## Execution Modes
191
+
192
+ ### Mode 1: Single Section Execution
193
+ ```javascript
194
+ // User: "Execute section 1 from the test plan"
195
+
196
+ // 1. Parse test plan
197
+ // 2. Extract section 1
198
+ // 3. Execute all tests in section 1
199
+ // 4. Generate report
200
+ ```
201
+
202
+ ### Mode 2: Multiple Sections Execution
203
+ ```javascript
204
+ // User: "Run tests for sections 1, 3, and 5"
205
+
206
+ // 1. Parse test plan
207
+ // 2. Extract sections 1, 3, and 5
208
+ // 3. Execute tests sequentially
209
+ // 4. Generate single comprehensive report
210
+ ```
211
+
212
+ ### Mode 3: Full Plan Execution
213
+ ```javascript
214
+ // User: "Execute all tests from the test plan"
215
+
216
+ // 1. Parse entire test plan
217
+ // 2. Execute all sections in order
218
+ // 3. Handle dependencies between tests
219
+ // 4. Generate comprehensive report with all results
220
+ ```
221
+
222
+ ### Mode 4: Filtered Execution
223
+ ```javascript
224
+ // User: "Run only GET and POST tests"
225
+
226
+ // 1. Parse test plan
227
+ // 2. Filter tests by HTTP method
228
+ // 3. Execute filtered tests
229
+ // 4. Generate filtered report
230
+ ```
231
+
232
+ ## Test Plan Parsing
233
+
234
+ ### Expected Test Plan Structure
235
+
236
+ ```markdown
237
+ # API Test Plan
238
+
239
+ ## Overview
240
+ - Base URL: https://api.example.com
241
+ - Authentication: Bearer Token
242
+ - API Version: v1
243
+
244
+ ## 1. GET /api/v1/Books - Retrieve all books
245
+
246
+ ### Endpoint
247
+ GET /api/v1/Books
248
+
249
+ ### Expected Status
250
+ 200 OK
251
+
252
+ ### Request Headers
253
+ - Content-Type: application/json
254
+ - Authorization: Bearer {{authToken}}
255
+
256
+ ### Sample Request
257
+ No request body required
258
+
259
+ ### Expected Response
260
+ ```json
261
+ [
262
+ {
263
+ "id": 1,
264
+ "title": "Book Title",
265
+ "author": "Author Name",
266
+ "isbn": "978-3-16-148410-0"
267
+ }
268
+ ]
269
+ ```
270
+
271
+ ### Validation Criteria
272
+ - Response is an array
273
+ - Each book has id, title, author fields
274
+ - Status code is 200
275
+
276
+ ## 2. POST /api/v1/Books - Create new book
277
+
278
+ ### Endpoint
279
+ POST /api/v1/Books
280
+
281
+ ### Expected Status
282
+ 201 Created
283
+
284
+ ### Request Headers
285
+ - Content-Type: application/json
286
+ - Authorization: Bearer {{authToken}}
287
+
288
+ ### Sample Request
289
+ ```json
290
+ {
291
+ "title": "New Book Title",
292
+ "author": "Author Name",
293
+ "isbn": "978-3-16-148410-0",
294
+ "publishedDate": "2026-02-15"
295
+ }
296
+ ```
297
+
298
+ ### Expected Response
299
+ ```json
300
+ {
301
+ "id": 42,
302
+ "title": "New Book Title",
303
+ "author": "Author Name",
304
+ "isbn": "978-3-16-148410-0",
305
+ "publishedDate": "2026-02-15",
306
+ "createdAt": "2026-02-15T10:30:00Z"
307
+ }
308
+ ```
309
+ ```
310
+
311
+ ### Parsing Strategy
312
+
313
+ **1. Extract Base Configuration:**
314
+ - Find "Base URL" or "API Base URL" in overview section
315
+ - Extract authentication method and headers
316
+ - Identify API version
317
+
318
+ **2. Identify Test Sections:**
319
+ - Look for markdown headers (##) that contain HTTP methods
320
+ - Pattern: `## N. METHOD /endpoint - Description`
321
+ - Examples: `## 1. GET /api/v1/Books`, `## 2. POST /api/v1/Users`
322
+
323
+ **3. Parse Section Content:**
324
+ - Extract endpoint URL
325
+ - Parse expected status code
326
+ - Find request headers
327
+ - Extract request body from code blocks
328
+ - Parse expected response from code blocks
329
+ - Identify validation criteria
330
+
331
+ **4. Handle Code Blocks:**
332
+ ```javascript
333
+ // JSON code blocks contain sample data
334
+ // Look for: ```json [content] ```
335
+ // Parse as JSON for request/response data
336
+ ```
337
+
338
+ ## Error Handling and Validation
339
+
340
+ ### Test Failure Handling
341
+
342
+ ```javascript
343
+ try {
344
+ await tools.api_request({
345
+ sessionId: sessionId,
346
+ method: "GET",
347
+ url: "https://api.example.com/api/v1/Books",
348
+ expect: { status: 200 }
349
+ })
350
+ console.log(`✅ Test passed: GET /api/v1/Books`);
351
+ } catch (error) {
352
+ console.error(`❌ Test failed: GET /api/v1/Books`);
353
+ console.error(` Error: ${error.message}`);
354
+ // Continue with remaining tests
355
+ }
356
+ ```
357
+
358
+ ### Validation Options
359
+
360
+ **Basic Status Validation:**
361
+ ```javascript
362
+ expect: { status: 200 }
363
+ ```
364
+
365
+ **Expected vs Actual Validation:**
366
+ ```javascript
367
+ expect: {
368
+ status: 200,
369
+ body: {
370
+ "items": expectedResponseFromTestPlan,
371
+ "count": "{{any}}" // Allow any value
372
+ }
373
+ }
374
+ ```
375
+
376
+ **Flexible Validation:**
377
+ ```javascript
378
+ expect: {
379
+ status: [200, 201], // Accept either status
380
+ body: {
381
+ "id": "{{number}}", // Must be a number
382
+ "title": "{{string}}", // Must be a string
383
+ "items": "{{array}}" // Must be an array
384
+ }
385
+ }
386
+ ```
387
+
388
+ ## Session Management
389
+
390
+ ### Tracking Test Execution
391
+
392
+ ```javascript
393
+ // Check test progress
394
+ await tools.api_session_status({
395
+ sessionId: sessionId
396
+ })
397
+
398
+ // Output includes:
399
+ // - Total requests made
400
+ // - Successful requests
401
+ // - Failed requests
402
+ // - Extracted variables
403
+ // - Request history
404
+ ```
405
+
406
+ ### Session Naming Conventions
407
+
408
+ **Descriptive Session IDs:**
409
+ ```javascript
410
+ // Format: test-execution-<feature>-<timestamp>
411
+ const sessionId = `test-execution-books-api-${Date.now()}`;
412
+ const sessionId = `test-execution-full-plan-${Date.now()}`;
413
+ const sessionId = `test-execution-section-1-${Date.now()}`;
414
+
415
+ // Benefits:
416
+ // - Easy to identify in reports
417
+ // - Helps organize multiple test runs
418
+ // - Clear audit trail
419
+ ```
420
+
421
+ ## Report Generation
422
+
423
+ ### HTML Report Features
424
+
425
+ The `api_session_report` tool generates:
426
+
427
+ - **Test Summary**
428
+ - Total tests executed
429
+ - Pass/fail statistics
430
+ - Execution duration
431
+ - Success rate percentage
432
+
433
+ - **Request Details**
434
+ - Each API call made
435
+ - Request method, URL, headers, body
436
+ - Response status, headers, body
437
+ - Timing information (response time)
438
+
439
+ - **Validation Results**
440
+ - Expected vs Actual comparisons
441
+ - Detailed failure messages
442
+ - Status code validation
443
+ - Response body validation
444
+
445
+ - **Visual Elements**
446
+ - Color-coded pass/fail indicators (✅/❌)
447
+ - Expandable request/response sections
448
+ - Timing charts
449
+ - Interactive HTML with filtering
450
+
451
+ ### Report Example
452
+
453
+ ```javascript
454
+ // Generate comprehensive report
455
+ await tools.api_session_report({
456
+ sessionId: "test-execution-books-api-1739597400000",
457
+ outputPath: "./api-test-reports/books-api-execution-report.html"
458
+ })
459
+
460
+ // Report file created at:
461
+ // ./api-test-reports/books-api-execution-report.html
462
+
463
+ // Open in browser to view:
464
+ // - 15 total requests
465
+ // - 13 passed (86.7%)
466
+ // - 2 failed (13.3%)
467
+ // - Average response time: 145ms
468
+ // - Total execution time: 2.3s
469
+ ```
470
+
471
+ ## Advanced Scenarios
472
+
473
+ ### Scenario 1: Testing with Authentication
474
+
475
+ ```javascript
476
+ // Step 1: Authenticate first
477
+ await tools.api_request({
478
+ sessionId: sessionId,
479
+ method: "POST",
480
+ url: "https://api.example.com/auth/login",
481
+ data: {
482
+ email: "test@example.com",
483
+ password: "password123"
484
+ },
485
+ expect: { status: 200 },
486
+ extract: { "authToken": "access_token" }
487
+ })
488
+
489
+ // Step 2: Use token in subsequent requests
490
+ await tools.api_request({
491
+ sessionId: sessionId,
492
+ method: "GET",
493
+ url: "https://api.example.com/api/v1/protected-resource",
494
+ headers: {
495
+ "Authorization": "Bearer {{authToken}}" // Uses extracted token
496
+ },
497
+ expect: { status: 200 }
498
+ })
499
+ ```
500
+
501
+ ### Scenario 2: Testing CRUD Operations
502
+
503
+ ```javascript
504
+ const sessionId = `test-execution-crud-${Date.now()}`;
505
+
506
+ // CREATE
507
+ await tools.api_request({
508
+ sessionId: sessionId,
509
+ method: "POST",
510
+ url: "https://api.example.com/api/v1/Books",
511
+ data: { title: "Test Book", author: "Test Author" },
512
+ expect: { status: 201 },
513
+ extract: { "newBookId": "id" }
514
+ })
515
+
516
+ // READ
517
+ await tools.api_request({
518
+ sessionId: sessionId,
519
+ method: "GET",
520
+ url: "https://api.example.com/api/v1/Books/{{newBookId}}",
521
+ expect: { status: 200 }
522
+ })
523
+
524
+ // UPDATE
525
+ await tools.api_request({
526
+ sessionId: sessionId,
527
+ method: "PUT",
528
+ url: "https://api.example.com/api/v1/Books/{{newBookId}}",
529
+ data: { title: "Updated Book", author: "Test Author" },
530
+ expect: { status: 200 }
531
+ })
532
+
533
+ // DELETE
534
+ await tools.api_request({
535
+ sessionId: sessionId,
536
+ method: "DELETE",
537
+ url: "https://api.example.com/api/v1/Books/{{newBookId}}",
538
+ expect: { status: 204 }
539
+ })
540
+
541
+ // Generate report showing complete CRUD workflow
542
+ await tools.api_session_report({
543
+ sessionId: sessionId,
544
+ outputPath: "./api-test-reports/crud-test-report.html"
545
+ })
546
+ ```
547
+
548
+ ### Scenario 3: Parallel Execution (Multiple Sessions)
549
+
550
+ ```javascript
551
+ // Execute different sections in parallel
552
+ const session1 = `test-execution-books-${Date.now()}`;
553
+ const session2 = `test-execution-users-${Date.now()}`;
554
+ const session3 = `test-execution-orders-${Date.now()}`;
555
+
556
+ // Run tests for different sections independently
557
+ // Note: These should be awaited sequentially or use Promise.all if truly parallel
558
+
559
+ // Generate individual reports
560
+ await tools.api_session_report({
561
+ sessionId: session1,
562
+ outputPath: "./api-test-reports/books-report.html"
563
+ })
564
+
565
+ await tools.api_session_report({
566
+ sessionId: session2,
567
+ outputPath: "./api-test-reports/users-report.html"
568
+ })
569
+
570
+ await tools.api_session_report({
571
+ sessionId: session3,
572
+ outputPath: "./api-test-reports/orders-report.html"
573
+ })
574
+ ```
575
+
576
+ ## Best Practices
577
+
578
+ ### DO:
579
+ - Use unique, descriptive session IDs for each test run
580
+ - Parse test plan systematically (base URL, auth, sections)
581
+ - Execute tests in logical order (auth first, dependencies second)
582
+ - Use request chaining for dependent tests (extract/reuse IDs)
583
+ - Generate comprehensive HTML reports after execution
584
+ - Handle test failures gracefully (continue with remaining tests)
585
+ - Provide clear progress updates to user during execution
586
+ - Validate responses using expect parameters
587
+ - Use consistent session naming conventions
588
+
589
+ ### DON'T:
590
+ - Don't reuse session IDs across different test runs
591
+ - Don't skip authentication if test plan requires it
592
+ - Don't execute dependent tests out of order
593
+ - Don't forget to generate the final HTML report
594
+ - Don't stop execution on first failure (unless critical)
595
+ - Don't ignore validation criteria from test plan
596
+ - Don't execute tests without parsing test plan structure first
597
+ - Don't forget to extract base URL from test plan
598
+
599
+ ## Expected Output
600
+
601
+ After successful test execution, provide user with:
602
+
603
+ 1. **Execution Summary:**
604
+ ```
605
+ Test Execution Summary:
606
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
607
+ Session ID: test-execution-books-api-1739597400000
608
+ Total Tests: 15
609
+ Passed: 13 (86.7%)
610
+ Failed: 2 (13.3%)
611
+ Execution Time: 2.3s
612
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
613
+
614
+ Test Results:
615
+ ✅ GET /api/v1/Books - List all books
616
+ ✅ GET /api/v1/Books/{id} - Get book by ID
617
+ ✅ POST /api/v1/Books - Create new book
618
+ ❌ PUT /api/v1/Books/{id} - Update book (404 Not Found)
619
+ ✅ DELETE /api/v1/Books/{id} - Delete book
620
+ ...
621
+
622
+ 📊 HTML Report Generated:
623
+ ./api-test-reports/books-api-execution-report.html
624
+
625
+ Open this file in a browser for detailed analysis!
626
+ ```
627
+
628
+ 2. **Failed Test Details:**
629
+ ```
630
+ Failed Tests:
631
+
632
+ ❌ PUT /api/v1/Books/{id}
633
+ Expected: 200 OK
634
+ Actual: 404 Not Found
635
+ Response: {"error": "Book not found"}
636
+
637
+ Possible causes:
638
+ - Book ID may have been deleted
639
+ - Endpoint URL may have changed
640
+ - Authentication may have expired
641
+ ```
642
+
643
+ 3. **Next Steps:**
644
+ ```
645
+ Next Steps:
646
+ 1. Open HTML report for detailed analysis
647
+ 2. Review failed tests and fix issues
648
+ 3. Re-run failed tests or use /test-healing skill
649
+ 4. Update test plan if API has changed
650
+ ```
651
+
652
+ ## Integration with Other Skills
653
+
654
+ ### After API Planning → Execute Tests
655
+ ```
656
+ 1. User: /api-planning create test plan for API
657
+ → Test plan generated
658
+
659
+ 2. User: /test-execution run tests from section 1
660
+ → Tests executed, report generated
661
+ ```
662
+
663
+ ### Execute → Heal → Re-execute
664
+ ```
665
+ 1. User: /test-execution run all tests
666
+ → Some tests fail
667
+
668
+ 2. User: /test-healing fix failed tests
669
+ → Tests updated with fixes
670
+
671
+ 3. User: /test-execution re-run failed tests
672
+ → All tests pass now
673
+ ```
674
+
675
+ ### Execute → Generate Code → Execute Again
676
+ ```
677
+ 1. User: /test-execution run quick validation
678
+ → Quick API validation completed
679
+
680
+ 2. User: /test-generation create Playwright tests
681
+ → Executable test code generated
682
+
683
+ 3. User: Run generated Playwright tests
684
+ → Automated test suite running
685
+ ```
686
+
687
+ ## Troubleshooting
688
+
689
+ ### Issue: Base URL not found in test plan
690
+ - Check test plan overview section
691
+ - Ask user to provide base URL
692
+ - Look for API URL in first few sections
693
+
694
+ ### Issue: Cannot parse test sections
695
+ - Verify test plan uses markdown headers (##)
696
+ - Check section titles include HTTP method
697
+ - Ensure sections have required fields (endpoint, status)
698
+
699
+ ### Issue: Authentication failures (401/403)
700
+ - Extract auth requirements from test plan
701
+ - Execute auth endpoint first
702
+ - Use extracted tokens in subsequent requests
703
+
704
+ ### Issue: Request chaining not working
705
+ - Verify extract parameter is used correctly
706
+ - Check variable naming matches between requests
707
+ - Ensure extracted data exists in response
708
+
709
+ ### Issue: Tests fail with timeouts
710
+ - Check API availability
711
+ - Verify network connectivity
712
+ - Consider increasing timeout in api_request
713
+
714
+ ### Issue: Report not generated
715
+ - Ensure session ID is correct
716
+ - Verify api_session_report is called after all tests
717
+ - Check output path is valid
718
+
719
+ ## Additional Tools Available
720
+
721
+ Use these tools as needed:
722
+ - `api_request` - Execute individual API requests
723
+ - `api_session_status` - Check test execution progress
724
+ - `api_session_report` - Generate HTML test reports
725
+ - `search/readFile` - Read test plan files
726
+ - `search/listDirectory` - Find test plan files
727
+
728
+ ````
@@ -32,10 +32,13 @@ class AgentInstaller {
32
32
  // Step 1: Install Agent Skills
33
33
  await this.installSkills();
34
34
 
35
- // Step 2: Setup MCP configuration
35
+ // Step 2: Install Chat Modes
36
+ await this.installChatModes();
37
+
38
+ // Step 3: Setup MCP configuration
36
39
  await this.setupMCPConfiguration();
37
40
 
38
- // Step 3: Show completion message
41
+ // Step 4: Show completion message
39
42
  this.showCompletionMessage();
40
43
 
41
44
  } catch (error) {
@@ -180,6 +183,62 @@ class AgentInstaller {
180
183
  console.log('');
181
184
  }
182
185
 
186
+ /**
187
+ * Install Chat Modes to .github/agents/
188
+ */
189
+ async installChatModes() {
190
+ console.log('💬 Installing Chat Modes...');
191
+
192
+ const sourceChatModesDir = path.join(this.sourceDir, 'src', 'chatmodes');
193
+ const targetAgentsDir = path.join(this.targetDir, '.github', 'agents');
194
+
195
+ // Create .github/agents directory
196
+ try {
197
+ await mkdir(targetAgentsDir, { recursive: true });
198
+ } catch (error) {
199
+ if (error.code !== 'EEXIST') {
200
+ throw new Error(`Failed to create .github/agents directory: ${error.message}`);
201
+ }
202
+ }
203
+
204
+ // Get list of chatmode files
205
+ let chatModeFiles;
206
+ try {
207
+ const allItems = await readdir(sourceChatModesDir);
208
+ // Filter for .chatmode.md files only
209
+ chatModeFiles = allItems.filter(item => item.endsWith('.chatmode.md'));
210
+ } catch (error) {
211
+ if (error.code === 'ENOENT') {
212
+ console.log(' ⚠️ No chatmodes directory found, skipping...');
213
+ console.log('');
214
+ return;
215
+ }
216
+ throw new Error(`Failed to read source chatmodes directory: ${error.message}`);
217
+ }
218
+
219
+ if (chatModeFiles.length === 0) {
220
+ console.log(' ⚠️ No chatmode files found to install');
221
+ console.log('');
222
+ return;
223
+ }
224
+
225
+ // Copy each chatmode file
226
+ for (const chatModeFile of chatModeFiles) {
227
+ const sourcePath = path.join(sourceChatModesDir, chatModeFile);
228
+ const targetPath = path.join(targetAgentsDir, chatModeFile);
229
+
230
+ try {
231
+ await copyFile(sourcePath, targetPath);
232
+ console.log(` ✅ ${chatModeFile}`);
233
+ } catch (error) {
234
+ console.error(` ❌ Failed to copy ${chatModeFile}: ${error.message}`);
235
+ throw error;
236
+ }
237
+ }
238
+
239
+ console.log('');
240
+ }
241
+
183
242
  /**
184
243
  * Setup MCP configuration in .vscode/mcp.json
185
244
  */
@@ -316,10 +375,16 @@ class AgentInstaller {
316
375
  console.log('📁 Agent Skills installed to:');
317
376
  console.log(' → .agents/skills/api-planning/');
318
377
  console.log(' → .agents/skills/test-generation/');
378
+ console.log(' → .agents/skills/test-execution/');
319
379
  console.log(' → .agents/skills/test-healing/');
320
380
  console.log(' → .github/skills/ (symlink for GitHub Copilot)');
321
381
  console.log(' → .claude/skills/ (symlink for Claude Code)\n');
322
382
 
383
+ console.log('💬 Chat Modes installed to:');
384
+ console.log(' → .github/agents/🌐 api-planner.chatmode.md');
385
+ console.log(' → .github/agents/🌐 api-generator.chatmode.md');
386
+ console.log(' → .github/agents/🌐 api-healer.chatmode.md\n');
387
+
323
388
  console.log('⚙️ MCP configuration updated:');
324
389
  console.log(' → .vscode/mcp.json (democratize-quality server added/updated)\n');
325
390
 
@@ -328,6 +393,7 @@ class AgentInstaller {
328
393
  console.log(' 2. Use skills in your AI coding assistant:');
329
394
  console.log(' • /api-planning - Create comprehensive API test plans');
330
395
  console.log(' • /test-generation - Generate executable API tests');
396
+ console.log(' • /test-execution - Execute API tests from test plans');
331
397
  console.log(' • /test-healing - Debug and fix failing API tests');
332
398
  console.log(' 3. Skills work automatically when you mention relevant tasks!');
333
399
  console.log(' 4. Example: "Help me create an API test plan for my REST API"\n');
@@ -336,7 +402,6 @@ class AgentInstaller {
336
402
  console.log(' • GitHub Copilot (VS Code, CLI)');
337
403
  console.log(' • Codex CLI (OpenAI)');
338
404
  console.log(' • Claude Code');
339
- console.log(' • Cursor, Roo Code, and 10+ other tools\n');
340
405
 
341
406
  console.log('📚 For more information, visit: https://github.com/uppadhyayraj/democratize-quality-mcp-server');
342
407
  }