@mithung/vunet-mcp-server 2.0.6 → 2.0.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/BUILD_GUIDE.md ADDED
@@ -0,0 +1,293 @@
1
+ # Build and Publishing Guide
2
+
3
+ Quick reference for building and publishing the VuNet MCP Server package.
4
+
5
+ ---
6
+
7
+ ## 📦 Build Scripts
8
+
9
+ ### Validation
10
+
11
+ ```bash
12
+ # Validate JavaScript syntax
13
+ npm run validate
14
+ ```
15
+
16
+ Checks `index.js` and `cli.js` for syntax errors without executing them.
17
+
18
+ ### Build
19
+
20
+ ```bash
21
+ # Build and validate package
22
+ npm run build
23
+ ```
24
+
25
+ Runs validation and shows what would be included in the package (dry-run).
26
+
27
+ ### Testing
28
+
29
+ ```bash
30
+ # Run tests
31
+ npm test
32
+ ```
33
+
34
+ Currently returns success (no tests implemented yet).
35
+
36
+ ---
37
+
38
+ ## 🚀 Publishing Workflow
39
+
40
+ ### 1. Test Publishing (Dry Run)
41
+
42
+ ```bash
43
+ npm run publish:dry
44
+ ```
45
+
46
+ Shows exactly what would be published to npm **without actually publishing**.
47
+
48
+ **Output:**
49
+ - Package contents
50
+ - File sizes
51
+ - Package metadata
52
+ - Total package size
53
+
54
+ ### 2. Publish to npm
55
+
56
+ ```bash
57
+ npm run publish:prod
58
+ ```
59
+
60
+ Publishes the package to npm with public access.
61
+
62
+ **Prerequisites:**
63
+ - Must be logged in to npm: `npm login`
64
+ - Must have access to `@mithung` scope
65
+ - All validation must pass
66
+
67
+ ---
68
+
69
+ ## 🔢 Version Management
70
+
71
+ ### Semantic Versioning
72
+
73
+ The project follows [Semantic Versioning](https://semver.org/):
74
+ - **MAJOR** version: Breaking changes
75
+ - **MINOR** version: New features (backward compatible)
76
+ - **PATCH** version: Bug fixes
77
+
78
+ ### Version Bump Commands
79
+
80
+ ```bash
81
+ # Patch release (2.0.7 → 2.0.8)
82
+ npm run version:patch
83
+
84
+ # Minor release (2.0.7 → 2.1.0)
85
+ npm run version:minor
86
+
87
+ # Major release (2.0.7 → 3.0.0)
88
+ npm run version:major
89
+ ```
90
+
91
+ Each command:
92
+ 1. Updates `package.json` version
93
+ 2. Creates a git commit: "Release v2.0.8"
94
+ 3. Creates a git tag: `v2.0.8`
95
+
96
+ **After version bump:**
97
+ ```bash
98
+ git push && git push --tags
99
+ npm run publish:prod
100
+ ```
101
+
102
+ ---
103
+
104
+ ## 📋 Pre-Publish Checklist
105
+
106
+ Before publishing a new version:
107
+
108
+ - [ ] Update [CHANGELOG.md](CHANGELOG.md) with changes
109
+ - [ ] Run `npm run validate` - Must pass
110
+ - [ ] Run `npm run build` - Review files
111
+ - [ ] Run `npm run publish:dry` - Verify contents
112
+ - [ ] Test locally: `npm link` in project directory
113
+ - [ ] Verify version number in [package.json](package.json)
114
+ - [ ] Commit all changes: `git commit -am "Release v2.0.X"`
115
+ - [ ] Create git tag: `npm run version:patch/minor/major`
116
+ - [ ] Push to GitHub: `git push && git push --tags`
117
+ - [ ] Publish: `npm run publish:prod`
118
+
119
+ ---
120
+
121
+ ## 📦 Package Contents
122
+
123
+ Files included in the npm package (defined in `package.json` → `files` array):
124
+
125
+ ```
126
+ index.js # Main MCP server implementation
127
+ cli.js # CLI entry point
128
+ README.md # Full documentation
129
+ SETUP.md # Setup guide
130
+ QUICKSTART.md # Quick start guide
131
+ DATA_MODELS.md # Data models reference
132
+ USE_CASE_RCA.md # Root cause analysis case study
133
+ CHANGELOG.md # Version history
134
+ LICENSE # MIT License
135
+ config.example.json # Configuration template
136
+ mcp-config.example.json # MCP configuration template
137
+ ```
138
+
139
+ **Everything else is excluded** (tests, development files, etc.)
140
+
141
+ ---
142
+
143
+ ## 🔐 npm Authentication
144
+
145
+ ### Login to npm
146
+
147
+ ```bash
148
+ npm login
149
+ ```
150
+
151
+ Enter your npm credentials.
152
+
153
+ ### Verify Login
154
+
155
+ ```bash
156
+ npm whoami
157
+ ```
158
+
159
+ Should display your npm username.
160
+
161
+ ### Scope Access
162
+
163
+ The package is published under `@mithung` scope. Ensure you have publishing rights:
164
+
165
+ ```bash
166
+ npm access ls-collaborators @mithung/vunet-mcp-server
167
+ ```
168
+
169
+ ---
170
+
171
+ ## 🧪 Local Testing
172
+
173
+ ### Test Installation (Global)
174
+
175
+ ```bash
176
+ # In project directory
177
+ npm link
178
+
179
+ # Test the CLI
180
+ vunet-mcp
181
+ @mithung/vunet-mcp-server
182
+
183
+ # Unlink when done
184
+ npm unlink -g @mithung/vunet-mcp-server
185
+ ```
186
+
187
+ ### Test Installation (Local)
188
+
189
+ ```bash
190
+ # In a test directory
191
+ mkdir test-project
192
+ cd test-project
193
+ npm init -y
194
+ npm install /path/to/API_MCP
195
+
196
+ # Or link directly
197
+ npm link @mithung/vunet-mcp-server
198
+ ```
199
+
200
+ ---
201
+
202
+ ## 🐛 Troubleshooting
203
+
204
+ ### "npm ERR! need auth"
205
+
206
+ You're not logged in. Run `npm login`.
207
+
208
+ ### "npm ERR! 403 Forbidden"
209
+
210
+ You don't have publish rights to the `@mithung` scope. Contact the scope owner.
211
+
212
+ ### "npm ERR! You do not have permission to publish"
213
+
214
+ The package may already exist with this version. Bump the version:
215
+
216
+ ```bash
217
+ npm run version:patch
218
+ npm run publish:prod
219
+ ```
220
+
221
+ ### Package includes files it shouldn't
222
+
223
+ Check the `files` array in [package.json](package.json). Files listed there are included. Use `.npmignore` for exceptions.
224
+
225
+ ### Validation fails
226
+
227
+ ```bash
228
+ npm run validate
229
+ ```
230
+
231
+ This will show syntax errors in `index.js` or `cli.js`.
232
+
233
+ ---
234
+
235
+ ## 📊 Package Statistics
236
+
237
+ After publishing, view package stats:
238
+
239
+ - **npm page:** https://www.npmjs.com/package/@mithung/vunet-mcp-server
240
+ - **Download stats:** https://npm-stat.com/charts.html?package=@mithung/vunet-mcp-server
241
+ - **Bundle size:** https://bundlephobia.com/package/@mithung/vunet-mcp-server
242
+
243
+ ---
244
+
245
+ ## 🔄 Release Workflow Example
246
+
247
+ Complete workflow for releasing v2.0.8:
248
+
249
+ ```bash
250
+ # 1. Make your changes
251
+ git add .
252
+ git commit -m "Add new features"
253
+
254
+ # 2. Update CHANGELOG.md
255
+ code CHANGELOG.md
256
+ # Add [2.0.8] section with changes
257
+
258
+ # 3. Validate
259
+ npm run validate
260
+
261
+ # 4. Test build
262
+ npm run build
263
+
264
+ # 5. Dry-run publish
265
+ npm run publish:dry
266
+
267
+ # 6. Bump version (creates commit + tag)
268
+ npm run version:patch
269
+
270
+ # 7. Push to GitHub
271
+ git push && git push --tags
272
+
273
+ # 8. Publish to npm
274
+ npm run publish:prod
275
+
276
+ # 9. Verify
277
+ npm view @mithung/vunet-mcp-server version
278
+ # Should show 2.0.8
279
+ ```
280
+
281
+ ---
282
+
283
+ ## 📚 Related Documentation
284
+
285
+ - [CHANGELOG.md](CHANGELOG.md) - Version history
286
+ - [PUBLISHING.md](PUBLISHING.md) - Detailed publishing guide
287
+ - [README.md](README.md) - Package documentation
288
+ - [npm docs](https://docs.npmjs.com/cli/v10/commands/npm-publish) - npm publish command
289
+
290
+ ---
291
+
292
+ **Last Updated:** February 16, 2026
293
+ **Current Version:** 2.0.7
package/CHANGELOG.md CHANGED
@@ -5,6 +5,54 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.0.8] - 2026-02-16
9
+
10
+ ### Fixed
11
+ - **CRITICAL FIX**: Corrected authentication endpoint to use `/api/login/` instead of `/vuSmartMaps/api/1/bu/{buId}/auth/users/login/`
12
+ - Fixed login request body to include `bu_id` parameter
13
+ - Added `Content-Type: application/json` header to login request
14
+ - Corrected logout endpoint to use `/api/logout/`
15
+ - Resolves 403 Forbidden errors during authentication
16
+
17
+ ### Removed
18
+ - Cleaned up workspace: Removed temporary JSON files (test-login.json, trace-data.json, k8s-*.json, etc.)
19
+
20
+ ## [2.0.7] - 2026-02-16
21
+
22
+ ### Added
23
+ - **NEW**: Comprehensive RCA use case documentation (USE_CASE_RCA.md)
24
+ - Real-world VuBank troubleshooting walkthrough
25
+ - Complete root cause analysis methodology
26
+ - Query examples for trace analysis
27
+ - Kubernetes metrics correlation
28
+ - 25-minute RCA timeline demonstration
29
+ - Enhanced DATA_MODELS.md with practical examples
30
+ - 4 real-world use cases (RCA, Performance, Dependencies, Errors)
31
+ - Pro tips for effective queries
32
+ - Common troubleshooting scenarios
33
+ - Best practices for filters and time ranges
34
+ - Data model categories quick reference
35
+ - Build and publish scripts in package.json
36
+ - `npm run build` - Prepare package for publishing
37
+ - `npm run prepublish` - Pre-publish validation
38
+ - `npm run publish:dry` - Test publishing without actually publishing
39
+ - Documentation improvements across all guides
40
+
41
+ ### Enhanced
42
+ - DATA_MODELS.md now includes:
43
+ - VuBank fund transfer failure case study
44
+ - Service dependency mapping examples
45
+ - Performance degradation analysis queries
46
+ - Error pattern detection workflows
47
+ - Pagination and field selection best practices
48
+
49
+ ### Documentation
50
+ - Added USE_CASE_RCA.md with complete troubleshooting methodology
51
+ - Documented exact queries used for Kubernetes metrics
52
+ - Included trace data structure examples
53
+ - Added metrics timeline for RCA workflow
54
+ - Cross-referenced documentation files
55
+
8
56
  ## [2.0.6] - 2026-02-13
9
57
 
10
58
  ### Fixed
package/DATA_MODELS.md CHANGED
@@ -188,5 +188,280 @@ vunet_list_data_models
188
188
 
189
189
  ---
190
190
 
191
- **Last Updated:** February 2026
192
- **Package Version:** 1.0.0
191
+ ## Real-World Use Cases
192
+
193
+ ### Use Case 1: Root Cause Analysis for Application Failures
194
+
195
+ **Scenario:** VuBank fund transfer service failing with HTTP 401/500 errors
196
+
197
+ **Data Models Used:**
198
+ 1. **Trace Map Data** - Identify service call chains and failure points
199
+ 2. **Kubernetes Pod Metrics** - Verify infrastructure health
200
+ 3. **Kubernetes Deployment Metrics** - Check deployment status
201
+
202
+ **Query Workflow:**
203
+
204
+ ```json
205
+ // Step 1: Get recent traces for failing service
206
+ {
207
+ "metric_name": "Trace Map Data",
208
+ "relative_time": "1h",
209
+ "filters": {
210
+ "service.name": "ibmb-ib"
211
+ }
212
+ }
213
+
214
+ // Step 2: Verify backend service health
215
+ {
216
+ "metric_name": "Kubernetes Pod Metrics",
217
+ "relative_time": "1h",
218
+ "filters": {
219
+ "namespace": "ibmb",
220
+ "pod_name": "ibmb-cbs*"
221
+ }
222
+ }
223
+
224
+ // Step 3: Check deployment status
225
+ {
226
+ "metric_name": "Kubernetes Deployment Metrics",
227
+ "relative_time": "1h",
228
+ "filters": {
229
+ "deployment_name": "ibmb-cbs"
230
+ }
231
+ }
232
+ ```
233
+
234
+ **Outcome:** Identified CBS service returning HTTP 404 (missing REST endpoints) while infrastructure was healthy. See [USE_CASE_RCA.md](USE_CASE_RCA.md) for complete analysis.
235
+
236
+ ---
237
+
238
+ ### Use Case 2: Performance Degradation Analysis
239
+
240
+ **Data Models for Performance Investigation:**
241
+
242
+ ```json
243
+ // Query slow traces
244
+ {
245
+ "metric_name": "Trace Map Data",
246
+ "relative_time": "4h",
247
+ "filters": {
248
+ "span.duration": ">5000000" // >5 seconds
249
+ }
250
+ }
251
+
252
+ // Check database performance
253
+ {
254
+ "metric_name": "MySQL Performance",
255
+ "relative_time": "4h",
256
+ "filters": {
257
+ "query_time": ">1000" // >1 second
258
+ }
259
+ }
260
+
261
+ // Verify resource utilization
262
+ {
263
+ "metric_name": "Kubernetes Pod Metrics",
264
+ "relative_time": "4h",
265
+ "include": "pod_name,cpu_usage,memory_usage,namespace"
266
+ }
267
+ ```
268
+
269
+ ---
270
+
271
+ ### Use Case 3: Service Dependency Mapping
272
+
273
+ **Trace Analysis for Microservices:**
274
+
275
+ ```json
276
+ {
277
+ "metric_name": "Trace Map Data",
278
+ "relative_time": "24h",
279
+ "filters": {
280
+ "service.name": "api-gateway"
281
+ }
282
+ }
283
+ ```
284
+
285
+ **Insights Gained:**
286
+ - Identify all downstream services called
287
+ - Measure response times per service
288
+ - Detect cascading failures
289
+ - Map service-to-service relationships
290
+ - Find bottleneck services
291
+
292
+ ---
293
+
294
+ ### Use Case 4: Error Pattern Detection
295
+
296
+ **Query Failed Requests:**
297
+
298
+ ```json
299
+ // Get HTTP 500 errors
300
+ {
301
+ "metric_name": "Trace Map Data",
302
+ "relative_time": "6h",
303
+ "filters": {
304
+ "http.status_code": "500"
305
+ }
306
+ }
307
+
308
+ // Get exceptions
309
+ {
310
+ "metric_name": "Exception Data",
311
+ "relative_time": "6h",
312
+ "filters": {
313
+ "exception.type": "NullPointerException"
314
+ }
315
+ }
316
+
317
+ // Check error rate by service
318
+ {
319
+ "metric_name": "Error Rate",
320
+ "relative_time": "6h",
321
+ "filters": {
322
+ "service_name": "payment-service"
323
+ }
324
+ }
325
+ ```
326
+
327
+ ---
328
+
329
+ ## Pro Tips for Effective Queries
330
+
331
+ ### 1. Time Range Selection
332
+
333
+ **For Real-Time Issues:**
334
+ - Use `15m` or `30m` for immediate problems
335
+ - Quick feedback loop for troubleshooting
336
+
337
+ **For Trend Analysis:**
338
+ - Use `24h`, `7d`, or `30d` for patterns
339
+ - Identify recurring issues
340
+
341
+ **For Historical Investigation:**
342
+ - Use absolute timestamps with `start_time` and `end_time`
343
+ - Analyze specific incident windows
344
+
345
+ ### 2. Filter Best Practices
346
+
347
+ **Be Specific:**
348
+ ```json
349
+ // Good - specific service
350
+ {"service.name": "payment-service"}
351
+
352
+ // Too broad - all services
353
+ {}
354
+ ```
355
+
356
+ **Combine Filters:**
357
+ ```json
358
+ {
359
+ "filters": {
360
+ "service.name": "api-gateway",
361
+ "http.status_code": ">=400",
362
+ "span.duration": ">3000000"
363
+ }
364
+ }
365
+ ```
366
+
367
+ ### 3. Field Selection
368
+
369
+ **Include only needed fields:**
370
+ ```json
371
+ {
372
+ "include": "trace_id,service.name,http.status_code,span.duration"
373
+ }
374
+ ```
375
+
376
+ **Benefits:**
377
+ - Faster query execution
378
+ - Reduced data transfer
379
+ - Easier analysis
380
+
381
+ ### 4. Pagination for Large Results
382
+
383
+ ```json
384
+ {
385
+ "metric_name": "Trace Map Data",
386
+ "relative_time": "24h",
387
+ "limit": 100,
388
+ "offset": 0
389
+ }
390
+ ```
391
+
392
+ ---
393
+
394
+ ## Common Troubleshooting Scenarios
395
+
396
+ ### Scenario: "Why is my application slow?"
397
+
398
+ **Investigation Steps:**
399
+ 1. Query `Trace Map Data` with `span.duration` filter
400
+ 2. Check `MySQL Performance` or `PostgreSQL Metrics`
401
+ 3. Verify `Kubernetes Pod Metrics` for resource constraints
402
+ 4. Review `JVM Metrics` for garbage collection issues
403
+
404
+ ### Scenario: "Service is down"
405
+
406
+ **Investigation Steps:**
407
+ 1. Query `Kubernetes Pod Metrics` - Check pod status
408
+ 2. Query `Kubernetes Container Metrics` - Check for crashes
409
+ 3. Query `Trace Map Data` - Verify no successful requests
410
+ 4. Check `Error Logs` - Review exception details
411
+
412
+ ### Scenario: "Intermittent failures"
413
+
414
+ **Investigation Steps:**
415
+ 1. Query `Trace Map Data` over longer period (6h-24h)
416
+ 2. Look for patterns in `http.status_code` distribution
417
+ 3. Check `Kubernetes Events` for pod restarts
418
+ 4. Review `Network Latency` metrics
419
+
420
+ ### Scenario: "Database queries are slow"
421
+
422
+ **Investigation Steps:**
423
+ 1. Query `MySQL Slow Queries` or equivalent
424
+ 2. Check `Database Connection Pool` utilization
425
+ 3. Review `Trace Map Data` for database span durations
426
+ 4. Verify `Disk I/O` metrics on database host
427
+
428
+ ---
429
+
430
+ ## Data Model Categories Quick Reference
431
+
432
+ ### 🔍 Debugging & Troubleshooting
433
+ - Trace Map Data
434
+ - Exception Data
435
+ - Error Logs
436
+ - Application Logs
437
+
438
+ ### 📊 Performance Monitoring
439
+ - Application Response Time
440
+ - MySQL Performance
441
+ - JVM Metrics
442
+ - CPU Usage
443
+ - Memory Usage
444
+
445
+ ### 🏗️ Infrastructure Health
446
+ - Kubernetes Pod Metrics
447
+ - Kubernetes Deployment Metrics
448
+ - Kubernetes Node Metrics
449
+ - Container Metrics
450
+
451
+ ### 🔒 Security & Compliance
452
+ - Security Events
453
+ - Failed Login Attempts
454
+ - Audit Logs
455
+ - SSL Certificate Expiry
456
+
457
+ ### 💼 Business Metrics
458
+ - Transaction Success Rate
459
+ - User Sessions
460
+ - Conversion Rate
461
+ - Custom KPIs
462
+
463
+ ---
464
+
465
+ **Last Updated:** February 16, 2026
466
+ **Package Version:** 2.0.7
467
+ **See Also:** [USE_CASE_RCA.md](USE_CASE_RCA.md) - Complete RCA walkthrough
package/README.md CHANGED
@@ -8,6 +8,8 @@
8
8
 
9
9
  Query metrics, traces, logs, and data models from your Vunet tenants using natural language through AI assistants like Claude, ChatGPT, or any MCP-compatible client.
10
10
 
11
+ > **Latest Version:** 2.0.8 - Fixed authentication endpoint, comprehensive RCA documentation added.
12
+
11
13
  ---
12
14
 
13
15
  ## 🚀 Features
@@ -490,9 +492,9 @@ vunet_list_data_models --category infrastructure
490
492
  **Debug:**
491
493
  ```bash
492
494
  # Test authentication manually
493
- curl -X POST https://your-tenant.com/vuSmartMaps/api/1/bu/1/auth/users/login/ \
495
+ curl -X POST https://your-tenant.com/api/login/ \
494
496
  -H "Content-Type: application/json" \
495
- -d '{"username":"your-user","password":"your-pass"}'
497
+ -d '{"username":"your-user","password":"your-pass","bu_id":"1"}'
496
498
  ```
497
499
 
498
500
  #### 3. "SSL Certificate Verification Failed"
package/SETUP.md CHANGED
@@ -265,9 +265,9 @@ $env:Path += ";C:\Program Files\nodejs\"
265
265
 
266
266
  **Test manually:**
267
267
  ```bash
268
- curl -X POST https://your-tenant.com/vuSmartMaps/api/1/bu/1/auth/users/login/ \
268
+ curl -X POST https://your-tenant.com/api/login/ \
269
269
  -H "Content-Type: application/json" \
270
- -d '{"username":"user","password":"pass"}'
270
+ -d '{"username":"user","password":"pass","bu_id":"1"}'
271
271
  ```
272
272
 
273
273
  ### Issue: MCP Server Not Loading
@@ -0,0 +1,373 @@
1
+ # Root Cause Analysis (RCA) with VuNet MCP Server
2
+
3
+ This document demonstrates a real-world use case of using the VuNet MCP Server to perform comprehensive root cause analysis for application failures using the VuBank banking application as an example.
4
+
5
+ ---
6
+
7
+ ## 🎯 Use Case Overview
8
+
9
+ **Scenario:** VuBank internet banking application experiencing failures
10
+ - **Issue:** User login failures and fund transfer failures
11
+ - **Tool Used:** VuNet MCP Server querying vuSmartMaps tenant
12
+ - **Outcome:** Identified root cause in 25 minutes using trace analysis and Kubernetes metrics
13
+
14
+ ---
15
+
16
+ ## 📊 Data Models Used
17
+
18
+ This RCA utilized the following VuNet data models:
19
+
20
+ | Data Model | Purpose | Key Findings |
21
+ |------------|---------|--------------|
22
+ | `Trace Map Data` | Analyze service-to-service call chains | Identified CBS service returning HTTP 404 |
23
+ | `Kubernetes Pod Metrics` | Check pod health and failures | Verified CBS pod healthy (1/1 replicas) |
24
+ | `Kubernetes Container Metrics` | Verify container crashes | No container failures detected |
25
+ | `Kubernetes Deployment Metrics` | Check deployment status | All deployments healthy |
26
+
27
+ ---
28
+
29
+ ## 🔍 Investigation Methodology
30
+
31
+ ### Step 1: Query Trace Data for Failed Transactions
32
+
33
+ **Query Used:**
34
+ ```json
35
+ {
36
+ "metric_name": "Trace Map Data",
37
+ "relative_time": "1h",
38
+ "filters": {
39
+ "service.name": "ibmb-ib"
40
+ }
41
+ }
42
+ ```
43
+
44
+ **Key Findings:**
45
+ - Retrieved 16 fund transfer traces
46
+ - Login service: 8/8 requests succeeded (HTTP 200)
47
+ - Fund transfer: 8/8 requests failed
48
+ - 62.5% returned HTTP 401 (Unauthorized)
49
+ - 37.5% returned HTTP 500 (Internal Server Error)
50
+
51
+ ### Step 2: Analyze Service Call Chain
52
+
53
+ **Trace Analysis Results:**
54
+
55
+ ```
56
+ Fund Transfer Call Chain:
57
+ ┌─────────────┐ ┌──────────┐ ┌─────────┐
58
+ │ ibmb-ib │────→│ MySQL │────→│ FRM │
59
+ │ (Frontend) │ │ (Success)│ │(Success)│
60
+ └─────────────┘ └──────────┘ └─────────┘
61
+
62
+ ├────→ IFSC Lookup Service ✓ (HTTP 200)
63
+
64
+ └────→ CBS Service ✗ (HTTP 404)
65
+
66
+ Root Cause Found!
67
+ ```
68
+
69
+ **CBS Service Failures:**
70
+ - Total CBS calls: 25
71
+ - Failed with HTTP 404: 21 calls (84%)
72
+ - No status code: 4 calls (16%)
73
+ - **100% failure rate on CBS service**
74
+
75
+ ### Step 3: Identify Failing Endpoints
76
+
77
+ **Failed Endpoints:**
78
+ ```
79
+ http://cbs-svc:7001/cbs/api/v1.0/accounts/debit → 404 Not Found
80
+ http://cbs-svc:7001/cbs/api/v1.0/accounts/statement → 404 Not Found
81
+ ```
82
+
83
+ **Error Pattern:**
84
+ ```
85
+ org.springframework.web.client.HttpClientErrorException$NotFound:
86
+ 404 Not Found: <!DOCTYPE html>... (HTML error page returned)
87
+ ```
88
+
89
+ ### Step 4: Verify Infrastructure Health
90
+
91
+ **Kubernetes Pod Query:**
92
+ ```json
93
+ {
94
+ "metric_name": "Kubernetes Pod Metrics",
95
+ "relative_time": "1h",
96
+ "filters": {
97
+ "namespace": "ibmb",
98
+ "pod_name": "ibmb-cbs*"
99
+ }
100
+ }
101
+ ```
102
+
103
+ **Results:**
104
+ - CBS pod status: **Running** ✓
105
+ - Replicas: 1/1 (desired vs available) ✓
106
+ - No pod failures in last hour ✓
107
+ - No container restarts ✓
108
+
109
+ **Kubernetes Deployment Query:**
110
+ ```json
111
+ {
112
+ "metric_name": "Kubernetes Deployment Metrics",
113
+ "relative_time": "1h",
114
+ "filters": {
115
+ "deployment_name": "ibmb-cbs"
116
+ }
117
+ }
118
+ ```
119
+
120
+ **Results:**
121
+ - Deployment: ibmb-cbs
122
+ - Desired replicas: 1.0 ✓
123
+ - Available replicas: 1.0 ✓
124
+ - Deployment healthy ✓
125
+
126
+ ---
127
+
128
+ ## 🎯 Root Cause Identification
129
+
130
+ ### Primary Finding
131
+
132
+ **CBS Service Missing REST API Endpoints**
133
+
134
+ **Evidence Chain:**
135
+ 1. ✅ CBS pod is running (healthy infrastructure)
136
+ 2. ✅ CBS service accessible on port 7001
137
+ 3. ❌ No REST endpoints registered at `/cbs/api/v1.0/*`
138
+ 4. ❌ Returns HTML 404 error pages instead of JSON
139
+ 5. ❌ Causes `JsonParseException` in ibmb service
140
+
141
+ ### Deep Dive Investigation
142
+
143
+ **kubectl Investigation Commands:**
144
+ ```bash
145
+ # Check application logs for endpoint mappings
146
+ kubectl logs ibmb-cbs-d66596486-96w96 -n ibmb | grep "Mapped"
147
+ → Result: EMPTY (No Spring Boot endpoint mappings)
148
+
149
+ # Check Spring Boot actuator endpoints
150
+ kubectl exec -n ibmb ibmb-cbs-d66596486-96w96 -- curl http://localhost:7001/actuator/mappings
151
+ → Result: 404 Not Found
152
+
153
+ # Identify application server
154
+ kubectl exec -n ibmb ibmb-cbs-d66596486-96w96 -- whoami
155
+ → Result: oracle (Oracle WebLogic Server user)
156
+ ```
157
+
158
+ ### Final Conclusion
159
+
160
+ **CBS is running on Oracle WebLogic Server WITHOUT the required REST API endpoints**
161
+
162
+ The CBS service expects endpoints at:
163
+ - `/cbs/api/v1.0/accounts/debit`
164
+ - `/cbs/api/v1.0/accounts/statement`
165
+
166
+ But these endpoints **do not exist** in the current deployment.
167
+
168
+ ---
169
+
170
+ ## 💡 Resolution Steps
171
+
172
+ ### Immediate Actions Required
173
+
174
+ 1. **Verify CBS Deployment**
175
+ ```bash
176
+ kubectl exec -n ibmb ibmb-cbs-pod -- bash
177
+ ls -la /u01/oracle/user_projects/domains/base_domain/applications/
178
+ find /u01/oracle -name '*.war' -o -name '*.ear'
179
+ ```
180
+
181
+ 2. **Check Deployed Applications**
182
+ - Verify correct CBS application (WAR/EAR) is deployed
183
+ - Confirm application version includes REST API support
184
+ - Review WebLogic deployment logs
185
+
186
+ 3. **Implement Fix (Choose One)**
187
+
188
+ **Option A: Deploy REST API Application**
189
+ - Deploy CBS application with REST endpoints
190
+ - Verify endpoints with `curl http://cbs-svc:7001/cbs/api/v1.0/health`
191
+
192
+ **Option B: SOAP-to-REST Adapter**
193
+ - If CBS only supports SOAP, deploy adapter service
194
+ - Configure ibmb to call adapter instead
195
+
196
+ **Option C: Update Integration**
197
+ - Modify ibmb configuration to use CBS SOAP endpoints
198
+ - Add SOAP client dependency to ibmb
199
+
200
+ ### Verification
201
+
202
+ After fix implementation:
203
+ ```json
204
+ {
205
+ "metric_name": "Trace Map Data",
206
+ "relative_time": "15m",
207
+ "filters": {
208
+ "service.name": "cbs-svc",
209
+ "http.status_code": "200"
210
+ }
211
+ }
212
+ ```
213
+
214
+ **Expected Result:** CBS calls showing HTTP 200 instead of 404
215
+
216
+ ---
217
+
218
+ ## 📈 Metrics Timeline
219
+
220
+ | Time | Action | Tool Used | Finding |
221
+ |------|--------|-----------|---------|
222
+ | T+0m | Initial query | `Trace Map Data` | 16 traces retrieved |
223
+ | T+5m | Analyze failures | Manual analysis | 100% fund transfer failures |
224
+ | T+10m | Service breakdown | Trace analysis | CBS service 404 errors |
225
+ | T+15m | Infrastructure check | `Kubernetes Pod Metrics` | All pods healthy |
226
+ | T+20m | Deep dive | kubectl logs | CBS is WebLogic, no REST |
227
+ | T+25m | RCA complete | Combined analysis | Missing REST endpoints |
228
+
229
+ ---
230
+
231
+ ## 🔑 Key Learnings
232
+
233
+ ### VuNet MCP Server Capabilities
234
+
235
+ 1. **Trace Analysis**
236
+ - End-to-end service call visibility
237
+ - HTTP status code tracking
238
+ - Error pattern identification
239
+ - Service dependency mapping
240
+
241
+ 2. **Infrastructure Correlation**
242
+ - Kubernetes metrics integration
243
+ - Pod health verification
244
+ - Deployment status monitoring
245
+ - Container failure detection
246
+
247
+ 3. **Root Cause Methodology**
248
+ - Start with traces (application layer)
249
+ - Verify infrastructure (platform layer)
250
+ - Deep dive logs (code layer)
251
+ - Correlate findings
252
+
253
+ ### Best Practices
254
+
255
+ ✅ **Do:**
256
+ - Query trace data first to identify failure patterns
257
+ - Use relative time ranges (1h, 24h) for recent issues
258
+ - Verify infrastructure health to rule out platform issues
259
+ - Cross-reference multiple data models for complete picture
260
+ - Document exact error messages and URLs
261
+
262
+ ❌ **Don't:**
263
+ - Assume infrastructure is the problem without trace analysis
264
+ - Rely solely on HTTP status codes at frontend
265
+ - Skip service-to-service call chain analysis
266
+ - Ignore correlation between different metrics
267
+
268
+ ---
269
+
270
+ ## 📊 Query Performance
271
+
272
+ | Query Type | Data Model | Time Range | Results | Query Time |
273
+ |------------|------------|------------|---------|------------|
274
+ | Trace data | Trace Map Data | 1h | 128KB JSON | ~2s |
275
+ | K8s pods | Kubernetes Pod Metrics | 1h | 45 entries | ~1s |
276
+ | K8s deployments | Kubernetes Deployment Metrics | 1h | 12 entries | ~1s |
277
+ | Exceptions | Exception data | 1h | 4 entries | ~1s |
278
+
279
+ ---
280
+
281
+ ## 🛠️ Tools & Commands Reference
282
+
283
+ ### VuNet MCP Server Tools
284
+ ```javascript
285
+ // List available data models
286
+ vunet_list_data_models
287
+
288
+ // Query specific metric
289
+ vunet_query_metric({
290
+ metric_name: "Trace Map Data",
291
+ relative_time: "1h",
292
+ filters: {...}
293
+ })
294
+
295
+ // Check connection status
296
+ vunet_get_status
297
+ ```
298
+
299
+ ### Direct API Access
300
+ ```bash
301
+ # Authenticate
302
+ curl -k -X POST https://20.198.26.207/api/login/ \
303
+ -H "Content-Type: application/json" \
304
+ -d @test-login.json
305
+
306
+ # Query metrics
307
+ curl -k -X GET "https://20.198.26.207/api/metrics/Trace%20Map%20Data/?relative_time=1h" \
308
+ -H "Authorization: Bearer <token>"
309
+ ```
310
+
311
+ ---
312
+
313
+ ## 📝 Sample Trace Data Structure
314
+
315
+ ```json
316
+ {
317
+ "trace_id": "02c0eff33e61025a378b28d72dc6de13",
318
+ "span": {
319
+ "service.name": "ibmb-ib",
320
+ "http.method": "POST",
321
+ "http.url": "/api/v1.0/fund-transfer",
322
+ "http.status_code": 401,
323
+ "span.duration": 1234567,
324
+ "downstream": [
325
+ {
326
+ "service.name": "mysql",
327
+ "http.status_code": 200
328
+ },
329
+ {
330
+ "service.name": "ifsc-lookup",
331
+ "http.status_code": 200
332
+ },
333
+ {
334
+ "service.name": "frm-svc",
335
+ "http.status_code": 200
336
+ },
337
+ {
338
+ "service.name": "cbs-svc",
339
+ "http.url": "http://cbs-svc:7001/cbs/api/v1.0/accounts/debit",
340
+ "http.status_code": 404,
341
+ "error": "HttpClientErrorException$NotFound"
342
+ }
343
+ ]
344
+ }
345
+ }
346
+ ```
347
+
348
+ ---
349
+
350
+ ## 🎓 Training Value
351
+
352
+ **This RCA demonstrates:**
353
+ - Multi-model correlation analysis
354
+ - Infrastructure vs application issue separation
355
+ - Systematic troubleshooting methodology
356
+ - VuNet platform capabilities for production debugging
357
+ - Value of distributed tracing in microservices
358
+
359
+ **Time Saved:** Traditional RCA could take hours/days checking logs across services. VuNet trace analysis reduced this to **25 minutes**.
360
+
361
+ ---
362
+
363
+ ## 📚 Related Documentation
364
+
365
+ - [DATA_MODELS.md](DATA_MODELS.md) - Complete data model reference
366
+ - [QUICKSTART.md](QUICKSTART.md) - Quick setup guide
367
+ - [README.md](README.md) - Full documentation
368
+
369
+ ---
370
+
371
+ **Last Updated:** February 16, 2026
372
+ **Case Study:** VuBank Fund Transfer Failure RCA
373
+ **VuNet MCP Server Version:** 2.0.7
package/index.js CHANGED
@@ -26,7 +26,7 @@ class VunetMCPServer {
26
26
  this.server = new Server(
27
27
  {
28
28
  name: "vunet-mcp-server",
29
- version: "2.0.6",
29
+ version: "2.0.8",
30
30
  },
31
31
  {
32
32
  capabilities: {
@@ -117,9 +117,10 @@ class VunetMCPServer {
117
117
 
118
118
  /**
119
119
  * Login to Vunet tenant
120
+ * Uses /api/login/ endpoint with username, password, and bu_id
120
121
  */
121
122
  async login() {
122
- const url = `${this.normalizeTenantUrl(this.tenantUrl)}/vuSmartMaps/api/1/bu/${this.buId}/auth/users/login/`;
123
+ const url = `${this.normalizeTenantUrl(this.tenantUrl)}/api/login/`;
123
124
 
124
125
  try {
125
126
  const response = await axios.post(
@@ -127,8 +128,12 @@ class VunetMCPServer {
127
128
  {
128
129
  username: this.username,
129
130
  password: this.password,
131
+ bu_id: this.buId,
130
132
  },
131
133
  {
134
+ headers: {
135
+ "Content-Type": "application/json",
136
+ },
132
137
  httpsAgent: this.httpsAgent,
133
138
  }
134
139
  );
@@ -158,7 +163,7 @@ class VunetMCPServer {
158
163
  async logout() {
159
164
  if (!this.sessionToken) return;
160
165
 
161
- const url = `${this.normalizeTenantUrl(this.tenantUrl)}/vuSmartMaps/api/1/bu/${this.buId}/auth/users/logout/`;
166
+ const url = `${this.normalizeTenantUrl(this.tenantUrl)}/api/logout/`;
162
167
 
163
168
  try {
164
169
  await axios.post(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mithung/vunet-mcp-server",
3
- "version": "2.0.6",
3
+ "version": "2.0.8",
4
4
  "description": "Model Context Protocol (MCP) Server for Vunet vuSmartMaps - Multi-tenant observability platform integration",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -11,7 +11,15 @@
11
11
  "scripts": {
12
12
  "start": "node index.js",
13
13
  "dev": "node --watch index.js",
14
- "test": "echo \"No tests specified yet\" && exit 0"
14
+ "test": "echo \"No tests specified yet\" && exit 0",
15
+ "build": "npm run validate && npm pack --dry-run",
16
+ "validate": "node --check index.js && node --check cli.js",
17
+ "prepublishOnly": "npm run validate && npm test",
18
+ "publish:dry": "npm publish --dry-run",
19
+ "publish:prod": "npm publish --access public",
20
+ "version:patch": "npm version patch -m \"Release v%s\"",
21
+ "version:minor": "npm version minor -m \"Release v%s\"",
22
+ "version:major": "npm version major -m \"Release v%s\""
15
23
  },
16
24
  "keywords": [
17
25
  "mcp",
@@ -56,6 +64,8 @@
56
64
  "SETUP.md",
57
65
  "QUICKSTART.md",
58
66
  "DATA_MODELS.md",
67
+ "USE_CASE_RCA.md",
68
+ "BUILD_GUIDE.md",
59
69
  "CHANGELOG.md",
60
70
  "LICENSE",
61
71
  "config.example.json",