@securecode-ai/mcp 0.3.9 → 0.4.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 (58) hide show
  1. package/README.md +107 -13
  2. package/dist/api/client.d.ts +1 -1
  3. package/dist/api/client.js +2 -1
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/types.d.ts +18 -0
  6. package/dist/attack/agentScanExecutor.js +159 -5
  7. package/dist/attack/agentScanExecutor.js.map +1 -1
  8. package/dist/attack/agentScanLoop.js +157 -3
  9. package/dist/attack/agentScanLoop.js.map +1 -1
  10. package/dist/attack/agentScanProtocol.d.ts +47 -5
  11. package/dist/attack/agentScanProtocol.js +3 -3
  12. package/dist/index.js +218 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/mcp/server.js +5 -0
  15. package/dist/mcp/server.js.map +1 -1
  16. package/dist/mcp/tools.js +80 -3
  17. package/dist/mcp/tools.js.map +1 -1
  18. package/dist/project-map/agentMemory.d.ts +75 -0
  19. package/dist/project-map/agentMemory.js +230 -0
  20. package/dist/project-map/agentMemory.js.map +1 -0
  21. package/dist/project-map/crossFileTaintTracker.d.ts +51 -0
  22. package/dist/project-map/crossFileTaintTracker.js +429 -0
  23. package/dist/project-map/crossFileTaintTracker.js.map +1 -0
  24. package/dist/project-map/endpointDiscovery.d.ts +24 -0
  25. package/dist/project-map/endpointDiscovery.js +101 -0
  26. package/dist/project-map/endpointDiscovery.js.map +1 -0
  27. package/dist/project-map/guardEvaluator.js +37 -0
  28. package/dist/project-map/guardEvaluator.js.map +1 -1
  29. package/dist/project-map/guardPatterns.js +16 -5
  30. package/dist/project-map/guardPatterns.js.map +1 -1
  31. package/dist/project-map/sanitizers.js +10 -0
  32. package/dist/project-map/sanitizers.js.map +1 -1
  33. package/dist/project-map/scanCache.d.ts +67 -0
  34. package/dist/project-map/scanCache.js +169 -0
  35. package/dist/project-map/scanCache.js.map +1 -0
  36. package/dist/project-map/sinkRegistry.js +165 -0
  37. package/dist/project-map/sinkRegistry.js.map +1 -1
  38. package/dist/project-map/taintSources.d.ts +19 -1
  39. package/dist/project-map/taintSources.js +69 -2
  40. package/dist/project-map/taintSources.js.map +1 -1
  41. package/dist/project-map/taintTracker.d.ts +4 -1
  42. package/dist/project-map/taintTracker.js +188 -5
  43. package/dist/project-map/taintTracker.js.map +1 -1
  44. package/dist/tools/agentMemoryTools.d.ts +18 -0
  45. package/dist/tools/agentMemoryTools.js +107 -0
  46. package/dist/tools/agentMemoryTools.js.map +1 -0
  47. package/dist/tools/agentScan.d.ts +8 -7
  48. package/dist/tools/agentScan.js +245 -23
  49. package/dist/tools/agentScan.js.map +1 -1
  50. package/dist/utils/files.js +19 -2
  51. package/dist/utils/files.js.map +1 -1
  52. package/dist/utils/listFiles.d.ts +17 -0
  53. package/dist/utils/listFiles.js +126 -0
  54. package/dist/utils/listFiles.js.map +1 -0
  55. package/dist/utils/listImports.d.ts +15 -0
  56. package/dist/utils/listImports.js +164 -0
  57. package/dist/utils/listImports.js.map +1 -0
  58. package/package.json +1 -1
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ /**
3
+ * File listing utility — walks a directory and returns source files,
4
+ * respecting .securecodeignore and skip directories.
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.listFiles = listFiles;
41
+ exports.formatFileList = formatFileList;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const ignore_1 = require("../utils/ignore");
45
+ const SUPPORTED_EXTENSIONS = new Set([
46
+ '.js', '.jsx', '.mjs', '.cjs', '.ts', '.tsx', '.py',
47
+ ]);
48
+ const MAX_FILES = 500;
49
+ function matchGlob(filePath, glob) {
50
+ if (!glob)
51
+ return true;
52
+ // Simple glob: *.ts, *.py, etc — match the extension
53
+ if (glob.startsWith('*.')) {
54
+ const ext = glob.slice(1); // '.ts'
55
+ return filePath.endsWith(ext);
56
+ }
57
+ // Otherwise treat as substring match
58
+ return filePath.includes(glob);
59
+ }
60
+ function listFiles(workspaceRoot, options = {}) {
61
+ const ignorePatterns = (0, ignore_1.readSecurecodeIgnore)(workspaceRoot);
62
+ const searchDir = options.dir
63
+ ? path.resolve(workspaceRoot, options.dir)
64
+ : workspaceRoot;
65
+ const results = [];
66
+ const stack = [searchDir];
67
+ let count = 0;
68
+ while (stack.length > 0 && count < MAX_FILES) {
69
+ const dir = stack.pop();
70
+ let entries;
71
+ try {
72
+ entries = fs.readdirSync(dir, { withFileTypes: true });
73
+ }
74
+ catch {
75
+ continue;
76
+ }
77
+ for (const entry of entries) {
78
+ if (count >= MAX_FILES)
79
+ break;
80
+ const fullPath = path.join(dir, entry.name);
81
+ if (entry.isDirectory()) {
82
+ if (!ignore_1.SKIP_DIRS.has(entry.name) && !entry.name.startsWith('.')) {
83
+ stack.push(fullPath);
84
+ }
85
+ }
86
+ else if (entry.isFile()) {
87
+ const ext = path.extname(entry.name).toLowerCase();
88
+ if (!SUPPORTED_EXTENSIONS.has(ext))
89
+ continue;
90
+ if ((0, ignore_1.isSecretFileName)(fullPath))
91
+ continue;
92
+ const relPath = path.relative(workspaceRoot, fullPath).replace(/\\/g, '/');
93
+ if ((0, ignore_1.isIgnored)(relPath, ignorePatterns))
94
+ continue;
95
+ if (!matchGlob(relPath, options.glob))
96
+ continue;
97
+ let size = 0;
98
+ let lines = 0;
99
+ try {
100
+ const content = fs.readFileSync(fullPath, 'utf8');
101
+ size = Buffer.byteLength(content);
102
+ lines = content.split('\n').length;
103
+ }
104
+ catch { /* best effort */ }
105
+ results.push({ path: relPath, size, lines });
106
+ count++;
107
+ }
108
+ }
109
+ }
110
+ results.sort((a, b) => a.path.localeCompare(b.path));
111
+ return results;
112
+ }
113
+ function formatFileList(files) {
114
+ if (files.length === 0) {
115
+ return 'No source files found.';
116
+ }
117
+ const lines = [`Found ${files.length} source file(s):`];
118
+ for (const f of files) {
119
+ const sizeStr = f.size < 1024
120
+ ? `${f.size}B`
121
+ : `${(f.size / 1024).toFixed(1)}KB`;
122
+ lines.push(` ${f.path} (${f.lines}L, ${sizeStr})`);
123
+ }
124
+ return lines.join('\n');
125
+ }
126
+ //# sourceMappingURL=listFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listFiles.js","sourceRoot":"","sources":["../../src/utils/listFiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Import listing utility — parses a file and returns its imports.
3
+ *
4
+ * Uses collectImports from astHelpers, which handles:
5
+ * - ES modules: import X from 'mod', import { A, B } from 'mod'
6
+ * - CommonJS: const X = require('mod'), const { A, B } = require('mod')
7
+ * - Python: import mod, from mod import X, import mod.sub as alias
8
+ */
9
+ export interface ImportEntry {
10
+ name: string;
11
+ source: string;
12
+ line: number;
13
+ }
14
+ export declare function listImports(workspaceRoot: string, filePath: string): Promise<ImportEntry[]>;
15
+ export declare function formatImports(imports: ImportEntry[], filePath: string): string;
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ /**
3
+ * Import listing utility — parses a file and returns its imports.
4
+ *
5
+ * Uses collectImports from astHelpers, which handles:
6
+ * - ES modules: import X from 'mod', import { A, B } from 'mod'
7
+ * - CommonJS: const X = require('mod'), const { A, B } = require('mod')
8
+ * - Python: import mod, from mod import X, import mod.sub as alias
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.listImports = listImports;
45
+ exports.formatImports = formatImports;
46
+ const fs = __importStar(require("fs"));
47
+ const path = __importStar(require("path"));
48
+ const parserLoader_1 = require("../project-map/parserLoader");
49
+ const astHelpers_1 = require("../project-map/astHelpers");
50
+ async function listImports(workspaceRoot, filePath) {
51
+ const absPath = path.resolve(workspaceRoot, filePath);
52
+ const content = fs.readFileSync(absPath, 'utf8');
53
+ const lang = (0, parserLoader_1.grammarForFile)(absPath);
54
+ if (lang === 'unknown')
55
+ return [];
56
+ const parsed = await (0, parserLoader_1.parseSource)(content, lang);
57
+ if (!parsed)
58
+ return [];
59
+ const { root } = parsed;
60
+ const importMap = (0, astHelpers_1.collectImports)(root, content);
61
+ // collectImports returns a Map<localName, sourceSpec> but doesn't track
62
+ // line numbers. Walk the AST to find import statements and their lines.
63
+ const lineMap = new Map(); // localName -> line
64
+ for (const n of (0, astHelpers_1.walk)(root)) {
65
+ if (n.type === 'import_declaration' || n.type === 'import_statement') {
66
+ const line = n.startPosition.row + 1;
67
+ // Find the local names bound by this import
68
+ for (const child of (0, astHelpers_1.walk)(n)) {
69
+ if (child.type === 'import_specifier' || child.type === 'namespace_import') {
70
+ const local = child.namedChildren[child.namedChildren.length - 1];
71
+ if (local && local.type === 'identifier') {
72
+ const name = content.slice(local.startIndex, local.endIndex);
73
+ lineMap.set(name, line);
74
+ }
75
+ }
76
+ if (child.type === 'identifier' && child.parent?.type === 'import_clause') {
77
+ const name = content.slice(child.startIndex, child.endIndex);
78
+ lineMap.set(name, line);
79
+ }
80
+ }
81
+ // Python import_statement
82
+ if (n.type === 'import_statement' && !n.namedChildren.find(c => c.type === 'string')) {
83
+ for (const c of n.namedChildren) {
84
+ if (c.type === 'dotted_name' || c.type === 'identifier') {
85
+ const name = content.slice(c.startIndex, c.endIndex);
86
+ lineMap.set(name.split('.')[0], line);
87
+ }
88
+ if (c.type === 'aliased_import') {
89
+ const alias = c.child(c.childCount - 1);
90
+ if (alias && alias.type === 'identifier') {
91
+ lineMap.set(content.slice(alias.startIndex, alias.endIndex), line);
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
97
+ if (n.type === 'import_from_statement') {
98
+ const line = n.startPosition.row + 1;
99
+ for (const c of n.namedChildren.slice(1)) {
100
+ if (c.type === 'aliased_import') {
101
+ const alias = c.child(c.childCount - 1);
102
+ if (alias && alias.type === 'identifier') {
103
+ lineMap.set(content.slice(alias.startIndex, alias.endIndex), line);
104
+ }
105
+ }
106
+ else if (c.type === 'dotted_name' || c.type === 'identifier') {
107
+ const name = content.slice(c.startIndex, c.endIndex);
108
+ lineMap.set(name.split('.').pop(), line);
109
+ }
110
+ }
111
+ }
112
+ // CommonJS require
113
+ if (n.type === 'lexical_declaration' || n.type === 'variable_declaration') {
114
+ for (const decl of n.namedChildren) {
115
+ if (decl.type !== 'variable_declarator')
116
+ continue;
117
+ const value = decl.child(decl.childCount - 1);
118
+ if (!value || value.type !== 'call_expression')
119
+ continue;
120
+ // Check if it's a require() call
121
+ const text = content.slice(value.startIndex, value.endIndex);
122
+ if (!text.includes('require('))
123
+ continue;
124
+ const line = n.startPosition.row + 1;
125
+ const nameNode = decl.child(0);
126
+ if (!nameNode)
127
+ continue;
128
+ if (nameNode.type === 'identifier') {
129
+ lineMap.set(content.slice(nameNode.startIndex, nameNode.endIndex), line);
130
+ }
131
+ else {
132
+ // Binding pattern: walk for identifiers
133
+ for (const child of (0, astHelpers_1.walk)(nameNode)) {
134
+ if (child.type === 'identifier' && child.parent?.type !== 'member_expression') {
135
+ lineMap.set(content.slice(child.startIndex, child.endIndex), line);
136
+ }
137
+ }
138
+ }
139
+ }
140
+ }
141
+ }
142
+ // Build the result from the import map + line map
143
+ const entries = [];
144
+ for (const [name, source] of importMap) {
145
+ entries.push({
146
+ name,
147
+ source,
148
+ line: lineMap.get(name) || 0,
149
+ });
150
+ }
151
+ entries.sort((a, b) => a.line - b.line);
152
+ return entries;
153
+ }
154
+ function formatImports(imports, filePath) {
155
+ if (imports.length === 0) {
156
+ return `No imports found in ${filePath}.`;
157
+ }
158
+ const lines = [`Imports in ${filePath} (${imports.length}):`];
159
+ for (const imp of imports) {
160
+ lines.push(` L${imp.line} ${imp.name} from "${imp.source}"`);
161
+ }
162
+ return lines.join('\n');
163
+ }
164
+ //# sourceMappingURL=listImports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listImports.js","sourceRoot":"","sources":["../../src/utils/listImports.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.3.9",
3
+ "version": "0.4.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": {