@kryptosai/mcp-observatory 1.31.0 → 1.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/PRIVACY.md +16 -0
  2. package/README.md +1 -1
  3. package/dist/src/cli.js +3 -1
  4. package/dist/src/cli.js.map +1 -1
  5. package/dist/src/commands/diff.js +24 -2
  6. package/dist/src/commands/diff.js.map +1 -1
  7. package/dist/src/commands/telemetry.js +41 -1
  8. package/dist/src/commands/telemetry.js.map +1 -1
  9. package/dist/src/diff.d.ts +5 -2
  10. package/dist/src/diff.js +23 -2
  11. package/dist/src/diff.js.map +1 -1
  12. package/dist/src/index.d.ts +1 -0
  13. package/dist/src/index.js +1 -0
  14. package/dist/src/index.js.map +1 -1
  15. package/dist/src/permission-delta.d.ts +2 -0
  16. package/dist/src/permission-delta.js +99 -0
  17. package/dist/src/permission-delta.js.map +1 -0
  18. package/dist/src/reporters/common.d.ts +1 -0
  19. package/dist/src/reporters/common.js +3 -1
  20. package/dist/src/reporters/common.js.map +1 -1
  21. package/dist/src/reporters/html.js +30 -1
  22. package/dist/src/reporters/html.js.map +1 -1
  23. package/dist/src/reporters/markdown.js +21 -2
  24. package/dist/src/reporters/markdown.js.map +1 -1
  25. package/dist/src/reporters/pr-comment.js +1 -1
  26. package/dist/src/reporters/pr-comment.js.map +1 -1
  27. package/dist/src/reporters/terminal.js +9 -3
  28. package/dist/src/reporters/terminal.js.map +1 -1
  29. package/dist/src/risk-taxonomy.d.ts +16 -0
  30. package/dist/src/risk-taxonomy.js +95 -0
  31. package/dist/src/risk-taxonomy.js.map +1 -0
  32. package/dist/src/schema-diff.d.ts +2 -1
  33. package/dist/src/schema-diff.js +28 -3
  34. package/dist/src/schema-diff.js.map +1 -1
  35. package/dist/src/telemetry.d.ts +17 -0
  36. package/dist/src/telemetry.js +69 -2
  37. package/dist/src/telemetry.js.map +1 -1
  38. package/dist/src/types.d.ts +15 -0
  39. package/dist/src/validate.js +45 -2
  40. package/dist/src/validate.js.map +1 -1
  41. package/docs/mcp-server-safety-index.md +13 -11
  42. package/docs/safety-index/artifacts/ui5-mcp-server.json +842 -0
  43. package/docs/safety-index/artifacts/ui5-mcp-server.md +232 -0
  44. package/docs/safety-index/targets.json +17 -0
  45. package/package.json +1 -1
  46. package/schemas/run-artifact.schema.json +56 -1
@@ -0,0 +1,842 @@
1
+ {
2
+ "artifactType": "run",
3
+ "schemaVersion": "1.0.0",
4
+ "gate": "pass",
5
+ "runId": "run_2026-07-09T151505224Z_052ab101",
6
+ "createdAt": "2026-07-09T15:15:05.224Z",
7
+ "toolVersion": "1.28.2",
8
+ "target": {
9
+ "targetId": "ui5-mcp-server",
10
+ "adapter": "local-process",
11
+ "command": "npx",
12
+ "args": [
13
+ "-y",
14
+ "@ui5/mcp-server"
15
+ ],
16
+ "cwd": ".",
17
+ "metadata": {
18
+ "package": "@ui5/mcp-server",
19
+ "purpose": "mcp-safety-index",
20
+ "riskClass": "UI5 project scaffolding and analysis",
21
+ "failureClass": "Framework tooling boundary",
22
+ "whyItMatters": "UI5 agents can scaffold applications, run UI5-specific analysis, and fetch framework guidance, so teams need reproducible evidence before trusting the tool surface."
23
+ },
24
+ "serverName": "UI5",
25
+ "serverVersion": "0.2.14"
26
+ },
27
+ "environment": {
28
+ "platform": "darwin 24.0.0",
29
+ "nodeVersion": "v25.8.1"
30
+ },
31
+ "summary": {
32
+ "total": 9,
33
+ "pass": 7,
34
+ "fail": 0,
35
+ "partial": 0,
36
+ "unsupported": 2,
37
+ "flaky": 0,
38
+ "skipped": 0,
39
+ "gate": "pass"
40
+ },
41
+ "checks": [
42
+ {
43
+ "id": "tools",
44
+ "capability": "tools",
45
+ "status": "pass",
46
+ "durationMs": 6.683124999999563,
47
+ "message": "Advertised capability responded with the minimal expected shape (10 items).",
48
+ "evidence": [
49
+ {
50
+ "endpoint": "tools/list",
51
+ "advertised": true,
52
+ "responded": true,
53
+ "minimalShapePresent": true,
54
+ "itemCount": 10,
55
+ "identifiers": [
56
+ "get_guidelines",
57
+ "run_ui5_linter",
58
+ "get_api_reference",
59
+ "get_project_info",
60
+ "create_ui5_app",
61
+ "get_version_info",
62
+ "get_integration_cards_guidelines",
63
+ "create_integration_card",
64
+ "run_manifest_validation",
65
+ "get_typescript_conversion_guidelines"
66
+ ],
67
+ "diagnostics": [],
68
+ "schemas": {
69
+ "get_guidelines": {
70
+ "type": "object",
71
+ "properties": {}
72
+ },
73
+ "run_ui5_linter": {
74
+ "type": "object",
75
+ "properties": {
76
+ "projectDir": {
77
+ "type": "string",
78
+ "description": "Root directory of the UI5 project to analyze. Must be an absolute path. Typically this the directory where the 'package.json' and 'ui5.yaml' files are located."
79
+ },
80
+ "fix": {
81
+ "default": false,
82
+ "description": "Attempt to automatically correct certain findings in the files. Only the remaining findings will be returned.",
83
+ "type": "boolean"
84
+ },
85
+ "filePatterns": {
86
+ "description": "File paths or patterns to lint. If not provided, all files in the project will be linted.",
87
+ "type": "array",
88
+ "items": {
89
+ "type": "string"
90
+ }
91
+ },
92
+ "provideContextInformation": {
93
+ "default": true,
94
+ "description": "Whether to include supplementary information in the output. This includes UI5 API reference and documentation resources. When calling the tool multiple times for the same file or project, refrain from requesting additional context every time.",
95
+ "type": "boolean"
96
+ }
97
+ },
98
+ "required": [
99
+ "projectDir"
100
+ ],
101
+ "$schema": "http://json-schema.org/draft-07/schema#"
102
+ },
103
+ "get_api_reference": {
104
+ "type": "object",
105
+ "properties": {
106
+ "projectDir": {
107
+ "type": "string",
108
+ "description": "The root directory of the UI5 project, containing the 'package.json' and 'ui5.yaml' files. This is used to determine the UI5 framework version and libraries used in the project. "
109
+ },
110
+ "query": {
111
+ "type": "string",
112
+ "pattern": "^[^<>\"'()]+$",
113
+ "description": "Name of the UI5 module or symbol using either dot or slash notation. Examples: 'sap.m.Button', 'sap/ui/core/Core'. Individual symbols can be requested as well, e.g. 'sap.m.Button#text', 'sap.ui.core.Core#init'"
114
+ }
115
+ },
116
+ "required": [
117
+ "projectDir",
118
+ "query"
119
+ ],
120
+ "$schema": "http://json-schema.org/draft-07/schema#"
121
+ },
122
+ "get_project_info": {
123
+ "type": "object",
124
+ "properties": {
125
+ "projectDir": {
126
+ "type": "string",
127
+ "description": "Root directory of the UI5 project to analyze. Must be an absolute path. If a path to a file is provided, the root directory will be determined automatically."
128
+ }
129
+ },
130
+ "required": [
131
+ "projectDir"
132
+ ],
133
+ "$schema": "http://json-schema.org/draft-07/schema#"
134
+ },
135
+ "create_ui5_app": {
136
+ "type": "object",
137
+ "properties": {
138
+ "appNamespace": {
139
+ "type": "string",
140
+ "pattern": "^[a-z0-9][a-z0-9_.]*$",
141
+ "description": "The namespace for the application, e.g. com.myorg.myapp. Only lowercase alpha-numeric characters, underscores and dots are allowed."
142
+ },
143
+ "basePath": {
144
+ "type": "string",
145
+ "description": "Absolute base path for the creation. The application will be created either immediately inside this path or in a subdirectory (its name equals the application namespace), depending on the 'createAppDirectory' parameter. This base path must be absolute, not just 'app' or '.' or './something'!"
146
+ },
147
+ "createAppDirectory": {
148
+ "default": true,
149
+ "description": "Whether to create a new directory (name equals the application namespace) inside the base path. Set this to 'false' when you want to place the 'app' directly in the given base path. In SAP CAP applications, typically give the path to the 'app' folder as basePath and set this to 'true' to create an application folder. Default: true.",
150
+ "type": "boolean"
151
+ },
152
+ "framework": {
153
+ "default": "SAPUI5",
154
+ "description": "Framework to use (OpenUI5 or SAPUI5), defaults to SAPUI5",
155
+ "type": "string",
156
+ "enum": [
157
+ "OpenUI5",
158
+ "SAPUI5"
159
+ ]
160
+ },
161
+ "frameworkVersion": {
162
+ "description": "Framework version, defaults to latest version. Omit this when in doubt. When provided, it must be a concrete semantic version, like e.g. 1.136.0. Versions older than 1.96.0 are not supported.",
163
+ "type": "string",
164
+ "pattern": "^\\d+\\.\\d+\\.\\d+$"
165
+ },
166
+ "author": {
167
+ "description": "Author of the application (auto-detected if not provided)",
168
+ "type": "string",
169
+ "pattern": "^[a-zA-Z0-9 .,'@_-]+$"
170
+ },
171
+ "oDataV4Url": {
172
+ "description": "OData V4 service URL parameter; public artifact redacts local URL examples from the upstream tool description.",
173
+ "type": "string"
174
+ },
175
+ "oDataEntitySet": {
176
+ "description": "Entity set of the OData V4 service to display. Only has an effect when 'oDataV4Url' is set as well. This is optional, but setting an entity set is beneficial, as it will configure a basic UI in the application which displays the entity set.",
177
+ "type": "string",
178
+ "pattern": "^[a-zA-Z0-9_]+$"
179
+ },
180
+ "entityProperties": {
181
+ "description": "Properties of the OData entity set to display. Only has an effect when 'oDataV4Url' and'oDataEntitySet' are set. This parameter is optional, but useful to display initial data, when the names of existing properties are known. If not provided and the service is active and reachable at tool execution time, some random properties will be displayed.",
182
+ "type": "array",
183
+ "items": {
184
+ "type": "string",
185
+ "pattern": "^[a-zA-Z0-9_]+$"
186
+ }
187
+ },
188
+ "initializeGitRepository": {
189
+ "default": true,
190
+ "description": "Initialize a local git repository for the application, default is 'true'",
191
+ "type": "boolean"
192
+ },
193
+ "runNpmInstall": {
194
+ "default": true,
195
+ "description": "Execute npm install after creating the application, default is 'true'",
196
+ "type": "boolean"
197
+ },
198
+ "typescript": {
199
+ "default": true,
200
+ "description": "Whether to create a TypeScript application (true) or JavaScript application (false), default is 'true'. Although the default is preferred, the user MUST know about this option before generation, but you should not require an active decision. Also, if an overall project already exists, this should influence the language choice to keep things consistent.",
201
+ "type": "boolean"
202
+ }
203
+ },
204
+ "required": [
205
+ "appNamespace",
206
+ "basePath"
207
+ ],
208
+ "$schema": "http://json-schema.org/draft-07/schema#"
209
+ },
210
+ "get_version_info": {
211
+ "type": "object",
212
+ "properties": {
213
+ "frameworkName": {
214
+ "type": "string",
215
+ "enum": [
216
+ "OpenUI5",
217
+ "SAPUI5"
218
+ ],
219
+ "description": "The UI5 framework to get version information for"
220
+ }
221
+ },
222
+ "required": [
223
+ "frameworkName"
224
+ ],
225
+ "$schema": "http://json-schema.org/draft-07/schema#"
226
+ },
227
+ "get_integration_cards_guidelines": {
228
+ "type": "object",
229
+ "properties": {}
230
+ },
231
+ "create_integration_card": {
232
+ "type": "object",
233
+ "properties": {
234
+ "basePath": {
235
+ "type": "string",
236
+ "description": "Absolute base path for the creation."
237
+ },
238
+ "cardFolderName": {
239
+ "default": "card",
240
+ "type": "string",
241
+ "description": "Name of the folder to create the card in, inside the base path."
242
+ },
243
+ "cardType": {
244
+ "default": "List",
245
+ "type": "string",
246
+ "enum": [
247
+ "Analytical",
248
+ "Calendar",
249
+ "List",
250
+ "Object",
251
+ "Table",
252
+ "Timeline"
253
+ ],
254
+ "description": "Type of the Integration Card to create."
255
+ },
256
+ "destinations": {
257
+ "type": "array",
258
+ "items": {
259
+ "type": "object",
260
+ "properties": {
261
+ "name": {
262
+ "type": "string",
263
+ "pattern": "^[a-zA-Z0-9 .,'@_-]+$",
264
+ "description": "Name of the destination."
265
+ },
266
+ "defaultUrl": {
267
+ "type": "string",
268
+ "description": "Default URL of the destination."
269
+ }
270
+ },
271
+ "required": [
272
+ "name",
273
+ "defaultUrl"
274
+ ]
275
+ },
276
+ "description": "List of destinations to be included in the card configuration."
277
+ }
278
+ },
279
+ "required": [
280
+ "basePath"
281
+ ],
282
+ "$schema": "http://json-schema.org/draft-07/schema#"
283
+ },
284
+ "run_manifest_validation": {
285
+ "type": "object",
286
+ "properties": {
287
+ "manifestPath": {
288
+ "type": "string",
289
+ "description": "Absolute path to the manifest file to validate."
290
+ }
291
+ },
292
+ "required": [
293
+ "manifestPath"
294
+ ],
295
+ "$schema": "http://json-schema.org/draft-07/schema#"
296
+ },
297
+ "get_typescript_conversion_guidelines": {
298
+ "type": "object",
299
+ "properties": {}
300
+ }
301
+ }
302
+ }
303
+ ]
304
+ },
305
+ {
306
+ "id": "prompts",
307
+ "capability": "prompts",
308
+ "status": "unsupported",
309
+ "durationMs": 0.0013330000001587905,
310
+ "message": "Prompts are not advertised by the target.",
311
+ "evidence": [
312
+ {
313
+ "endpoint": "prompts/list",
314
+ "advertised": false,
315
+ "responded": false,
316
+ "minimalShapePresent": false,
317
+ "diagnostics": []
318
+ }
319
+ ]
320
+ },
321
+ {
322
+ "id": "resources",
323
+ "capability": "resources",
324
+ "status": "unsupported",
325
+ "durationMs": 0.0037920000013400568,
326
+ "message": "Resources are not advertised by the target.",
327
+ "evidence": [
328
+ {
329
+ "endpoint": "resources/list | resources/templates/list",
330
+ "advertised": false,
331
+ "responded": false,
332
+ "minimalShapePresent": false,
333
+ "diagnostics": []
334
+ }
335
+ ]
336
+ },
337
+ {
338
+ "id": "security-lite",
339
+ "capability": "security-lite",
340
+ "status": "pass",
341
+ "durationMs": 0.045041999999739346,
342
+ "message": "No security issues detected (lightweight scan).",
343
+ "evidence": [
344
+ {
345
+ "endpoint": "security/scan-lite",
346
+ "advertised": true,
347
+ "responded": true,
348
+ "minimalShapePresent": true,
349
+ "itemCount": 0
350
+ }
351
+ ]
352
+ },
353
+ {
354
+ "id": "runtime-profile",
355
+ "capability": "runtime-profile",
356
+ "status": "pass",
357
+ "durationMs": 0.20004200000039418,
358
+ "message": "Detected 4 potential egress target(s) and 23 potential state mutation(s) with low confidence.",
359
+ "evidence": [
360
+ {
361
+ "endpoint": "runtime-profile/analyze",
362
+ "advertised": true,
363
+ "responded": true,
364
+ "minimalShapePresent": true,
365
+ "itemCount": 27,
366
+ "diagnostics": [
367
+ "Egress entries: 4",
368
+ "State mutations: 23",
369
+ "Confidence: medium"
370
+ ],
371
+ "findings": [
372
+ {
373
+ "target": "Whether to include supplementary information in the output. This includes UI5 API reference and documentation resources. When calling the tool multiple times for the same file or project, refrain from requesting additional context every time.",
374
+ "protocol": "unknown",
375
+ "source": "description_analysis",
376
+ "confidence": "medium"
377
+ },
378
+ {
379
+ "target": "run_ui5_linter",
380
+ "protocol": "unknown",
381
+ "source": "description_analysis",
382
+ "confidence": "low"
383
+ },
384
+ {
385
+ "target": "get_api_reference",
386
+ "protocol": "unknown",
387
+ "source": "description_analysis",
388
+ "confidence": "low"
389
+ },
390
+ {
391
+ "target": "OData V4 service URL parameter; public artifact redacts local URL examples from the upstream tool description.",
392
+ "protocol": "unknown",
393
+ "source": "description_analysis",
394
+ "confidence": "medium"
395
+ },
396
+ {
397
+ "resource": "filesystem",
398
+ "operation": "write",
399
+ "scope": "working_directory",
400
+ "source": "description_analysis"
401
+ },
402
+ {
403
+ "resource": "filesystem",
404
+ "operation": "write",
405
+ "scope": "working_directory",
406
+ "source": "description_analysis"
407
+ },
408
+ {
409
+ "resource": "filesystem",
410
+ "operation": "write",
411
+ "scope": "working_directory",
412
+ "source": "description_analysis"
413
+ },
414
+ {
415
+ "resource": "filesystem",
416
+ "operation": "write",
417
+ "scope": "working_directory",
418
+ "source": "description_analysis"
419
+ },
420
+ {
421
+ "resource": "filesystem",
422
+ "operation": "execute",
423
+ "scope": "working_directory",
424
+ "source": "description_analysis"
425
+ },
426
+ {
427
+ "resource": "filesystem",
428
+ "operation": "write",
429
+ "scope": "working_directory",
430
+ "source": "description_analysis"
431
+ },
432
+ {
433
+ "resource": "filesystem",
434
+ "operation": "write",
435
+ "scope": "working_directory",
436
+ "source": "description_analysis"
437
+ },
438
+ {
439
+ "resource": "filesystem",
440
+ "operation": "write",
441
+ "scope": "working_directory",
442
+ "source": "description_analysis"
443
+ },
444
+ {
445
+ "resource": "filesystem",
446
+ "operation": "write",
447
+ "scope": "working_directory",
448
+ "source": "description_analysis"
449
+ },
450
+ {
451
+ "resource": "filesystem",
452
+ "operation": "write",
453
+ "scope": "working_directory",
454
+ "source": "description_analysis"
455
+ },
456
+ {
457
+ "resource": "filesystem",
458
+ "operation": "write",
459
+ "scope": "working_directory",
460
+ "source": "description_analysis"
461
+ },
462
+ {
463
+ "resource": "filesystem",
464
+ "operation": "write",
465
+ "scope": "working_directory",
466
+ "source": "description_analysis"
467
+ },
468
+ {
469
+ "resource": "filesystem",
470
+ "operation": "write",
471
+ "scope": "working_directory",
472
+ "source": "description_analysis"
473
+ },
474
+ {
475
+ "resource": "filesystem",
476
+ "operation": "write",
477
+ "scope": "working_directory",
478
+ "source": "description_analysis"
479
+ },
480
+ {
481
+ "resource": "filesystem",
482
+ "operation": "write",
483
+ "scope": "working_directory",
484
+ "source": "description_analysis"
485
+ },
486
+ {
487
+ "resource": "filesystem",
488
+ "operation": "write",
489
+ "scope": "working_directory",
490
+ "source": "description_analysis"
491
+ },
492
+ {
493
+ "resource": "filesystem",
494
+ "operation": "write",
495
+ "scope": "working_directory",
496
+ "source": "description_analysis"
497
+ },
498
+ {
499
+ "resource": "filesystem",
500
+ "operation": "write",
501
+ "scope": "working_directory",
502
+ "source": "description_analysis"
503
+ },
504
+ {
505
+ "resource": "filesystem",
506
+ "operation": "write",
507
+ "scope": "working_directory",
508
+ "source": "description_analysis"
509
+ },
510
+ {
511
+ "resource": "filesystem",
512
+ "operation": "write",
513
+ "scope": "working_directory",
514
+ "source": "description_analysis"
515
+ },
516
+ {
517
+ "resource": "filesystem",
518
+ "operation": "write",
519
+ "scope": "working_directory",
520
+ "source": "description_analysis"
521
+ },
522
+ {
523
+ "resource": "filesystem",
524
+ "operation": "write",
525
+ "scope": "working_directory",
526
+ "source": "description_analysis"
527
+ },
528
+ {
529
+ "resource": "filesystem",
530
+ "operation": "execute",
531
+ "scope": "working_directory",
532
+ "source": "description_analysis"
533
+ }
534
+ ]
535
+ }
536
+ ]
537
+ },
538
+ {
539
+ "id": "conformance",
540
+ "capability": "conformance",
541
+ "status": "pass",
542
+ "durationMs": 11.027541999999812,
543
+ "message": "All 7 conformance checks passed.",
544
+ "evidence": [
545
+ {
546
+ "endpoint": "conformance/check",
547
+ "advertised": true,
548
+ "responded": true,
549
+ "minimalShapePresent": true,
550
+ "itemCount": 7,
551
+ "identifiers": [],
552
+ "diagnostics": [
553
+ "[pass] capabilities-present: Server returned capabilities object.",
554
+ "[pass] server-info: Server provided initialization info.",
555
+ "[pass] tools-capability-match: tools/list returned 10 tool(s).",
556
+ "[pass] prompts-capability-match: Prompts not advertised — endpoint check skipped.",
557
+ "[pass] resources-capability-match: Resources not advertised — endpoint check skipped.",
558
+ "[pass] tool-response-content: Tool \"get_guidelines\" response has valid content array.",
559
+ "[pass] error-handling: Server returned proper error code -32601 for unknown method."
560
+ ]
561
+ }
562
+ ]
563
+ },
564
+ {
565
+ "id": "schema-quality",
566
+ "capability": "schema-quality",
567
+ "status": "pass",
568
+ "durationMs": 7.388416999998299,
569
+ "message": "All 10 item(s) have good schema quality.",
570
+ "evidence": [
571
+ {
572
+ "endpoint": "schema-quality/scan",
573
+ "advertised": true,
574
+ "responded": true,
575
+ "minimalShapePresent": true,
576
+ "itemCount": 0,
577
+ "identifiers": []
578
+ }
579
+ ]
580
+ },
581
+ {
582
+ "id": "security",
583
+ "capability": "security",
584
+ "status": "pass",
585
+ "durationMs": 3.974833000000217,
586
+ "message": "No security issues detected.",
587
+ "evidence": [
588
+ {
589
+ "endpoint": "security/scan",
590
+ "advertised": true,
591
+ "responded": true,
592
+ "minimalShapePresent": true,
593
+ "itemCount": 0
594
+ }
595
+ ]
596
+ },
597
+ {
598
+ "id": "attack-sim",
599
+ "capability": "attack-sim",
600
+ "status": "pass",
601
+ "durationMs": 3.8867500000014843,
602
+ "message": "Safe attack simulation found no high-risk MCP attack-readiness findings.",
603
+ "evidence": [
604
+ {
605
+ "endpoint": "attack-sim/safe",
606
+ "advertised": true,
607
+ "responded": true,
608
+ "minimalShapePresent": true,
609
+ "itemCount": 0,
610
+ "identifiers": []
611
+ }
612
+ ]
613
+ }
614
+ ],
615
+ "healthScore": {
616
+ "overall": 93,
617
+ "grade": "A",
618
+ "dimensions": [
619
+ {
620
+ "name": "Protocol Compliance",
621
+ "weight": 0.3,
622
+ "score": 100,
623
+ "details": [
624
+ "conformance: pass (100/100)"
625
+ ]
626
+ },
627
+ {
628
+ "name": "Schema Quality",
629
+ "weight": 0.2,
630
+ "score": 100,
631
+ "details": [
632
+ "schema-quality: pass (100/100)"
633
+ ]
634
+ },
635
+ {
636
+ "name": "Security",
637
+ "weight": 0.2,
638
+ "score": 100,
639
+ "details": [
640
+ "security-lite: pass (100/100)",
641
+ "security: pass (100/100)",
642
+ "attack-sim: pass (100/100)"
643
+ ]
644
+ },
645
+ {
646
+ "name": "Reliability",
647
+ "weight": 0.2,
648
+ "score": 67,
649
+ "details": [
650
+ "tools: pass (100/100)",
651
+ "prompts: unsupported (50/100)",
652
+ "resources: unsupported (50/100)"
653
+ ]
654
+ },
655
+ {
656
+ "name": "Performance",
657
+ "weight": 0.1,
658
+ "score": 100,
659
+ "details": [
660
+ "Connect: 1287ms",
661
+ "p95 latency: 7ms (3 operations)"
662
+ ]
663
+ }
664
+ ]
665
+ },
666
+ "performanceMetrics": {
667
+ "connectMs": 1286.6761250000018,
668
+ "toolsListMs": 6.683124999999563,
669
+ "promptsListMs": 0.0013330000001587905,
670
+ "resourcesListMs": 0.0037920000013400568
671
+ },
672
+ "runtimeProfile": {
673
+ "egress": [
674
+ {
675
+ "target": "Whether to include supplementary information in the output. This includes UI5 API reference and documentation resources. When calling the tool multiple times for the same file or project, refrain from requesting additional context every time.",
676
+ "protocol": "unknown",
677
+ "source": "description_analysis",
678
+ "confidence": "medium"
679
+ },
680
+ {
681
+ "target": "run_ui5_linter",
682
+ "protocol": "unknown",
683
+ "source": "description_analysis",
684
+ "confidence": "low"
685
+ },
686
+ {
687
+ "target": "get_api_reference",
688
+ "protocol": "unknown",
689
+ "source": "description_analysis",
690
+ "confidence": "low"
691
+ },
692
+ {
693
+ "target": "OData V4 service URL parameter; public artifact redacts local URL examples from the upstream tool description.",
694
+ "protocol": "unknown",
695
+ "source": "description_analysis",
696
+ "confidence": "medium"
697
+ }
698
+ ],
699
+ "stateMutations": [
700
+ {
701
+ "resource": "filesystem",
702
+ "operation": "write",
703
+ "scope": "working_directory",
704
+ "source": "description_analysis"
705
+ },
706
+ {
707
+ "resource": "filesystem",
708
+ "operation": "write",
709
+ "scope": "working_directory",
710
+ "source": "description_analysis"
711
+ },
712
+ {
713
+ "resource": "filesystem",
714
+ "operation": "write",
715
+ "scope": "working_directory",
716
+ "source": "description_analysis"
717
+ },
718
+ {
719
+ "resource": "filesystem",
720
+ "operation": "write",
721
+ "scope": "working_directory",
722
+ "source": "description_analysis"
723
+ },
724
+ {
725
+ "resource": "filesystem",
726
+ "operation": "execute",
727
+ "scope": "working_directory",
728
+ "source": "description_analysis"
729
+ },
730
+ {
731
+ "resource": "filesystem",
732
+ "operation": "write",
733
+ "scope": "working_directory",
734
+ "source": "description_analysis"
735
+ },
736
+ {
737
+ "resource": "filesystem",
738
+ "operation": "write",
739
+ "scope": "working_directory",
740
+ "source": "description_analysis"
741
+ },
742
+ {
743
+ "resource": "filesystem",
744
+ "operation": "write",
745
+ "scope": "working_directory",
746
+ "source": "description_analysis"
747
+ },
748
+ {
749
+ "resource": "filesystem",
750
+ "operation": "write",
751
+ "scope": "working_directory",
752
+ "source": "description_analysis"
753
+ },
754
+ {
755
+ "resource": "filesystem",
756
+ "operation": "write",
757
+ "scope": "working_directory",
758
+ "source": "description_analysis"
759
+ },
760
+ {
761
+ "resource": "filesystem",
762
+ "operation": "write",
763
+ "scope": "working_directory",
764
+ "source": "description_analysis"
765
+ },
766
+ {
767
+ "resource": "filesystem",
768
+ "operation": "write",
769
+ "scope": "working_directory",
770
+ "source": "description_analysis"
771
+ },
772
+ {
773
+ "resource": "filesystem",
774
+ "operation": "write",
775
+ "scope": "working_directory",
776
+ "source": "description_analysis"
777
+ },
778
+ {
779
+ "resource": "filesystem",
780
+ "operation": "write",
781
+ "scope": "working_directory",
782
+ "source": "description_analysis"
783
+ },
784
+ {
785
+ "resource": "filesystem",
786
+ "operation": "write",
787
+ "scope": "working_directory",
788
+ "source": "description_analysis"
789
+ },
790
+ {
791
+ "resource": "filesystem",
792
+ "operation": "write",
793
+ "scope": "working_directory",
794
+ "source": "description_analysis"
795
+ },
796
+ {
797
+ "resource": "filesystem",
798
+ "operation": "write",
799
+ "scope": "working_directory",
800
+ "source": "description_analysis"
801
+ },
802
+ {
803
+ "resource": "filesystem",
804
+ "operation": "write",
805
+ "scope": "working_directory",
806
+ "source": "description_analysis"
807
+ },
808
+ {
809
+ "resource": "filesystem",
810
+ "operation": "write",
811
+ "scope": "working_directory",
812
+ "source": "description_analysis"
813
+ },
814
+ {
815
+ "resource": "filesystem",
816
+ "operation": "write",
817
+ "scope": "working_directory",
818
+ "source": "description_analysis"
819
+ },
820
+ {
821
+ "resource": "filesystem",
822
+ "operation": "write",
823
+ "scope": "working_directory",
824
+ "source": "description_analysis"
825
+ },
826
+ {
827
+ "resource": "filesystem",
828
+ "operation": "write",
829
+ "scope": "working_directory",
830
+ "source": "description_analysis"
831
+ },
832
+ {
833
+ "resource": "filesystem",
834
+ "operation": "execute",
835
+ "scope": "working_directory",
836
+ "source": "description_analysis"
837
+ }
838
+ ],
839
+ "analyzedAt": "2026-07-09T15:15:06.521Z",
840
+ "confidence": "medium"
841
+ }
842
+ }