@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.
Files changed (55) hide show
  1. package/README.md +5 -3
  2. package/dist/api/client.d.ts +4 -0
  3. package/dist/api/client.js +49 -0
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/types.d.ts +40 -0
  6. package/dist/index.js +64 -7
  7. package/dist/index.js.map +1 -1
  8. package/dist/mcp/server.js +16 -1
  9. package/dist/mcp/server.js.map +1 -1
  10. package/dist/poc/httpPocExecutor.d.ts +20 -0
  11. package/dist/poc/httpPocExecutor.js +247 -0
  12. package/dist/poc/httpPocExecutor.js.map +1 -0
  13. package/dist/poc/lightpandaExecutor.d.ts +41 -0
  14. package/dist/poc/lightpandaExecutor.js +263 -0
  15. package/dist/poc/lightpandaExecutor.js.map +1 -0
  16. package/dist/poc/pocExecutor.d.ts +46 -0
  17. package/dist/poc/pocExecutor.js +74 -0
  18. package/dist/poc/pocExecutor.js.map +1 -0
  19. package/dist/poc/pocRouter.d.ts +20 -0
  20. package/dist/poc/pocRouter.js +40 -0
  21. package/dist/poc/pocRouter.js.map +1 -0
  22. package/dist/poc/pocTypes.d.ts +54 -0
  23. package/dist/poc/pocTypes.js +16 -0
  24. package/dist/poc/pocTypes.js.map +1 -0
  25. package/dist/project-map/fixTester.d.ts +55 -0
  26. package/dist/project-map/fixTester.js +338 -0
  27. package/dist/project-map/fixTester.js.map +1 -0
  28. package/dist/project-map/guardEvaluator.d.ts +40 -0
  29. package/dist/project-map/guardEvaluator.js +216 -0
  30. package/dist/project-map/guardEvaluator.js.map +1 -0
  31. package/dist/project-map/guardPatterns.d.ts +43 -0
  32. package/dist/project-map/guardPatterns.js +173 -0
  33. package/dist/project-map/guardPatterns.js.map +1 -0
  34. package/dist/project-map/mapBuilder.js +44 -5
  35. package/dist/project-map/mapBuilder.js.map +1 -1
  36. package/dist/project-map/sanitizers.d.ts +34 -0
  37. package/dist/project-map/sanitizers.js +76 -0
  38. package/dist/project-map/sanitizers.js.map +1 -0
  39. package/dist/project-map/sinkFinder.d.ts +48 -0
  40. package/dist/project-map/sinkFinder.js +340 -0
  41. package/dist/project-map/sinkFinder.js.map +1 -0
  42. package/dist/project-map/sinkRegistry.d.ts +60 -0
  43. package/dist/project-map/sinkRegistry.js +246 -0
  44. package/dist/project-map/sinkRegistry.js.map +1 -0
  45. package/dist/project-map/taintSources.d.ts +30 -0
  46. package/dist/project-map/taintSources.js +77 -0
  47. package/dist/project-map/taintSources.js.map +1 -0
  48. package/dist/project-map/taintTracker.d.ts +42 -0
  49. package/dist/project-map/taintTracker.js +571 -0
  50. package/dist/project-map/taintTracker.js.map +1 -0
  51. package/dist/tools/map.js +13 -1
  52. package/dist/tools/map.js.map +1 -1
  53. package/dist/tools/scan.js +44 -0
  54. package/dist/tools/scan.js.map +1 -1
  55. package/package.json +1 -1
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/tools/scan.ts"],"names":[],"mappings":";;AAOA,4BAuDC;AA5DD,0CAA0C;AAG1C,0CAAsE;AAE/D,KAAK,UAAU,QAAQ,CAAC,GAAkB,EAAE,IAAS;IACxD,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE3E,IAAI,IAAI,GAAuB,IAAI,CAAC,IAAI,CAAC;IACzC,IAAI,QAAQ,GAAuB,IAAI,CAAC,QAAQ,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA8B,CAAC;IAErD,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,IAAA,6BAAqB,EAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAChE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACjB,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;IACzC,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sDAAsD,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7G,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAe,OAAO,EAAE;QACtD,IAAI;QACJ,QAAQ;QACR,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,SAAS,EAAE,MAAM;KACpB,CAAC,CAAC;IAEH,MAAM,QAAQ,GACV,IAAI,CAAC,QAAQ,KAAK,UAAU,IAAI,IAAI,CAAC,aAAa;QAC9C,CAAC,CAAC,IAAI,CAAC,aAAa;QACpB,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IAE9B,OAAO;QACH,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ;YAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ;YACzC,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI;gBACpB,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI;gBACzB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI;aACzC;YACD,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO;YACtC,QAAQ,EAAE,CAAC,CAAC,gBAAgB;YAC5B,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,GAAG,EAAE,CAAC,CAAC,QAAQ;YACf,WAAW,EAAE,CAAC,CAAC,YAAY;YAC3B,UAAU,EAAE,CAAC,CAAC,WAAW;SAC5B,CAAC,CAAC;QACH,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,cAAc,EAAE,IAAI,CAAC,gBAAgB;QACrC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;KAChC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/tools/scan.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@securecode-ai/mcp",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "Standalone SecureCode MCP server — scan, map, fix, and attack tools for AI coding assistants. Works without the VS Code extension.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {