visus-mcp 0.6.2 → 0.9.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.
- package/.claude/settings.local.json +15 -1
- package/.env.status +7 -0
- package/CHANGELOG.md +110 -0
- package/CLAUDE.md +3 -0
- package/README.md +29 -19
- package/SECURITY.md +2 -0
- package/STATUS.md +320 -12
- package/dist/browser/playwright-renderer.d.ts.map +1 -1
- package/dist/browser/playwright-renderer.js +27 -5
- package/dist/browser/playwright-renderer.js.map +1 -1
- package/dist/content-handlers/index.d.ts +36 -0
- package/dist/content-handlers/index.d.ts.map +1 -0
- package/dist/content-handlers/index.js +59 -0
- package/dist/content-handlers/index.js.map +1 -0
- package/dist/content-handlers/json-handler.d.ts +28 -0
- package/dist/content-handlers/json-handler.d.ts.map +1 -0
- package/dist/content-handlers/json-handler.js +116 -0
- package/dist/content-handlers/json-handler.js.map +1 -0
- package/dist/content-handlers/pdf-handler.d.ts +29 -0
- package/dist/content-handlers/pdf-handler.d.ts.map +1 -0
- package/dist/content-handlers/pdf-handler.js +77 -0
- package/dist/content-handlers/pdf-handler.js.map +1 -0
- package/dist/content-handlers/svg-handler.d.ts +35 -0
- package/dist/content-handlers/svg-handler.d.ts.map +1 -0
- package/dist/content-handlers/svg-handler.js +206 -0
- package/dist/content-handlers/svg-handler.js.map +1 -0
- package/dist/content-handlers/types.d.ts +42 -0
- package/dist/content-handlers/types.d.ts.map +1 -0
- package/dist/content-handlers/types.js +7 -0
- package/dist/content-handlers/types.js.map +1 -0
- package/dist/sanitizer/framework-mapper.d.ts +4 -0
- package/dist/sanitizer/framework-mapper.d.ts.map +1 -1
- package/dist/sanitizer/framework-mapper.js +92 -0
- package/dist/sanitizer/framework-mapper.js.map +1 -1
- package/dist/sanitizer/threat-reporter.d.ts +5 -0
- package/dist/sanitizer/threat-reporter.d.ts.map +1 -1
- package/dist/sanitizer/threat-reporter.js +15 -6
- package/dist/sanitizer/threat-reporter.js.map +1 -1
- package/dist/tools/fetch-structured.d.ts.map +1 -1
- package/dist/tools/fetch-structured.js +4 -0
- package/dist/tools/fetch-structured.js.map +1 -1
- package/dist/tools/fetch.d.ts.map +1 -1
- package/dist/tools/fetch.js +68 -4
- package/dist/tools/fetch.js.map +1 -1
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +4 -0
- package/dist/tools/read.js.map +1 -1
- package/dist/types.d.ts +9 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -1
- package/server.json +25 -14
- package/src/browser/playwright-renderer.ts +29 -6
- package/src/content-handlers/index.ts +72 -0
- package/src/content-handlers/json-handler.ts +137 -0
- package/src/content-handlers/pdf-handler.ts +91 -0
- package/src/content-handlers/svg-handler.ts +243 -0
- package/src/content-handlers/types.ts +44 -0
- package/src/sanitizer/framework-mapper.ts +94 -0
- package/src/sanitizer/threat-reporter.ts +17 -6
- package/src/tools/fetch-structured.ts +5 -0
- package/src/tools/fetch.ts +76 -4
- package/src/tools/read.ts +5 -0
- package/src/types.ts +9 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -47
- package/.github/ISSUE_TEMPLATE/false_positive.md +0 -43
- package/.github/ISSUE_TEMPLATE/new_pattern.md +0 -49
- package/.github/ISSUE_TEMPLATE/security_report.md +0 -31
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -39
- package/.mcpregistry_github_token +0 -1
- package/.mcpregistry_registry_token +0 -1
- package/CONTRIBUTING.md +0 -329
- package/LINKEDIN-STRATEGY.md +0 -367
- package/ROADMAP.md +0 -221
- package/SECURITY-AUDIT-v1.md +0 -277
- package/SUBMISSION.md +0 -66
- package/TROUBLESHOOT-AUTH-20260322-2019.md +0 -291
- package/TROUBLESHOOT-BUILD-20260319-1450.md +0 -546
- package/TROUBLESHOOT-COGNITO-AUTH-20260324-2029.md +0 -415
- package/TROUBLESHOOT-COGNITO-JWT-20260324.md +0 -592
- package/TROUBLESHOOT-FETCH-20260320-1150.md +0 -168
- package/TROUBLESHOOT-JEST-20260323-1357.md +0 -139
- package/TROUBLESHOOT-LAMBDA-20260322-1945.md +0 -183
- package/TROUBLESHOOT-PLAYWRIGHT-20260321-1549.md +0 -217
- package/TROUBLESHOOT-SSL-20260320-1138.md +0 -171
- package/TROUBLESHOOT-STRUCTURED-20260320-1200.md +0 -246
- package/TROUBLESHOOT-TEST-20260320-0942.md +0 -281
- package/VISUS-CLAUDE-CODE-PROMPT.md +0 -324
- package/VISUS-PROJECT-PLAN.md +0 -205
- package/cdk.json +0 -73
- package/infrastructure/app.ts +0 -39
- package/infrastructure/stack.ts +0 -298
- package/jest.config.js +0 -33
- package/jest.setup.js +0 -9
- package/lambda-deploy/index.js +0 -81512
- package/lambda-deploy/index.js.map +0 -7
- package/lambda-package/browser/__mocks__/playwright-renderer.d.ts +0 -25
- package/lambda-package/browser/__mocks__/playwright-renderer.d.ts.map +0 -1
- package/lambda-package/browser/__mocks__/playwright-renderer.js +0 -119
- package/lambda-package/browser/__mocks__/playwright-renderer.js.map +0 -1
- package/lambda-package/browser/playwright-renderer.d.ts +0 -40
- package/lambda-package/browser/playwright-renderer.d.ts.map +0 -1
- package/lambda-package/browser/playwright-renderer.js +0 -214
- package/lambda-package/browser/playwright-renderer.js.map +0 -1
- package/lambda-package/browser/reader.d.ts +0 -31
- package/lambda-package/browser/reader.d.ts.map +0 -1
- package/lambda-package/browser/reader.js +0 -98
- package/lambda-package/browser/reader.js.map +0 -1
- package/lambda-package/index.d.ts +0 -18
- package/lambda-package/index.d.ts.map +0 -1
- package/lambda-package/index.js +0 -238
- package/lambda-package/index.js.map +0 -1
- package/lambda-package/lambda-handler.d.ts +0 -28
- package/lambda-package/lambda-handler.d.ts.map +0 -1
- package/lambda-package/lambda-handler.js +0 -257
- package/lambda-package/lambda-handler.js.map +0 -1
- package/lambda-package/package-lock.json +0 -7435
- package/lambda-package/package.json +0 -74
- package/lambda-package/runtime.d.ts +0 -50
- package/lambda-package/runtime.d.ts.map +0 -1
- package/lambda-package/runtime.js +0 -86
- package/lambda-package/runtime.js.map +0 -1
- package/lambda-package/sanitizer/elicit-runner.d.ts +0 -48
- package/lambda-package/sanitizer/elicit-runner.d.ts.map +0 -1
- package/lambda-package/sanitizer/elicit-runner.js +0 -100
- package/lambda-package/sanitizer/elicit-runner.js.map +0 -1
- package/lambda-package/sanitizer/framework-mapper.d.ts +0 -24
- package/lambda-package/sanitizer/framework-mapper.d.ts.map +0 -1
- package/lambda-package/sanitizer/framework-mapper.js +0 -342
- package/lambda-package/sanitizer/framework-mapper.js.map +0 -1
- package/lambda-package/sanitizer/hitl-gate.d.ts +0 -69
- package/lambda-package/sanitizer/hitl-gate.d.ts.map +0 -1
- package/lambda-package/sanitizer/hitl-gate.js +0 -101
- package/lambda-package/sanitizer/hitl-gate.js.map +0 -1
- package/lambda-package/sanitizer/index.d.ts +0 -63
- package/lambda-package/sanitizer/index.d.ts.map +0 -1
- package/lambda-package/sanitizer/index.js +0 -105
- package/lambda-package/sanitizer/index.js.map +0 -1
- package/lambda-package/sanitizer/injection-detector.d.ts +0 -34
- package/lambda-package/sanitizer/injection-detector.d.ts.map +0 -1
- package/lambda-package/sanitizer/injection-detector.js +0 -89
- package/lambda-package/sanitizer/injection-detector.js.map +0 -1
- package/lambda-package/sanitizer/patterns.d.ts +0 -30
- package/lambda-package/sanitizer/patterns.d.ts.map +0 -1
- package/lambda-package/sanitizer/patterns.js +0 -372
- package/lambda-package/sanitizer/patterns.js.map +0 -1
- package/lambda-package/sanitizer/pii-allowlist.d.ts +0 -49
- package/lambda-package/sanitizer/pii-allowlist.d.ts.map +0 -1
- package/lambda-package/sanitizer/pii-allowlist.js +0 -231
- package/lambda-package/sanitizer/pii-allowlist.js.map +0 -1
- package/lambda-package/sanitizer/pii-redactor.d.ts +0 -41
- package/lambda-package/sanitizer/pii-redactor.d.ts.map +0 -1
- package/lambda-package/sanitizer/pii-redactor.js +0 -213
- package/lambda-package/sanitizer/pii-redactor.js.map +0 -1
- package/lambda-package/sanitizer/severity-classifier.d.ts +0 -33
- package/lambda-package/sanitizer/severity-classifier.d.ts.map +0 -1
- package/lambda-package/sanitizer/severity-classifier.js +0 -113
- package/lambda-package/sanitizer/severity-classifier.js.map +0 -1
- package/lambda-package/sanitizer/threat-reporter.d.ts +0 -66
- package/lambda-package/sanitizer/threat-reporter.d.ts.map +0 -1
- package/lambda-package/sanitizer/threat-reporter.js +0 -163
- package/lambda-package/sanitizer/threat-reporter.js.map +0 -1
- package/lambda-package/tools/fetch-structured.d.ts +0 -51
- package/lambda-package/tools/fetch-structured.d.ts.map +0 -1
- package/lambda-package/tools/fetch-structured.js +0 -237
- package/lambda-package/tools/fetch-structured.js.map +0 -1
- package/lambda-package/tools/fetch.d.ts +0 -49
- package/lambda-package/tools/fetch.d.ts.map +0 -1
- package/lambda-package/tools/fetch.js +0 -131
- package/lambda-package/tools/fetch.js.map +0 -1
- package/lambda-package/tools/read.d.ts +0 -51
- package/lambda-package/tools/read.d.ts.map +0 -1
- package/lambda-package/tools/read.js +0 -127
- package/lambda-package/tools/read.js.map +0 -1
- package/lambda-package/tools/search.d.ts +0 -45
- package/lambda-package/tools/search.d.ts.map +0 -1
- package/lambda-package/tools/search.js +0 -220
- package/lambda-package/tools/search.js.map +0 -1
- package/lambda-package/types.d.ts +0 -167
- package/lambda-package/types.d.ts.map +0 -1
- package/lambda-package/types.js +0 -16
- package/lambda-package/types.js.map +0 -1
- package/lambda-package/utils/format-converter.d.ts +0 -39
- package/lambda-package/utils/format-converter.d.ts.map +0 -1
- package/lambda-package/utils/format-converter.js +0 -191
- package/lambda-package/utils/format-converter.js.map +0 -1
- package/lambda-package/utils/truncate.d.ts +0 -26
- package/lambda-package/utils/truncate.d.ts.map +0 -1
- package/lambda-package/utils/truncate.js +0 -54
- package/lambda-package/utils/truncate.js.map +0 -1
- package/lambda.zip +0 -0
- package/test-output.txt +0 -4
- package/tests/auth-smoke.test.ts +0 -480
- package/tests/elicit-runner.test.ts +0 -232
- package/tests/fetch-tool.test.ts +0 -922
- package/tests/hitl-gate.test.ts +0 -267
- package/tests/injection-corpus.ts +0 -338
- package/tests/pii-allowlist.test.ts +0 -282
- package/tests/reader.test.ts +0 -353
- package/tests/sanitizer.test.ts +0 -358
- package/tests/search.test.ts +0 -456
- package/tests/threat-reporter.test.ts +0 -334
- package/tsconfig.cdk.json +0 -35
|
@@ -55,7 +55,21 @@
|
|
|
55
55
|
"Bash(/tmp/test-google.sh:*)",
|
|
56
56
|
"Bash(git reset:*)",
|
|
57
57
|
"Bash(npx visus-mcp:*)",
|
|
58
|
-
"WebSearch"
|
|
58
|
+
"WebSearch",
|
|
59
|
+
"WebFetch(domain:glama.ai)",
|
|
60
|
+
"Bash(unzip:*)",
|
|
61
|
+
"Bash(mkdir:*)",
|
|
62
|
+
"Bash(comm -13:*)",
|
|
63
|
+
"Bash(comm -23:*)",
|
|
64
|
+
"Bash(npx @modelcontextprotocol/registry-cli:*)",
|
|
65
|
+
"Bash(make:*)",
|
|
66
|
+
"Bash(tar:*)",
|
|
67
|
+
"Bash(./mcp-publisher:*)",
|
|
68
|
+
"Bash(/tmp/mcp-publisher auth login:*)",
|
|
69
|
+
"Bash(/tmp/mcp-publisher login:*)",
|
|
70
|
+
"Bash(/tmp/mcp-publisher publish:*)",
|
|
71
|
+
"WebFetch(domain:airc.nist.gov)",
|
|
72
|
+
"WebFetch(domain:csf.tools)"
|
|
59
73
|
],
|
|
60
74
|
"deny": [],
|
|
61
75
|
"ask": []
|
package/.env.status
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Sensitive infrastructure values for STATUS.md
|
|
2
|
+
# This file is gitignored and contains the real values that are replaced with placeholders in STATUS.md
|
|
3
|
+
|
|
4
|
+
AWS_ACCOUNT_ID=080746528746
|
|
5
|
+
API_ENDPOINT=https://wyomy29zd7.execute-api.us-east-1.amazonaws.com
|
|
6
|
+
LAMBDA_FUNCTION_NAME=VisusRendererStack-dev-RendererFunction3AA1789A-554zTOoz3FVg
|
|
7
|
+
MAINTAINER_EMAIL=lowmls@gmail.com
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.9.0] - 2026-03-26
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **NIST AI RMF Framework Mappings** (`src/sanitizer/framework-mapper.ts`)
|
|
15
|
+
- Added NIST AI Risk Management Framework (AI 100-1) mappings for all 43 injection patterns
|
|
16
|
+
- Maps threats to four core functions: GOVERN, MAP, MEASURE, and MANAGE
|
|
17
|
+
- Examples: GOVERN-1.1 (Legal Requirements), MEASURE-2.7 (AI System Security), MANAGE-2.3 (Respond to Unknown Risks)
|
|
18
|
+
- Provides comprehensive risk management alignment for federal/government users
|
|
19
|
+
|
|
20
|
+
- **NIST CSF 2.0 Framework Mappings** (`src/sanitizer/framework-mapper.ts`)
|
|
21
|
+
- Added NIST Cybersecurity Framework 2.0 mappings for all 43 injection patterns
|
|
22
|
+
- Maps threats to six core functions: IDENTIFY, PROTECT, DETECT, RESPOND, RECOVER, and GOVERN
|
|
23
|
+
- Examples: DE.CM-01 (Network Monitoring), PR.DS-01 (Data at Rest Protection), PR.AC-04 (Access Control)
|
|
24
|
+
- Widely adopted enterprise cybersecurity framework for compliance and audit requirements
|
|
25
|
+
|
|
26
|
+
- **Enhanced Threat Reporting** (`src/sanitizer/threat-reporter.ts`)
|
|
27
|
+
- Expanded framework coverage from 4 to 6 compliance frameworks
|
|
28
|
+
- Updated TOON format from 10 fields to 12 fields (added nist_ai_rmf, nist_csf_2_0)
|
|
29
|
+
- Enhanced Markdown threat report table with new AI-RMF and CSF 2.0 columns
|
|
30
|
+
- All threat reports now include comprehensive 6-framework alignment
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
|
|
34
|
+
- **Framework Badge** (README.md) - Updated security badge to highlight NIST AI RMF and CSF 2.0
|
|
35
|
+
- **Tool Descriptions** (README.md) - All 4 MCP tools now reference 6 frameworks in their descriptions
|
|
36
|
+
- **Framework Alignments Section** (README.md) - Expanded to document all 6 frameworks with descriptions
|
|
37
|
+
- **Test Coverage** (tests/threat-reporter.test.ts) - Updated to verify 6 frameworks and 12 TOON fields
|
|
38
|
+
|
|
39
|
+
### Fixed
|
|
40
|
+
|
|
41
|
+
- **server.json Version Sync** - Ensured server.json version matches package.json per MCP Registry requirements
|
|
42
|
+
|
|
43
|
+
## [0.8.1] - 2026-03-25
|
|
44
|
+
|
|
45
|
+
### Added
|
|
46
|
+
|
|
47
|
+
- **PDF Content Handler** (`src/content-handlers/pdf-handler.ts`)
|
|
48
|
+
- Handles `application/pdf` content type
|
|
49
|
+
- Extracts text and metadata (title, author, subject, keywords, creator, producer) from PDF files
|
|
50
|
+
- Passes all extracted text through the 43-pattern injection detection pipeline
|
|
51
|
+
- Returns sanitized plain text, discarding binary objects
|
|
52
|
+
- Returns structured error (`PDF_PARSE_FAILED`) for corrupt or encrypted PDFs
|
|
53
|
+
|
|
54
|
+
- **JSON Content Handler** (`src/content-handlers/json-handler.ts`)
|
|
55
|
+
- Handles `application/json` and `text/json` content types
|
|
56
|
+
- Recursively traverses JSON object tree and sanitizes all string values
|
|
57
|
+
- Preserves original JSON structure in output
|
|
58
|
+
- Handles arrays, nested objects, and mixed-type arrays correctly
|
|
59
|
+
- Falls back to plain text sanitization pipeline if JSON parsing fails
|
|
60
|
+
- Tracks and reports count of sanitized fields per request
|
|
61
|
+
|
|
62
|
+
- **SVG Content Handler** (`src/content-handlers/svg-handler.ts`)
|
|
63
|
+
- Handles `image/svg+xml` content type
|
|
64
|
+
- Strips dangerous elements unconditionally:
|
|
65
|
+
- `<script>` elements and all children
|
|
66
|
+
- `<use>` elements with external `href`/`xlink:href` attributes
|
|
67
|
+
- `<foreignObject>` elements and all children
|
|
68
|
+
- All event handler attributes (onload, onclick, onerror, etc.)
|
|
69
|
+
- `<set>` and `<animate>` elements referencing external resources
|
|
70
|
+
- `data:` URI attributes
|
|
71
|
+
- Extracts and scans text content (title, desc, text elements) for injection patterns
|
|
72
|
+
- Preserves safe presentation attributes (fill, stroke, transform, viewBox, etc.)
|
|
73
|
+
- Returns structured error (`SVG_PARSE_FAILED`) if XML parsing fails
|
|
74
|
+
|
|
75
|
+
- **Content Type Routing** (`src/content-handlers/index.ts`)
|
|
76
|
+
- Central routing system for content-type specific handlers
|
|
77
|
+
- Normalizes MIME types (strips parameters, lowercases)
|
|
78
|
+
- Routes content to appropriate handler based on MIME type
|
|
79
|
+
- Returns structured rejection (`UNSUPPORTED_CONTENT_TYPE`) for unsupported types
|
|
80
|
+
- No unhandled exceptions - all errors return structured responses
|
|
81
|
+
|
|
82
|
+
- **Updated `visus_fetch` Tool** (`src/tools/fetch.ts`)
|
|
83
|
+
- Integrated content handler routing for PDF, JSON, and SVG
|
|
84
|
+
- Checks Content-Type header and routes to specialized handlers before existing HTML/XML flow
|
|
85
|
+
- Maintains backward compatibility with existing HTML/XML/RSS conversion logic
|
|
86
|
+
|
|
87
|
+
- **Comprehensive Test Suite** (`tests/content-handlers.test.ts`)
|
|
88
|
+
- 20 test cases covering all three handlers
|
|
89
|
+
- Tests for clean content (no false positives)
|
|
90
|
+
- Tests for injection detection and sanitization
|
|
91
|
+
- Tests for error handling (corrupt/invalid content)
|
|
92
|
+
- Tests for edge cases (nested structures, arrays, malformed input)
|
|
93
|
+
|
|
94
|
+
### Fixed
|
|
95
|
+
|
|
96
|
+
- **PDF Text Extraction** - Fixed critical bug where PDF content was passed as corrupted UTF-8 strings instead of binary data
|
|
97
|
+
- Root cause: `response.text()` in `playwright-renderer.ts` converted all response bodies to strings, mangling binary PDFs
|
|
98
|
+
- Fix: Use `response.arrayBuffer()` for binary content types (`application/pdf`, `image/*`, `application/octet-stream`)
|
|
99
|
+
- Impact: PDF handler now receives proper binary data, text extraction works correctly
|
|
100
|
+
- Files modified: `src/types.ts`, `src/browser/playwright-renderer.ts`, `src/tools/fetch.ts`, `src/tools/read.ts`, `src/tools/fetch-structured.ts`
|
|
101
|
+
- Note: Some complex PDFs may fail with "Invalid Root reference" error - this is a limitation of the pdf-parse library, not Visus
|
|
102
|
+
|
|
103
|
+
### Changed
|
|
104
|
+
|
|
105
|
+
- Added `pdf-parse` dependency (v2.4.5) for PDF text extraction
|
|
106
|
+
- Updated `BrowserRenderResult.html` type to `string | Buffer` to support binary content
|
|
107
|
+
|
|
108
|
+
## [0.6.2] - 2026-03-14
|
|
109
|
+
|
|
110
|
+
Previous releases documented in git history.
|
package/CLAUDE.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
4
|
|
|
5
|
+
**Repository:** https://github.com/visus-mcp/visus-mcp
|
|
6
|
+
|
|
5
7
|
## Project Overview
|
|
6
8
|
|
|
7
9
|
**Visus** (`visus-mcp`) is an MCP tool that provides Claude with secure, sanitized access to web pages. Unlike other MCP browser tools (Firecrawl, Playwright MCP, ScrapeGraphAI), Visus runs ALL fetched content through an injection sanitization pipeline before the LLM reads it.
|
|
@@ -519,3 +521,4 @@ Both README.md and SECURITY.md must lead with the security narrative, not featur
|
|
|
519
521
|
- PII redaction types and format
|
|
520
522
|
- Honest limitations (novel obfuscation, AI-generated benign-looking instructions)
|
|
521
523
|
- Vulnerability reporting: security@lateos.ai or GitHub Security tab
|
|
524
|
+
- remember that my gitHub repo is located at https://github.com/visus-mcp/visus-mcp
|
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Visus — Secure Web Access for Claude
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/visus-mcp)
|
|
4
|
-
[](https://github.com/visus-mcp/visus-mcp)
|
|
5
5
|
[](https://github.com/visus-mcp/visus-mcp)
|
|
6
6
|
[](https://modelcontextprotocol.io)
|
|
7
7
|
[](https://github.com/visus-mcp/visus-mcp/blob/main/LICENSE)
|
|
8
|
-
[](https://github.com/visus-mcp/visus-mcp/blob/main/SECURITY.md)
|
|
8
|
+
[](https://github.com/visus-mcp/visus-mcp/blob/main/SECURITY.md)
|
|
9
9
|
[](https://www.iso.org/standard/81230.html)
|
|
10
10
|
|
|
11
11
|
> **Your AI agent shouldn't have to read garbage.**
|
|
@@ -19,7 +19,7 @@ Claude handles most of it. But it still has to read all of it first. You still p
|
|
|
19
19
|
|
|
20
20
|
Built as infrastructure, not a replacement for Claude's own safety training. The two layers together are stronger than either alone.
|
|
21
21
|
```bash
|
|
22
|
-
npx visus-mcp@0.
|
|
22
|
+
npx visus-mcp@0.9.0
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
*"What the web shows you, Lateos reads safely."*
|
|
@@ -47,17 +47,23 @@ visus-mcp fetches the same page and delivers:
|
|
|
47
47
|
## How Visus Works
|
|
48
48
|
|
|
49
49
|
```
|
|
50
|
-
URL → Playwright Render →
|
|
51
|
-
→
|
|
52
|
-
→
|
|
50
|
+
URL → Playwright Render → Content-Type Detection
|
|
51
|
+
→ Specialized Handlers (PDF/JSON/SVG) OR HTML Pipeline
|
|
52
|
+
→ Injection Sanitizer (43 patterns) → PII Redactor
|
|
53
|
+
→ Token Ceiling (24k cap) → Clean Content → Claude
|
|
53
54
|
```
|
|
54
55
|
|
|
55
56
|
### Security Pipeline
|
|
56
57
|
|
|
57
58
|
1. **Browser Rendering**: Headless Chromium via Playwright fetches the page
|
|
58
|
-
2. **
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
2. **Content-Type Routing**: Detects MIME type and routes to specialized handlers:
|
|
60
|
+
- **PDF** (`application/pdf`) — Extracts text and metadata, sanitizes all fields
|
|
61
|
+
- **JSON** (`application/json`) — Recursively sanitizes all string values, preserves structure
|
|
62
|
+
- **SVG** (`image/svg+xml`) — Strips dangerous elements (`<script>`, event handlers), scans text
|
|
63
|
+
- **HTML/XML/RSS** — Uses existing conversion and reader extraction pipeline
|
|
64
|
+
3. **Injection Detection**: 43 pattern categories scan for prompt injection attempts
|
|
65
|
+
4. **PII Redaction**: Emails, phone numbers, SSNs, credit cards, and IP addresses are redacted
|
|
66
|
+
5. **Clean Delivery**: Stripped, formatted, token-efficient content reaches your LLM — with a compliance report attached if anything was flagged
|
|
61
67
|
|
|
62
68
|
**This pipeline runs before content enters Claude's context window** — reducing token consumption, keeping PII out of conversation history, and generating audit logs when injection patterns are detected.
|
|
63
69
|
|
|
@@ -179,7 +185,7 @@ Restart Claude Desktop. Visus tools are now available to Claude.
|
|
|
179
185
|
|
|
180
186
|
### `visus_fetch`
|
|
181
187
|
|
|
182
|
-
Fetch and sanitize a web page with automatic format detection. Supports HTML, JSON, XML, and RSS/Atom feeds. Includes NIST AI 600-1 / OWASP LLM / MITRE ATLAS / ISO/IEC 42001 aligned threat report when injection or PII is detected.
|
|
188
|
+
Fetch and sanitize a web page with automatic format detection. Supports HTML, JSON, XML, and RSS/Atom feeds. Includes NIST AI RMF / CSF 2.0 / AI 600-1 / OWASP LLM / MITRE ATLAS / ISO/IEC 42001 aligned threat report when injection or PII is detected.
|
|
183
189
|
|
|
184
190
|
**Supported Formats:**
|
|
185
191
|
- **HTML** (`text/html`, `application/xhtml+xml`) - Standard web pages, returned as-is
|
|
@@ -189,7 +195,7 @@ Fetch and sanitize a web page with automatic format detection. Supports HTML, JS
|
|
|
189
195
|
|
|
190
196
|
### `visus_read`
|
|
191
197
|
|
|
192
|
-
Extract clean article content from a web page using Mozilla Readability (reader mode). Includes NIST AI 600-1 / OWASP LLM / MITRE ATLAS / ISO/IEC 42001 aligned threat report when injection or PII is detected.
|
|
198
|
+
Extract clean article content from a web page using Mozilla Readability (reader mode). Includes NIST AI RMF / CSF 2.0 / AI 600-1 / OWASP LLM / MITRE ATLAS / ISO/IEC 42001 aligned threat report when injection or PII is detected.
|
|
193
199
|
|
|
194
200
|
**Input:**
|
|
195
201
|
```json
|
|
@@ -221,7 +227,7 @@ Extract clean article content from a web page using Mozilla Readability (reader
|
|
|
221
227
|
|
|
222
228
|
### `visus_search`
|
|
223
229
|
|
|
224
|
-
Search the web via DuckDuckGo and return sanitized results with prompt injection and PII removed. Use before `visus_fetch` or `visus_read` to safely discover and then read pages. Includes NIST AI 600-1 / OWASP LLM / MITRE ATLAS / ISO/IEC 42001 aligned threat report when injection or PII is detected.
|
|
230
|
+
Search the web via DuckDuckGo and return sanitized results with prompt injection and PII removed. Use before `visus_fetch` or `visus_read` to safely discover and then read pages. Includes NIST AI RMF / CSF 2.0 / AI 600-1 / OWASP LLM / MITRE ATLAS / ISO/IEC 42001 aligned threat report when injection or PII is detected.
|
|
225
231
|
|
|
226
232
|
**Input:**
|
|
227
233
|
```json
|
|
@@ -254,7 +260,7 @@ All search result titles and snippets are independently sanitized before reachin
|
|
|
254
260
|
|
|
255
261
|
### `visus_fetch_structured`
|
|
256
262
|
|
|
257
|
-
Extract structured data from a web page according to a schema. Includes NIST AI 600-1 / OWASP LLM / MITRE ATLAS / ISO/IEC 42001 aligned threat report when injection or PII is detected.
|
|
263
|
+
Extract structured data from a web page according to a schema. Includes NIST AI RMF / CSF 2.0 / AI 600-1 / OWASP LLM / MITRE ATLAS / ISO/IEC 42001 aligned threat report when injection or PII is detected.
|
|
258
264
|
|
|
259
265
|
**Input:**
|
|
260
266
|
```json
|
|
@@ -307,7 +313,7 @@ Findings are encoded using [TOON format](https://toonformat.dev) for token effic
|
|
|
307
313
|
- Pattern ID and category
|
|
308
314
|
- Severity level (CRITICAL, HIGH, MEDIUM, LOW)
|
|
309
315
|
- Confidence score
|
|
310
|
-
- Framework alignments (OWASP LLM Top 10, NIST AI 600-1, MITRE ATLAS, ISO/IEC 42001)
|
|
316
|
+
- Framework alignments (OWASP LLM Top 10, NIST AI 600-1, NIST AI RMF, NIST CSF 2.0, MITRE ATLAS, ISO/IEC 42001)
|
|
311
317
|
- Remediation status
|
|
312
318
|
|
|
313
319
|
### 2. Markdown Compliance Report (Human-Readable)
|
|
@@ -322,10 +328,12 @@ A formatted Markdown table renders cleanly in Claude Desktop and GitHub, showing
|
|
|
322
328
|
|
|
323
329
|
### Framework Alignments
|
|
324
330
|
|
|
325
|
-
Every detected threat is mapped to
|
|
331
|
+
Every detected threat is mapped to six compliance frameworks:
|
|
326
332
|
|
|
327
333
|
- **[OWASP LLM Top 10 (2025)](https://owasp.org/www-project-top-10-for-large-language-model-applications/)**: Industry-standard LLM security risks
|
|
328
334
|
- **[NIST AI 600-1](https://csrc.nist.gov/pubs/ai/600/1/final)**: Generative AI Profile for risk management
|
|
335
|
+
- **[NIST AI RMF](https://www.nist.gov/itl/ai-risk-management-framework)**: AI Risk Management Framework (AI 100-1) with GOVERN, MAP, MEASURE, and MANAGE functions
|
|
336
|
+
- **[NIST CSF 2.0](https://www.nist.gov/cyberframework)**: Cybersecurity Framework 2.0 with IDENTIFY, PROTECT, DETECT, RESPOND, RECOVER, and GOVERN functions
|
|
329
337
|
- **[MITRE ATLAS](https://atlas.mitre.org/)**: Adversarial Threat Landscape for AI Systems
|
|
330
338
|
- **[ISO/IEC 42001:2023](https://www.iso.org/standard/81230.html)**: International AI Management System standard — Annex A controls for AI system security, data quality, and responsible AI governance. Globally recognized for enterprise and regulatory procurement.
|
|
331
339
|
|
|
@@ -372,7 +380,7 @@ When a HIGH severity injection is detected:
|
|
|
372
380
|
**Generated:** 2026-03-23T14:30:00.000Z
|
|
373
381
|
**Source:** https://malicious.example.com
|
|
374
382
|
**Overall Severity:** HIGH
|
|
375
|
-
**Framework:** OWASP LLM Top 10 | NIST AI 600-1 | MITRE ATLAS | ISO/IEC 42001
|
|
383
|
+
**Framework:** OWASP LLM Top 10 | NIST AI 600-1 | NIST AI RMF | NIST CSF 2.0 | MITRE ATLAS | ISO/IEC 42001
|
|
376
384
|
|
|
377
385
|
### Findings Summary
|
|
378
386
|
| Severity | Count |
|
|
@@ -383,9 +391,9 @@ When a HIGH severity injection is detected:
|
|
|
383
391
|
| 🟢 LOW | 0 |
|
|
384
392
|
|
|
385
393
|
### Findings Detail
|
|
386
|
-
| # | Category | Severity |
|
|
387
|
-
|
|
388
|
-
| 1 | role_hijacking | CRITICAL | 95% | LLM01:2025 | AML.T0051.000 | A.6.1.5 |
|
|
394
|
+
| # | Category | Severity | Conf | OWASP | AI-RMF | CSF 2.0 | MITRE | ISO |
|
|
395
|
+
|---|---|---|---|---|---|---|---|---|
|
|
396
|
+
| 1 | role_hijacking | CRITICAL | 95% | LLM01:2025 | MEASURE-2.7 | DE.CM-01 | AML.T0051.000 | A.6.1.5 |
|
|
389
397
|
|
|
390
398
|
### Remediation Status
|
|
391
399
|
✅ All findings sanitized. Content delivered clean.
|
|
@@ -848,6 +856,8 @@ Copyright (c) 2026 Lateos (Leo Chongolnee)
|
|
|
848
856
|
|
|
849
857
|
Built by [Leo Chongolnee](https://github.com/leochong) (@leochong) as part of the Lateos platform.
|
|
850
858
|
|
|
859
|
+
**Repository:** https://github.com/visus-mcp/visus-mcp
|
|
860
|
+
|
|
851
861
|
Inspired by the MCP ecosystem and informed by CISSP/CEH security principles.
|
|
852
862
|
|
|
853
863
|
---
|