@securecode-ai/mcp 0.3.8 → 0.4.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.
@@ -2,7 +2,7 @@ export interface ScanRequest {
2
2
  code: string;
3
3
  language: string;
4
4
  filePath?: string;
5
- scanDepth?: 'auto' | 'deep';
5
+ scanDepth?: 'auto' | 'deep' | 'agent';
6
6
  workspaceHints?: {
7
7
  frameworkHint?: string;
8
8
  relatedFiles?: Array<{
@@ -167,3 +167,21 @@ export interface ProjectMap {
167
167
  builtAt?: string;
168
168
  version?: number;
169
169
  }
170
+ export interface SandboxProveResponse {
171
+ proven: 'PROVEN' | 'UNPROVEN' | 'INCONCLUSIVE' | 'NOT_REPRODUCIBLE';
172
+ canReproduce: boolean;
173
+ skipReason?: string;
174
+ rationale?: string;
175
+ degraded: boolean;
176
+ sandbox?: {
177
+ verdict: string;
178
+ rule: string;
179
+ reason: string;
180
+ serverBooted: boolean;
181
+ port: number;
182
+ elapsedMs: number;
183
+ baselineStatus?: number;
184
+ exploitStatus?: number;
185
+ };
186
+ scanCredits?: number;
187
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Scan agent executor — dispatches each agent action to the right tool
3
+ * and returns a redacted, truncated observation string.
4
+ *
5
+ * MCP-side tools (read_file, search_code, trace_flow, check_guard) run
6
+ * locally using tree-sitter + filesystem. API-side tools (check_policy)
7
+ * call POST /agent/scan/tool over the wire.
8
+ */
9
+ import { ApiClient } from '../api/client';
10
+ import type { ServerContext } from '../mcp/types';
11
+ import type { AgentScanAction, AgentScanTarget } from './agentScanProtocol';
12
+ export declare function executeAction(action: AgentScanAction, ctx: ServerContext, runId: string, client: ApiClient, target: AgentScanTarget): Promise<string>;
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ /**
3
+ * Scan agent executor — dispatches each agent action to the right tool
4
+ * and returns a redacted, truncated observation string.
5
+ *
6
+ * MCP-side tools (read_file, search_code, trace_flow, check_guard) run
7
+ * locally using tree-sitter + filesystem. API-side tools (check_policy)
8
+ * call POST /agent/scan/tool over the wire.
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.executeAction = executeAction;
45
+ const fs = __importStar(require("fs"));
46
+ const path = __importStar(require("path"));
47
+ const files_1 = require("../utils/files");
48
+ const searchCode_1 = require("../utils/searchCode");
49
+ const taintTracker_1 = require("../project-map/taintTracker");
50
+ const guardEvaluator_1 = require("../project-map/guardEvaluator");
51
+ const report_1 = require("./report");
52
+ const MAX_OBSERVATION_CHARS = 8000;
53
+ function truncate(text) {
54
+ if (text.length <= MAX_OBSERVATION_CHARS)
55
+ return text;
56
+ return text.slice(0, MAX_OBSERVATION_CHARS) + '\n… [truncated]';
57
+ }
58
+ function redact(text) {
59
+ return truncate((0, report_1.redactText)(text));
60
+ }
61
+ function toSinkLanguage(language) {
62
+ const map = {
63
+ javascript: 'javascript',
64
+ javascriptreact: 'javascript',
65
+ typescript: 'typescript',
66
+ typescriptreact: 'tsx',
67
+ python: 'python',
68
+ };
69
+ return map[language] || null;
70
+ }
71
+ function findFunctionInFile(source, functionName) {
72
+ // Simple heuristic: find a function/method declaration by name and
73
+ // extract its body by brace matching. Works for most JS/TS/Python.
74
+ const patterns = [
75
+ new RegExp(`(?:export\\s+)?(?:async\\s+)?function\\s+${escapeRegex(functionName)}\\s*\\(`),
76
+ new RegExp(`(?:const|let|var)\\s+${escapeRegex(functionName)}\\s*=\\s*(?:async\\s*)?\\(`),
77
+ new RegExp(`\\b${escapeRegex(functionName)}\\s*(?::\\s*[^=]+)?\\s*=\\s*(?:async\\s*)?\\(`),
78
+ ];
79
+ for (const pattern of patterns) {
80
+ const match = source.match(pattern);
81
+ if (!match)
82
+ continue;
83
+ const startIdx = match.index;
84
+ // Find opening brace
85
+ let braceStart = source.indexOf('{', startIdx);
86
+ if (braceStart === -1)
87
+ continue;
88
+ // Find matching close brace
89
+ let depth = 0;
90
+ let endIdx = -1;
91
+ for (let i = braceStart; i < source.length; i++) {
92
+ if (source[i] === '{')
93
+ depth++;
94
+ else if (source[i] === '}') {
95
+ depth--;
96
+ if (depth === 0) {
97
+ endIdx = i;
98
+ break;
99
+ }
100
+ }
101
+ }
102
+ if (endIdx !== -1) {
103
+ return source.slice(startIdx, endIdx + 1);
104
+ }
105
+ }
106
+ return null;
107
+ }
108
+ function escapeRegex(s) {
109
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
110
+ }
111
+ async function executeAction(action, ctx, runId, client, target) {
112
+ switch (action.type) {
113
+ case 'read_file': {
114
+ try {
115
+ const absPath = (0, files_1.resolveWorkspacePath)(ctx.workspaceRoot, action.path);
116
+ const content = fs.readFileSync(absPath, 'utf8');
117
+ const rel = path.relative(ctx.workspaceRoot, absPath).replace(/\\/g, '/');
118
+ const lines = content.split('\n').length;
119
+ const numbered = content
120
+ .split('\n')
121
+ .map((line, i) => `${i + 1}: ${line}`)
122
+ .join('\n');
123
+ return redact(`File: ${rel} (${lines} lines)\n\n${numbered}`);
124
+ }
125
+ catch (e) {
126
+ return `Error reading file "${action.path}": ${e.message || e}`;
127
+ }
128
+ }
129
+ case 'search_code': {
130
+ try {
131
+ const result = await (0, searchCode_1.searchCode)(ctx.workspaceRoot, action.pattern, action.glob);
132
+ return redact((0, searchCode_1.formatSearchResult)(result));
133
+ }
134
+ catch (e) {
135
+ return `Error searching for "${action.pattern}": ${e.message || e}`;
136
+ }
137
+ }
138
+ case 'trace_flow': {
139
+ try {
140
+ const absPath = (0, files_1.resolveWorkspacePath)(ctx.workspaceRoot, action.filePath);
141
+ const content = fs.readFileSync(absPath, 'utf8');
142
+ const { language } = (0, files_1.readFileFromWorkspace)(ctx.workspaceRoot, action.filePath);
143
+ const sinkLang = toSinkLanguage(language);
144
+ if (!sinkLang) {
145
+ return `Unsupported language for taint tracking: ${language}`;
146
+ }
147
+ const results = await (0, taintTracker_1.trackTaint)(content, sinkLang);
148
+ if (results.length === 0) {
149
+ return `No taint flows found in ${action.filePath}.`;
150
+ }
151
+ const formatted = results.map(r => {
152
+ const path = r.propagationPath
153
+ .map(p => ` L${p.line} ${p.operation}: ${p.description}`)
154
+ .join('\n');
155
+ return `${r.source} (L${r.sourceLine}) → ${r.sink} (L${r.sinkLine}) [${r.canonicalType}]${r.isTainted ? ' TAINTED' : ' (sanitized)'}\n${path}`;
156
+ }).join('\n\n');
157
+ return redact(formatted);
158
+ }
159
+ catch (e) {
160
+ return `Error tracing flow in "${action.filePath}": ${e.message || e}`;
161
+ }
162
+ }
163
+ case 'check_guard': {
164
+ try {
165
+ const absPath = (0, files_1.resolveWorkspacePath)(ctx.workspaceRoot, action.filePath);
166
+ const content = fs.readFileSync(absPath, 'utf8');
167
+ const guardSource = findFunctionInFile(content, action.guardName);
168
+ if (!guardSource) {
169
+ return `Guard function "${action.guardName}" not found in ${action.filePath}. Use search_code to find where it's defined.`;
170
+ }
171
+ const { language } = (0, files_1.readFileFromWorkspace)(ctx.workspaceRoot, action.filePath);
172
+ const sinkLang = toSinkLanguage(language);
173
+ if (!sinkLang) {
174
+ return `Unsupported language for guard evaluation: ${language}`;
175
+ }
176
+ const result = await (0, guardEvaluator_1.evaluateGuard)(guardSource, action.guardName, action.attackType, sinkLang);
177
+ const effectiveStr = result.effective ? 'EFFECTIVE' : 'NOT EFFECTIVE';
178
+ let output = `Guard "${action.guardName}" vs ${action.attackType}: ${effectiveStr}\nReason: ${result.reason}`;
179
+ if (result.bypassExample) {
180
+ output += `\nBypass: ${result.bypassExample}`;
181
+ }
182
+ return output;
183
+ }
184
+ catch (e) {
185
+ return `Error evaluating guard "${action.guardName}": ${e.message || e}`;
186
+ }
187
+ }
188
+ case 'check_policy': {
189
+ try {
190
+ const toolReq = {
191
+ runId,
192
+ action,
193
+ target,
194
+ };
195
+ const resp = await client.postJson('/agent/scan/tool', toolReq);
196
+ return truncate(resp.observation);
197
+ }
198
+ catch (e) {
199
+ return `Error running check_policy: ${e.message || e}`;
200
+ }
201
+ }
202
+ case 'finish': {
203
+ // finish is handled by the loop, not the executor
204
+ return '';
205
+ }
206
+ }
207
+ }
208
+ //# sourceMappingURL=agentScanExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentScanExecutor.js","sourceRoot":"","sources":["../../src/attack/agentScanExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Scan agent loop driver — the MCP-side loop that drives the scan agent.
3
+ *
4
+ * Mirrors agentLoop.ts (the attack agent) but with scan tools instead of
5
+ * HTTP probes. The API is a stateless per-step brain; this loop owns the
6
+ * transcript, the filesystem, and the tool execution.
7
+ *
8
+ * Flow:
9
+ * 1. POST /agent/scan/start → { runId, budget }
10
+ * 2. while (true):
11
+ * POST /agent/scan/step { runId, target, transcript, budget }
12
+ * ← { next: action | null }
13
+ * if null → done (capped or completed)
14
+ * if finish → done with findings
15
+ * execute action locally → observation
16
+ * push { action, observation } into transcript
17
+ * 3. return result
18
+ */
19
+ import type { ServerContext } from '../mcp/types';
20
+ import { type AgentScanBudget, type AgentScanResult, type AgentScanTarget } from './agentScanProtocol';
21
+ export interface AgentScanOptions {
22
+ budget?: Partial<AgentScanBudget>;
23
+ signal?: AbortSignal;
24
+ onProgress?: (stepsTaken: number, maxSteps: number, message: string) => void;
25
+ }
26
+ export declare function runAgentScan(ctx: ServerContext, target: AgentScanTarget, options?: AgentScanOptions): Promise<AgentScanResult>;
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ /**
3
+ * Scan agent loop driver — the MCP-side loop that drives the scan agent.
4
+ *
5
+ * Mirrors agentLoop.ts (the attack agent) but with scan tools instead of
6
+ * HTTP probes. The API is a stateless per-step brain; this loop owns the
7
+ * transcript, the filesystem, and the tool execution.
8
+ *
9
+ * Flow:
10
+ * 1. POST /agent/scan/start → { runId, budget }
11
+ * 2. while (true):
12
+ * POST /agent/scan/step { runId, target, transcript, budget }
13
+ * ← { next: action | null }
14
+ * if null → done (capped or completed)
15
+ * if finish → done with findings
16
+ * execute action locally → observation
17
+ * push { action, observation } into transcript
18
+ * 3. return result
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.runAgentScan = runAgentScan;
22
+ const client_1 = require("../api/client");
23
+ const agentScanExecutor_1 = require("./agentScanExecutor");
24
+ const agentScanProtocol_1 = require("./agentScanProtocol");
25
+ async function runAgentScan(ctx, target, options = {}) {
26
+ const client = new client_1.ApiClient({ baseUrl: ctx.apiUrl, token: ctx.apiToken });
27
+ const budget = {
28
+ stepsRemaining: options.budget?.stepsRemaining ?? agentScanProtocol_1.AGENT_SCAN_DEFAULTS.maxSteps,
29
+ costSpentUsd: options.budget?.costSpentUsd ?? 0,
30
+ costCapUsd: options.budget?.costCapUsd ?? agentScanProtocol_1.AGENT_SCAN_DEFAULTS.costCapUsd,
31
+ };
32
+ const startTime = Date.now();
33
+ const wallClockMs = agentScanProtocol_1.AGENT_SCAN_DEFAULTS.wallClockMs;
34
+ let stepsTaken = 0;
35
+ let costSpentUsd = 0;
36
+ try {
37
+ const startResp = await client.postJson('/agent/scan/start', {});
38
+ const transcript = [];
39
+ while (true) {
40
+ // Wall clock check
41
+ if (Date.now() - startTime > wallClockMs) {
42
+ return {
43
+ status: 'capped',
44
+ findings: [],
45
+ transcript,
46
+ stepsUsed: stepsTaken,
47
+ costSpentUsd,
48
+ summary: `Wall clock limit (${wallClockMs}ms) exceeded.`,
49
+ };
50
+ }
51
+ // Abort check
52
+ if (options.signal?.aborted) {
53
+ return {
54
+ status: 'cancelled',
55
+ findings: [],
56
+ transcript,
57
+ stepsUsed: stepsTaken,
58
+ costSpentUsd,
59
+ summary: 'Cancelled by user.',
60
+ };
61
+ }
62
+ const stepReq = {
63
+ runId: startResp.runId,
64
+ target,
65
+ transcript,
66
+ budget: {
67
+ stepsRemaining: budget.stepsRemaining,
68
+ costSpentUsd,
69
+ costCapUsd: budget.costCapUsd,
70
+ },
71
+ };
72
+ const stepResp = await client.postJson('/agent/scan/step', stepReq);
73
+ costSpentUsd += stepResp.costUsd || 0;
74
+ // Null next = done (cost capped or steps exhausted)
75
+ if (!stepResp.next) {
76
+ const status = stepResp.costCapped
77
+ ? 'capped'
78
+ : (stepResp.degraded ? 'degraded' : 'completed');
79
+ return {
80
+ status,
81
+ findings: [],
82
+ transcript,
83
+ stepsUsed: stepsTaken,
84
+ costSpentUsd,
85
+ summary: stepResp.costCapped
86
+ ? `Cost cap ($${budget.costCapUsd.toFixed(2)}) reached.`
87
+ : 'Agent completed without explicit finish.',
88
+ };
89
+ }
90
+ const action = stepResp.next;
91
+ stepsTaken++;
92
+ budget.stepsRemaining = stepResp.stepsRemaining;
93
+ // Progress callback
94
+ if (options.onProgress) {
95
+ const actionDesc = describeAction(action);
96
+ options.onProgress(stepsTaken, agentScanProtocol_1.AGENT_SCAN_DEFAULTS.maxSteps, `Step ${stepsTaken}: ${actionDesc}`);
97
+ }
98
+ // Finish = done with findings
99
+ if (action.type === 'finish') {
100
+ return {
101
+ status: 'completed',
102
+ findings: action.findings,
103
+ transcript,
104
+ stepsUsed: stepsTaken,
105
+ costSpentUsd,
106
+ summary: action.summary,
107
+ };
108
+ }
109
+ // Execute the action locally
110
+ const observation = await (0, agentScanExecutor_1.executeAction)(action, ctx, startResp.runId, client, target);
111
+ transcript.push({ action, observation });
112
+ }
113
+ }
114
+ catch (err) {
115
+ return {
116
+ status: 'spawn_failed',
117
+ findings: [],
118
+ transcript: [],
119
+ stepsUsed: stepsTaken,
120
+ costSpentUsd,
121
+ error: err.message || String(err),
122
+ };
123
+ }
124
+ }
125
+ function describeAction(action) {
126
+ switch (action.type) {
127
+ case 'read_file': return `read_file(${action.path})`;
128
+ case 'search_code': return `search_code("${action.pattern}")`;
129
+ case 'trace_flow': return `trace_flow(${action.filePath})`;
130
+ case 'check_guard': return `check_guard(${action.guardName})`;
131
+ case 'check_policy': return `check_policy(${action.filePath})`;
132
+ case 'finish': return 'finish';
133
+ }
134
+ }
135
+ //# sourceMappingURL=agentScanLoop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentScanLoop.js","sourceRoot":"","sources":["../../src/attack/agentScanLoop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Scan-side agent — wire contract mirror.
3
+ *
4
+ * Mirror: api/src/attacker/agentScanProtocol.ts — keep string values in step.
5
+ * Types are duplicated (not shared) between the API and MCP repos.
6
+ */
7
+ export declare const AGENT_SCAN_DEFAULTS: {
8
+ readonly maxSteps: 20;
9
+ readonly costCapUsd: 0.4;
10
+ readonly wallClockMs: 180000;
11
+ readonly perStepEstimateUsd: 0.08;
12
+ readonly creditsPerRun: 5;
13
+ readonly dailyRunLimit: 20;
14
+ };
15
+ export interface AgentScanReadFileAction {
16
+ type: 'read_file';
17
+ path: string;
18
+ rationale: string;
19
+ }
20
+ export interface AgentScanSearchCodeAction {
21
+ type: 'search_code';
22
+ pattern: string;
23
+ glob?: string;
24
+ rationale: string;
25
+ }
26
+ export interface AgentScanTraceFlowAction {
27
+ type: 'trace_flow';
28
+ filePath: string;
29
+ rationale: string;
30
+ }
31
+ export interface AgentScanCheckGuardAction {
32
+ type: 'check_guard';
33
+ filePath: string;
34
+ guardName: string;
35
+ attackType: AttackType;
36
+ rationale: string;
37
+ }
38
+ export interface AgentScanCheckPolicyAction {
39
+ type: 'check_policy';
40
+ filePath: string;
41
+ rationale: string;
42
+ }
43
+ export interface AgentScanFinding {
44
+ line: number;
45
+ lineEnd?: number;
46
+ type: string;
47
+ severity: 'critical' | 'high' | 'medium' | 'low';
48
+ confidence: number;
49
+ evidence: string;
50
+ why: string;
51
+ fixStrategy?: string;
52
+ }
53
+ export interface AgentScanFinishAction {
54
+ type: 'finish';
55
+ findings: AgentScanFinding[];
56
+ summary: string;
57
+ }
58
+ export type AgentScanAction = AgentScanReadFileAction | AgentScanSearchCodeAction | AgentScanTraceFlowAction | AgentScanCheckGuardAction | AgentScanCheckPolicyAction | AgentScanFinishAction;
59
+ export type AgentScanActionType = 'read_file' | 'search_code' | 'trace_flow' | 'check_guard' | 'check_policy' | 'finish';
60
+ export type AttackType = 'sql_injection' | 'nosql_injection' | 'command_injection' | 'xss' | 'ssrf' | 'path_traversal' | 'open_redirect' | 'prototype_pollution' | 'insecure_deserialization' | 'broken_access_control';
61
+ export interface AgentScanTranscriptStep {
62
+ action: AgentScanAction;
63
+ observation: string;
64
+ }
65
+ export interface AgentScanBudget {
66
+ stepsRemaining: number;
67
+ costSpentUsd: number;
68
+ costCapUsd: number;
69
+ }
70
+ export interface AgentScanTarget {
71
+ filePath: string;
72
+ language: string;
73
+ fileContent: string;
74
+ endpointContext?: unknown;
75
+ }
76
+ export interface AgentScanStartResponse {
77
+ runId: string;
78
+ budget: AgentScanBudget;
79
+ scanCredits: number;
80
+ refundId: string;
81
+ }
82
+ export interface AgentScanStepRequest {
83
+ runId: string;
84
+ target: AgentScanTarget;
85
+ transcript: AgentScanTranscriptStep[];
86
+ budget: AgentScanBudget;
87
+ }
88
+ export interface AgentScanStepResponse {
89
+ next: AgentScanAction | null;
90
+ costUsd: number;
91
+ tokens: number;
92
+ degraded: boolean;
93
+ costCapped: boolean;
94
+ stepsRemaining: number;
95
+ }
96
+ export interface AgentScanToolRequest {
97
+ runId: string;
98
+ action: AgentScanCheckPolicyAction;
99
+ target: AgentScanTarget;
100
+ }
101
+ export interface AgentScanToolResponse {
102
+ observation: string;
103
+ }
104
+ export type AgentScanRunStatus = 'completed' | 'capped' | 'degraded' | 'spawn_failed' | 'cancelled';
105
+ export interface AgentScanResult {
106
+ status: AgentScanRunStatus;
107
+ findings: AgentScanFinding[];
108
+ summary?: string;
109
+ transcript: AgentScanTranscriptStep[];
110
+ stepsUsed: number;
111
+ costSpentUsd: number;
112
+ error?: string;
113
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ /**
3
+ * Scan-side agent — wire contract mirror.
4
+ *
5
+ * Mirror: api/src/attacker/agentScanProtocol.ts — keep string values in step.
6
+ * Types are duplicated (not shared) between the API and MCP repos.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.AGENT_SCAN_DEFAULTS = void 0;
10
+ exports.AGENT_SCAN_DEFAULTS = {
11
+ maxSteps: 20,
12
+ costCapUsd: 0.40,
13
+ wallClockMs: 180_000,
14
+ perStepEstimateUsd: 0.08,
15
+ creditsPerRun: 5,
16
+ dailyRunLimit: 20,
17
+ };
18
+ //# sourceMappingURL=agentScanProtocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentScanProtocol.js","sourceRoot":"","sources":["../../src/attack/agentScanProtocol.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,mBAAmB,GAAG;IAC/B,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,OAAO;IACpB,kBAAkB,EAAE,IAAI;IACxB,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,EAAE;CACX,CAAC"}
@@ -43,6 +43,7 @@ const attack_1 = require("../tools/attack");
43
43
  const scanDependencies_1 = require("../tools/scanDependencies");
44
44
  const scanBatch_1 = require("../tools/scanBatch");
45
45
  const scanSecrets_1 = require("../tools/scanSecrets");
46
+ const agentScan_1 = require("../tools/agentScan");
46
47
  const PROTOCOL_VERSION = '2025-03-26';
47
48
  const SERVER_NAME = 'securecode-mcp';
48
49
  const SERVER_VERSION = '0.2.0';
@@ -74,6 +75,7 @@ const TOOL_HANDLERS = {
74
75
  'securecode.scan-dependencies': scanDependencies_1.toolScanDependencies,
75
76
  'securecode.scan-batch': scanBatch_1.toolScanBatch,
76
77
  'securecode.scan-secrets': scanSecrets_1.toolScanSecrets,
78
+ 'securecode.agent-scan': agentScan_1.toolAgentScan,
77
79
  };
78
80
  function validateArgs(tool, args) {
79
81
  const schema = tool.inputSchema;
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
package/dist/mcp/tools.js CHANGED
@@ -177,5 +177,26 @@ exports.TOOLS = [
177
177
  },
178
178
  },
179
179
  },
180
+ {
181
+ name: 'securecode.agent-scan',
182
+ description: 'Agent-mode scan: an AI investigator that reads files, traces data flows, checks guards, and compares endpoint policies to find vulnerabilities. Slower but deeper than a deep scan. The agent replaces the Scout phase and its findings are verified by the Juror. Uses 5 scan credits. Best for complex access-control and cross-file vulnerabilities.',
183
+ inputSchema: {
184
+ type: 'object',
185
+ properties: {
186
+ code: {
187
+ type: 'string',
188
+ description: 'Source code to scan (if filePath is omitted).',
189
+ },
190
+ filePath: {
191
+ type: 'string',
192
+ description: 'Workspace-relative path to the file to scan (reads from disk within the workspace root).',
193
+ },
194
+ language: {
195
+ type: 'string',
196
+ description: 'Language id (javascript, typescript, python, php). Inferred from filePath if omitted.',
197
+ },
198
+ },
199
+ },
200
+ },
180
201
  ];
181
202
  //# sourceMappingURL=tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * securecode.agent-scan MCP tool — agent-mode scan with exploit proof.
3
+ *
4
+ * An AI investigator that reads files, traces data flows, checks guards,
5
+ * and compares endpoint policies to find vulnerabilities. Each high/critical
6
+ * finding is then sent to the sandbox for PROVEN/UNPROVEN verification before
7
+ * the Juror confirms it.
8
+ *
9
+ * Flow:
10
+ * 1. Resolve code + language from filePath
11
+ * 2. Build endpoint context from the project map
12
+ * 3. Run the agent loop (POST /agent/scan/start + /step loop)
13
+ * 4. For each high/critical finding → POST /sandbox/prove → PROVEN/UNPROVEN
14
+ * 5. Map agent findings → CandidateContext[]
15
+ * 6. POST /scan with scanDepth: 'agent' + candidateContexts (skips Scout,
16
+ * Juror + Phase 3 verify the agent's candidates)
17
+ * 7. Return merged result (agent findings + proven stamps + Juror-verified)
18
+ */
19
+ import type { ServerContext } from '../mcp/types';
20
+ export declare function toolAgentScan(ctx: ServerContext, args: any): Promise<unknown>;
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ /**
3
+ * securecode.agent-scan MCP tool — agent-mode scan with exploit proof.
4
+ *
5
+ * An AI investigator that reads files, traces data flows, checks guards,
6
+ * and compares endpoint policies to find vulnerabilities. Each high/critical
7
+ * finding is then sent to the sandbox for PROVEN/UNPROVEN verification before
8
+ * the Juror confirms it.
9
+ *
10
+ * Flow:
11
+ * 1. Resolve code + language from filePath
12
+ * 2. Build endpoint context from the project map
13
+ * 3. Run the agent loop (POST /agent/scan/start + /step loop)
14
+ * 4. For each high/critical finding → POST /sandbox/prove → PROVEN/UNPROVEN
15
+ * 5. Map agent findings → CandidateContext[]
16
+ * 6. POST /scan with scanDepth: 'agent' + candidateContexts (skips Scout,
17
+ * Juror + Phase 3 verify the agent's candidates)
18
+ * 7. Return merged result (agent findings + proven stamps + Juror-verified)
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.toolAgentScan = toolAgentScan;
22
+ const client_1 = require("../api/client");
23
+ const files_1 = require("../utils/files");
24
+ const mapContext_1 = require("../project-map/mapContext");
25
+ const agentScanLoop_1 = require("../attack/agentScanLoop");
26
+ function mapFindingsToCandidates(findings) {
27
+ return findings.map(f => ({
28
+ line: f.line,
29
+ lineEnd: f.lineEnd,
30
+ type: f.type,
31
+ snippet: f.evidence,
32
+ definitionContext: f.why,
33
+ }));
34
+ }
35
+ /** Only prove high/critical findings — don't waste credits on low/medium. */
36
+ function shouldProve(finding) {
37
+ return finding.severity === 'critical' || finding.severity === 'high';
38
+ }
39
+ async function toolAgentScan(ctx, args) {
40
+ const progress = args._progress;
41
+ // 1. Resolve code + language
42
+ let code;
43
+ let language;
44
+ let filePath;
45
+ if (args.filePath) {
46
+ filePath = args.filePath;
47
+ const fileResult = (0, files_1.readFileFromWorkspace)(ctx.workspaceRoot, args.filePath);
48
+ code = fileResult.code;
49
+ language = args.language || fileResult.language;
50
+ }
51
+ else if (args.code) {
52
+ code = args.code;
53
+ language = args.language || 'javascript';
54
+ }
55
+ else {
56
+ throw new Error('Either filePath or code must be provided.');
57
+ }
58
+ // 2. Build endpoint context from the project map
59
+ let endpointContext = [];
60
+ if (filePath) {
61
+ try {
62
+ endpointContext = await (0, mapContext_1.getEndpointContextForFile)(filePath, ctx.workspaceRoot);
63
+ }
64
+ catch {
65
+ // best-effort — proceed without endpoint context
66
+ }
67
+ }
68
+ // 3. Run the agent loop
69
+ const target = {
70
+ filePath: filePath || 'inline-code',
71
+ language,
72
+ fileContent: code,
73
+ endpointContext,
74
+ };
75
+ const agentResult = await (0, agentScanLoop_1.runAgentScan)(ctx, target, {
76
+ onProgress: (steps, max, msg) => {
77
+ if (progress)
78
+ progress(steps, max, msg);
79
+ },
80
+ });
81
+ if (agentResult.status === 'spawn_failed') {
82
+ throw new Error(agentResult.error || 'Agent scan failed to start.');
83
+ }
84
+ // 4. Prove each high/critical finding via the sandbox
85
+ const client = new client_1.ApiClient({ baseUrl: ctx.apiUrl, token: ctx.apiToken });
86
+ const provenFindings = [];
87
+ const proveable = agentResult.findings.filter(shouldProve);
88
+ if (proveable.length > 0 && progress) {
89
+ progress(0, proveable.length, `Proving ${proveable.length} finding(s) in sandbox...`);
90
+ }
91
+ let proveIdx = 0;
92
+ for (const finding of agentResult.findings) {
93
+ if (!shouldProve(finding)) {
94
+ provenFindings.push({ ...finding, proven: 'SKIPPED', provenReason: 'Low/medium severity — not proven' });
95
+ continue;
96
+ }
97
+ try {
98
+ if (progress) {
99
+ proveIdx++;
100
+ progress(proveIdx, proveable.length, `Proving ${finding.type} at line ${finding.line}...`);
101
+ }
102
+ const proveResp = await client.postJson('/sandbox/prove', {
103
+ code,
104
+ language,
105
+ vulnerabilityType: finding.type,
106
+ line: finding.line,
107
+ lineEnd: finding.lineEnd,
108
+ evidence: finding.evidence,
109
+ why: finding.why,
110
+ });
111
+ provenFindings.push({
112
+ ...finding,
113
+ proven: proveResp.proven,
114
+ provenReason: proveResp.rationale || proveResp.skipReason || proveResp.sandbox?.reason,
115
+ });
116
+ }
117
+ catch (err) {
118
+ // Insufficient credits or API error — skip proving, mark as INCONCLUSIVE
119
+ provenFindings.push({
120
+ ...finding,
121
+ proven: 'INCONCLUSIVE',
122
+ provenReason: `Sandbox prove failed: ${err.message || err}`,
123
+ });
124
+ }
125
+ }
126
+ // 5. Map findings → CandidateContext[]
127
+ const candidateContexts = mapFindingsToCandidates(provenFindings);
128
+ // 6. If no findings, return early
129
+ if (candidateContexts.length === 0) {
130
+ return {
131
+ status: agentResult.status,
132
+ summary: agentResult.summary || 'Agent completed with no findings.',
133
+ findings: [],
134
+ agentFindings: provenFindings,
135
+ stepsUsed: agentResult.stepsUsed,
136
+ costSpentUsd: agentResult.costSpentUsd,
137
+ transcript: agentResult.transcript,
138
+ };
139
+ }
140
+ // 7. POST /scan with scanDepth: 'agent' + candidateContexts
141
+ // This skips Scout and sends the agent's candidates directly to Juror
142
+ // + Phase 3 for verification.
143
+ const scanResp = await client.postJson('/scan', {
144
+ code,
145
+ language,
146
+ ...(filePath ? { filePath } : {}),
147
+ scanDepth: 'agent',
148
+ candidateContexts,
149
+ ...(endpointContext.length > 0 ? { endpointContext } : {}),
150
+ });
151
+ // 8. Return merged result with proven stamps
152
+ return {
153
+ status: agentResult.status,
154
+ summary: agentResult.summary,
155
+ agentFindings: provenFindings,
156
+ verifiedFindings: scanResp.finalFindings || [],
157
+ allFindings: scanResp.findings || [],
158
+ scanId: scanResp.scanId,
159
+ scanType: scanResp.scanType,
160
+ degraded: scanResp.degraded,
161
+ scanCredits: scanResp.scanCredits,
162
+ plan: scanResp.plan,
163
+ stepsUsed: agentResult.stepsUsed,
164
+ costSpentUsd: agentResult.costSpentUsd,
165
+ transcript: agentResult.transcript,
166
+ provenCount: provenFindings.filter(f => f.proven === 'PROVEN').length,
167
+ unprovenCount: provenFindings.filter(f => f.proven === 'UNPROVEN').length,
168
+ inconclusiveCount: provenFindings.filter(f => f.proven === 'INCONCLUSIVE').length,
169
+ };
170
+ }
171
+ //# sourceMappingURL=agentScan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentScan.js","sourceRoot":"","sources":["../../src/tools/agentScan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Code search utility — wraps ripgrep (rg) for fast workspace-wide search.
3
+ * Falls back to recursive grep if rg is not available.
4
+ *
5
+ * Returns matching lines with file paths and line numbers, capped at maxHits.
6
+ */
7
+ export interface SearchHit {
8
+ path: string;
9
+ line: number;
10
+ text: string;
11
+ }
12
+ export interface SearchResult {
13
+ hits: SearchHit[];
14
+ total: number;
15
+ truncated: boolean;
16
+ }
17
+ export declare function searchCode(workspaceRoot: string, pattern: string, glob?: string): Promise<SearchResult>;
18
+ export declare function formatSearchResult(result: SearchResult): string;
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ /**
3
+ * Code search utility — wraps ripgrep (rg) for fast workspace-wide search.
4
+ * Falls back to recursive grep if rg is not available.
5
+ *
6
+ * Returns matching lines with file paths and line numbers, capped at maxHits.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.searchCode = searchCode;
43
+ exports.formatSearchResult = formatSearchResult;
44
+ const child_process_1 = require("child_process");
45
+ const path = __importStar(require("path"));
46
+ const MAX_HITS = 50;
47
+ const MAX_LINE_LENGTH = 500;
48
+ function promisifyExecFile(file, args, opts) {
49
+ return new Promise((resolve, reject) => {
50
+ (0, child_process_1.execFile)(file, args, opts, (err, stdout, stderr) => {
51
+ if (err && err.code === 'ENOENT') {
52
+ reject(new Error(`Command not found: ${file}`));
53
+ return;
54
+ }
55
+ resolve({ stdout, stderr, code: err ? err.code : null });
56
+ });
57
+ });
58
+ }
59
+ function hasRipgrep() {
60
+ return new Promise((resolve) => {
61
+ (0, child_process_1.execFile)('rg', ['--version'], (err) => {
62
+ resolve(!err || err.code !== 'ENOENT');
63
+ });
64
+ });
65
+ }
66
+ function trimLine(text) {
67
+ const trimmed = text.trim();
68
+ return trimmed.length > MAX_LINE_LENGTH
69
+ ? trimmed.slice(0, MAX_LINE_LENGTH) + '…'
70
+ : trimmed;
71
+ }
72
+ async function searchWithRipgrep(workspaceRoot, pattern, glob) {
73
+ const args = [
74
+ '--json',
75
+ '--max-count', String(MAX_HITS),
76
+ '--no-heading',
77
+ '--line-number',
78
+ '--ignore-case',
79
+ ];
80
+ if (glob) {
81
+ args.push('--glob', glob);
82
+ }
83
+ args.push('--', pattern, workspaceRoot);
84
+ let result;
85
+ try {
86
+ result = await promisifyExecFile('rg', args, {
87
+ cwd: workspaceRoot,
88
+ maxBuffer: 10 * 1024 * 1024,
89
+ });
90
+ }
91
+ catch (e) {
92
+ if (e.message === 'Command not found: rg')
93
+ throw e;
94
+ result = { stdout: '', stderr: e.message || '', code: e.code || 1 };
95
+ }
96
+ const hits = [];
97
+ for (const line of result.stdout.split('\n')) {
98
+ if (!line.trim())
99
+ continue;
100
+ try {
101
+ const obj = JSON.parse(line);
102
+ if (obj.type === 'match' && obj.data) {
103
+ const relativePath = path.relative(workspaceRoot, obj.data.path.text).replace(/\\/g, '/');
104
+ hits.push({
105
+ path: relativePath,
106
+ line: obj.data.line_number,
107
+ text: trimLine(obj.data.lines.text),
108
+ });
109
+ }
110
+ }
111
+ catch {
112
+ // skip non-JSON lines
113
+ }
114
+ }
115
+ return hits;
116
+ }
117
+ async function searchWithGrep(workspaceRoot, pattern, glob) {
118
+ const args = ['-rn', '-i', '--max-count=50'];
119
+ if (glob) {
120
+ args.push('--include', glob.replace(/^\*\./, '*.'));
121
+ }
122
+ args.push('--', pattern, '.');
123
+ let result;
124
+ try {
125
+ result = await promisifyExecFile('grep', args, {
126
+ cwd: workspaceRoot,
127
+ maxBuffer: 10 * 1024 * 1024,
128
+ });
129
+ }
130
+ catch (e) {
131
+ if (e.message === 'Command not found: grep')
132
+ throw e;
133
+ result = { stdout: '', stderr: '', code: e.code || 1 };
134
+ }
135
+ const hits = [];
136
+ for (const line of result.stdout.split('\n').slice(0, MAX_HITS)) {
137
+ const match = line.match(/^([^:]+):(\d+):(.*)$/);
138
+ if (match) {
139
+ hits.push({
140
+ path: match[1].replace(/\\/g, '/'),
141
+ line: parseInt(match[2], 10),
142
+ text: trimLine(match[3]),
143
+ });
144
+ }
145
+ }
146
+ return hits;
147
+ }
148
+ async function searchCode(workspaceRoot, pattern, glob) {
149
+ let hits;
150
+ if (await hasRipgrep()) {
151
+ hits = await searchWithRipgrep(workspaceRoot, pattern, glob);
152
+ }
153
+ else {
154
+ hits = await searchWithGrep(workspaceRoot, pattern, glob);
155
+ }
156
+ const total = hits.length;
157
+ const truncated = total > MAX_HITS;
158
+ if (truncated)
159
+ hits = hits.slice(0, MAX_HITS);
160
+ return { hits, total, truncated };
161
+ }
162
+ function formatSearchResult(result) {
163
+ if (result.hits.length === 0) {
164
+ return 'No matches found.';
165
+ }
166
+ const lines = result.hits.map(h => `${h.path}:${h.line}: ${h.text}`);
167
+ let output = lines.join('\n');
168
+ if (result.truncated) {
169
+ output += `\n… (${result.total} total matches, showing first ${MAX_HITS})`;
170
+ }
171
+ return output;
172
+ }
173
+ //# sourceMappingURL=searchCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchCode.js","sourceRoot":"","sources":["../../src/utils/searchCode.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.8",
3
+ "version": "0.4.0",
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": {