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
|
@@ -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"}
|