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
@@ -1,74 +0,0 @@
1
- {
2
- "name": "visus-mcp",
3
- "version": "0.6.1",
4
- "mcpName": "io.github.leochong/visus-mcp",
5
- "description": "Security-first MCP server. Sanitizes web content before it reaches your LLM — strips prompt injection, redacts PII, and reduces token consumption by up to 70%.",
6
- "main": "dist/index.js",
7
- "bin": {
8
- "visus-mcp": "dist/index.js"
9
- },
10
- "type": "module",
11
- "scripts": {
12
- "build": "tsc",
13
- "test": "jest",
14
- "test:integration": "jest --testMatch='**/tests/**/*.integration.test.ts' --forceExit",
15
- "lint": "tsc --noEmit",
16
- "dev": "tsc --watch",
17
- "cdk": "cdk",
18
- "cdk:synth": "cdk synth",
19
- "cdk:deploy": "npm run build && cdk deploy",
20
- "cdk:deploy:dev": "npm run build && cdk deploy VisusStack-dev",
21
- "cdk:deploy:prod": "npm run build && cdk deploy VisusStack-prod",
22
- "cdk:diff": "cdk diff",
23
- "cdk:destroy": "cdk destroy",
24
- "cdk:bootstrap": "cdk bootstrap"
25
- },
26
- "keywords": [
27
- "mcp",
28
- "claude",
29
- "web-fetch",
30
- "security",
31
- "prompt-injection",
32
- "pii-redaction",
33
- "anthropic"
34
- ],
35
- "author": "Roongrunchai Chongolnee <contact@lateos.ai>",
36
- "homepage": "https://github.com/visus-mcp/visus-mcp",
37
- "license": "MIT",
38
- "engines": {
39
- "node": ">=18"
40
- },
41
- "dependencies": {
42
- "@aws-sdk/client-dynamodb": "^3.1014.0",
43
- "@aws-sdk/lib-dynamodb": "^3.1014.0",
44
- "@modelcontextprotocol/sdk": "^1.0.4",
45
- "@mozilla/readability": "^0.6.0",
46
- "@playwright/test": "^1.58.2",
47
- "@toon-format/toon": "^2.1.0",
48
- "cheerio": "^1.2.0",
49
- "fast-xml-parser": "^5.5.8",
50
- "jsdom": "^29.0.1",
51
- "playwright": "^1.58.2",
52
- "undici": "^7.24.5"
53
- },
54
- "devDependencies": {
55
- "@types/aws-lambda": "^8.10.161",
56
- "@types/jest": "^29.5.14",
57
- "@types/jsdom": "^28.0.1",
58
- "@types/node": "^20.19.37",
59
- "aws-cdk": "^2.1112.0",
60
- "aws-cdk-lib": "^2.244.0",
61
- "constructs": "^10.5.1",
62
- "jest": "^29.7.0",
63
- "ts-jest": "^29.2.5",
64
- "ts-node": "^10.9.2",
65
- "typescript": "^5.7.2"
66
- },
67
- "repository": {
68
- "type": "git",
69
- "url": "https://github.com/visus-mcp/visus-mcp.git"
70
- },
71
- "bugs": {
72
- "url": "https://github.com/visus-mcp/visus-mcp/issues"
73
- }
74
- }
@@ -1,50 +0,0 @@
1
- /**
2
- * Runtime Detection - Dual-Mode Support
3
- *
4
- * Detects execution environment and provides appropriate entry points:
5
- * - stdio MCP server (npx visus-mcp)
6
- * - AWS Lambda function (API Gateway + Lambda)
7
- *
8
- * This enables a unified codebase for both open-source and hosted tiers.
9
- */
10
- /**
11
- * Runtime environment types
12
- */
13
- export type RuntimeEnvironment = 'stdio' | 'lambda' | 'unknown';
14
- /**
15
- * Runtime configuration
16
- */
17
- export interface RuntimeConfig {
18
- environment: RuntimeEnvironment;
19
- isLambda: boolean;
20
- isStdio: boolean;
21
- region?: string;
22
- functionName?: string;
23
- }
24
- /**
25
- * Detect current runtime environment
26
- *
27
- * Detection logic:
28
- * 1. AWS_LAMBDA_FUNCTION_NAME exists → Lambda
29
- * 2. VISUS_MCP_MODE=stdio → stdio (explicit override)
30
- * 3. stdin is a TTY → unknown/error
31
- * 4. Default → stdio (MCP server mode)
32
- *
33
- * @returns Runtime configuration
34
- */
35
- export declare function detectRuntime(): RuntimeConfig;
36
- /**
37
- * Log runtime configuration to stderr
38
- * (MCP protocol uses stdout for JSON-RPC, so logs go to stderr)
39
- *
40
- * @param config Runtime configuration
41
- */
42
- export declare function logRuntimeConfig(config: RuntimeConfig): void;
43
- /**
44
- * Validate runtime environment is appropriate for operation
45
- *
46
- * @param config Runtime configuration
47
- * @throws Error if runtime is unknown or invalid
48
- */
49
- export declare function validateRuntime(config: RuntimeConfig): void;
50
- //# sourceMappingURL=runtime.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,kBAAkB,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,IAAI,aAAa,CAgC7C;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAY5D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAa3D"}
@@ -1,86 +0,0 @@
1
- /**
2
- * Runtime Detection - Dual-Mode Support
3
- *
4
- * Detects execution environment and provides appropriate entry points:
5
- * - stdio MCP server (npx visus-mcp)
6
- * - AWS Lambda function (API Gateway + Lambda)
7
- *
8
- * This enables a unified codebase for both open-source and hosted tiers.
9
- */
10
- /**
11
- * Detect current runtime environment
12
- *
13
- * Detection logic:
14
- * 1. AWS_LAMBDA_FUNCTION_NAME exists → Lambda
15
- * 2. VISUS_MCP_MODE=stdio → stdio (explicit override)
16
- * 3. stdin is a TTY → unknown/error
17
- * 4. Default → stdio (MCP server mode)
18
- *
19
- * @returns Runtime configuration
20
- */
21
- export function detectRuntime() {
22
- // Check for AWS Lambda environment
23
- const lambdaFunctionName = process.env.AWS_LAMBDA_FUNCTION_NAME;
24
- const lambdaRegion = process.env.AWS_REGION;
25
- if (lambdaFunctionName) {
26
- return {
27
- environment: 'lambda',
28
- isLambda: true,
29
- isStdio: false,
30
- region: lambdaRegion,
31
- functionName: lambdaFunctionName,
32
- };
33
- }
34
- // Check for explicit stdio mode (for testing or edge cases)
35
- const explicitMode = process.env.VISUS_MCP_MODE;
36
- if (explicitMode === 'stdio') {
37
- return {
38
- environment: 'stdio',
39
- isLambda: false,
40
- isStdio: true,
41
- };
42
- }
43
- // Default to stdio mode (MCP server)
44
- // This is the open-source tier default
45
- return {
46
- environment: 'stdio',
47
- isLambda: false,
48
- isStdio: true,
49
- };
50
- }
51
- /**
52
- * Log runtime configuration to stderr
53
- * (MCP protocol uses stdout for JSON-RPC, so logs go to stderr)
54
- *
55
- * @param config Runtime configuration
56
- */
57
- export function logRuntimeConfig(config) {
58
- const logEntry = {
59
- timestamp: new Date().toISOString(),
60
- event: 'runtime_detected',
61
- environment: config.environment,
62
- lambda: config.isLambda ? {
63
- function_name: config.functionName,
64
- region: config.region,
65
- } : undefined,
66
- };
67
- console.error(JSON.stringify(logEntry));
68
- }
69
- /**
70
- * Validate runtime environment is appropriate for operation
71
- *
72
- * @param config Runtime configuration
73
- * @throws Error if runtime is unknown or invalid
74
- */
75
- export function validateRuntime(config) {
76
- if (config.environment === 'unknown') {
77
- throw new Error('Unknown runtime environment. Set VISUS_MCP_MODE=stdio or run in AWS Lambda.');
78
- }
79
- // In Lambda, ensure required environment variables are set
80
- if (config.isLambda) {
81
- if (!process.env.AWS_REGION) {
82
- throw new Error('AWS_REGION must be set in Lambda environment');
83
- }
84
- }
85
- }
86
- //# sourceMappingURL=runtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkBH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa;IAC3B,mCAAmC;IACnC,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAChE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAE5C,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO;YACL,WAAW,EAAE,QAAQ;YACrB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,YAAY;YACpB,YAAY,EAAE,kBAAkB;SACjC,CAAC;IACJ,CAAC;IAED,4DAA4D;IAC5D,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAChD,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO;YACL,WAAW,EAAE,OAAO;YACpB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,qCAAqC;IACrC,uCAAuC;IACvC,OAAO;QACL,WAAW,EAAE,OAAO;QACpB,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACpD,MAAM,QAAQ,GAAG;QACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxB,aAAa,EAAE,MAAM,CAAC,YAAY;YAClC,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC,CAAC,SAAS;KACd,CAAC;IAEF,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAqB;IACnD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,48 +0,0 @@
1
- /**
2
- * Elicitation Runner
3
- *
4
- * Executes MCP elicitation requests with comprehensive error handling
5
- * and fail-safe behavior. If elicitation fails for ANY reason, the
6
- * sanitized content is delivered — security is never compromised.
7
- *
8
- * Error handling includes:
9
- * - Client doesn't support elicitation
10
- * - Client timeout
11
- * - Network errors
12
- * - Unexpected responses
13
- *
14
- * Fail-safe principle: Elicitation is UX. Sanitization is security.
15
- * Never block content delivery due to elicitation failures.
16
- */
17
- import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
18
- import type { ThreatReport } from './threat-reporter.js';
19
- /**
20
- * Result of elicitation execution
21
- */
22
- export interface ElicitationResult {
23
- /** Whether user chose to proceed with sanitized content */
24
- proceed: boolean;
25
- /** Whether to include threat report in response */
26
- includeReport: boolean;
27
- }
28
- /**
29
- * Runs MCP elicitation for CRITICAL threat confirmation
30
- *
31
- * Three possible outcomes:
32
- * 1. User accepts → proceed: true, includeReport: user's choice
33
- * 2. User declines → proceed: false, includeReport: false
34
- * 3. User cancels → proceed: false, includeReport: false
35
- *
36
- * Fail-safe: Any error → proceed: true, includeReport: true
37
- * (Content reaches user in sanitized form, security maintained)
38
- *
39
- * CRITICAL: Only ONE elicitation per tool call is allowed per MCP spec.
40
- * Calling this function twice in the same request will cause timeout.
41
- *
42
- * @param server The MCP server instance
43
- * @param threatReport The CRITICAL threat report
44
- * @param url The source URL
45
- * @returns Elicitation result with proceed and includeReport flags
46
- */
47
- export declare function runElicitation(server: Server, threatReport: ThreatReport, url: string): Promise<ElicitationResult>;
48
- //# sourceMappingURL=elicit-runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"elicit-runner.d.ts","sourceRoot":"","sources":["../../src/sanitizer/elicit-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,OAAO,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,iBAAiB,CAAC,CAsE5B"}
@@ -1,100 +0,0 @@
1
- /**
2
- * Elicitation Runner
3
- *
4
- * Executes MCP elicitation requests with comprehensive error handling
5
- * and fail-safe behavior. If elicitation fails for ANY reason, the
6
- * sanitized content is delivered — security is never compromised.
7
- *
8
- * Error handling includes:
9
- * - Client doesn't support elicitation
10
- * - Client timeout
11
- * - Network errors
12
- * - Unexpected responses
13
- *
14
- * Fail-safe principle: Elicitation is UX. Sanitization is security.
15
- * Never block content delivery due to elicitation failures.
16
- */
17
- import { buildElicitMessage, ElicitSchema } from './hitl-gate.js';
18
- /**
19
- * Runs MCP elicitation for CRITICAL threat confirmation
20
- *
21
- * Three possible outcomes:
22
- * 1. User accepts → proceed: true, includeReport: user's choice
23
- * 2. User declines → proceed: false, includeReport: false
24
- * 3. User cancels → proceed: false, includeReport: false
25
- *
26
- * Fail-safe: Any error → proceed: true, includeReport: true
27
- * (Content reaches user in sanitized form, security maintained)
28
- *
29
- * CRITICAL: Only ONE elicitation per tool call is allowed per MCP spec.
30
- * Calling this function twice in the same request will cause timeout.
31
- *
32
- * @param server The MCP server instance
33
- * @param threatReport The CRITICAL threat report
34
- * @param url The source URL
35
- * @returns Elicitation result with proceed and includeReport flags
36
- */
37
- export async function runElicitation(server, threatReport, url) {
38
- try {
39
- // Build user-facing message
40
- const message = buildElicitMessage(threatReport, url);
41
- // Execute elicitation
42
- const result = await server.elicitInput({
43
- mode: 'form',
44
- message,
45
- requestedSchema: ElicitSchema // Type cast due to SDK's strict schema definition
46
- });
47
- // Handle user response
48
- if (result.action === 'accept') {
49
- // User explicitly accepted
50
- // Content values can be string | number | boolean | string[]
51
- const proceed = result.content?.proceed === true || result.content?.proceed === 'true';
52
- const includeReport = result.content?.view_report === true || result.content?.view_report === 'true' || result.content?.view_report === undefined;
53
- return {
54
- proceed,
55
- includeReport: proceed ? includeReport : false // Only include report if proceeding
56
- };
57
- }
58
- if (result.action === 'decline') {
59
- // User explicitly declined
60
- return {
61
- proceed: false,
62
- includeReport: false
63
- };
64
- }
65
- if (result.action === 'cancel') {
66
- // User canceled or dismissed dialog
67
- return {
68
- proceed: false,
69
- includeReport: false
70
- };
71
- }
72
- // Unknown action (should never happen)
73
- console.error(JSON.stringify({
74
- timestamp: new Date().toISOString(),
75
- event: 'elicitation_unknown_action',
76
- action: result.action,
77
- message: 'Unexpected elicitation action, proceeding with sanitized content (fail-safe)'
78
- }));
79
- return {
80
- proceed: true,
81
- includeReport: true
82
- };
83
- }
84
- catch (error) {
85
- // Elicitation failed — FAIL SAFE
86
- // Client may not support elicitation, or timeout occurred
87
- // Proceed with sanitized content + include report
88
- console.error(JSON.stringify({
89
- timestamp: new Date().toISOString(),
90
- event: 'elicitation_failed',
91
- error: error instanceof Error ? error.message : String(error),
92
- message: 'Elicitation not supported or timed out, proceeding with sanitized content (fail-safe)'
93
- }));
94
- return {
95
- proceed: true,
96
- includeReport: true
97
- };
98
- }
99
- }
100
- //# sourceMappingURL=elicit-runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"elicit-runner.js","sourceRoot":"","sources":["../../src/sanitizer/elicit-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAYlE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,YAA0B,EAC1B,GAAW;IAEX,IAAI,CAAC;QACH,4BAA4B;QAC5B,MAAM,OAAO,GAAG,kBAAkB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAEtD,sBAAsB;QACtB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;YACtC,IAAI,EAAE,MAAe;YACrB,OAAO;YACP,eAAe,EAAE,YAAmB,CAAC,kDAAkD;SACxF,CAAC,CAAC;QAEH,uBAAuB;QACvB,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,2BAA2B;YAC3B,6DAA6D;YAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC;YACvF,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,WAAW,KAAK,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,WAAW,KAAK,SAAS,CAAC;YAElJ,OAAO;gBACL,OAAO;gBACP,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,oCAAoC;aACpF,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,2BAA2B;YAC3B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,aAAa,EAAE,KAAK;aACrB,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,oCAAoC;YACpC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,aAAa,EAAE,KAAK;aACrB,CAAC;QACJ,CAAC;QAED,uCAAuC;QACvC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK,EAAE,4BAA4B;YACnC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,8EAA8E;SACxF,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,IAAI;SACpB,CAAC;IAEJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,iCAAiC;QACjC,0DAA0D;QAC1D,kDAAkD;QAClD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK,EAAE,oBAAoB;YAC3B,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC7D,OAAO,EAAE,uFAAuF;SACjG,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,24 +0,0 @@
1
- /**
2
- * Compliance Framework Mapper
3
- *
4
- * Maps injection pattern categories to compliance framework identifiers:
5
- * - OWASP LLM Top 10 (2025)
6
- * - NIST AI 600-1 (Generative AI Profile)
7
- * - MITRE ATLAS (Adversarial Threat Landscape for AI Systems)
8
- * - ISO/IEC 42001:2023 (AI Management System - Annex A Controls)
9
- */
10
- export interface FrameworkMappings {
11
- owasp_llm: string;
12
- nist_ai_600_1: string;
13
- mitre_atlas: string;
14
- iso_42001: string;
15
- }
16
- /**
17
- * Get framework mappings for a pattern category
18
- */
19
- export declare function getFrameworkMappings(patternCategory: string): FrameworkMappings;
20
- /**
21
- * Get all supported frameworks
22
- */
23
- export declare function getSupportedFrameworks(): string[];
24
- //# sourceMappingURL=framework-mapper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"framework-mapper.d.ts","sourceRoot":"","sources":["../../src/sanitizer/framework-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAyWD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,iBAAiB,CAE/E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAOjD"}