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.
- package/.claude/settings.local.json +42 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +47 -0
- package/.github/ISSUE_TEMPLATE/false_positive.md +43 -0
- package/.github/ISSUE_TEMPLATE/new_pattern.md +49 -0
- package/.github/ISSUE_TEMPLATE/security_report.md +31 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +39 -0
- package/.mcpregistry_github_token +1 -0
- package/.mcpregistry_registry_token +1 -0
- package/CLAUDE.md +197 -0
- package/CONTRIBUTING.md +329 -0
- package/README.md +111 -45
- package/STATUS.md +167 -29
- package/SUBMISSION.md +66 -0
- package/TROUBLESHOOT-COGNITO-AUTH-20260324-2029.md +415 -0
- package/TROUBLESHOOT-COGNITO-JWT-20260324.md +592 -0
- package/dist/browser/playwright-renderer.d.ts.map +1 -1
- package/dist/browser/playwright-renderer.js +71 -51
- package/dist/browser/playwright-renderer.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +49 -6
- package/dist/index.js.map +1 -1
- package/dist/sanitizer/elicit-runner.d.ts +48 -0
- package/dist/sanitizer/elicit-runner.d.ts.map +1 -0
- package/dist/sanitizer/elicit-runner.js +100 -0
- package/dist/sanitizer/elicit-runner.js.map +1 -0
- package/dist/sanitizer/framework-mapper.d.ts +2 -0
- package/dist/sanitizer/framework-mapper.d.ts.map +1 -1
- package/dist/sanitizer/framework-mapper.js +91 -45
- package/dist/sanitizer/framework-mapper.js.map +1 -1
- package/dist/sanitizer/hitl-gate.d.ts +69 -0
- package/dist/sanitizer/hitl-gate.d.ts.map +1 -0
- package/dist/sanitizer/hitl-gate.js +101 -0
- package/dist/sanitizer/hitl-gate.js.map +1 -0
- package/dist/sanitizer/threat-reporter.d.ts +1 -0
- package/dist/sanitizer/threat-reporter.d.ts.map +1 -1
- package/dist/sanitizer/threat-reporter.js +10 -7
- package/dist/sanitizer/threat-reporter.js.map +1 -1
- package/infrastructure/stack.ts +1 -0
- package/lambda-deploy/index.js +81512 -0
- package/lambda-deploy/index.js.map +7 -0
- package/lambda-package/browser/__mocks__/playwright-renderer.d.ts +25 -0
- package/lambda-package/browser/__mocks__/playwright-renderer.d.ts.map +1 -0
- package/lambda-package/browser/__mocks__/playwright-renderer.js +119 -0
- package/lambda-package/browser/__mocks__/playwright-renderer.js.map +1 -0
- package/lambda-package/browser/playwright-renderer.d.ts +40 -0
- package/lambda-package/browser/playwright-renderer.d.ts.map +1 -0
- package/lambda-package/browser/playwright-renderer.js +214 -0
- package/lambda-package/browser/playwright-renderer.js.map +1 -0
- package/lambda-package/browser/reader.d.ts +31 -0
- package/lambda-package/browser/reader.d.ts.map +1 -0
- package/lambda-package/browser/reader.js +98 -0
- package/lambda-package/browser/reader.js.map +1 -0
- package/lambda-package/index.d.ts +18 -0
- package/lambda-package/index.d.ts.map +1 -0
- package/lambda-package/index.js +238 -0
- package/lambda-package/index.js.map +1 -0
- package/lambda-package/lambda-handler.d.ts +28 -0
- package/lambda-package/lambda-handler.d.ts.map +1 -0
- package/lambda-package/lambda-handler.js +257 -0
- package/lambda-package/lambda-handler.js.map +1 -0
- package/lambda-package/package-lock.json +7435 -0
- package/lambda-package/package.json +74 -0
- package/lambda-package/runtime.d.ts +50 -0
- package/lambda-package/runtime.d.ts.map +1 -0
- package/lambda-package/runtime.js +86 -0
- package/lambda-package/runtime.js.map +1 -0
- package/lambda-package/sanitizer/elicit-runner.d.ts +48 -0
- package/lambda-package/sanitizer/elicit-runner.d.ts.map +1 -0
- package/lambda-package/sanitizer/elicit-runner.js +100 -0
- package/lambda-package/sanitizer/elicit-runner.js.map +1 -0
- package/lambda-package/sanitizer/framework-mapper.d.ts +24 -0
- package/lambda-package/sanitizer/framework-mapper.d.ts.map +1 -0
- package/lambda-package/sanitizer/framework-mapper.js +342 -0
- package/lambda-package/sanitizer/framework-mapper.js.map +1 -0
- package/lambda-package/sanitizer/hitl-gate.d.ts +69 -0
- package/lambda-package/sanitizer/hitl-gate.d.ts.map +1 -0
- package/lambda-package/sanitizer/hitl-gate.js +101 -0
- package/lambda-package/sanitizer/hitl-gate.js.map +1 -0
- package/lambda-package/sanitizer/index.d.ts +63 -0
- package/lambda-package/sanitizer/index.d.ts.map +1 -0
- package/lambda-package/sanitizer/index.js +105 -0
- package/lambda-package/sanitizer/index.js.map +1 -0
- package/lambda-package/sanitizer/injection-detector.d.ts +34 -0
- package/lambda-package/sanitizer/injection-detector.d.ts.map +1 -0
- package/lambda-package/sanitizer/injection-detector.js +89 -0
- package/lambda-package/sanitizer/injection-detector.js.map +1 -0
- package/lambda-package/sanitizer/patterns.d.ts +30 -0
- package/lambda-package/sanitizer/patterns.d.ts.map +1 -0
- package/lambda-package/sanitizer/patterns.js +372 -0
- package/lambda-package/sanitizer/patterns.js.map +1 -0
- package/lambda-package/sanitizer/pii-allowlist.d.ts +49 -0
- package/lambda-package/sanitizer/pii-allowlist.d.ts.map +1 -0
- package/lambda-package/sanitizer/pii-allowlist.js +231 -0
- package/lambda-package/sanitizer/pii-allowlist.js.map +1 -0
- package/lambda-package/sanitizer/pii-redactor.d.ts +41 -0
- package/lambda-package/sanitizer/pii-redactor.d.ts.map +1 -0
- package/lambda-package/sanitizer/pii-redactor.js +213 -0
- package/lambda-package/sanitizer/pii-redactor.js.map +1 -0
- package/lambda-package/sanitizer/severity-classifier.d.ts +33 -0
- package/lambda-package/sanitizer/severity-classifier.d.ts.map +1 -0
- package/lambda-package/sanitizer/severity-classifier.js +113 -0
- package/lambda-package/sanitizer/severity-classifier.js.map +1 -0
- package/lambda-package/sanitizer/threat-reporter.d.ts +66 -0
- package/lambda-package/sanitizer/threat-reporter.d.ts.map +1 -0
- package/lambda-package/sanitizer/threat-reporter.js +163 -0
- package/lambda-package/sanitizer/threat-reporter.js.map +1 -0
- package/lambda-package/tools/fetch-structured.d.ts +51 -0
- package/lambda-package/tools/fetch-structured.d.ts.map +1 -0
- package/lambda-package/tools/fetch-structured.js +237 -0
- package/lambda-package/tools/fetch-structured.js.map +1 -0
- package/lambda-package/tools/fetch.d.ts +49 -0
- package/lambda-package/tools/fetch.d.ts.map +1 -0
- package/lambda-package/tools/fetch.js +131 -0
- package/lambda-package/tools/fetch.js.map +1 -0
- package/lambda-package/tools/read.d.ts +51 -0
- package/lambda-package/tools/read.d.ts.map +1 -0
- package/lambda-package/tools/read.js +127 -0
- package/lambda-package/tools/read.js.map +1 -0
- package/lambda-package/tools/search.d.ts +45 -0
- package/lambda-package/tools/search.d.ts.map +1 -0
- package/lambda-package/tools/search.js +220 -0
- package/lambda-package/tools/search.js.map +1 -0
- package/lambda-package/types.d.ts +167 -0
- package/lambda-package/types.d.ts.map +1 -0
- package/lambda-package/types.js +16 -0
- package/lambda-package/types.js.map +1 -0
- package/lambda-package/utils/format-converter.d.ts +39 -0
- package/lambda-package/utils/format-converter.d.ts.map +1 -0
- package/lambda-package/utils/format-converter.js +191 -0
- package/lambda-package/utils/format-converter.js.map +1 -0
- package/lambda-package/utils/truncate.d.ts +26 -0
- package/lambda-package/utils/truncate.d.ts.map +1 -0
- package/lambda-package/utils/truncate.js +54 -0
- package/lambda-package/utils/truncate.js.map +1 -0
- package/lambda.zip +0 -0
- package/mcp.json +44 -0
- package/package.json +9 -8
- package/server.json +43 -0
- package/src/browser/playwright-renderer.ts +74 -51
- package/src/index.ts +78 -6
- package/src/sanitizer/elicit-runner.ts +125 -0
- package/src/sanitizer/framework-mapper.ts +92 -45
- package/src/sanitizer/hitl-gate.ts +111 -0
- package/src/sanitizer/threat-reporter.ts +11 -7
- package/tests/elicit-runner.test.ts +232 -0
- package/tests/hitl-gate.test.ts +267 -0
- 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-
|
|
4
|
-
**Version:** 0.
|
|
3
|
+
**Generated:** 2026-03-24
|
|
4
|
+
**Version:** 0.7.0
|
|
5
5
|
**Phase:** 3 (Anthropic Directory Prep)
|
|
6
|
-
**Status:**
|
|
6
|
+
**Status:** ✅ **v0.7.0 COMPLETE** - Human-in-the-Loop Elicitation Bridge
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
## v0.
|
|
10
|
+
## v0.7.0 Release - Human-in-the-Loop Elicitation Bridge for CRITICAL Threats
|
|
11
11
|
|
|
12
|
-
**Status:**
|
|
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
|
-
**
|
|
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
|
|
81
|
-
- `fast-xml-parser`: ^
|
|
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
|
-
- ✅
|
|
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
|
-
- `
|
|
1333
|
-
- `
|
|
1334
|
-
-
|
|
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.
|
|
1344
|
-
Previous: 0.
|
|
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: ~
|
|
1351
|
-
Unpacked: ~
|
|
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.
|
|
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
|
|
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 +
|
|
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.
|
|
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-
|
|
1587
|
+
**Last Updated:** 2026-03-24
|
|
1450
1588
|
**Build:** SUCCESS ✅
|
|
1451
|
-
**Tests:**
|
|
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:**
|
|
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.
|
|
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.
|