@securecode-ai/mcp 0.1.0 → 0.2.1
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/README.md +5 -3
- package/dist/api/client.d.ts +4 -0
- package/dist/api/client.js +49 -0
- package/dist/api/client.js.map +1 -1
- package/dist/api/types.d.ts +40 -0
- package/dist/index.js +64 -7
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.js +16 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/poc/httpPocExecutor.d.ts +20 -0
- package/dist/poc/httpPocExecutor.js +247 -0
- package/dist/poc/httpPocExecutor.js.map +1 -0
- package/dist/poc/lightpandaExecutor.d.ts +41 -0
- package/dist/poc/lightpandaExecutor.js +263 -0
- package/dist/poc/lightpandaExecutor.js.map +1 -0
- package/dist/poc/pocExecutor.d.ts +46 -0
- package/dist/poc/pocExecutor.js +74 -0
- package/dist/poc/pocExecutor.js.map +1 -0
- package/dist/poc/pocRouter.d.ts +20 -0
- package/dist/poc/pocRouter.js +40 -0
- package/dist/poc/pocRouter.js.map +1 -0
- package/dist/poc/pocTypes.d.ts +54 -0
- package/dist/poc/pocTypes.js +16 -0
- package/dist/poc/pocTypes.js.map +1 -0
- package/dist/project-map/fixTester.d.ts +55 -0
- package/dist/project-map/fixTester.js +338 -0
- package/dist/project-map/fixTester.js.map +1 -0
- package/dist/project-map/guardEvaluator.d.ts +40 -0
- package/dist/project-map/guardEvaluator.js +216 -0
- package/dist/project-map/guardEvaluator.js.map +1 -0
- package/dist/project-map/guardPatterns.d.ts +43 -0
- package/dist/project-map/guardPatterns.js +173 -0
- package/dist/project-map/guardPatterns.js.map +1 -0
- package/dist/project-map/mapBuilder.js +44 -5
- package/dist/project-map/mapBuilder.js.map +1 -1
- package/dist/project-map/sanitizers.d.ts +34 -0
- package/dist/project-map/sanitizers.js +76 -0
- package/dist/project-map/sanitizers.js.map +1 -0
- package/dist/project-map/sinkFinder.d.ts +48 -0
- package/dist/project-map/sinkFinder.js +340 -0
- package/dist/project-map/sinkFinder.js.map +1 -0
- package/dist/project-map/sinkRegistry.d.ts +60 -0
- package/dist/project-map/sinkRegistry.js +246 -0
- package/dist/project-map/sinkRegistry.js.map +1 -0
- package/dist/project-map/taintSources.d.ts +30 -0
- package/dist/project-map/taintSources.js +77 -0
- package/dist/project-map/taintSources.js.map +1 -0
- package/dist/project-map/taintTracker.d.ts +42 -0
- package/dist/project-map/taintTracker.js +571 -0
- package/dist/project-map/taintTracker.js.map +1 -0
- package/dist/tools/map.js +13 -1
- package/dist/tools/map.js.map +1 -1
- package/dist/tools/scan.js +44 -0
- package/dist/tools/scan.js.map +1 -1
- package/package.json +1 -1
package/dist/tools/scan.js
CHANGED
|
@@ -3,6 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.toolScan = toolScan;
|
|
4
4
|
const client_1 = require("../api/client");
|
|
5
5
|
const files_1 = require("../utils/files");
|
|
6
|
+
const sinkFinder_1 = require("../project-map/sinkFinder");
|
|
7
|
+
const taintTracker_1 = require("../project-map/taintTracker");
|
|
8
|
+
const guardEvaluator_1 = require("../project-map/guardEvaluator");
|
|
9
|
+
const parserLoader_1 = require("../project-map/parserLoader");
|
|
6
10
|
async function toolScan(ctx, args) {
|
|
7
11
|
const client = new client_1.ApiClient({ baseUrl: ctx.apiUrl, token: ctx.apiToken });
|
|
8
12
|
let code = args.code;
|
|
@@ -19,11 +23,51 @@ async function toolScan(ctx, args) {
|
|
|
19
23
|
if (!language) {
|
|
20
24
|
throw Object.assign(new Error('Provide language or filePath with a known extension.'), { code: -32602 });
|
|
21
25
|
}
|
|
26
|
+
// Phase B/C/E: AST-based sink finder + taint tracker + guard evaluator.
|
|
27
|
+
// Runs locally via tree-sitter and attaches deterministic facts to the
|
|
28
|
+
// scan request. The MCP has no related-files infrastructure, so the
|
|
29
|
+
// guard evaluator only evaluates guards found in the scanned file itself.
|
|
30
|
+
let deterministicFacts;
|
|
31
|
+
if (filePath) {
|
|
32
|
+
const grammar = (0, parserLoader_1.grammarForFile)(filePath);
|
|
33
|
+
if (grammar !== 'unknown') {
|
|
34
|
+
try {
|
|
35
|
+
const [sinks, taint] = await Promise.all([
|
|
36
|
+
(0, sinkFinder_1.findSinks)(code, grammar),
|
|
37
|
+
(0, taintTracker_1.trackTaint)(code, grammar),
|
|
38
|
+
]);
|
|
39
|
+
// Phase E: evaluate guards from the scanned file itself against
|
|
40
|
+
// the attack types found by the sink finder + taint tracker.
|
|
41
|
+
let guards;
|
|
42
|
+
const attackTypes = new Set();
|
|
43
|
+
for (const s of sinks)
|
|
44
|
+
attackTypes.add(s.canonicalType);
|
|
45
|
+
for (const t of taint)
|
|
46
|
+
attackTypes.add(t.canonicalType);
|
|
47
|
+
if (attackTypes.size > 0) {
|
|
48
|
+
guards = await (0, guardEvaluator_1.evaluateGuards)([{ source: code, name: filePath }], [...attackTypes], grammar);
|
|
49
|
+
if (guards.length === 0)
|
|
50
|
+
guards = undefined;
|
|
51
|
+
}
|
|
52
|
+
if (sinks.length > 0 || taint.length > 0 || (guards && guards.length > 0)) {
|
|
53
|
+
deterministicFacts = {
|
|
54
|
+
...(sinks.length > 0 && { sinks }),
|
|
55
|
+
...(taint.length > 0 && { taint }),
|
|
56
|
+
...(guards && { guards }),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Best-effort: tree-sitter may be unavailable.
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
22
65
|
const data = await client.postJson('/scan', {
|
|
23
66
|
code,
|
|
24
67
|
language,
|
|
25
68
|
...(filePath ? { filePath } : {}),
|
|
26
69
|
scanDepth: 'auto',
|
|
70
|
+
...(deterministicFacts && { deterministicFacts }),
|
|
27
71
|
});
|
|
28
72
|
const findings = data.scanType === 'advanced' && data.finalFindings
|
|
29
73
|
? data.finalFindings
|
package/dist/tools/scan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/tools/scan.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/tools/scan.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED