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.
Files changed (203) hide show
  1. package/.claude/settings.local.json +15 -1
  2. package/.env.status +7 -0
  3. package/CHANGELOG.md +110 -0
  4. package/CLAUDE.md +3 -0
  5. package/README.md +29 -19
  6. package/SECURITY.md +2 -0
  7. package/STATUS.md +320 -12
  8. package/dist/browser/playwright-renderer.d.ts.map +1 -1
  9. package/dist/browser/playwright-renderer.js +27 -5
  10. package/dist/browser/playwright-renderer.js.map +1 -1
  11. package/dist/content-handlers/index.d.ts +36 -0
  12. package/dist/content-handlers/index.d.ts.map +1 -0
  13. package/dist/content-handlers/index.js +59 -0
  14. package/dist/content-handlers/index.js.map +1 -0
  15. package/dist/content-handlers/json-handler.d.ts +28 -0
  16. package/dist/content-handlers/json-handler.d.ts.map +1 -0
  17. package/dist/content-handlers/json-handler.js +116 -0
  18. package/dist/content-handlers/json-handler.js.map +1 -0
  19. package/dist/content-handlers/pdf-handler.d.ts +29 -0
  20. package/dist/content-handlers/pdf-handler.d.ts.map +1 -0
  21. package/dist/content-handlers/pdf-handler.js +77 -0
  22. package/dist/content-handlers/pdf-handler.js.map +1 -0
  23. package/dist/content-handlers/svg-handler.d.ts +35 -0
  24. package/dist/content-handlers/svg-handler.d.ts.map +1 -0
  25. package/dist/content-handlers/svg-handler.js +206 -0
  26. package/dist/content-handlers/svg-handler.js.map +1 -0
  27. package/dist/content-handlers/types.d.ts +42 -0
  28. package/dist/content-handlers/types.d.ts.map +1 -0
  29. package/dist/content-handlers/types.js +7 -0
  30. package/dist/content-handlers/types.js.map +1 -0
  31. package/dist/sanitizer/framework-mapper.d.ts +4 -0
  32. package/dist/sanitizer/framework-mapper.d.ts.map +1 -1
  33. package/dist/sanitizer/framework-mapper.js +92 -0
  34. package/dist/sanitizer/framework-mapper.js.map +1 -1
  35. package/dist/sanitizer/threat-reporter.d.ts +5 -0
  36. package/dist/sanitizer/threat-reporter.d.ts.map +1 -1
  37. package/dist/sanitizer/threat-reporter.js +15 -6
  38. package/dist/sanitizer/threat-reporter.js.map +1 -1
  39. package/dist/tools/fetch-structured.d.ts.map +1 -1
  40. package/dist/tools/fetch-structured.js +4 -0
  41. package/dist/tools/fetch-structured.js.map +1 -1
  42. package/dist/tools/fetch.d.ts.map +1 -1
  43. package/dist/tools/fetch.js +68 -4
  44. package/dist/tools/fetch.js.map +1 -1
  45. package/dist/tools/read.d.ts.map +1 -1
  46. package/dist/tools/read.js +4 -0
  47. package/dist/tools/read.js.map +1 -1
  48. package/dist/types.d.ts +9 -1
  49. package/dist/types.d.ts.map +1 -1
  50. package/dist/types.js.map +1 -1
  51. package/package.json +2 -1
  52. package/server.json +25 -14
  53. package/src/browser/playwright-renderer.ts +29 -6
  54. package/src/content-handlers/index.ts +72 -0
  55. package/src/content-handlers/json-handler.ts +137 -0
  56. package/src/content-handlers/pdf-handler.ts +91 -0
  57. package/src/content-handlers/svg-handler.ts +243 -0
  58. package/src/content-handlers/types.ts +44 -0
  59. package/src/sanitizer/framework-mapper.ts +94 -0
  60. package/src/sanitizer/threat-reporter.ts +17 -6
  61. package/src/tools/fetch-structured.ts +5 -0
  62. package/src/tools/fetch.ts +76 -4
  63. package/src/tools/read.ts +5 -0
  64. package/src/types.ts +9 -1
  65. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -47
  66. package/.github/ISSUE_TEMPLATE/false_positive.md +0 -43
  67. package/.github/ISSUE_TEMPLATE/new_pattern.md +0 -49
  68. package/.github/ISSUE_TEMPLATE/security_report.md +0 -31
  69. package/.github/PULL_REQUEST_TEMPLATE.md +0 -39
  70. package/.mcpregistry_github_token +0 -1
  71. package/.mcpregistry_registry_token +0 -1
  72. package/CONTRIBUTING.md +0 -329
  73. package/LINKEDIN-STRATEGY.md +0 -367
  74. package/ROADMAP.md +0 -221
  75. package/SECURITY-AUDIT-v1.md +0 -277
  76. package/SUBMISSION.md +0 -66
  77. package/TROUBLESHOOT-AUTH-20260322-2019.md +0 -291
  78. package/TROUBLESHOOT-BUILD-20260319-1450.md +0 -546
  79. package/TROUBLESHOOT-COGNITO-AUTH-20260324-2029.md +0 -415
  80. package/TROUBLESHOOT-COGNITO-JWT-20260324.md +0 -592
  81. package/TROUBLESHOOT-FETCH-20260320-1150.md +0 -168
  82. package/TROUBLESHOOT-JEST-20260323-1357.md +0 -139
  83. package/TROUBLESHOOT-LAMBDA-20260322-1945.md +0 -183
  84. package/TROUBLESHOOT-PLAYWRIGHT-20260321-1549.md +0 -217
  85. package/TROUBLESHOOT-SSL-20260320-1138.md +0 -171
  86. package/TROUBLESHOOT-STRUCTURED-20260320-1200.md +0 -246
  87. package/TROUBLESHOOT-TEST-20260320-0942.md +0 -281
  88. package/VISUS-CLAUDE-CODE-PROMPT.md +0 -324
  89. package/VISUS-PROJECT-PLAN.md +0 -205
  90. package/cdk.json +0 -73
  91. package/infrastructure/app.ts +0 -39
  92. package/infrastructure/stack.ts +0 -298
  93. package/jest.config.js +0 -33
  94. package/jest.setup.js +0 -9
  95. package/lambda-deploy/index.js +0 -81512
  96. package/lambda-deploy/index.js.map +0 -7
  97. package/lambda-package/browser/__mocks__/playwright-renderer.d.ts +0 -25
  98. package/lambda-package/browser/__mocks__/playwright-renderer.d.ts.map +0 -1
  99. package/lambda-package/browser/__mocks__/playwright-renderer.js +0 -119
  100. package/lambda-package/browser/__mocks__/playwright-renderer.js.map +0 -1
  101. package/lambda-package/browser/playwright-renderer.d.ts +0 -40
  102. package/lambda-package/browser/playwright-renderer.d.ts.map +0 -1
  103. package/lambda-package/browser/playwright-renderer.js +0 -214
  104. package/lambda-package/browser/playwright-renderer.js.map +0 -1
  105. package/lambda-package/browser/reader.d.ts +0 -31
  106. package/lambda-package/browser/reader.d.ts.map +0 -1
  107. package/lambda-package/browser/reader.js +0 -98
  108. package/lambda-package/browser/reader.js.map +0 -1
  109. package/lambda-package/index.d.ts +0 -18
  110. package/lambda-package/index.d.ts.map +0 -1
  111. package/lambda-package/index.js +0 -238
  112. package/lambda-package/index.js.map +0 -1
  113. package/lambda-package/lambda-handler.d.ts +0 -28
  114. package/lambda-package/lambda-handler.d.ts.map +0 -1
  115. package/lambda-package/lambda-handler.js +0 -257
  116. package/lambda-package/lambda-handler.js.map +0 -1
  117. package/lambda-package/package-lock.json +0 -7435
  118. package/lambda-package/package.json +0 -74
  119. package/lambda-package/runtime.d.ts +0 -50
  120. package/lambda-package/runtime.d.ts.map +0 -1
  121. package/lambda-package/runtime.js +0 -86
  122. package/lambda-package/runtime.js.map +0 -1
  123. package/lambda-package/sanitizer/elicit-runner.d.ts +0 -48
  124. package/lambda-package/sanitizer/elicit-runner.d.ts.map +0 -1
  125. package/lambda-package/sanitizer/elicit-runner.js +0 -100
  126. package/lambda-package/sanitizer/elicit-runner.js.map +0 -1
  127. package/lambda-package/sanitizer/framework-mapper.d.ts +0 -24
  128. package/lambda-package/sanitizer/framework-mapper.d.ts.map +0 -1
  129. package/lambda-package/sanitizer/framework-mapper.js +0 -342
  130. package/lambda-package/sanitizer/framework-mapper.js.map +0 -1
  131. package/lambda-package/sanitizer/hitl-gate.d.ts +0 -69
  132. package/lambda-package/sanitizer/hitl-gate.d.ts.map +0 -1
  133. package/lambda-package/sanitizer/hitl-gate.js +0 -101
  134. package/lambda-package/sanitizer/hitl-gate.js.map +0 -1
  135. package/lambda-package/sanitizer/index.d.ts +0 -63
  136. package/lambda-package/sanitizer/index.d.ts.map +0 -1
  137. package/lambda-package/sanitizer/index.js +0 -105
  138. package/lambda-package/sanitizer/index.js.map +0 -1
  139. package/lambda-package/sanitizer/injection-detector.d.ts +0 -34
  140. package/lambda-package/sanitizer/injection-detector.d.ts.map +0 -1
  141. package/lambda-package/sanitizer/injection-detector.js +0 -89
  142. package/lambda-package/sanitizer/injection-detector.js.map +0 -1
  143. package/lambda-package/sanitizer/patterns.d.ts +0 -30
  144. package/lambda-package/sanitizer/patterns.d.ts.map +0 -1
  145. package/lambda-package/sanitizer/patterns.js +0 -372
  146. package/lambda-package/sanitizer/patterns.js.map +0 -1
  147. package/lambda-package/sanitizer/pii-allowlist.d.ts +0 -49
  148. package/lambda-package/sanitizer/pii-allowlist.d.ts.map +0 -1
  149. package/lambda-package/sanitizer/pii-allowlist.js +0 -231
  150. package/lambda-package/sanitizer/pii-allowlist.js.map +0 -1
  151. package/lambda-package/sanitizer/pii-redactor.d.ts +0 -41
  152. package/lambda-package/sanitizer/pii-redactor.d.ts.map +0 -1
  153. package/lambda-package/sanitizer/pii-redactor.js +0 -213
  154. package/lambda-package/sanitizer/pii-redactor.js.map +0 -1
  155. package/lambda-package/sanitizer/severity-classifier.d.ts +0 -33
  156. package/lambda-package/sanitizer/severity-classifier.d.ts.map +0 -1
  157. package/lambda-package/sanitizer/severity-classifier.js +0 -113
  158. package/lambda-package/sanitizer/severity-classifier.js.map +0 -1
  159. package/lambda-package/sanitizer/threat-reporter.d.ts +0 -66
  160. package/lambda-package/sanitizer/threat-reporter.d.ts.map +0 -1
  161. package/lambda-package/sanitizer/threat-reporter.js +0 -163
  162. package/lambda-package/sanitizer/threat-reporter.js.map +0 -1
  163. package/lambda-package/tools/fetch-structured.d.ts +0 -51
  164. package/lambda-package/tools/fetch-structured.d.ts.map +0 -1
  165. package/lambda-package/tools/fetch-structured.js +0 -237
  166. package/lambda-package/tools/fetch-structured.js.map +0 -1
  167. package/lambda-package/tools/fetch.d.ts +0 -49
  168. package/lambda-package/tools/fetch.d.ts.map +0 -1
  169. package/lambda-package/tools/fetch.js +0 -131
  170. package/lambda-package/tools/fetch.js.map +0 -1
  171. package/lambda-package/tools/read.d.ts +0 -51
  172. package/lambda-package/tools/read.d.ts.map +0 -1
  173. package/lambda-package/tools/read.js +0 -127
  174. package/lambda-package/tools/read.js.map +0 -1
  175. package/lambda-package/tools/search.d.ts +0 -45
  176. package/lambda-package/tools/search.d.ts.map +0 -1
  177. package/lambda-package/tools/search.js +0 -220
  178. package/lambda-package/tools/search.js.map +0 -1
  179. package/lambda-package/types.d.ts +0 -167
  180. package/lambda-package/types.d.ts.map +0 -1
  181. package/lambda-package/types.js +0 -16
  182. package/lambda-package/types.js.map +0 -1
  183. package/lambda-package/utils/format-converter.d.ts +0 -39
  184. package/lambda-package/utils/format-converter.d.ts.map +0 -1
  185. package/lambda-package/utils/format-converter.js +0 -191
  186. package/lambda-package/utils/format-converter.js.map +0 -1
  187. package/lambda-package/utils/truncate.d.ts +0 -26
  188. package/lambda-package/utils/truncate.d.ts.map +0 -1
  189. package/lambda-package/utils/truncate.js +0 -54
  190. package/lambda-package/utils/truncate.js.map +0 -1
  191. package/lambda.zip +0 -0
  192. package/test-output.txt +0 -4
  193. package/tests/auth-smoke.test.ts +0 -480
  194. package/tests/elicit-runner.test.ts +0 -232
  195. package/tests/fetch-tool.test.ts +0 -922
  196. package/tests/hitl-gate.test.ts +0 -267
  197. package/tests/injection-corpus.ts +0 -338
  198. package/tests/pii-allowlist.test.ts +0 -282
  199. package/tests/reader.test.ts +0 -353
  200. package/tests/sanitizer.test.ts +0 -358
  201. package/tests/search.test.ts +0 -456
  202. package/tests/threat-reporter.test.ts +0 -334
  203. 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
  [![npm version](https://img.shields.io/npm/v/visus-mcp?color=crimson&label=npm)](https://www.npmjs.com/package/visus-mcp)
4
- [![tests](https://img.shields.io/badge/tests-246%20passing-brightgreen)](https://github.com/visus-mcp/visus-mcp)
4
+ [![tests](https://img.shields.io/badge/tests-294%20passing-brightgreen)](https://github.com/visus-mcp/visus-mcp)
5
5
  [![tools](https://img.shields.io/badge/MCP%20tools-4-blue)](https://github.com/visus-mcp/visus-mcp)
6
6
  [![mcp](https://img.shields.io/badge/MCP-compatible-brightgreen)](https://modelcontextprotocol.io)
7
7
  [![license](https://img.shields.io/badge/license-MIT-blue)](https://github.com/visus-mcp/visus-mcp/blob/main/LICENSE)
8
- [![security](https://img.shields.io/badge/frameworks-NIST%20%7C%20OWASP%20%7C%20MITRE%20%7C%20ISO42001-orange)](https://github.com/visus-mcp/visus-mcp/blob/main/SECURITY.md)
8
+ [![security](https://img.shields.io/badge/frameworks-NIST%20AI%20RMF%20%7C%20CSF%202.0%20%7C%20OWASP%20%7C%20MITRE%20%7C%20ISO42001-orange)](https://github.com/visus-mcp/visus-mcp/blob/main/SECURITY.md)
9
9
  [![iso42001](https://img.shields.io/badge/ISO%2FIEC-42001%3A2023-blueviolet)](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.6.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 → Format Detection (HTML/JSON/XML/RSS)
51
- Reader Extraction (optional) Injection Sanitizer (43 patterns)
52
- PII Redactor → Token Ceiling (24k cap) → Clean Content → Claude
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. **Injection Detection**: 43 pattern categories scan for prompt injection attempts
59
- 3. **PII Redaction**: Emails, phone numbers, SSNs, credit cards, and IP addresses are redacted
60
- 4. **Clean Delivery**: Stripped, formatted, token-efficient content reaches your LLM with a compliance report attached if anything was flagged
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 four compliance frameworks:
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 | Confidence | OWASP | MITRE | ISO 42001 |
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
  ---
package/SECURITY.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  This document describes the threat model, security guarantees, and honest limitations of Visus.
4
4
 
5
+ **Repository:** https://github.com/visus-mcp/visus-mcp
6
+
5
7
  ---
6
8
 
7
9
  ## Threat Model