visus-mcp 0.6.2 → 0.8.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 (177) hide show
  1. package/.claude/settings.local.json +6 -1
  2. package/.env.status +7 -0
  3. package/CHANGELOG.md +65 -0
  4. package/CLAUDE.md +3 -0
  5. package/README.md +15 -7
  6. package/SECURITY.md +2 -0
  7. package/STATUS.md +203 -9
  8. package/dist/content-handlers/index.d.ts +36 -0
  9. package/dist/content-handlers/index.d.ts.map +1 -0
  10. package/dist/content-handlers/index.js +59 -0
  11. package/dist/content-handlers/index.js.map +1 -0
  12. package/dist/content-handlers/json-handler.d.ts +28 -0
  13. package/dist/content-handlers/json-handler.d.ts.map +1 -0
  14. package/dist/content-handlers/json-handler.js +116 -0
  15. package/dist/content-handlers/json-handler.js.map +1 -0
  16. package/dist/content-handlers/pdf-handler.d.ts +29 -0
  17. package/dist/content-handlers/pdf-handler.d.ts.map +1 -0
  18. package/dist/content-handlers/pdf-handler.js +77 -0
  19. package/dist/content-handlers/pdf-handler.js.map +1 -0
  20. package/dist/content-handlers/svg-handler.d.ts +35 -0
  21. package/dist/content-handlers/svg-handler.d.ts.map +1 -0
  22. package/dist/content-handlers/svg-handler.js +206 -0
  23. package/dist/content-handlers/svg-handler.js.map +1 -0
  24. package/dist/content-handlers/types.d.ts +42 -0
  25. package/dist/content-handlers/types.d.ts.map +1 -0
  26. package/dist/content-handlers/types.js +7 -0
  27. package/dist/content-handlers/types.js.map +1 -0
  28. package/dist/tools/fetch.d.ts.map +1 -1
  29. package/dist/tools/fetch.js +62 -4
  30. package/dist/tools/fetch.js.map +1 -1
  31. package/package.json +2 -1
  32. package/server.json +2 -2
  33. package/src/content-handlers/index.ts +72 -0
  34. package/src/content-handlers/json-handler.ts +137 -0
  35. package/src/content-handlers/pdf-handler.ts +91 -0
  36. package/src/content-handlers/svg-handler.ts +243 -0
  37. package/src/content-handlers/types.ts +44 -0
  38. package/src/tools/fetch.ts +69 -4
  39. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -47
  40. package/.github/ISSUE_TEMPLATE/false_positive.md +0 -43
  41. package/.github/ISSUE_TEMPLATE/new_pattern.md +0 -49
  42. package/.github/ISSUE_TEMPLATE/security_report.md +0 -31
  43. package/.github/PULL_REQUEST_TEMPLATE.md +0 -39
  44. package/.mcpregistry_github_token +0 -1
  45. package/.mcpregistry_registry_token +0 -1
  46. package/CONTRIBUTING.md +0 -329
  47. package/LINKEDIN-STRATEGY.md +0 -367
  48. package/ROADMAP.md +0 -221
  49. package/SECURITY-AUDIT-v1.md +0 -277
  50. package/SUBMISSION.md +0 -66
  51. package/TROUBLESHOOT-AUTH-20260322-2019.md +0 -291
  52. package/TROUBLESHOOT-BUILD-20260319-1450.md +0 -546
  53. package/TROUBLESHOOT-COGNITO-AUTH-20260324-2029.md +0 -415
  54. package/TROUBLESHOOT-COGNITO-JWT-20260324.md +0 -592
  55. package/TROUBLESHOOT-FETCH-20260320-1150.md +0 -168
  56. package/TROUBLESHOOT-JEST-20260323-1357.md +0 -139
  57. package/TROUBLESHOOT-LAMBDA-20260322-1945.md +0 -183
  58. package/TROUBLESHOOT-PLAYWRIGHT-20260321-1549.md +0 -217
  59. package/TROUBLESHOOT-SSL-20260320-1138.md +0 -171
  60. package/TROUBLESHOOT-STRUCTURED-20260320-1200.md +0 -246
  61. package/TROUBLESHOOT-TEST-20260320-0942.md +0 -281
  62. package/VISUS-CLAUDE-CODE-PROMPT.md +0 -324
  63. package/VISUS-PROJECT-PLAN.md +0 -205
  64. package/cdk.json +0 -73
  65. package/infrastructure/app.ts +0 -39
  66. package/infrastructure/stack.ts +0 -298
  67. package/jest.config.js +0 -33
  68. package/jest.setup.js +0 -9
  69. package/lambda-deploy/index.js +0 -81512
  70. package/lambda-deploy/index.js.map +0 -7
  71. package/lambda-package/browser/__mocks__/playwright-renderer.d.ts +0 -25
  72. package/lambda-package/browser/__mocks__/playwright-renderer.d.ts.map +0 -1
  73. package/lambda-package/browser/__mocks__/playwright-renderer.js +0 -119
  74. package/lambda-package/browser/__mocks__/playwright-renderer.js.map +0 -1
  75. package/lambda-package/browser/playwright-renderer.d.ts +0 -40
  76. package/lambda-package/browser/playwright-renderer.d.ts.map +0 -1
  77. package/lambda-package/browser/playwright-renderer.js +0 -214
  78. package/lambda-package/browser/playwright-renderer.js.map +0 -1
  79. package/lambda-package/browser/reader.d.ts +0 -31
  80. package/lambda-package/browser/reader.d.ts.map +0 -1
  81. package/lambda-package/browser/reader.js +0 -98
  82. package/lambda-package/browser/reader.js.map +0 -1
  83. package/lambda-package/index.d.ts +0 -18
  84. package/lambda-package/index.d.ts.map +0 -1
  85. package/lambda-package/index.js +0 -238
  86. package/lambda-package/index.js.map +0 -1
  87. package/lambda-package/lambda-handler.d.ts +0 -28
  88. package/lambda-package/lambda-handler.d.ts.map +0 -1
  89. package/lambda-package/lambda-handler.js +0 -257
  90. package/lambda-package/lambda-handler.js.map +0 -1
  91. package/lambda-package/package-lock.json +0 -7435
  92. package/lambda-package/package.json +0 -74
  93. package/lambda-package/runtime.d.ts +0 -50
  94. package/lambda-package/runtime.d.ts.map +0 -1
  95. package/lambda-package/runtime.js +0 -86
  96. package/lambda-package/runtime.js.map +0 -1
  97. package/lambda-package/sanitizer/elicit-runner.d.ts +0 -48
  98. package/lambda-package/sanitizer/elicit-runner.d.ts.map +0 -1
  99. package/lambda-package/sanitizer/elicit-runner.js +0 -100
  100. package/lambda-package/sanitizer/elicit-runner.js.map +0 -1
  101. package/lambda-package/sanitizer/framework-mapper.d.ts +0 -24
  102. package/lambda-package/sanitizer/framework-mapper.d.ts.map +0 -1
  103. package/lambda-package/sanitizer/framework-mapper.js +0 -342
  104. package/lambda-package/sanitizer/framework-mapper.js.map +0 -1
  105. package/lambda-package/sanitizer/hitl-gate.d.ts +0 -69
  106. package/lambda-package/sanitizer/hitl-gate.d.ts.map +0 -1
  107. package/lambda-package/sanitizer/hitl-gate.js +0 -101
  108. package/lambda-package/sanitizer/hitl-gate.js.map +0 -1
  109. package/lambda-package/sanitizer/index.d.ts +0 -63
  110. package/lambda-package/sanitizer/index.d.ts.map +0 -1
  111. package/lambda-package/sanitizer/index.js +0 -105
  112. package/lambda-package/sanitizer/index.js.map +0 -1
  113. package/lambda-package/sanitizer/injection-detector.d.ts +0 -34
  114. package/lambda-package/sanitizer/injection-detector.d.ts.map +0 -1
  115. package/lambda-package/sanitizer/injection-detector.js +0 -89
  116. package/lambda-package/sanitizer/injection-detector.js.map +0 -1
  117. package/lambda-package/sanitizer/patterns.d.ts +0 -30
  118. package/lambda-package/sanitizer/patterns.d.ts.map +0 -1
  119. package/lambda-package/sanitizer/patterns.js +0 -372
  120. package/lambda-package/sanitizer/patterns.js.map +0 -1
  121. package/lambda-package/sanitizer/pii-allowlist.d.ts +0 -49
  122. package/lambda-package/sanitizer/pii-allowlist.d.ts.map +0 -1
  123. package/lambda-package/sanitizer/pii-allowlist.js +0 -231
  124. package/lambda-package/sanitizer/pii-allowlist.js.map +0 -1
  125. package/lambda-package/sanitizer/pii-redactor.d.ts +0 -41
  126. package/lambda-package/sanitizer/pii-redactor.d.ts.map +0 -1
  127. package/lambda-package/sanitizer/pii-redactor.js +0 -213
  128. package/lambda-package/sanitizer/pii-redactor.js.map +0 -1
  129. package/lambda-package/sanitizer/severity-classifier.d.ts +0 -33
  130. package/lambda-package/sanitizer/severity-classifier.d.ts.map +0 -1
  131. package/lambda-package/sanitizer/severity-classifier.js +0 -113
  132. package/lambda-package/sanitizer/severity-classifier.js.map +0 -1
  133. package/lambda-package/sanitizer/threat-reporter.d.ts +0 -66
  134. package/lambda-package/sanitizer/threat-reporter.d.ts.map +0 -1
  135. package/lambda-package/sanitizer/threat-reporter.js +0 -163
  136. package/lambda-package/sanitizer/threat-reporter.js.map +0 -1
  137. package/lambda-package/tools/fetch-structured.d.ts +0 -51
  138. package/lambda-package/tools/fetch-structured.d.ts.map +0 -1
  139. package/lambda-package/tools/fetch-structured.js +0 -237
  140. package/lambda-package/tools/fetch-structured.js.map +0 -1
  141. package/lambda-package/tools/fetch.d.ts +0 -49
  142. package/lambda-package/tools/fetch.d.ts.map +0 -1
  143. package/lambda-package/tools/fetch.js +0 -131
  144. package/lambda-package/tools/fetch.js.map +0 -1
  145. package/lambda-package/tools/read.d.ts +0 -51
  146. package/lambda-package/tools/read.d.ts.map +0 -1
  147. package/lambda-package/tools/read.js +0 -127
  148. package/lambda-package/tools/read.js.map +0 -1
  149. package/lambda-package/tools/search.d.ts +0 -45
  150. package/lambda-package/tools/search.d.ts.map +0 -1
  151. package/lambda-package/tools/search.js +0 -220
  152. package/lambda-package/tools/search.js.map +0 -1
  153. package/lambda-package/types.d.ts +0 -167
  154. package/lambda-package/types.d.ts.map +0 -1
  155. package/lambda-package/types.js +0 -16
  156. package/lambda-package/types.js.map +0 -1
  157. package/lambda-package/utils/format-converter.d.ts +0 -39
  158. package/lambda-package/utils/format-converter.d.ts.map +0 -1
  159. package/lambda-package/utils/format-converter.js +0 -191
  160. package/lambda-package/utils/format-converter.js.map +0 -1
  161. package/lambda-package/utils/truncate.d.ts +0 -26
  162. package/lambda-package/utils/truncate.d.ts.map +0 -1
  163. package/lambda-package/utils/truncate.js +0 -54
  164. package/lambda-package/utils/truncate.js.map +0 -1
  165. package/lambda.zip +0 -0
  166. package/test-output.txt +0 -4
  167. package/tests/auth-smoke.test.ts +0 -480
  168. package/tests/elicit-runner.test.ts +0 -232
  169. package/tests/fetch-tool.test.ts +0 -922
  170. package/tests/hitl-gate.test.ts +0 -267
  171. package/tests/injection-corpus.ts +0 -338
  172. package/tests/pii-allowlist.test.ts +0 -282
  173. package/tests/reader.test.ts +0 -353
  174. package/tests/sanitizer.test.ts +0 -358
  175. package/tests/search.test.ts +0 -456
  176. package/tests/threat-reporter.test.ts +0 -334
  177. 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"}