@securecode-ai/mcp 0.1.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 (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +71 -0
  3. package/dist/api/client.d.ts +22 -0
  4. package/dist/api/client.js +141 -0
  5. package/dist/api/client.js.map +1 -0
  6. package/dist/api/types.d.ts +129 -0
  7. package/dist/api/types.js +3 -0
  8. package/dist/api/types.js.map +1 -0
  9. package/dist/approval/auditLog.d.ts +3 -0
  10. package/dist/approval/auditLog.js +67 -0
  11. package/dist/approval/auditLog.js.map +1 -0
  12. package/dist/approval/broker.d.ts +11 -0
  13. package/dist/approval/broker.js +252 -0
  14. package/dist/approval/broker.js.map +1 -0
  15. package/dist/approval/types.d.ts +26 -0
  16. package/dist/approval/types.js +58 -0
  17. package/dist/approval/types.js.map +1 -0
  18. package/dist/attack/agentLoop.d.ts +21 -0
  19. package/dist/attack/agentLoop.js +148 -0
  20. package/dist/attack/agentLoop.js.map +1 -0
  21. package/dist/attack/executor.d.ts +17 -0
  22. package/dist/attack/executor.js +162 -0
  23. package/dist/attack/executor.js.map +1 -0
  24. package/dist/attack/policy.d.ts +26 -0
  25. package/dist/attack/policy.js +73 -0
  26. package/dist/attack/policy.js.map +1 -0
  27. package/dist/attack/protocol.d.ts +64 -0
  28. package/dist/attack/protocol.js +3 -0
  29. package/dist/attack/protocol.js.map +1 -0
  30. package/dist/attack/report.d.ts +16 -0
  31. package/dist/attack/report.js +54 -0
  32. package/dist/attack/report.js.map +1 -0
  33. package/dist/auth/credentialStore.d.ts +20 -0
  34. package/dist/auth/credentialStore.js +148 -0
  35. package/dist/auth/credentialStore.js.map +1 -0
  36. package/dist/auth/keychain.d.ts +14 -0
  37. package/dist/auth/keychain.js +267 -0
  38. package/dist/auth/keychain.js.map +1 -0
  39. package/dist/index.d.ts +2 -0
  40. package/dist/index.js +170 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/mcp/server.d.ts +2 -0
  43. package/dist/mcp/server.js +183 -0
  44. package/dist/mcp/server.js.map +1 -0
  45. package/dist/mcp/tools.d.ts +2 -0
  46. package/dist/mcp/tools.js +120 -0
  47. package/dist/mcp/tools.js.map +1 -0
  48. package/dist/mcp/types.d.ts +26 -0
  49. package/dist/mcp/types.js +3 -0
  50. package/dist/mcp/types.js.map +1 -0
  51. package/dist/project-map/astHelpers.d.ts +89 -0
  52. package/dist/project-map/astHelpers.js +468 -0
  53. package/dist/project-map/astHelpers.js.map +1 -0
  54. package/dist/project-map/cache.d.ts +11 -0
  55. package/dist/project-map/cache.js +86 -0
  56. package/dist/project-map/cache.js.map +1 -0
  57. package/dist/project-map/confidence.d.ts +50 -0
  58. package/dist/project-map/confidence.js +87 -0
  59. package/dist/project-map/confidence.js.map +1 -0
  60. package/dist/project-map/crossFile.d.ts +73 -0
  61. package/dist/project-map/crossFile.js +33 -0
  62. package/dist/project-map/crossFile.js.map +1 -0
  63. package/dist/project-map/detectors.d.ts +83 -0
  64. package/dist/project-map/detectors.js +376 -0
  65. package/dist/project-map/detectors.js.map +1 -0
  66. package/dist/project-map/layer1.d.ts +74 -0
  67. package/dist/project-map/layer1.js +928 -0
  68. package/dist/project-map/layer1.js.map +1 -0
  69. package/dist/project-map/layer2.d.ts +30 -0
  70. package/dist/project-map/layer2.js +249 -0
  71. package/dist/project-map/layer2.js.map +1 -0
  72. package/dist/project-map/mapBuilder.d.ts +17 -0
  73. package/dist/project-map/mapBuilder.js +164 -0
  74. package/dist/project-map/mapBuilder.js.map +1 -0
  75. package/dist/project-map/parserLoader.d.ts +61 -0
  76. package/dist/project-map/parserLoader.js +175 -0
  77. package/dist/project-map/parserLoader.js.map +1 -0
  78. package/dist/project-map/schemas.d.ts +28 -0
  79. package/dist/project-map/schemas.js +131 -0
  80. package/dist/project-map/schemas.js.map +1 -0
  81. package/dist/project-map/types.d.ts +232 -0
  82. package/dist/project-map/types.js +61 -0
  83. package/dist/project-map/types.js.map +1 -0
  84. package/dist/tools/attack.d.ts +2 -0
  85. package/dist/tools/attack.js +80 -0
  86. package/dist/tools/attack.js.map +1 -0
  87. package/dist/tools/fix.d.ts +2 -0
  88. package/dist/tools/fix.js +60 -0
  89. package/dist/tools/fix.js.map +1 -0
  90. package/dist/tools/map.d.ts +2 -0
  91. package/dist/tools/map.js +46 -0
  92. package/dist/tools/map.js.map +1 -0
  93. package/dist/tools/scan.d.ts +2 -0
  94. package/dist/tools/scan.js +55 -0
  95. package/dist/tools/scan.js.map +1 -0
  96. package/dist/utils/files.d.ts +8 -0
  97. package/dist/utils/files.js +79 -0
  98. package/dist/utils/files.js.map +1 -0
  99. package/package.json +53 -0
  100. package/resources/tree-sitter/tree-sitter-javascript.wasm +0 -0
  101. package/resources/tree-sitter/tree-sitter-python.wasm +0 -0
  102. package/resources/tree-sitter/tree-sitter-tsx.wasm +0 -0
  103. package/resources/tree-sitter/tree-sitter-typescript.wasm +0 -0
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Keychain = void 0;
37
+ const child_process_1 = require("child_process");
38
+ const os = __importStar(require("os"));
39
+ const SERVICE_NAME = 'SecureCode-MCP';
40
+ const ACCOUNT_NAME = 'api-token';
41
+ function detectPlatform() {
42
+ const platform = os.platform();
43
+ if (platform === 'darwin' || platform === 'win32' || platform === 'linux') {
44
+ return platform;
45
+ }
46
+ return 'linux';
47
+ }
48
+ const KeychainDarwin = {
49
+ set(token) {
50
+ (0, child_process_1.execSync)(`security add-generic-password -s "${SERVICE_NAME}" -a "${ACCOUNT_NAME}" -w "${token.replace(/"/g, '\\"')}" -U`, { stdio: 'pipe' });
51
+ },
52
+ get() {
53
+ try {
54
+ const buf = (0, child_process_1.execSync)(`security find-generic-password -s "${SERVICE_NAME}" -a "${ACCOUNT_NAME}" -w`, { stdio: 'pipe', encoding: 'utf8' });
55
+ return buf.trim() || null;
56
+ }
57
+ catch {
58
+ return null;
59
+ }
60
+ },
61
+ delete() {
62
+ try {
63
+ (0, child_process_1.execSync)(`security delete-generic-password -s "${SERVICE_NAME}" -a "${ACCOUNT_NAME}"`, { stdio: 'pipe' });
64
+ return true;
65
+ }
66
+ catch {
67
+ return false;
68
+ }
69
+ },
70
+ };
71
+ const KeychainWin32 = {
72
+ set(token) {
73
+ const psScript = `
74
+ Add-Type @"
75
+ using System;
76
+ using System.Runtime.InteropServices;
77
+ public class CredMan {
78
+ [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
79
+ public static extern bool CredWriteW(ref CREDENTIAL cred, uint flags);
80
+
81
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
82
+ public struct CREDENTIAL {
83
+ public uint Flags;
84
+ public uint Type;
85
+ public string TargetName;
86
+ public string Comment;
87
+ public System.Runtime.InteropServices.ComTypes.FILETIME LastWritten;
88
+ public uint CredentialBlobSize;
89
+ public string CredentialBlob;
90
+ public uint Persist;
91
+ public uint AttributeCount;
92
+ public IntPtr Attributes;
93
+ public string TargetAlias;
94
+ public string UserName;
95
+ }
96
+ }
97
+ "@
98
+ $blob = [System.Text.Encoding]::Unicode.GetBytes("${token.replace(/"/g, '`"')}")
99
+ $cred = New-Object CredMan+CREDENTIAL
100
+ $cred.Flags = 0
101
+ $cred.Type = 1
102
+ $cred.TargetName = "${SERVICE_NAME}"
103
+ $cred.CredentialBlobSize = $blob.Length
104
+ $cred.CredentialBlob = "${token.replace(/"/g, '`"')}"
105
+ $cred.Persist = 2
106
+ $cred.UserName = "${ACCOUNT_NAME}"
107
+ [CredMan]::CredWriteW([ref]$cred, 0) | Out-Null
108
+ `;
109
+ (0, child_process_1.execSync)('powershell -NoProfile -Command "' + psScript.replace(/"/g, '\\"').replace(/\n/g, ' ') + '"', {
110
+ stdio: 'pipe',
111
+ encoding: 'utf8',
112
+ });
113
+ },
114
+ get() {
115
+ const psScript = `
116
+ Add-Type @"
117
+ using System;
118
+ using System.Runtime.InteropServices;
119
+ public class CredMan {
120
+ [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
121
+ public static extern bool CredReadW(string target, uint type, uint flags, out IntPtr cred);
122
+
123
+ [DllImport("advapi32.dll")]
124
+ public static extern void CredFree(IntPtr cred);
125
+
126
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
127
+ public struct CREDENTIAL {
128
+ public uint Flags;
129
+ public uint Type;
130
+ public string TargetName;
131
+ public string Comment;
132
+ public System.Runtime.InteropServices.ComTypes.FILETIME LastWritten;
133
+ public uint CredentialBlobSize;
134
+ public string CredentialBlob;
135
+ public uint Persist;
136
+ public uint AttributeCount;
137
+ public IntPtr Attributes;
138
+ public string TargetAlias;
139
+ public string UserName;
140
+ }
141
+ }
142
+ "@
143
+ $ptr = [IntPtr]::Zero
144
+ $ok = [CredMan]::CredReadW("${SERVICE_NAME}", 1, 0, [ref]$ptr)
145
+ if (-not $ok) { return "" }
146
+ $cred = [Runtime.InteropServices.Marshal]::PtrToStructure[CredMan+CREDENTIAL]($ptr)
147
+ [CredMan]::CredFree($ptr)
148
+ return $cred.CredentialBlob
149
+ `;
150
+ try {
151
+ const result = (0, child_process_1.execSync)('powershell -NoProfile -Command "' + psScript.replace(/"/g, '\\"').replace(/\n/g, ' ') + '"', {
152
+ stdio: 'pipe',
153
+ encoding: 'utf8',
154
+ });
155
+ const token = result.trim();
156
+ return token || null;
157
+ }
158
+ catch {
159
+ return null;
160
+ }
161
+ },
162
+ delete() {
163
+ const psScript = `
164
+ Add-Type @"
165
+ using System;
166
+ using System.Runtime.InteropServices;
167
+ public class CredMan {
168
+ [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
169
+ public static extern bool CredDeleteW(string target, uint type, uint flags);
170
+ }
171
+ "@
172
+ [CredMan]::CredDeleteW("${SERVICE_NAME}", 1, 0) | Out-Null
173
+ `;
174
+ try {
175
+ (0, child_process_1.execSync)('powershell -NoProfile -Command "' + psScript.replace(/"/g, '\\"').replace(/\n/g, ' ') + '"', {
176
+ stdio: 'pipe',
177
+ });
178
+ return true;
179
+ }
180
+ catch {
181
+ return false;
182
+ }
183
+ },
184
+ };
185
+ const KeychainLinux = {
186
+ set(token) {
187
+ (0, child_process_1.execSync)(`secret-tool store --label="${SERVICE_NAME}" service "${SERVICE_NAME}" account "${ACCOUNT_NAME}" <<< '${token.replace(/'/g, "'\\''")}'`, { stdio: 'pipe', shell: '/bin/bash' });
188
+ },
189
+ get() {
190
+ try {
191
+ const buf = (0, child_process_1.execSync)(`secret-tool lookup service "${SERVICE_NAME}" account "${ACCOUNT_NAME}"`, { stdio: 'pipe', encoding: 'utf8' });
192
+ return buf.trim() || null;
193
+ }
194
+ catch {
195
+ return null;
196
+ }
197
+ },
198
+ delete() {
199
+ try {
200
+ (0, child_process_1.execSync)(`secret-tool clear service "${SERVICE_NAME}" account "${ACCOUNT_NAME}"`, { stdio: 'pipe' });
201
+ return true;
202
+ }
203
+ catch {
204
+ return false;
205
+ }
206
+ },
207
+ };
208
+ const IMPLS = {
209
+ darwin: KeychainDarwin,
210
+ win32: KeychainWin32,
211
+ linux: KeychainLinux,
212
+ };
213
+ class Keychain {
214
+ static isAvailable() {
215
+ const platform = detectPlatform();
216
+ try {
217
+ if (platform === 'darwin') {
218
+ (0, child_process_1.execSync)('which security', { stdio: 'pipe' });
219
+ return true;
220
+ }
221
+ else if (platform === 'win32') {
222
+ return true;
223
+ }
224
+ else if (platform === 'linux') {
225
+ (0, child_process_1.execSync)('which secret-tool', { stdio: 'pipe' });
226
+ return true;
227
+ }
228
+ }
229
+ catch {
230
+ return false;
231
+ }
232
+ return false;
233
+ }
234
+ static get() {
235
+ const platform = detectPlatform();
236
+ try {
237
+ return IMPLS[platform].get();
238
+ }
239
+ catch {
240
+ return null;
241
+ }
242
+ }
243
+ static set(token) {
244
+ const platform = detectPlatform();
245
+ try {
246
+ IMPLS[platform].set(token);
247
+ return { success: true, method: 'keychain', platform };
248
+ }
249
+ catch (err) {
250
+ return { success: false, method: 'file', platform, error: err.message };
251
+ }
252
+ }
253
+ static delete() {
254
+ const platform = detectPlatform();
255
+ try {
256
+ return IMPLS[platform].delete();
257
+ }
258
+ catch {
259
+ return false;
260
+ }
261
+ }
262
+ static getPlatform() {
263
+ return detectPlatform();
264
+ }
265
+ }
266
+ exports.Keychain = Keychain;
267
+ //# sourceMappingURL=keychain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../src/auth/keychain.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAuD;AACvD,uCAAyB;AAEzB,MAAM,YAAY,GAAG,gBAAgB,CAAC;AACtC,MAAM,YAAY,GAAG,WAAW,CAAC;AAIjC,SAAS,cAAc;IACnB,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC/B,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACxE,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,cAAc,GAAG;IACnB,GAAG,CAAC,KAAa;QACb,IAAA,wBAAQ,EACJ,qCAAqC,YAAY,SAAS,YAAY,SAAS,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAC/G,EAAE,KAAK,EAAE,MAAM,EAAE,CACpB,CAAC;IACN,CAAC;IAED,GAAG;QACC,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,IAAA,wBAAQ,EAChB,sCAAsC,YAAY,SAAS,YAAY,MAAM,EAC7E,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CACtC,CAAC;YACF,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,MAAM;QACF,IAAI,CAAC;YACD,IAAA,wBAAQ,EACJ,wCAAwC,YAAY,SAAS,YAAY,GAAG,EAC5E,EAAE,KAAK,EAAE,MAAM,EAAE,CACpB,CAAC;YACF,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;CACJ,CAAC;AAEF,MAAM,aAAa,GAAG;IAClB,GAAG,CAAC,KAAa;QACb,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;gEAyBuC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;;;;kCAIvD,YAAY;;sCAER,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;;gCAE/B,YAAY;;SAEnC,CAAC;QACF,IAAA,wBAAQ,EAAC,kCAAkC,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE;YACnG,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,MAAM;SACnB,CAAC,CAAC;IACP,CAAC;IAED,GAAG;QACC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0CA6BiB,YAAY;;;;;SAK7C,CAAC;QACF,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,kCAAkC,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE;gBAClH,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,MAAM;aACnB,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5B,OAAO,KAAK,IAAI,IAAI,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,MAAM;QACF,MAAM,QAAQ,GAAG;;;;;;;;;sCASa,YAAY;SACzC,CAAC;QACF,IAAI,CAAC;YACD,IAAA,wBAAQ,EAAC,kCAAkC,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE;gBACnG,KAAK,EAAE,MAAM;aAChB,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;CACJ,CAAC;AAEF,MAAM,aAAa,GAAG;IAClB,GAAG,CAAC,KAAa;QACb,IAAA,wBAAQ,EACJ,8BAA8B,YAAY,cAAc,YAAY,cAAc,YAAY,UAAU,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EACvI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CACxC,CAAC;IACN,CAAC;IAED,GAAG;QACC,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,IAAA,wBAAQ,EAChB,+BAA+B,YAAY,cAAc,YAAY,GAAG,EACxE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CACtC,CAAC;YACF,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,MAAM;QACF,IAAI,CAAC;YACD,IAAA,wBAAQ,EACJ,8BAA8B,YAAY,cAAc,YAAY,GAAG,EACvE,EAAE,KAAK,EAAE,MAAM,EAAE,CACpB,CAAC;YACF,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;CACJ,CAAC;AAEF,MAAM,KAAK,GAA4C;IACnD,MAAM,EAAE,cAAc;IACtB,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,aAAa;CACvB,CAAC;AASF,MAAa,QAAQ;IACjB,MAAM,CAAC,WAAW;QACd,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC;YACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACxB,IAAA,wBAAQ,EAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC9C,OAAO,IAAI,CAAC;YAChB,CAAC;iBAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC;YAChB,CAAC;iBAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC9B,IAAA,wBAAQ,EAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBACjD,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,GAAG;QACN,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC;YACD,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,KAAa;QACpB,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC;YACD,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAC3D,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAC5E,CAAC;IACL,CAAC;IAED,MAAM,CAAC,MAAM;QACT,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC;YACD,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,MAAM,CAAC,WAAW;QACd,OAAO,cAAc,EAAE,CAAC;IAC5B,CAAC;CACJ;AAlDD,4BAkDC"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,170 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const path = __importStar(require("path"));
38
+ const credentialStore_1 = require("./auth/credentialStore");
39
+ const server_1 = require("./mcp/server");
40
+ function printUsage() {
41
+ console.log(`SecureCode MCP — standalone security scanner for AI coding tools
42
+
43
+ Usage:
44
+ securecode-mcp serve [--workspace <path>] Start the MCP stdio server
45
+ securecode-mcp login [--api-url <url>] Store your API token
46
+ securecode-mcp status Show current auth status
47
+ securecode-mcp logout Remove stored credentials
48
+ securecode-mcp --help Show this help
49
+
50
+ Environment:
51
+ SECURECODE_API_TOKEN API token (alternative to login)
52
+ SECURECODE_API_URL API base URL (default: https://api.usesecurecode.tech)
53
+
54
+ MCP client configuration (Cursor, Claude Code, Windsurf, Codex):
55
+ {
56
+ "mcpServers": {
57
+ "securecode": {
58
+ "command": "securecode-mcp",
59
+ "args": ["serve", "--workspace", "/path/to/your/project"]
60
+ }
61
+ }
62
+ }
63
+ `);
64
+ }
65
+ async function cmdServe(args) {
66
+ let workspace = process.cwd();
67
+ for (let i = 0; i < args.length; i++) {
68
+ if (args[i] === '--workspace' && i + 1 < args.length) {
69
+ workspace = path.resolve(args[++i]);
70
+ }
71
+ }
72
+ if (!path.isAbsolute(workspace)) {
73
+ workspace = path.resolve(workspace);
74
+ }
75
+ const creds = credentialStore_1.CredentialStore.getOrThrow();
76
+ const ctx = {
77
+ apiUrl: creds.apiUrl,
78
+ apiToken: creds.apiToken,
79
+ workspaceRoot: workspace,
80
+ };
81
+ (0, server_1.startServer)(ctx);
82
+ }
83
+ async function cmdLogin(args) {
84
+ let apiUrl = 'https://api.usesecurecode.tech';
85
+ for (let i = 0; i < args.length; i++) {
86
+ if (args[i] === '--api-url' && i + 1 < args.length) {
87
+ apiUrl = args[++i];
88
+ }
89
+ }
90
+ const readline = require('readline');
91
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
92
+ const ask = (q) => new Promise((resolve) => rl.question(q, resolve));
93
+ console.log('SecureCode MCP Login');
94
+ console.log(`API URL: ${apiUrl}`);
95
+ console.log('');
96
+ const token = await ask('Enter your SecureCode API token: ');
97
+ rl.close();
98
+ if (!token || token.trim().length === 0) {
99
+ console.error('Error: No token provided.');
100
+ process.exit(1);
101
+ }
102
+ const result = credentialStore_1.CredentialStore.save({
103
+ apiToken: token.trim(),
104
+ apiUrl,
105
+ storedAt: new Date().toISOString(),
106
+ });
107
+ console.log('');
108
+ if (result.method === 'keychain') {
109
+ console.log('Credentials saved to OS keychain.');
110
+ }
111
+ else {
112
+ console.log(`Credentials saved to ~/.securecode/credentials.json (mode 0600).`);
113
+ if (result.warning) {
114
+ console.log(`Warning: ${result.warning}`);
115
+ }
116
+ }
117
+ console.log('You can now run: securecode-mcp serve --workspace /path/to/project');
118
+ }
119
+ function cmdStatus() {
120
+ const creds = credentialStore_1.CredentialStore.get();
121
+ if (!creds) {
122
+ console.log('Not authenticated. Run: securecode-mcp login');
123
+ process.exit(0);
124
+ }
125
+ console.log('Authenticated');
126
+ console.log(` API URL: ${creds.apiUrl}`);
127
+ console.log(` Token: ${creds.apiToken.substring(0, 8)}...${creds.apiToken.slice(-4)}`);
128
+ console.log(` Storage: ${creds.storedAt}`);
129
+ }
130
+ function cmdLogout() {
131
+ const removed = credentialStore_1.CredentialStore.clear();
132
+ if (removed) {
133
+ console.log('Credentials removed.');
134
+ }
135
+ else {
136
+ console.log('No stored credentials found.');
137
+ }
138
+ }
139
+ async function main() {
140
+ const args = process.argv.slice(2);
141
+ const command = args[0];
142
+ if (!command || command === '--help' || command === '-h') {
143
+ printUsage();
144
+ process.exit(0);
145
+ }
146
+ const subArgs = args.slice(1);
147
+ switch (command) {
148
+ case 'serve':
149
+ await cmdServe(subArgs);
150
+ break;
151
+ case 'login':
152
+ await cmdLogin(subArgs);
153
+ break;
154
+ case 'status':
155
+ cmdStatus();
156
+ break;
157
+ case 'logout':
158
+ cmdLogout();
159
+ break;
160
+ default:
161
+ console.error(`Unknown command: ${command}`);
162
+ printUsage();
163
+ process.exit(1);
164
+ }
165
+ }
166
+ main().catch((err) => {
167
+ console.error(err.message || String(err));
168
+ process.exit(1);
169
+ });
170
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ServerContext } from './types';
2
+ export declare function startServer(ctx: ServerContext): void;
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.startServer = startServer;
37
+ const readline = __importStar(require("readline"));
38
+ const tools_1 = require("./tools");
39
+ const scan_1 = require("../tools/scan");
40
+ const map_1 = require("../tools/map");
41
+ const fix_1 = require("../tools/fix");
42
+ const attack_1 = require("../tools/attack");
43
+ const PROTOCOL_VERSION = '2025-03-26';
44
+ const SERVER_NAME = 'securecode-mcp';
45
+ const SERVER_VERSION = '0.1.0';
46
+ let initialized = false;
47
+ function send(msg) {
48
+ process.stdout.write(JSON.stringify(msg) + '\n');
49
+ }
50
+ function result(id, value) {
51
+ send({ jsonrpc: '2.0', id, result: value });
52
+ }
53
+ function error(id, code, message, data) {
54
+ send({ jsonrpc: '2.0', id, error: { code, message, data } });
55
+ }
56
+ const TOOL_HANDLERS = {
57
+ 'securecode.scan': scan_1.toolScan,
58
+ 'securecode.map': map_1.toolMap,
59
+ 'securecode.fix': fix_1.toolFix,
60
+ 'securecode.attack': attack_1.toolAttack,
61
+ };
62
+ function validateArgs(tool, args) {
63
+ const schema = tool.inputSchema;
64
+ const props = schema.properties || {};
65
+ for (const name of schema.required || []) {
66
+ if (args[name] === undefined || args[name] === null) {
67
+ return `Missing required parameter '${name}' for ${tool.name}.`;
68
+ }
69
+ }
70
+ for (const [name, value] of Object.entries(args)) {
71
+ const declared = props[name]?.type;
72
+ if (!declared || value === undefined || value === null)
73
+ continue;
74
+ const ok = declared === 'string' ? typeof value === 'string' :
75
+ declared === 'number' ? typeof value === 'number' && Number.isFinite(value) :
76
+ declared === 'boolean' ? typeof value === 'boolean' :
77
+ declared === 'object' ? typeof value === 'object' && !Array.isArray(value) :
78
+ declared === 'array' ? Array.isArray(value) :
79
+ true;
80
+ if (!ok) {
81
+ return `Parameter '${name}' of ${tool.name} must be a ${declared}, got ${Array.isArray(value) ? 'array' : typeof value}.`;
82
+ }
83
+ }
84
+ return null;
85
+ }
86
+ async function handleRequest(ctx, req) {
87
+ const id = req.id ?? null;
88
+ try {
89
+ switch (req.method) {
90
+ case 'initialize': {
91
+ initialized = true;
92
+ return {
93
+ jsonrpc: '2.0', id,
94
+ result: {
95
+ protocolVersion: PROTOCOL_VERSION,
96
+ capabilities: { tools: { listChanged: false } },
97
+ serverInfo: { name: SERVER_NAME, version: SERVER_VERSION },
98
+ },
99
+ };
100
+ }
101
+ case 'notifications/initialized': {
102
+ return { jsonrpc: '2.0', id: null };
103
+ }
104
+ case 'tools/list': {
105
+ return { jsonrpc: '2.0', id, result: { tools: tools_1.TOOLS } };
106
+ }
107
+ case 'tools/call': {
108
+ const params = (req.params || {});
109
+ const name = params.name;
110
+ const args = params.arguments || {};
111
+ const handler = name ? TOOL_HANDLERS[name] : undefined;
112
+ if (!handler) {
113
+ return { jsonrpc: '2.0', id, error: { code: -32601, message: `Unknown tool: ${name}` } };
114
+ }
115
+ const toolDef = tools_1.TOOLS.find((t) => t.name === name);
116
+ if (!toolDef) {
117
+ return { jsonrpc: '2.0', id, error: { code: -32601, message: `Unknown tool: ${name}` } };
118
+ }
119
+ const invalid = validateArgs(toolDef, args);
120
+ if (invalid) {
121
+ return { jsonrpc: '2.0', id, error: { code: -32602, message: invalid } };
122
+ }
123
+ const result_data = await handler(ctx, args);
124
+ return {
125
+ jsonrpc: '2.0', id,
126
+ result: {
127
+ content: [{ type: 'text', text: JSON.stringify(result_data, null, 2) }],
128
+ },
129
+ };
130
+ }
131
+ default: {
132
+ if (req.method.startsWith('notifications/')) {
133
+ return { jsonrpc: '2.0', id: null };
134
+ }
135
+ return { jsonrpc: '2.0', id, error: { code: -32601, message: `Method not found: ${req.method}` } };
136
+ }
137
+ }
138
+ }
139
+ catch (err) {
140
+ const code = err.code || -32603;
141
+ return { jsonrpc: '2.0', id, error: { code, message: err.message || String(err) } };
142
+ }
143
+ }
144
+ function startServer(ctx) {
145
+ const rl = readline.createInterface({ input: process.stdin, terminal: false });
146
+ rl.on('line', (line) => {
147
+ const trimmed = line.trim();
148
+ if (!trimmed)
149
+ return;
150
+ let parsed;
151
+ try {
152
+ parsed = JSON.parse(trimmed);
153
+ }
154
+ catch {
155
+ error(null, -32700, 'Parse error');
156
+ return;
157
+ }
158
+ if (parsed === null ||
159
+ typeof parsed !== 'object' ||
160
+ Array.isArray(parsed) ||
161
+ typeof parsed.method !== 'string') {
162
+ const maybeId = parsed && typeof parsed === 'object' && !Array.isArray(parsed)
163
+ ? parsed.id ?? null
164
+ : null;
165
+ error(maybeId, -32600, 'Invalid Request');
166
+ return;
167
+ }
168
+ const req = parsed;
169
+ handleRequest(ctx, req).then((res) => {
170
+ if (req.id !== undefined && req.id !== null) {
171
+ send(res);
172
+ }
173
+ }).catch((err) => {
174
+ if (req.id !== undefined && req.id !== null) {
175
+ error(req.id, -32603, err.message || String(err));
176
+ }
177
+ });
178
+ });
179
+ rl.on('close', () => {
180
+ process.exit(0);
181
+ });
182
+ }
183
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ToolDef } from './types';
2
+ export declare const TOOLS: ToolDef[];