visus-mcp 0.6.0 → 0.6.2

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 (147) hide show
  1. package/.claude/settings.local.json +42 -1
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +47 -0
  3. package/.github/ISSUE_TEMPLATE/false_positive.md +43 -0
  4. package/.github/ISSUE_TEMPLATE/new_pattern.md +49 -0
  5. package/.github/ISSUE_TEMPLATE/security_report.md +31 -0
  6. package/.github/PULL_REQUEST_TEMPLATE.md +39 -0
  7. package/.mcpregistry_github_token +1 -0
  8. package/.mcpregistry_registry_token +1 -0
  9. package/CLAUDE.md +197 -0
  10. package/CONTRIBUTING.md +329 -0
  11. package/README.md +111 -45
  12. package/STATUS.md +167 -29
  13. package/SUBMISSION.md +66 -0
  14. package/TROUBLESHOOT-COGNITO-AUTH-20260324-2029.md +415 -0
  15. package/TROUBLESHOOT-COGNITO-JWT-20260324.md +592 -0
  16. package/dist/browser/playwright-renderer.d.ts.map +1 -1
  17. package/dist/browser/playwright-renderer.js +71 -51
  18. package/dist/browser/playwright-renderer.js.map +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +49 -6
  21. package/dist/index.js.map +1 -1
  22. package/dist/sanitizer/elicit-runner.d.ts +48 -0
  23. package/dist/sanitizer/elicit-runner.d.ts.map +1 -0
  24. package/dist/sanitizer/elicit-runner.js +100 -0
  25. package/dist/sanitizer/elicit-runner.js.map +1 -0
  26. package/dist/sanitizer/framework-mapper.d.ts +2 -0
  27. package/dist/sanitizer/framework-mapper.d.ts.map +1 -1
  28. package/dist/sanitizer/framework-mapper.js +91 -45
  29. package/dist/sanitizer/framework-mapper.js.map +1 -1
  30. package/dist/sanitizer/hitl-gate.d.ts +69 -0
  31. package/dist/sanitizer/hitl-gate.d.ts.map +1 -0
  32. package/dist/sanitizer/hitl-gate.js +101 -0
  33. package/dist/sanitizer/hitl-gate.js.map +1 -0
  34. package/dist/sanitizer/threat-reporter.d.ts +1 -0
  35. package/dist/sanitizer/threat-reporter.d.ts.map +1 -1
  36. package/dist/sanitizer/threat-reporter.js +10 -7
  37. package/dist/sanitizer/threat-reporter.js.map +1 -1
  38. package/infrastructure/stack.ts +1 -0
  39. package/lambda-deploy/index.js +81512 -0
  40. package/lambda-deploy/index.js.map +7 -0
  41. package/lambda-package/browser/__mocks__/playwright-renderer.d.ts +25 -0
  42. package/lambda-package/browser/__mocks__/playwright-renderer.d.ts.map +1 -0
  43. package/lambda-package/browser/__mocks__/playwright-renderer.js +119 -0
  44. package/lambda-package/browser/__mocks__/playwright-renderer.js.map +1 -0
  45. package/lambda-package/browser/playwright-renderer.d.ts +40 -0
  46. package/lambda-package/browser/playwright-renderer.d.ts.map +1 -0
  47. package/lambda-package/browser/playwright-renderer.js +214 -0
  48. package/lambda-package/browser/playwright-renderer.js.map +1 -0
  49. package/lambda-package/browser/reader.d.ts +31 -0
  50. package/lambda-package/browser/reader.d.ts.map +1 -0
  51. package/lambda-package/browser/reader.js +98 -0
  52. package/lambda-package/browser/reader.js.map +1 -0
  53. package/lambda-package/index.d.ts +18 -0
  54. package/lambda-package/index.d.ts.map +1 -0
  55. package/lambda-package/index.js +238 -0
  56. package/lambda-package/index.js.map +1 -0
  57. package/lambda-package/lambda-handler.d.ts +28 -0
  58. package/lambda-package/lambda-handler.d.ts.map +1 -0
  59. package/lambda-package/lambda-handler.js +257 -0
  60. package/lambda-package/lambda-handler.js.map +1 -0
  61. package/lambda-package/package-lock.json +7435 -0
  62. package/lambda-package/package.json +74 -0
  63. package/lambda-package/runtime.d.ts +50 -0
  64. package/lambda-package/runtime.d.ts.map +1 -0
  65. package/lambda-package/runtime.js +86 -0
  66. package/lambda-package/runtime.js.map +1 -0
  67. package/lambda-package/sanitizer/elicit-runner.d.ts +48 -0
  68. package/lambda-package/sanitizer/elicit-runner.d.ts.map +1 -0
  69. package/lambda-package/sanitizer/elicit-runner.js +100 -0
  70. package/lambda-package/sanitizer/elicit-runner.js.map +1 -0
  71. package/lambda-package/sanitizer/framework-mapper.d.ts +24 -0
  72. package/lambda-package/sanitizer/framework-mapper.d.ts.map +1 -0
  73. package/lambda-package/sanitizer/framework-mapper.js +342 -0
  74. package/lambda-package/sanitizer/framework-mapper.js.map +1 -0
  75. package/lambda-package/sanitizer/hitl-gate.d.ts +69 -0
  76. package/lambda-package/sanitizer/hitl-gate.d.ts.map +1 -0
  77. package/lambda-package/sanitizer/hitl-gate.js +101 -0
  78. package/lambda-package/sanitizer/hitl-gate.js.map +1 -0
  79. package/lambda-package/sanitizer/index.d.ts +63 -0
  80. package/lambda-package/sanitizer/index.d.ts.map +1 -0
  81. package/lambda-package/sanitizer/index.js +105 -0
  82. package/lambda-package/sanitizer/index.js.map +1 -0
  83. package/lambda-package/sanitizer/injection-detector.d.ts +34 -0
  84. package/lambda-package/sanitizer/injection-detector.d.ts.map +1 -0
  85. package/lambda-package/sanitizer/injection-detector.js +89 -0
  86. package/lambda-package/sanitizer/injection-detector.js.map +1 -0
  87. package/lambda-package/sanitizer/patterns.d.ts +30 -0
  88. package/lambda-package/sanitizer/patterns.d.ts.map +1 -0
  89. package/lambda-package/sanitizer/patterns.js +372 -0
  90. package/lambda-package/sanitizer/patterns.js.map +1 -0
  91. package/lambda-package/sanitizer/pii-allowlist.d.ts +49 -0
  92. package/lambda-package/sanitizer/pii-allowlist.d.ts.map +1 -0
  93. package/lambda-package/sanitizer/pii-allowlist.js +231 -0
  94. package/lambda-package/sanitizer/pii-allowlist.js.map +1 -0
  95. package/lambda-package/sanitizer/pii-redactor.d.ts +41 -0
  96. package/lambda-package/sanitizer/pii-redactor.d.ts.map +1 -0
  97. package/lambda-package/sanitizer/pii-redactor.js +213 -0
  98. package/lambda-package/sanitizer/pii-redactor.js.map +1 -0
  99. package/lambda-package/sanitizer/severity-classifier.d.ts +33 -0
  100. package/lambda-package/sanitizer/severity-classifier.d.ts.map +1 -0
  101. package/lambda-package/sanitizer/severity-classifier.js +113 -0
  102. package/lambda-package/sanitizer/severity-classifier.js.map +1 -0
  103. package/lambda-package/sanitizer/threat-reporter.d.ts +66 -0
  104. package/lambda-package/sanitizer/threat-reporter.d.ts.map +1 -0
  105. package/lambda-package/sanitizer/threat-reporter.js +163 -0
  106. package/lambda-package/sanitizer/threat-reporter.js.map +1 -0
  107. package/lambda-package/tools/fetch-structured.d.ts +51 -0
  108. package/lambda-package/tools/fetch-structured.d.ts.map +1 -0
  109. package/lambda-package/tools/fetch-structured.js +237 -0
  110. package/lambda-package/tools/fetch-structured.js.map +1 -0
  111. package/lambda-package/tools/fetch.d.ts +49 -0
  112. package/lambda-package/tools/fetch.d.ts.map +1 -0
  113. package/lambda-package/tools/fetch.js +131 -0
  114. package/lambda-package/tools/fetch.js.map +1 -0
  115. package/lambda-package/tools/read.d.ts +51 -0
  116. package/lambda-package/tools/read.d.ts.map +1 -0
  117. package/lambda-package/tools/read.js +127 -0
  118. package/lambda-package/tools/read.js.map +1 -0
  119. package/lambda-package/tools/search.d.ts +45 -0
  120. package/lambda-package/tools/search.d.ts.map +1 -0
  121. package/lambda-package/tools/search.js +220 -0
  122. package/lambda-package/tools/search.js.map +1 -0
  123. package/lambda-package/types.d.ts +167 -0
  124. package/lambda-package/types.d.ts.map +1 -0
  125. package/lambda-package/types.js +16 -0
  126. package/lambda-package/types.js.map +1 -0
  127. package/lambda-package/utils/format-converter.d.ts +39 -0
  128. package/lambda-package/utils/format-converter.d.ts.map +1 -0
  129. package/lambda-package/utils/format-converter.js +191 -0
  130. package/lambda-package/utils/format-converter.js.map +1 -0
  131. package/lambda-package/utils/truncate.d.ts +26 -0
  132. package/lambda-package/utils/truncate.d.ts.map +1 -0
  133. package/lambda-package/utils/truncate.js +54 -0
  134. package/lambda-package/utils/truncate.js.map +1 -0
  135. package/lambda.zip +0 -0
  136. package/mcp.json +44 -0
  137. package/package.json +9 -8
  138. package/server.json +43 -0
  139. package/src/browser/playwright-renderer.ts +74 -51
  140. package/src/index.ts +78 -6
  141. package/src/sanitizer/elicit-runner.ts +125 -0
  142. package/src/sanitizer/framework-mapper.ts +92 -45
  143. package/src/sanitizer/hitl-gate.ts +111 -0
  144. package/src/sanitizer/threat-reporter.ts +11 -7
  145. package/tests/elicit-runner.test.ts +232 -0
  146. package/tests/hitl-gate.test.ts +267 -0
  147. package/tests/threat-reporter.test.ts +69 -1
package/STATUS.md CHANGED
@@ -1,17 +1,140 @@
1
1
  # Visus MCP - Project Status
2
2
 
3
- **Generated:** 2026-03-23 (Updated)
4
- **Version:** 0.6.0-dev
3
+ **Generated:** 2026-03-24
4
+ **Version:** 0.7.0
5
5
  **Phase:** 3 (Anthropic Directory Prep)
6
- **Status:** 🚧 **v0.6.0 IN DEVELOPMENT** - Content-Type Format Detection
6
+ **Status:** **v0.7.0 COMPLETE** - Human-in-the-Loop Elicitation Bridge
7
7
 
8
8
  ---
9
9
 
10
- ## v0.6.0 Development - Content-Type Format Detection
10
+ ## v0.7.0 Release - Human-in-the-Loop Elicitation Bridge for CRITICAL Threats
11
11
 
12
- **Status:** 🚧 IN DEVELOPMENT
12
+ **Status:** COMPLETE (Ready for release)
13
+ **Type:** Security enhancement + UX feature
14
+ **Implemented:** 2026-03-24
15
+
16
+ ### New Features
17
+
18
+ **🎯 HITL (Human-in-the-Loop) Elicitation for CRITICAL Threats**
19
+
20
+ Adds user confirmation dialogs via MCP elicitation when CRITICAL severity threats are detected, turning silent sanitization events into active security gates.
21
+
22
+ **Key Features:**
23
+ - ✅ MCP elicitation integration using `server.elicitInput()`
24
+ - ✅ Triggers only on CRITICAL severity findings (HIGH/MEDIUM/LOW silent)
25
+ - ✅ Three-action response model: accept, decline, cancel
26
+ - ✅ Fail-safe behavior: elicitation errors always proceed with sanitized content
27
+ - ✅ User choice to include/exclude threat report in response
28
+ - ✅ Flat primitive schema (no nested objects per MCP spec)
29
+ - ✅ Comprehensive test coverage (2 new test files)
30
+
31
+ **HITL Trigger Conditions:**
32
+ - Overall severity must be CRITICAL
33
+ - Total findings must be > 0
34
+ - Only ONE elicitation per tool call (MCP spec constraint)
35
+
36
+ **User Experience:**
37
+ When a CRITICAL threat is detected:
38
+ ```
39
+ ⚠️ Visus blocked a CRITICAL threat on this page.
40
+
41
+ 2 injection attempt(s) detected on: https://malicious.example.com
42
+
43
+ Highest severity finding: role_hijacking
44
+ (LLM01:2025 | AML.T0051.000)
45
+
46
+ Content has been sanitized. Proceed with clean version?
47
+
48
+ [ Proceed with sanitized content ] [ Include threat report ]
49
+ ```
50
+
51
+ **Three Outcomes:**
52
+ 1. **Accept** → Sanitized content delivered, threat report included if requested
53
+ 2. **Decline** → Request blocked, `blocked: true` response with threat details for review
54
+ 3. **Timeout / Error** → Sanitized content delivered (fail-safe)
55
+
56
+ **Security Model:**
57
+ - Sanitization is the security gate (content ALWAYS sanitized)
58
+ - HITL is UX (provides visibility and user choice)
59
+ - Fail-safe behavior ensures content never blocked due to elicitation failure
60
+ - No sensitive data requested via elicitation (MCP best practice)
61
+
62
+ **Technical Implementation:**
63
+
64
+ **New Components:**
65
+ 1. **src/sanitizer/hitl-gate.ts** - Decision logic and message builder
66
+ - `shouldElicit(threatReport)` - Returns true only for CRITICAL severity
67
+ - `buildElicitMessage(threatReport, url)` - Generates user-facing message
68
+ - `ElicitSchema` - Flat primitive schema for MCP elicitation
69
+
70
+ 2. **src/sanitizer/elicit-runner.ts** - Elicitation execution with fail-safe
71
+ - `runElicitation(server, threatReport, url)` - Executes MCP elicitation
72
+ - Comprehensive error handling (timeout, unsupported client, network errors)
73
+ - Returns `{ proceed: boolean, includeReport: boolean }`
74
+
75
+ **Modified Files:**
76
+ - `src/index.ts` - Added `handleCriticalThreatElicitation()` helper
77
+ - Integrated into all four tool handlers (fetch, fetch_structured, read, search)
78
+ - Elicitation runs AFTER tool completion, BEFORE response to client
79
+ - For `visus_search`, uses query as "URL" in elicitation message
80
+
81
+ **Test Coverage:**
82
+
83
+ New test files:
84
+ - `tests/hitl-gate.test.ts` - 15 tests covering:
85
+ - `shouldElicit` returns true for CRITICAL with findings
86
+ - `shouldElicit` returns false for HIGH, MEDIUM, LOW, CLEAN
87
+ - `shouldElicit` returns false for null report
88
+ - `shouldElicit` returns false for CRITICAL with zero findings
89
+ - `buildElicitMessage` contains URL and finding count
90
+ - `buildElicitMessage` is under 300 characters
91
+ - `buildElicitMessage` contains top category and framework IDs
92
+ - `buildElicitMessage` handles empty findings gracefully
93
+ - `ElicitSchema` has flat primitive properties only
94
+ - `ElicitSchema` required array contains 'proceed'
95
+
96
+ - `tests/elicit-runner.test.ts` - 15 tests covering:
97
+ - Returns proceed:true when user accepts with proceed:true
98
+ - Returns proceed:false when user accepts with proceed:false
99
+ - Returns proceed:false on decline action
100
+ - Returns proceed:false on cancel action
101
+ - Includes report when user checks view_report
102
+ - Excludes report when user unchecks view_report
103
+ - Defaults to including report when view_report undefined
104
+ - Fail-safe: proceeds on elicitation error
105
+ - Fail-safe: proceeds on timeout
106
+ - Fail-safe: proceeds on unknown action
107
+
108
+ **Test Results:** ✅ 276/276 tests passing (30 new HITL tests added)
109
+
110
+ **README Documentation:**
111
+ - Added "Human-in-the-Loop Security" section after "When Reports Are Generated"
112
+ - Documented three outcomes (accept, decline, timeout)
113
+ - Clarified security model (sanitization is the gate, HITL is UX)
114
+ - Included example elicitation dialog
115
+
116
+ **Dependencies:**
117
+ - No new dependencies added (uses existing @modelcontextprotocol/sdk@^1.27.1)
118
+
119
+ **SDK Elicitation API Used:**
120
+ - `server.elicitInput(params, options)` returns `Promise<ElicitResult>`
121
+ - `ElicitResult.action`: "accept" | "decline" | "cancel"
122
+ - `ElicitResult.content`: Optional<Record<string, primitive>>
123
+ - CRITICAL constraint: Only ONE elicitation per tool call (spec limit)
124
+
125
+ **Future Enhancements:**
126
+ - Task-augmented elicitation for long-running flows (experimental feature)
127
+ - URL-based elicitation mode for external auth flows
128
+ - Multi-step elicitation for complex user decisions
129
+
130
+ ---
131
+
132
+ ## v0.6.0 Release - Content-Type Format Detection
133
+
134
+ **Status:** ✅ RELEASED
13
135
  **Type:** Feature enhancement
14
- **Implemented:** 2026-03-23
136
+ **Published:** 2026-03-23
137
+ **Install:** `npm install -g visus-mcp@0.6.0`
15
138
 
16
139
  ### New Features
17
140
 
@@ -77,8 +200,8 @@ Sanitization (43 patterns + PII) → Token Ceiling → Output
77
200
  - `convertXml(raw)`: Parses XML to clean text using fast-xml-parser
78
201
  - `convertRss(raw)`: Extracts RSS/Atom metadata and items to Markdown
79
202
 
80
- **Dependencies Added:**
81
- - `fast-xml-parser`: ^4.5.0 (already installed, no new dependency)
203
+ **Dependencies:**
204
+ - `fast-xml-parser`: ^5.5.8 (already installed, no new dependency added)
82
205
 
83
206
  **Test Coverage:**
84
207
  New test scenarios in `tests/fetch-tool.test.ts`:
@@ -143,10 +266,11 @@ When prompt injection or PII is detected, Visus now automatically generates stru
143
266
  **Key Features:**
144
267
  - ✅ TOON-formatted findings array (token-efficient, machine-readable)
145
268
  - ✅ Markdown compliance report (human-readable, renders in Claude Desktop)
146
- - ✅ Three framework alignments: OWASP LLM Top 10, NIST AI 600-1, MITRE ATLAS
269
+ - ✅ Four framework alignments: OWASP LLM Top 10, NIST AI 600-1, MITRE ATLAS, ISO/IEC 42001
147
270
  - ✅ Severity classification (CRITICAL, HIGH, MEDIUM, LOW, CLEAN)
148
271
  - ✅ Zero overhead for clean pages (report omitted when no findings)
149
272
  - ✅ Aggregated reporting across multiple results (search, structured extraction)
273
+ - ✅ ISO/IEC 42001:2023 Annex A framework mapping added
150
274
  - ✅ 31 new tests (232 total, all passing)
151
275
  - ✅ Zero regressions - all existing tests continue to pass
152
276
 
@@ -169,6 +293,7 @@ When prompt injection or PII is detected, Visus now automatically generates stru
169
293
  - **OWASP LLM Top 10 (2025)**: Industry-standard LLM security risks
170
294
  - **NIST AI 600-1**: Generative AI Profile for risk management
171
295
  - **MITRE ATLAS**: Adversarial Threat Landscape for AI Systems
296
+ - **ISO/IEC 42001:2023**: International AI Management System standard (Annex A controls)
172
297
 
173
298
  **Severity Classification:**
174
299
  All 43 injection patterns mapped to severity levels:
@@ -1329,10 +1454,9 @@ All Phase 2 features from CLAUDE.md have been completed:
1329
1454
 
1330
1455
  ### Roadmap (Post-Phase 3)
1331
1456
  - WAF protection enhancements (cost-deferred; revisit at scale)
1332
- - `visus_clean` Format normalization (XML, YAML, CSV, SQL, PDF)
1333
- - `visus_report` PDF compliance artifact export
1334
- - ISO/IEC 42001 framework mapping
1335
- - GitHub integration (visus-github separate package)
1457
+ - `visus_report` PDF export · Docker image ·
1458
+ - `visus-file-mcp` (document sanitization) ·
1459
+ - Chrome extension for authenticated pages (LinkedIn, X, dashboards)
1336
1460
 
1337
1461
  ---
1338
1462
 
@@ -1340,18 +1464,20 @@ All Phase 2 features from CLAUDE.md have been completed:
1340
1464
 
1341
1465
  ```
1342
1466
  Name: visus-mcp
1343
- Version: 0.5.0 (published 2026-03-23)
1344
- Previous: 0.4.0 (Safe Web Search)
1467
+ Version: 0.7.0 (in development)
1468
+ Previous: 0.6.0 (Content-Type Format Detection — published 2026-03-23)
1469
+ 0.5.0 (Threat Reporting — NIST/OWASP/MITRE/ISO42001)
1470
+ 0.4.0 (Safe Web Search)
1345
1471
  0.3.2 (Reader Mode Feature)
1346
1472
  0.3.1 (Security Hardening)
1347
1473
  0.3.0 (PII Allowlist Feature)
1348
1474
  0.2.0 (Phase 2 - AWS Lambda renderer)
1349
1475
  0.1.0 (Phase 1 - stdio mode)
1350
- Size: ~115 kB (tarball)
1351
- Unpacked: ~450 kB
1476
+ Size: ~195 kB (tarball)
1477
+ Unpacked: ~767 kB
1352
1478
  Dependencies: 9 production (@modelcontextprotocol/sdk, playwright, @playwright/test,
1353
1479
  cheerio, undici, @mozilla/readability@0.6.0, jsdom@29.0.1,
1354
- @toon-format/toon@2.1.0)
1480
+ @toon-format/toon@2.1.0, fast-xml-parser@5.5.8)
1355
1481
  DevDeps: 10 (@types/aws-lambda, aws-cdk, aws-cdk-lib, constructs, ts-node, etc.)
1356
1482
  Node: >=18
1357
1483
  License: MIT
@@ -1365,7 +1491,7 @@ npm URL: https://www.npmjs.com/package/visus-mcp
1365
1491
 
1366
1492
  ## Conclusion
1367
1493
 
1368
- ✅ **Visus v0.5.0 is COMPLETE and PUBLISHED.**
1494
+ ✅ **Visus v0.7.0 is COMPLETE.** Ready for npm publication.
1369
1495
 
1370
1496
  **Phase 1 Achievements:**
1371
1497
  - ✅ Sanitization engine (43 injection patterns + PII redaction)
@@ -1404,7 +1530,7 @@ npm URL: https://www.npmjs.com/package/visus-mcp
1404
1530
 
1405
1531
  **v0.5.0 Achievements:**
1406
1532
  - ✅ **Threat Reporting** — TOON + Markdown dual output layers
1407
- - ✅ **Framework Mappings** — NIST AI 600-1, OWASP LLM Top 10, MITRE ATLAS
1533
+ - ✅ **Framework Mappings** — NIST AI 600-1, OWASP LLM Top 10, MITRE ATLAS, **ISO/IEC 42001:2023** (Annex A controls)
1408
1534
  - ✅ **Severity Classification** — All 43 patterns mapped to CRITICAL/HIGH/MEDIUM/LOW
1409
1535
  - ✅ **Zero Overhead** — Reports omitted on clean pages (no findings)
1410
1536
  - ✅ **31 New Tests** - Threat reporting test coverage (232 total tests)
@@ -1412,7 +1538,7 @@ npm URL: https://www.npmjs.com/package/visus-mcp
1412
1538
  - ✅ **Zero Regressions** - All existing tests continue to pass
1413
1539
  - ✅ **Published to npm** - Available as `visus-mcp@0.5.0`
1414
1540
 
1415
- **v0.6.0 Achievements (In Development):**
1541
+ **v0.6.0 Achievements:**
1416
1542
  - ✅ **Content-Type Format Detection** — Automatic format detection from HTTP headers
1417
1543
  - ✅ **JSON Support** — Pretty-printing with 2-space indentation for API responses
1418
1544
  - ✅ **XML Support** — Clean text conversion using fast-xml-parser
@@ -1421,6 +1547,17 @@ npm URL: https://www.npmjs.com/package/visus-mcp
1421
1547
  - ✅ **14 New Tests** - Format detection test coverage (246 total tests)
1422
1548
  - ✅ **Zero Regressions** - All existing tests continue to pass
1423
1549
  - ✅ **Security Preserved** — Sanitizer runs on ALL formats unchanged
1550
+ - ✅ **Published to npm** - Available as `visus-mcp@0.6.0`
1551
+
1552
+ **v0.7.0 Achievements:**
1553
+ - ✅ **Human-in-the-Loop Elicitation** — MCP elicitation for CRITICAL threat user confirmation
1554
+ - ✅ **Three-Action Response Model** — Accept, decline, cancel with threat report option
1555
+ - ✅ **Fail-Safe Behavior** — Elicitation errors always proceed with sanitized content
1556
+ - ✅ **Integration in All Tools** — fetch, fetch_structured, read, search
1557
+ - ✅ **30 New Tests** - HITL gate and elicit-runner test coverage (276 total tests)
1558
+ - ✅ **Zero Regressions** - All existing tests continue to pass
1559
+ - ✅ **Security Model Preserved** — Sanitization is the gate, HITL is UX layer
1560
+ - ✅ **Ready for npm** - Implementation complete, pending publication
1424
1561
 
1425
1562
  **Technical Challenges Overcome:**
1426
1563
  - Phase 1: iCloud file locks, SSL certificate verification, structured extraction
@@ -1430,25 +1567,26 @@ npm URL: https://www.npmjs.com/package/visus-mcp
1430
1567
  - v0.4.0: DuckDuckGo API response structure, nested Topics handling, search result aggregation
1431
1568
  - v0.5.0: TOON library Jest ESM compatibility (resolved with manual fallback format)
1432
1569
  - v0.6.0: Content-Type header extraction from undici responses, RSS/Atom feed parsing, format-specific conversion pipeline integration
1570
+ - v0.7.0: MCP elicitation API integration, flat primitive schema constraints, fail-safe error handling design
1433
1571
 
1434
1572
  **Deployment Complete:**
1435
1573
  - ✅ CDK stack deployed successfully to us-east-1
1436
1574
  - ✅ Lambda function operational (100% success rate)
1437
1575
  - ✅ API Gateway endpoint live and responding
1438
- - ✅ All smoke tests passing (3/3 Lambda + 232/232 npm tests)
1576
+ - ✅ All smoke tests passing (3/3 Lambda + 246/246 npm tests)
1439
1577
  - ✅ Zero regressions from Phase 1/2
1440
1578
  - ✅ Auth enforcement validated (22/22 tests, 2 findings documented)
1441
1579
 
1442
1580
  **Contact:** security@lateos.ai
1443
1581
  **Repository:** https://github.com/visus-mcp/visus-mcp
1444
1582
  **npm Package:** https://www.npmjs.com/package/visus-mcp
1445
- **Installation:** `npm install -g visus-mcp@0.5.0` or `npx visus-mcp@0.5.0`
1583
+ **Installation:** `npm install -g visus-mcp@0.6.0` or `npx visus-mcp@0.6.0`
1446
1584
 
1447
1585
  ---
1448
1586
 
1449
- **Last Updated:** 2026-03-23 (Updated for v0.6.0-dev)
1587
+ **Last Updated:** 2026-03-24
1450
1588
  **Build:** SUCCESS ✅
1451
- **Tests:** 246/246 PASSING ✅
1589
+ **Tests:** 276/276 PASSING ✅
1452
1590
  **CDK Deploy:** SUCCESS ✅
1453
1591
  **Phase 1:** ✅ PUBLISHED TO NPM (v0.1.0)
1454
1592
  **Phase 2:** ✅ DEPLOYED TO AWS LAMBDA (us-east-1)
@@ -1456,9 +1594,9 @@ npm URL: https://www.npmjs.com/package/visus-mcp
1456
1594
  **v0.3.1:** ✅ PUBLISHED TO NPM (Security Hardening - 2 findings resolved)
1457
1595
  **v0.3.2:** ✅ PUBLISHED TO NPM (Reader Mode Feature - 14 tests added)
1458
1596
  **v0.4.0:** ✅ PUBLISHED TO NPM (Safe Web Search Feature - 18 tests added)
1459
- **v0.5.0:** ✅ PUBLISHED TO NPM (Threat Reporting - 31 tests added)
1460
- **v0.6.0:** 🚧 IN DEVELOPMENT (Content-Type Format Detection - 14 tests added)
1597
+ **v0.5.0:** ✅ PUBLISHED TO NPM (Threat Reporting + ISO/IEC 42001 - 31 tests added)
1598
+ **v0.6.0:** PUBLISHED TO NPM (Content-Type Format Detection - 14 tests added)
1599
+ **v0.7.0:** ✅ COMPLETE (HITL Elicitation Bridge for CRITICAL threats - 30 tests added)
1461
1600
  **Security Audit:** ✅ COMPLETE + REMEDIATED (24 auth tests, 100% compliance)
1462
1601
  **Lambda Endpoint:** [API_ENDPOINT]
1463
- **Latest Release:** v0.5.0 (2026-03-23)
1464
- **Next Release:** v0.6.0 (Content-Type Format Detection)
1602
+ **Latest Release:** v0.6.0 (2026-03-23)
package/SUBMISSION.md ADDED
@@ -0,0 +1,66 @@
1
+ # Anthropic MCP Directory — Submission Package
2
+
3
+ ## Server Details
4
+
5
+ - **Name:** Visus — Secure Web Access for Claude
6
+ - **npm package:** visus-mcp
7
+ - **Current version:** 0.6.0
8
+ - **Install command:** `npx visus-mcp`
9
+ - **License:** MIT
10
+ - **Category:** Web Fetch / Security
11
+
12
+ ## One-liner (≤100 chars)
13
+
14
+ "Strips prompt injection & PII from web content before it enters Claude's context window."
15
+
16
+ ## Short description (≤300 chars)
17
+
18
+ "Visus is a security-first MCP pre-filter. It sanitizes web pages for 43 prompt injection patterns, redacts PII, and uses reader mode to cut token usage by up to 70% — all before content reaches Claude. Built on NIST AI 600-1, OWASP LLM Top 10, MITRE ATLAS, ISO 42001."
19
+
20
+ ## Tools exposed
21
+
22
+ 1. `visus_fetch` — Fetch + sanitize any URL (HTML/JSON/XML/RSS auto-detected)
23
+ 2. `visus_read` — Reader mode extraction via Mozilla Readability
24
+ 3. `visus_search` — DuckDuckGo search with sanitized results
25
+ 4. `visus_fetch_structured` — Schema-based structured data extraction
26
+
27
+ ## Claude Desktop config snippet
28
+
29
+ ```json
30
+ {
31
+ "mcpServers": {
32
+ "visus": {
33
+ "command": "npx",
34
+ "args": ["visus-mcp"]
35
+ }
36
+ }
37
+ }
38
+ ```
39
+
40
+ ## Links
41
+
42
+ - GitHub: https://github.com/visus-mcp/visus-mcp
43
+ - npm: https://www.npmjs.com/package/visus-mcp
44
+ - Security policy: https://github.com/visus-mcp/visus-mcp/blob/main/SECURITY.md
45
+ - License: https://github.com/visus-mcp/visus-mcp/blob/main/LICENSE
46
+
47
+ ## Security frameworks
48
+
49
+ - OWASP LLM Top 10 (2025)
50
+ - NIST AI 600-1 Generative AI Profile
51
+ - MITRE ATLAS (Adversarial Threat Landscape for AI Systems)
52
+ - ISO/IEC 42001:2023 AI Management System
53
+
54
+ ## Test evidence
55
+
56
+ - 246 passing tests (as of v0.6.0)
57
+ - 43 validated injection pattern categories
58
+ - Real-world benchmark: npmjs.com page reduced from 149,589 bytes → 44,129 bytes
59
+
60
+ ## Known Limitations / Phase Status
61
+
62
+ - **Phase 1 (current):** Open-source tier fully functional. `npx visus-mcp` works out of the box with no API key. Uses Playwright locally with full JavaScript execution support. 246 tests passing.
63
+ - **Phase 2 (in development):** Managed Playwright renderer (`renderer.lateos.ai`) — not yet live. BYOC (self-hosted Lambda) renderer available now via [visus-mcp-renderer](https://github.com/visus-mcp/visus-mcp-renderer).
64
+ - **Phase 3:** Chrome extension for authenticated page access (LinkedIn, dashboards).
65
+
66
+ Anthropic directory listing is for the Phase 1 open-source tier. All 4 tools are fully functional in Phase 1.