@kryptosai/mcp-observatory 0.28.0 → 1.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/COMMERCIAL.md +26 -5
  2. package/README.md +65 -12
  3. package/dist/src/action-receipt.d.ts +20 -0
  4. package/dist/src/action-receipt.js +85 -0
  5. package/dist/src/action-receipt.js.map +1 -0
  6. package/dist/src/audit.d.ts +64 -0
  7. package/dist/src/audit.js +359 -0
  8. package/dist/src/audit.js.map +1 -0
  9. package/dist/src/checks/attack-sim.d.ts +2 -0
  10. package/dist/src/checks/attack-sim.js +12 -0
  11. package/dist/src/checks/attack-sim.js.map +1 -1
  12. package/dist/src/cli.js +8 -1
  13. package/dist/src/cli.js.map +1 -1
  14. package/dist/src/commands/attack-sim.js +54 -2
  15. package/dist/src/commands/attack-sim.js.map +1 -1
  16. package/dist/src/commands/audit.d.ts +2 -0
  17. package/dist/src/commands/audit.js +132 -0
  18. package/dist/src/commands/audit.js.map +1 -0
  19. package/dist/src/commands/init-ci.d.ts +2 -0
  20. package/dist/src/commands/init-ci.js +71 -11
  21. package/dist/src/commands/init-ci.js.map +1 -1
  22. package/dist/src/commands/legacy.js +2 -0
  23. package/dist/src/commands/legacy.js.map +1 -1
  24. package/dist/src/commands/receipt.d.ts +2 -0
  25. package/dist/src/commands/receipt.js +113 -0
  26. package/dist/src/commands/receipt.js.map +1 -0
  27. package/dist/src/commands/scan.js +23 -5
  28. package/dist/src/commands/scan.js.map +1 -1
  29. package/dist/src/commands/score.js +63 -0
  30. package/dist/src/commands/score.js.map +1 -1
  31. package/dist/src/commands/setup-ci-conversion.d.ts +2 -1
  32. package/dist/src/commands/setup-ci-conversion.js +22 -8
  33. package/dist/src/commands/setup-ci-conversion.js.map +1 -1
  34. package/dist/src/commands/test.js +18 -1
  35. package/dist/src/commands/test.js.map +1 -1
  36. package/dist/src/findings.d.ts +1 -0
  37. package/dist/src/findings.js +1 -0
  38. package/dist/src/findings.js.map +1 -1
  39. package/dist/src/index.d.ts +2 -0
  40. package/dist/src/index.js +2 -0
  41. package/dist/src/index.js.map +1 -1
  42. package/dist/src/receipt.d.ts +100 -0
  43. package/dist/src/receipt.js +375 -0
  44. package/dist/src/receipt.js.map +1 -0
  45. package/dist/src/reporters/attack-sim.js +6 -1
  46. package/dist/src/reporters/attack-sim.js.map +1 -1
  47. package/dist/src/reporters/sarif.js +11 -1
  48. package/dist/src/reporters/sarif.js.map +1 -1
  49. package/dist/src/security-profiles.d.ts +13 -0
  50. package/dist/src/security-profiles.js +59 -0
  51. package/dist/src/security-profiles.js.map +1 -0
  52. package/dist/src/telemetry.d.ts +7 -0
  53. package/dist/src/telemetry.js.map +1 -1
  54. package/docs/10x-agentic-growth-sprint.md +47 -0
  55. package/docs/agent-ecosystem-promotion-plan.md +1 -1
  56. package/docs/agentic-contributor-outreach.md +52 -0
  57. package/docs/code-scanning-demo.md +2 -2
  58. package/docs/commercial-boundary.md +83 -0
  59. package/docs/contributor-proof-cards/README.md +1 -1
  60. package/docs/examples/nsa-mcp-audit-report.md +372 -0
  61. package/docs/examples/nsa-mcp-results.sarif +930 -0
  62. package/docs/examples/nsa-mcp-score.json +13 -0
  63. package/docs/feishu-lark-mcp.md +1 -1
  64. package/docs/github-code-scanning-for-mcp.md +1 -1
  65. package/docs/government-enterprise-pilot.md +93 -0
  66. package/docs/mcp-receipts.md +109 -0
  67. package/docs/mcp-server-safety-index.md +26 -25
  68. package/docs/nsa-mcp-audit-ci.md +88 -0
  69. package/docs/procurement-one-pager.md +74 -0
  70. package/docs/proof.md +2 -2
  71. package/docs/public-guidance-crosswalk.md +48 -0
  72. package/docs/safety-index/artifacts/antv-chart-server.json +41 -23
  73. package/docs/safety-index/artifacts/antv-chart-server.md +23 -10
  74. package/docs/safety-index/artifacts/browsermcp-server.json +38 -20
  75. package/docs/safety-index/artifacts/browsermcp-server.md +23 -10
  76. package/docs/safety-index/artifacts/context7-server.json +85 -28
  77. package/docs/safety-index/artifacts/context7-server.md +35 -22
  78. package/docs/safety-index/artifacts/cyanheads-git-mcp-server.json +460 -36
  79. package/docs/safety-index/artifacts/cyanheads-git-mcp-server.md +31 -18
  80. package/docs/safety-index/artifacts/everything-server.json +38 -20
  81. package/docs/safety-index/artifacts/everything-server.md +25 -12
  82. package/docs/safety-index/artifacts/executeautomation-playwright-server.json +155 -20
  83. package/docs/safety-index/artifacts/executeautomation-playwright-server.md +26 -13
  84. package/docs/safety-index/artifacts/filesystem-server.json +116 -22
  85. package/docs/safety-index/artifacts/filesystem-server.md +27 -14
  86. package/docs/safety-index/artifacts/kubernetes-server.json +252 -27
  87. package/docs/safety-index/artifacts/kubernetes-server.md +44 -18
  88. package/docs/safety-index/artifacts/memory-server.json +39 -21
  89. package/docs/safety-index/artifacts/memory-server.md +24 -11
  90. package/docs/safety-index/artifacts/opentofu-server.json +38 -20
  91. package/docs/safety-index/artifacts/opentofu-server.md +24 -11
  92. package/docs/safety-index/artifacts/playwright-mcp-server.json +140 -20
  93. package/docs/safety-index/artifacts/playwright-mcp-server.md +26 -13
  94. package/docs/safety-index/artifacts/promptopia-server.json +41 -23
  95. package/docs/safety-index/artifacts/promptopia-server.md +26 -13
  96. package/docs/safety-index/artifacts/puppeteer-server.json +77 -34
  97. package/docs/safety-index/artifacts/puppeteer-server.md +45 -32
  98. package/docs/safety-index/artifacts/ref-tools-server.json +38 -20
  99. package/docs/safety-index/artifacts/ref-tools-server.md +22 -9
  100. package/docs/safety-index/artifacts/sequential-thinking-server.json +39 -21
  101. package/docs/safety-index/artifacts/sequential-thinking-server.md +23 -10
  102. package/docs/security-due-diligence.md +87 -0
  103. package/docs/setup-ci-doctor.md +11 -1
  104. package/docs/tool-call-receipts.md +1 -2
  105. package/examples/insecure-mcp-server/mcp-observatory.target.json +13 -0
  106. package/examples/insecure-mcp-server/server.mjs +62 -0
  107. package/package.json +12 -1
  108. package/scripts/postinstall.mjs +22 -7
@@ -0,0 +1,930 @@
1
+ {
2
+ "$schema": "https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json",
3
+ "version": "2.1.0",
4
+ "runs": [
5
+ {
6
+ "tool": {
7
+ "driver": {
8
+ "name": "mcp-observatory",
9
+ "informationUri": "https://github.com/KryptosAI/mcp-observatory",
10
+ "rules": [
11
+ {
12
+ "id": "mcp-observatory/security/shell-injection",
13
+ "name": "Security: shell-injection",
14
+ "shortDescription": {
15
+ "text": "Security: shell-injection"
16
+ },
17
+ "fullDescription": {
18
+ "text": "Tool \"run_shell\" has parameter \"command\" which may allow arbitrary command execution."
19
+ },
20
+ "defaultConfiguration": {
21
+ "level": "error"
22
+ },
23
+ "help": {
24
+ "text": "Constrain command execution tools with strict allowlists, typed inputs, and clear destructive annotations.\n\nTrust status: critical_risk. Controls: tool_permissions, runtime_safety, input_validation."
25
+ },
26
+ "properties": {
27
+ "tags": [
28
+ "mcp",
29
+ "mcp-observatory",
30
+ "nsa-mcp",
31
+ "tool_permissions",
32
+ "runtime_safety",
33
+ "input_validation"
34
+ ],
35
+ "control_mappings": [
36
+ "tool_permissions",
37
+ "runtime_safety",
38
+ "input_validation"
39
+ ],
40
+ "confidence": "high"
41
+ }
42
+ },
43
+ {
44
+ "id": "mcp-observatory/security/broad-filesystem",
45
+ "name": "Security: broad-filesystem",
46
+ "shortDescription": {
47
+ "text": "Security: broad-filesystem"
48
+ },
49
+ "fullDescription": {
50
+ "text": "Tool \"write_any_file\" accepts filesystem paths and has destructive capabilities."
51
+ },
52
+ "defaultConfiguration": {
53
+ "level": "warning"
54
+ },
55
+ "help": {
56
+ "text": "Narrow filesystem scope, prefer read-only access, and document destructive behavior explicitly.\n\nTrust status: critical_risk. Controls: tool_permissions, trust_boundaries."
57
+ },
58
+ "properties": {
59
+ "tags": [
60
+ "mcp",
61
+ "mcp-observatory",
62
+ "nsa-mcp",
63
+ "tool_permissions",
64
+ "trust_boundaries"
65
+ ],
66
+ "control_mappings": [
67
+ "tool_permissions",
68
+ "trust_boundaries"
69
+ ],
70
+ "confidence": "high"
71
+ }
72
+ },
73
+ {
74
+ "id": "mcp-observatory/security/permissive-schema",
75
+ "name": "Security: permissive-schema",
76
+ "shortDescription": {
77
+ "text": "Security: permissive-schema"
78
+ },
79
+ "fullDescription": {
80
+ "text": "Tool \"collect_secret\" has an empty schema but is marked as destructive."
81
+ },
82
+ "defaultConfiguration": {
83
+ "level": "note"
84
+ },
85
+ "help": {
86
+ "text": "Use a strict input schema and avoid accepting arbitrary properties for destructive tools.\n\nTrust status: critical_risk. Controls: schema_validation, input_validation."
87
+ },
88
+ "properties": {
89
+ "tags": [
90
+ "mcp",
91
+ "mcp-observatory",
92
+ "nsa-mcp",
93
+ "schema_validation",
94
+ "input_validation"
95
+ ],
96
+ "control_mappings": [
97
+ "schema_validation",
98
+ "input_validation"
99
+ ],
100
+ "confidence": "high"
101
+ }
102
+ },
103
+ {
104
+ "id": "mcp-observatory/conformance/diagnostic",
105
+ "name": "conformance: diagnostic",
106
+ "shortDescription": {
107
+ "text": "conformance: diagnostic"
108
+ },
109
+ "fullDescription": {
110
+ "text": "[pass] capabilities-present: Server returned capabilities object."
111
+ },
112
+ "defaultConfiguration": {
113
+ "level": "note"
114
+ },
115
+ "help": {
116
+ "text": "Review the check output and update the MCP server or target configuration before release.\n\nTrust status: critical_risk. Controls: runtime_safety."
117
+ },
118
+ "properties": {
119
+ "tags": [
120
+ "mcp",
121
+ "mcp-observatory",
122
+ "nsa-mcp",
123
+ "runtime_safety"
124
+ ],
125
+ "control_mappings": [
126
+ "runtime_safety"
127
+ ],
128
+ "confidence": "medium"
129
+ }
130
+ },
131
+ {
132
+ "id": "mcp-observatory/attack-sim/tool-poisoning/hidden-instruction",
133
+ "name": "Attack simulation: tool-poisoning",
134
+ "shortDescription": {
135
+ "text": "Attack simulation: tool-poisoning"
136
+ },
137
+ "fullDescription": {
138
+ "text": "tool \"run_shell\" contains hidden instruction override text that could steer an agent."
139
+ },
140
+ "defaultConfiguration": {
141
+ "level": "error"
142
+ },
143
+ "help": {
144
+ "text": "Remove hidden or behavioral instructions from MCP metadata; keep descriptions factual and user-visible.\n\nTrust status: critical_risk. Controls: tool_description_integrity, trust_boundaries."
145
+ },
146
+ "properties": {
147
+ "tags": [
148
+ "mcp",
149
+ "mcp-observatory",
150
+ "nsa-mcp",
151
+ "tool_description_integrity",
152
+ "trust_boundaries"
153
+ ],
154
+ "control_mappings": [
155
+ "tool_description_integrity",
156
+ "trust_boundaries"
157
+ ],
158
+ "confidence": "high"
159
+ }
160
+ },
161
+ {
162
+ "id": "mcp-observatory/attack-sim/permission-boundary/broad-destructive-tool",
163
+ "name": "Attack simulation: permission-boundary",
164
+ "shortDescription": {
165
+ "text": "Attack simulation: permission-boundary"
166
+ },
167
+ "fullDescription": {
168
+ "text": "Tool \"run_shell\" combines broad parameters (command) with destructive or non-read-only behavior."
169
+ },
170
+ "defaultConfiguration": {
171
+ "level": "error"
172
+ },
173
+ "help": {
174
+ "text": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.\n\nTrust status: critical_risk. Controls: tool_permissions, runtime_safety, trust_boundaries."
175
+ },
176
+ "properties": {
177
+ "tags": [
178
+ "mcp",
179
+ "mcp-observatory",
180
+ "nsa-mcp",
181
+ "tool_permissions",
182
+ "runtime_safety",
183
+ "trust_boundaries"
184
+ ],
185
+ "control_mappings": [
186
+ "tool_permissions",
187
+ "runtime_safety",
188
+ "trust_boundaries"
189
+ ],
190
+ "confidence": "high"
191
+ }
192
+ },
193
+ {
194
+ "id": "mcp-observatory/audit/env-secret",
195
+ "name": "Secret-like environment variable configured",
196
+ "shortDescription": {
197
+ "text": "Secret-like environment variable configured"
198
+ },
199
+ "fullDescription": {
200
+ "text": "Target environment contains secret-like variable \"DEMO_API_TOKEN\"."
201
+ },
202
+ "defaultConfiguration": {
203
+ "level": "error"
204
+ },
205
+ "help": {
206
+ "text": "Use a secret manager or CI secret store and verify the MCP server never returns this value in tool responses or logs.\n\nTrust status: critical_risk. Controls: secrets_exposure, auditability."
207
+ },
208
+ "properties": {
209
+ "tags": [
210
+ "mcp",
211
+ "mcp-observatory",
212
+ "nsa-mcp",
213
+ "secrets_exposure",
214
+ "auditability"
215
+ ],
216
+ "control_mappings": [
217
+ "secrets_exposure",
218
+ "auditability"
219
+ ],
220
+ "confidence": "high"
221
+ }
222
+ },
223
+ {
224
+ "id": "mcp-observatory/audit/auditability-not-declared",
225
+ "name": "Audit logging not declared",
226
+ "shortDescription": {
227
+ "text": "Audit logging not declared"
228
+ },
229
+ "fullDescription": {
230
+ "text": "The target did not declare structured audit logging, event output, or traceability metadata for tool calls."
231
+ },
232
+ "defaultConfiguration": {
233
+ "level": "warning"
234
+ },
235
+ "help": {
236
+ "text": "Document how tool calls, permission decisions, failures, and sensitive data handling are logged for security review.\n\nTrust status: critical_risk. Controls: runtime_safety, auditability."
237
+ },
238
+ "properties": {
239
+ "tags": [
240
+ "mcp",
241
+ "mcp-observatory",
242
+ "nsa-mcp",
243
+ "runtime_safety",
244
+ "auditability"
245
+ ],
246
+ "control_mappings": [
247
+ "runtime_safety",
248
+ "auditability"
249
+ ],
250
+ "confidence": "medium"
251
+ }
252
+ }
253
+ ]
254
+ }
255
+ },
256
+ "automationDetails": {
257
+ "id": "mcp-observatory/audit/insecure-mcp-server"
258
+ },
259
+ "results": [
260
+ {
261
+ "ruleId": "mcp-observatory/security/shell-injection",
262
+ "level": "error",
263
+ "message": {
264
+ "text": "Tool \"run_shell\" has parameter \"command\" which may allow arbitrary command execution."
265
+ },
266
+ "locations": [
267
+ {
268
+ "physicalLocation": {
269
+ "artifactLocation": {
270
+ "uri": "nsa-mcp-results.json"
271
+ },
272
+ "region": {
273
+ "startLine": 1
274
+ }
275
+ }
276
+ }
277
+ ],
278
+ "partialFingerprints": {
279
+ "mcp-observatory/fingerprint": "2eae18eafee502bbe912521e"
280
+ },
281
+ "properties": {
282
+ "id": "mcp-observatory/security/shell-injection/f2079218",
283
+ "check_id": "security",
284
+ "severity": "high",
285
+ "category": "security",
286
+ "target": {
287
+ "target_id": "insecure-mcp-server",
288
+ "subject_type": "tool",
289
+ "subject_name": "run_shell"
290
+ },
291
+ "control_mappings": [
292
+ "tool_permissions",
293
+ "runtime_safety",
294
+ "input_validation"
295
+ ],
296
+ "confidence": "high",
297
+ "tags": [
298
+ "mcp",
299
+ "mcp-observatory",
300
+ "nsa-mcp",
301
+ "tool_permissions",
302
+ "runtime_safety",
303
+ "input_validation"
304
+ ]
305
+ }
306
+ },
307
+ {
308
+ "ruleId": "mcp-observatory/security/broad-filesystem",
309
+ "level": "warning",
310
+ "message": {
311
+ "text": "Tool \"write_any_file\" accepts filesystem paths and has destructive capabilities."
312
+ },
313
+ "locations": [
314
+ {
315
+ "physicalLocation": {
316
+ "artifactLocation": {
317
+ "uri": "nsa-mcp-results.json"
318
+ },
319
+ "region": {
320
+ "startLine": 1
321
+ }
322
+ }
323
+ }
324
+ ],
325
+ "partialFingerprints": {
326
+ "mcp-observatory/fingerprint": "3a4074c58a2f545b8aef3f4c"
327
+ },
328
+ "properties": {
329
+ "id": "mcp-observatory/security/broad-filesystem/722ef284",
330
+ "check_id": "security",
331
+ "severity": "medium",
332
+ "category": "security",
333
+ "target": {
334
+ "target_id": "insecure-mcp-server",
335
+ "subject_type": "tool",
336
+ "subject_name": "write_any_file"
337
+ },
338
+ "control_mappings": [
339
+ "tool_permissions",
340
+ "trust_boundaries"
341
+ ],
342
+ "confidence": "high",
343
+ "tags": [
344
+ "mcp",
345
+ "mcp-observatory",
346
+ "nsa-mcp",
347
+ "tool_permissions",
348
+ "trust_boundaries"
349
+ ]
350
+ }
351
+ },
352
+ {
353
+ "ruleId": "mcp-observatory/security/permissive-schema",
354
+ "level": "note",
355
+ "message": {
356
+ "text": "Tool \"collect_secret\" has an empty schema but is marked as destructive."
357
+ },
358
+ "locations": [
359
+ {
360
+ "physicalLocation": {
361
+ "artifactLocation": {
362
+ "uri": "nsa-mcp-results.json"
363
+ },
364
+ "region": {
365
+ "startLine": 1
366
+ }
367
+ }
368
+ }
369
+ ],
370
+ "partialFingerprints": {
371
+ "mcp-observatory/fingerprint": "dc49a1fd45637f71be052587"
372
+ },
373
+ "properties": {
374
+ "id": "mcp-observatory/security/permissive-schema/e9f03d9b",
375
+ "check_id": "security",
376
+ "severity": "low",
377
+ "category": "security",
378
+ "target": {
379
+ "target_id": "insecure-mcp-server",
380
+ "subject_type": "tool",
381
+ "subject_name": "collect_secret"
382
+ },
383
+ "control_mappings": [
384
+ "schema_validation",
385
+ "input_validation"
386
+ ],
387
+ "confidence": "high",
388
+ "tags": [
389
+ "mcp",
390
+ "mcp-observatory",
391
+ "nsa-mcp",
392
+ "schema_validation",
393
+ "input_validation"
394
+ ]
395
+ }
396
+ },
397
+ {
398
+ "ruleId": "mcp-observatory/conformance/diagnostic",
399
+ "level": "note",
400
+ "message": {
401
+ "text": "[pass] capabilities-present: Server returned capabilities object."
402
+ },
403
+ "locations": [
404
+ {
405
+ "physicalLocation": {
406
+ "artifactLocation": {
407
+ "uri": "nsa-mcp-results.json"
408
+ },
409
+ "region": {
410
+ "startLine": 1
411
+ }
412
+ }
413
+ }
414
+ ],
415
+ "partialFingerprints": {
416
+ "mcp-observatory/fingerprint": "fae290ed59175184c602e42b"
417
+ },
418
+ "properties": {
419
+ "id": "mcp-observatory/conformance/diagnostic/b8b27a9c",
420
+ "check_id": "conformance",
421
+ "severity": "info",
422
+ "category": "conformance",
423
+ "target": {
424
+ "target_id": "insecure-mcp-server",
425
+ "subject_type": "check",
426
+ "subject_name": "conformance"
427
+ },
428
+ "control_mappings": [
429
+ "runtime_safety"
430
+ ],
431
+ "confidence": "medium",
432
+ "tags": [
433
+ "mcp",
434
+ "mcp-observatory",
435
+ "nsa-mcp",
436
+ "runtime_safety"
437
+ ]
438
+ }
439
+ },
440
+ {
441
+ "ruleId": "mcp-observatory/conformance/diagnostic",
442
+ "level": "note",
443
+ "message": {
444
+ "text": "[pass] server-info: Server provided initialization info."
445
+ },
446
+ "locations": [
447
+ {
448
+ "physicalLocation": {
449
+ "artifactLocation": {
450
+ "uri": "nsa-mcp-results.json"
451
+ },
452
+ "region": {
453
+ "startLine": 1
454
+ }
455
+ }
456
+ }
457
+ ],
458
+ "partialFingerprints": {
459
+ "mcp-observatory/fingerprint": "4be4590f724dd5dab7aade15"
460
+ },
461
+ "properties": {
462
+ "id": "mcp-observatory/conformance/diagnostic/6395e83c",
463
+ "check_id": "conformance",
464
+ "severity": "info",
465
+ "category": "conformance",
466
+ "target": {
467
+ "target_id": "insecure-mcp-server",
468
+ "subject_type": "check",
469
+ "subject_name": "conformance"
470
+ },
471
+ "control_mappings": [
472
+ "runtime_safety"
473
+ ],
474
+ "confidence": "medium",
475
+ "tags": [
476
+ "mcp",
477
+ "mcp-observatory",
478
+ "nsa-mcp",
479
+ "runtime_safety"
480
+ ]
481
+ }
482
+ },
483
+ {
484
+ "ruleId": "mcp-observatory/conformance/diagnostic",
485
+ "level": "note",
486
+ "message": {
487
+ "text": "[pass] tools-capability-match: tools/list returned 3 tool(s)."
488
+ },
489
+ "locations": [
490
+ {
491
+ "physicalLocation": {
492
+ "artifactLocation": {
493
+ "uri": "nsa-mcp-results.json"
494
+ },
495
+ "region": {
496
+ "startLine": 1
497
+ }
498
+ }
499
+ }
500
+ ],
501
+ "partialFingerprints": {
502
+ "mcp-observatory/fingerprint": "e5002341330a5ff7d57768c7"
503
+ },
504
+ "properties": {
505
+ "id": "mcp-observatory/conformance/diagnostic/9179af03",
506
+ "check_id": "conformance",
507
+ "severity": "info",
508
+ "category": "conformance",
509
+ "target": {
510
+ "target_id": "insecure-mcp-server",
511
+ "subject_type": "check",
512
+ "subject_name": "conformance"
513
+ },
514
+ "control_mappings": [
515
+ "runtime_safety"
516
+ ],
517
+ "confidence": "medium",
518
+ "tags": [
519
+ "mcp",
520
+ "mcp-observatory",
521
+ "nsa-mcp",
522
+ "runtime_safety"
523
+ ]
524
+ }
525
+ },
526
+ {
527
+ "ruleId": "mcp-observatory/conformance/diagnostic",
528
+ "level": "note",
529
+ "message": {
530
+ "text": "[pass] prompts-capability-match: Prompts not advertised — endpoint check skipped."
531
+ },
532
+ "locations": [
533
+ {
534
+ "physicalLocation": {
535
+ "artifactLocation": {
536
+ "uri": "nsa-mcp-results.json"
537
+ },
538
+ "region": {
539
+ "startLine": 1
540
+ }
541
+ }
542
+ }
543
+ ],
544
+ "partialFingerprints": {
545
+ "mcp-observatory/fingerprint": "a6e09532808401c798668ba4"
546
+ },
547
+ "properties": {
548
+ "id": "mcp-observatory/conformance/diagnostic/4fa52fd2",
549
+ "check_id": "conformance",
550
+ "severity": "info",
551
+ "category": "conformance",
552
+ "target": {
553
+ "target_id": "insecure-mcp-server",
554
+ "subject_type": "check",
555
+ "subject_name": "conformance"
556
+ },
557
+ "control_mappings": [
558
+ "runtime_safety"
559
+ ],
560
+ "confidence": "medium",
561
+ "tags": [
562
+ "mcp",
563
+ "mcp-observatory",
564
+ "nsa-mcp",
565
+ "runtime_safety"
566
+ ]
567
+ }
568
+ },
569
+ {
570
+ "ruleId": "mcp-observatory/conformance/diagnostic",
571
+ "level": "note",
572
+ "message": {
573
+ "text": "[pass] resources-capability-match: Resources not advertised — endpoint check skipped."
574
+ },
575
+ "locations": [
576
+ {
577
+ "physicalLocation": {
578
+ "artifactLocation": {
579
+ "uri": "nsa-mcp-results.json"
580
+ },
581
+ "region": {
582
+ "startLine": 1
583
+ }
584
+ }
585
+ }
586
+ ],
587
+ "partialFingerprints": {
588
+ "mcp-observatory/fingerprint": "47ea71b4d26b22d807bd5273"
589
+ },
590
+ "properties": {
591
+ "id": "mcp-observatory/conformance/diagnostic/e70c7c63",
592
+ "check_id": "conformance",
593
+ "severity": "info",
594
+ "category": "conformance",
595
+ "target": {
596
+ "target_id": "insecure-mcp-server",
597
+ "subject_type": "check",
598
+ "subject_name": "conformance"
599
+ },
600
+ "control_mappings": [
601
+ "runtime_safety"
602
+ ],
603
+ "confidence": "medium",
604
+ "tags": [
605
+ "mcp",
606
+ "mcp-observatory",
607
+ "nsa-mcp",
608
+ "runtime_safety"
609
+ ]
610
+ }
611
+ },
612
+ {
613
+ "ruleId": "mcp-observatory/conformance/diagnostic",
614
+ "level": "note",
615
+ "message": {
616
+ "text": "[pass] tool-response-content: Tool \"collect_secret\" response has valid content array."
617
+ },
618
+ "locations": [
619
+ {
620
+ "physicalLocation": {
621
+ "artifactLocation": {
622
+ "uri": "nsa-mcp-results.json"
623
+ },
624
+ "region": {
625
+ "startLine": 1
626
+ }
627
+ }
628
+ }
629
+ ],
630
+ "partialFingerprints": {
631
+ "mcp-observatory/fingerprint": "b76d99d2c84da453d87f852d"
632
+ },
633
+ "properties": {
634
+ "id": "mcp-observatory/conformance/diagnostic/8dc474c0",
635
+ "check_id": "conformance",
636
+ "severity": "info",
637
+ "category": "conformance",
638
+ "target": {
639
+ "target_id": "insecure-mcp-server",
640
+ "subject_type": "check",
641
+ "subject_name": "conformance"
642
+ },
643
+ "control_mappings": [
644
+ "runtime_safety"
645
+ ],
646
+ "confidence": "medium",
647
+ "tags": [
648
+ "mcp",
649
+ "mcp-observatory",
650
+ "nsa-mcp",
651
+ "runtime_safety"
652
+ ]
653
+ }
654
+ },
655
+ {
656
+ "ruleId": "mcp-observatory/conformance/diagnostic",
657
+ "level": "note",
658
+ "message": {
659
+ "text": "[pass] error-handling: Server returned proper error code -32601 for unknown method."
660
+ },
661
+ "locations": [
662
+ {
663
+ "physicalLocation": {
664
+ "artifactLocation": {
665
+ "uri": "nsa-mcp-results.json"
666
+ },
667
+ "region": {
668
+ "startLine": 1
669
+ }
670
+ }
671
+ }
672
+ ],
673
+ "partialFingerprints": {
674
+ "mcp-observatory/fingerprint": "677a9ecc2a4fb566106e03bc"
675
+ },
676
+ "properties": {
677
+ "id": "mcp-observatory/conformance/diagnostic/ff952327",
678
+ "check_id": "conformance",
679
+ "severity": "info",
680
+ "category": "conformance",
681
+ "target": {
682
+ "target_id": "insecure-mcp-server",
683
+ "subject_type": "check",
684
+ "subject_name": "conformance"
685
+ },
686
+ "control_mappings": [
687
+ "runtime_safety"
688
+ ],
689
+ "confidence": "medium",
690
+ "tags": [
691
+ "mcp",
692
+ "mcp-observatory",
693
+ "nsa-mcp",
694
+ "runtime_safety"
695
+ ]
696
+ }
697
+ },
698
+ {
699
+ "ruleId": "mcp-observatory/attack-sim/tool-poisoning/hidden-instruction",
700
+ "level": "error",
701
+ "message": {
702
+ "text": "tool \"run_shell\" contains hidden instruction override text that could steer an agent."
703
+ },
704
+ "locations": [
705
+ {
706
+ "physicalLocation": {
707
+ "artifactLocation": {
708
+ "uri": "nsa-mcp-results.json"
709
+ },
710
+ "region": {
711
+ "startLine": 1
712
+ }
713
+ }
714
+ }
715
+ ],
716
+ "partialFingerprints": {
717
+ "mcp-observatory/fingerprint": "923b7aeb72cd4f1d0d4e8cc6"
718
+ },
719
+ "properties": {
720
+ "id": "mcp-observatory/attack-sim/attack-sim/tool-poisoning/hidden-instruction/4f6d36e1",
721
+ "check_id": "attack-sim",
722
+ "severity": "high",
723
+ "category": "attack-sim",
724
+ "target": {
725
+ "target_id": "insecure-mcp-server",
726
+ "subject_type": "tool",
727
+ "subject_name": "run_shell"
728
+ },
729
+ "control_mappings": [
730
+ "tool_description_integrity",
731
+ "trust_boundaries"
732
+ ],
733
+ "confidence": "high",
734
+ "tags": [
735
+ "mcp",
736
+ "mcp-observatory",
737
+ "nsa-mcp",
738
+ "tool_description_integrity",
739
+ "trust_boundaries"
740
+ ]
741
+ }
742
+ },
743
+ {
744
+ "ruleId": "mcp-observatory/attack-sim/permission-boundary/broad-destructive-tool",
745
+ "level": "error",
746
+ "message": {
747
+ "text": "Tool \"run_shell\" combines broad parameters (command) with destructive or non-read-only behavior."
748
+ },
749
+ "locations": [
750
+ {
751
+ "physicalLocation": {
752
+ "artifactLocation": {
753
+ "uri": "nsa-mcp-results.json"
754
+ },
755
+ "region": {
756
+ "startLine": 1
757
+ }
758
+ }
759
+ }
760
+ ],
761
+ "partialFingerprints": {
762
+ "mcp-observatory/fingerprint": "62b797439e1e434c977fe0d9"
763
+ },
764
+ "properties": {
765
+ "id": "mcp-observatory/attack-sim/attack-sim/permission-boundary/broad-destructive-tool/fe074eb3",
766
+ "check_id": "attack-sim",
767
+ "severity": "high",
768
+ "category": "attack-sim",
769
+ "target": {
770
+ "target_id": "insecure-mcp-server",
771
+ "subject_type": "tool",
772
+ "subject_name": "run_shell"
773
+ },
774
+ "control_mappings": [
775
+ "tool_permissions",
776
+ "runtime_safety",
777
+ "trust_boundaries"
778
+ ],
779
+ "confidence": "high",
780
+ "tags": [
781
+ "mcp",
782
+ "mcp-observatory",
783
+ "nsa-mcp",
784
+ "tool_permissions",
785
+ "runtime_safety",
786
+ "trust_boundaries"
787
+ ]
788
+ }
789
+ },
790
+ {
791
+ "ruleId": "mcp-observatory/attack-sim/permission-boundary/broad-destructive-tool",
792
+ "level": "warning",
793
+ "message": {
794
+ "text": "Tool \"write_any_file\" combines broad parameters (path) with destructive or non-read-only behavior."
795
+ },
796
+ "locations": [
797
+ {
798
+ "physicalLocation": {
799
+ "artifactLocation": {
800
+ "uri": "nsa-mcp-results.json"
801
+ },
802
+ "region": {
803
+ "startLine": 1
804
+ }
805
+ }
806
+ }
807
+ ],
808
+ "partialFingerprints": {
809
+ "mcp-observatory/fingerprint": "0bca06a33bf23db74f667f35"
810
+ },
811
+ "properties": {
812
+ "id": "mcp-observatory/attack-sim/attack-sim/permission-boundary/broad-destructive-tool/a6beb106",
813
+ "check_id": "attack-sim",
814
+ "severity": "medium",
815
+ "category": "attack-sim",
816
+ "target": {
817
+ "target_id": "insecure-mcp-server",
818
+ "subject_type": "tool",
819
+ "subject_name": "write_any_file"
820
+ },
821
+ "control_mappings": [
822
+ "tool_permissions",
823
+ "runtime_safety",
824
+ "trust_boundaries"
825
+ ],
826
+ "confidence": "high",
827
+ "tags": [
828
+ "mcp",
829
+ "mcp-observatory",
830
+ "nsa-mcp",
831
+ "tool_permissions",
832
+ "runtime_safety",
833
+ "trust_boundaries"
834
+ ]
835
+ }
836
+ },
837
+ {
838
+ "ruleId": "mcp-observatory/audit/env-secret",
839
+ "level": "error",
840
+ "message": {
841
+ "text": "Target environment contains secret-like variable \"DEMO_API_TOKEN\"."
842
+ },
843
+ "locations": [
844
+ {
845
+ "physicalLocation": {
846
+ "artifactLocation": {
847
+ "uri": "nsa-mcp-results.json"
848
+ },
849
+ "region": {
850
+ "startLine": 1
851
+ }
852
+ }
853
+ }
854
+ ],
855
+ "partialFingerprints": {
856
+ "mcp-observatory/fingerprint": "68cef245bdfe0757e473259c"
857
+ },
858
+ "properties": {
859
+ "id": "mcp-observatory/audit/env-secret/68cef245bdfe0757e473259c",
860
+ "check_id": "security",
861
+ "severity": "critical",
862
+ "category": "secrets_exposure",
863
+ "target": {
864
+ "target_id": "insecure-mcp-server",
865
+ "subject_type": "target",
866
+ "subject_name": "insecure-mcp-server"
867
+ },
868
+ "control_mappings": [
869
+ "secrets_exposure",
870
+ "auditability"
871
+ ],
872
+ "confidence": "high",
873
+ "tags": [
874
+ "mcp",
875
+ "mcp-observatory",
876
+ "nsa-mcp",
877
+ "secrets_exposure",
878
+ "auditability"
879
+ ]
880
+ }
881
+ },
882
+ {
883
+ "ruleId": "mcp-observatory/audit/auditability-not-declared",
884
+ "level": "warning",
885
+ "message": {
886
+ "text": "The target did not declare structured audit logging, event output, or traceability metadata for tool calls."
887
+ },
888
+ "locations": [
889
+ {
890
+ "physicalLocation": {
891
+ "artifactLocation": {
892
+ "uri": "nsa-mcp-results.json"
893
+ },
894
+ "region": {
895
+ "startLine": 1
896
+ }
897
+ }
898
+ }
899
+ ],
900
+ "partialFingerprints": {
901
+ "mcp-observatory/fingerprint": "dc2c3ab3927debe0a4621535"
902
+ },
903
+ "properties": {
904
+ "id": "mcp-observatory/audit/auditability/dc2c3ab3927debe0a4621535",
905
+ "check_id": "conformance",
906
+ "severity": "medium",
907
+ "category": "auditability",
908
+ "target": {
909
+ "target_id": "insecure-mcp-server",
910
+ "subject_type": "target",
911
+ "subject_name": "insecure-mcp-server"
912
+ },
913
+ "control_mappings": [
914
+ "runtime_safety",
915
+ "auditability"
916
+ ],
917
+ "confidence": "medium",
918
+ "tags": [
919
+ "mcp",
920
+ "mcp-observatory",
921
+ "nsa-mcp",
922
+ "runtime_safety",
923
+ "auditability"
924
+ ]
925
+ }
926
+ }
927
+ ]
928
+ }
929
+ ]
930
+ }