@aegis-scan/mcp-server 0.2.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.
@@ -0,0 +1,88 @@
1
+ import type { AuditResult, Finding } from '@aegis-scan/core';
2
+ export declare function getLastResult(): AuditResult | null;
3
+ export declare function setLastResult(result: AuditResult): void;
4
+ export interface ScanInput {
5
+ path: string;
6
+ mode?: 'scan' | 'audit';
7
+ }
8
+ export interface ScanOutput {
9
+ score: number;
10
+ grade: string;
11
+ badge: string;
12
+ confidence: string;
13
+ blocked: boolean;
14
+ blockerReason?: string;
15
+ findingCount: number;
16
+ topFindings: Array<{
17
+ id: string;
18
+ severity: string;
19
+ title: string;
20
+ file?: string;
21
+ line?: number;
22
+ scanner: string;
23
+ fix?: string;
24
+ }>;
25
+ duration: number;
26
+ timestamp: string;
27
+ }
28
+ export declare function handleScan(input: ScanInput): Promise<ScanOutput>;
29
+ export interface FindingsInput {
30
+ severity?: string;
31
+ scanner?: string;
32
+ limit?: number;
33
+ }
34
+ export interface FindingsOutput {
35
+ findings: Finding[];
36
+ total: number;
37
+ filtered: number;
38
+ }
39
+ export declare function handleFindings(input: FindingsInput): FindingsOutput;
40
+ export interface ScoreInput {
41
+ path: string;
42
+ }
43
+ export interface ScoreOutput {
44
+ score: number;
45
+ grade: string;
46
+ badge: string;
47
+ confidence: string;
48
+ breakdown: Record<string, {
49
+ score: number;
50
+ maxScore: number;
51
+ findings: number;
52
+ }>;
53
+ blocked: boolean;
54
+ blockerReason?: string;
55
+ }
56
+ export declare function handleScore(input: ScoreInput): Promise<ScoreOutput>;
57
+ export interface ComplianceInput {
58
+ path: string;
59
+ framework: 'gdpr' | 'soc2' | 'iso27001' | 'pci-dss';
60
+ }
61
+ export interface ComplianceOutput {
62
+ framework: string;
63
+ findings: Finding[];
64
+ findingCount: number;
65
+ score: number;
66
+ grade: string;
67
+ passed: boolean;
68
+ }
69
+ export declare function handleCompliance(input: ComplianceInput): Promise<ComplianceOutput>;
70
+ export interface FixSuggestionInput {
71
+ findingId: string;
72
+ file?: string;
73
+ }
74
+ export interface FixSuggestionOutput {
75
+ findingId: string;
76
+ title: string;
77
+ description: string;
78
+ severity: string;
79
+ file?: string;
80
+ line?: number;
81
+ fix?: string;
82
+ owasp?: string;
83
+ cwe?: number;
84
+ reference?: string;
85
+ found: boolean;
86
+ }
87
+ export declare function handleFixSuggestion(input: FixSuggestionInput): FixSuggestionOutput;
88
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,209 @@
1
+ import { loadConfig, Orchestrator } from '@aegis-scan/core';
2
+ import { getAllScanners } from '@aegis-scan/scanners';
3
+ import * as path from 'node:path';
4
+ import { existsSync } from 'node:fs';
5
+ /** Validate that a path is safe to scan (no traversal, must exist) */
6
+ function validatePath(inputPath) {
7
+ // Check RAW input BEFORE resolve (resolve strips ..)
8
+ if (inputPath.includes('..')) {
9
+ throw new Error(`Path traversal detected: ${inputPath}`);
10
+ }
11
+ // Block null bytes (path injection on some OS)
12
+ if (inputPath.includes('\0')) {
13
+ throw new Error(`Null byte in path: ${inputPath}`);
14
+ }
15
+ const resolved = path.resolve(inputPath);
16
+ // Block system directories (Unix + Windows)
17
+ const blocked = ['/etc', '/root', '/var', '/usr', '/bin', '/sbin', '/sys', '/proc',
18
+ 'C:\\Windows', 'C:\\Program Files', 'C:\\ProgramData'];
19
+ if (blocked.some((b) => resolved.startsWith(b))) {
20
+ throw new Error(`Blocked system path: ${resolved}`);
21
+ }
22
+ if (!existsSync(resolved)) {
23
+ throw new Error(`Path does not exist: ${resolved}`);
24
+ }
25
+ return resolved;
26
+ }
27
+ /** Categories used for the fast "scan" mode (mirrors CLI scan.ts). */
28
+ const FAST_CATEGORIES = [
29
+ 'security',
30
+ 'dependencies',
31
+ 'quality',
32
+ 'compliance',
33
+ 'i18n',
34
+ ];
35
+ /** Compliance framework → scanner name mapping. */
36
+ const COMPLIANCE_SCANNER_MAP = {
37
+ gdpr: 'gdpr-engine',
38
+ soc2: 'soc2',
39
+ iso27001: 'iso27001',
40
+ 'pci-dss': 'pci-dss',
41
+ };
42
+ /** In-memory store for the most recent scan result. */
43
+ let lastResult = null;
44
+ export function getLastResult() {
45
+ return lastResult;
46
+ }
47
+ export function setLastResult(result) {
48
+ lastResult = result;
49
+ }
50
+ const SEVERITY_ORDER = {
51
+ blocker: 0,
52
+ critical: 1,
53
+ high: 2,
54
+ medium: 3,
55
+ low: 4,
56
+ info: 5,
57
+ };
58
+ function sortBySeverity(findings) {
59
+ return [...findings].sort((a, b) => (SEVERITY_ORDER[a.severity] ?? 99) - (SEVERITY_ORDER[b.severity] ?? 99));
60
+ }
61
+ export async function handleScan(input) {
62
+ const resolvedPath = validatePath(input.path || process.cwd());
63
+ const mode = input.mode ?? 'scan';
64
+ const config = await loadConfig(resolvedPath, mode);
65
+ const orchestrator = new Orchestrator();
66
+ const allScanners = getAllScanners();
67
+ if (mode === 'scan') {
68
+ for (const scanner of allScanners.filter((s) => FAST_CATEGORIES.includes(s.category))) {
69
+ orchestrator.register(scanner);
70
+ }
71
+ }
72
+ else {
73
+ for (const scanner of allScanners) {
74
+ orchestrator.register(scanner);
75
+ }
76
+ }
77
+ const result = await orchestrator.run(config);
78
+ setLastResult(result);
79
+ const sorted = sortBySeverity(result.findings);
80
+ return {
81
+ score: result.score,
82
+ grade: result.grade,
83
+ badge: result.badge,
84
+ confidence: result.confidence,
85
+ blocked: result.blocked,
86
+ blockerReason: result.blockerReason,
87
+ findingCount: result.findings.length,
88
+ topFindings: sorted.slice(0, 20).map((f) => ({
89
+ id: f.id,
90
+ severity: f.severity,
91
+ title: f.title,
92
+ file: f.file,
93
+ line: f.line,
94
+ scanner: f.scanner,
95
+ fix: f.fix,
96
+ })),
97
+ duration: result.duration,
98
+ timestamp: result.timestamp,
99
+ };
100
+ }
101
+ export function handleFindings(input) {
102
+ const result = lastResult;
103
+ if (!result) {
104
+ return { findings: [], total: 0, filtered: 0 };
105
+ }
106
+ let findings = result.findings;
107
+ const total = findings.length;
108
+ if (input.severity) {
109
+ findings = findings.filter((f) => f.severity === input.severity);
110
+ }
111
+ if (input.scanner) {
112
+ findings = findings.filter((f) => f.scanner === input.scanner);
113
+ }
114
+ const sorted = sortBySeverity(findings);
115
+ const limit = input.limit ?? 100;
116
+ const limited = sorted.slice(0, limit);
117
+ return {
118
+ findings: limited,
119
+ total,
120
+ filtered: limited.length,
121
+ };
122
+ }
123
+ export async function handleScore(input) {
124
+ const resolvedPath = validatePath(input.path || process.cwd());
125
+ const config = await loadConfig(resolvedPath, 'scan');
126
+ const orchestrator = new Orchestrator();
127
+ const allScanners = getAllScanners();
128
+ // Quick scan — fast categories only
129
+ for (const scanner of allScanners.filter((s) => FAST_CATEGORIES.includes(s.category))) {
130
+ orchestrator.register(scanner);
131
+ }
132
+ const result = await orchestrator.run(config);
133
+ setLastResult(result);
134
+ return {
135
+ score: result.score,
136
+ grade: result.grade,
137
+ badge: result.badge,
138
+ confidence: result.confidence,
139
+ breakdown: result.breakdown,
140
+ blocked: result.blocked,
141
+ blockerReason: result.blockerReason,
142
+ };
143
+ }
144
+ export async function handleCompliance(input) {
145
+ const resolvedPath = validatePath(input.path || process.cwd());
146
+ const config = await loadConfig(resolvedPath, 'audit');
147
+ // Inject the compliance target so scanners can use it
148
+ config.compliance = [input.framework];
149
+ const orchestrator = new Orchestrator();
150
+ const allScanners = getAllScanners();
151
+ for (const scanner of allScanners) {
152
+ orchestrator.register(scanner);
153
+ }
154
+ const result = await orchestrator.run(config);
155
+ setLastResult(result);
156
+ // Filter to compliance-category findings + the framework-specific scanner
157
+ const scannerName = COMPLIANCE_SCANNER_MAP[input.framework];
158
+ const complianceFindings = result.findings.filter((f) => f.category === 'compliance' || f.scanner === scannerName);
159
+ const sorted = sortBySeverity(complianceFindings);
160
+ const categoryBreakdown = result.breakdown['compliance'];
161
+ return {
162
+ framework: input.framework,
163
+ findings: sorted,
164
+ findingCount: sorted.length,
165
+ score: categoryBreakdown?.score ?? result.score,
166
+ grade: result.grade,
167
+ passed: !result.blocked && complianceFindings.filter((f) => f.severity === 'blocker' || f.severity === 'critical').length === 0,
168
+ };
169
+ }
170
+ export function handleFixSuggestion(input) {
171
+ const result = lastResult;
172
+ if (!result) {
173
+ return {
174
+ findingId: input.findingId,
175
+ title: '',
176
+ description: 'No scan results available. Run aegis_scan first.',
177
+ severity: 'info',
178
+ found: false,
179
+ };
180
+ }
181
+ // Match by ID, optionally also by file
182
+ let finding = result.findings.find((f) => f.id === input.findingId);
183
+ if (!finding && input.file) {
184
+ finding = result.findings.find((f) => f.file === input.file && f.id === input.findingId);
185
+ }
186
+ if (!finding) {
187
+ return {
188
+ findingId: input.findingId,
189
+ title: '',
190
+ description: `Finding with ID "${input.findingId}" not found in last scan result.`,
191
+ severity: 'info',
192
+ found: false,
193
+ };
194
+ }
195
+ return {
196
+ findingId: finding.id,
197
+ title: finding.title,
198
+ description: finding.description,
199
+ severity: finding.severity,
200
+ file: finding.file,
201
+ line: finding.line,
202
+ fix: finding.fix ?? 'No automated fix suggestion available for this finding.',
203
+ owasp: finding.owasp,
204
+ cwe: finding.cwe,
205
+ reference: finding.reference,
206
+ found: true,
207
+ };
208
+ }
209
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,171 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { z } from 'zod';
5
+ import { handleScan, handleFindings, handleScore, handleCompliance, handleFixSuggestion, } from './handlers.js';
6
+ const server = new McpServer({
7
+ name: 'aegis-mcp',
8
+ version: '0.2.0',
9
+ });
10
+ // ---------------------------------------------------------------------------
11
+ // Tool: aegis_scan
12
+ // ---------------------------------------------------------------------------
13
+ server.registerTool('aegis_scan', {
14
+ description: 'Run AEGIS security scan on a project directory',
15
+ inputSchema: {
16
+ path: z.string().describe('Absolute path to the project directory to scan'),
17
+ mode: z.enum(['scan', 'audit']).optional().describe('scan = fast (security, deps, quality, compliance, i18n); audit = all scanners'),
18
+ },
19
+ }, async (input) => {
20
+ try {
21
+ const result = await handleScan(input);
22
+ return {
23
+ content: [
24
+ {
25
+ type: 'text',
26
+ text: JSON.stringify(result, null, 2),
27
+ },
28
+ ],
29
+ };
30
+ }
31
+ catch (err) {
32
+ return {
33
+ content: [
34
+ {
35
+ type: 'text',
36
+ text: JSON.stringify({ error: err instanceof Error ? err.message : String(err) }),
37
+ },
38
+ ],
39
+ isError: true,
40
+ };
41
+ }
42
+ });
43
+ // ---------------------------------------------------------------------------
44
+ // Tool: aegis_findings
45
+ // ---------------------------------------------------------------------------
46
+ server.registerTool('aegis_findings', {
47
+ description: 'Get detailed findings from the last scan, optionally filtered by severity or scanner',
48
+ inputSchema: {
49
+ severity: z
50
+ .enum(['blocker', 'critical', 'high', 'medium', 'low', 'info'])
51
+ .optional()
52
+ .describe('Filter to a specific severity level'),
53
+ scanner: z.string().optional().describe('Filter to a specific scanner name'),
54
+ limit: z
55
+ .number()
56
+ .int()
57
+ .min(1)
58
+ .max(500)
59
+ .optional()
60
+ .describe('Maximum number of findings to return (default: 100)'),
61
+ },
62
+ }, (input) => {
63
+ const result = handleFindings(input);
64
+ return {
65
+ content: [
66
+ {
67
+ type: 'text',
68
+ text: JSON.stringify(result, null, 2),
69
+ },
70
+ ],
71
+ };
72
+ });
73
+ // ---------------------------------------------------------------------------
74
+ // Tool: aegis_score
75
+ // ---------------------------------------------------------------------------
76
+ server.registerTool('aegis_score', {
77
+ description: 'Get the current AEGIS security score for a project',
78
+ inputSchema: {
79
+ path: z.string().describe('Absolute path to the project directory'),
80
+ },
81
+ }, async (input) => {
82
+ try {
83
+ const result = await handleScore(input);
84
+ return {
85
+ content: [
86
+ {
87
+ type: 'text',
88
+ text: JSON.stringify(result, null, 2),
89
+ },
90
+ ],
91
+ };
92
+ }
93
+ catch (err) {
94
+ return {
95
+ content: [
96
+ {
97
+ type: 'text',
98
+ text: JSON.stringify({ error: err instanceof Error ? err.message : String(err) }),
99
+ },
100
+ ],
101
+ isError: true,
102
+ };
103
+ }
104
+ });
105
+ // ---------------------------------------------------------------------------
106
+ // Tool: aegis_compliance
107
+ // ---------------------------------------------------------------------------
108
+ server.registerTool('aegis_compliance', {
109
+ description: 'Check compliance against a specific framework',
110
+ inputSchema: {
111
+ path: z.string().describe('Absolute path to the project directory'),
112
+ framework: z
113
+ .enum(['gdpr', 'soc2', 'iso27001', 'pci-dss'])
114
+ .describe('Compliance framework to check against'),
115
+ },
116
+ }, async (input) => {
117
+ try {
118
+ const result = await handleCompliance(input);
119
+ return {
120
+ content: [
121
+ {
122
+ type: 'text',
123
+ text: JSON.stringify(result, null, 2),
124
+ },
125
+ ],
126
+ };
127
+ }
128
+ catch (err) {
129
+ return {
130
+ content: [
131
+ {
132
+ type: 'text',
133
+ text: JSON.stringify({ error: err instanceof Error ? err.message : String(err) }),
134
+ },
135
+ ],
136
+ isError: true,
137
+ };
138
+ }
139
+ });
140
+ // ---------------------------------------------------------------------------
141
+ // Tool: aegis_fix_suggestion
142
+ // ---------------------------------------------------------------------------
143
+ server.registerTool('aegis_fix_suggestion', {
144
+ description: 'Get a fix suggestion for a specific finding from the last scan',
145
+ inputSchema: {
146
+ findingId: z.string().describe('The ID of the finding (from aegis_scan or aegis_findings)'),
147
+ file: z.string().optional().describe('Optional: file path to narrow the search'),
148
+ },
149
+ }, (input) => {
150
+ const result = handleFixSuggestion(input);
151
+ return {
152
+ content: [
153
+ {
154
+ type: 'text',
155
+ text: JSON.stringify(result, null, 2),
156
+ },
157
+ ],
158
+ };
159
+ });
160
+ // ---------------------------------------------------------------------------
161
+ // Start the server
162
+ // ---------------------------------------------------------------------------
163
+ async function main() {
164
+ const transport = new StdioServerTransport();
165
+ await server.connect(transport);
166
+ }
167
+ main().catch((err) => {
168
+ process.stderr.write(`AEGIS MCP Server fatal error: ${err instanceof Error ? err.message : String(err)}\n`);
169
+ process.exit(1);
170
+ });
171
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@aegis-scan/mcp-server",
3
+ "version": "0.2.0",
4
+ "license": "MIT",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/RideMatch1/a.e.g.i.s.git",
8
+ "directory": "mcp-server"
9
+ },
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
13
+ "files": [
14
+ "dist"
15
+ ],
16
+ "keywords": [
17
+ "security",
18
+ "mcp",
19
+ "model-context-protocol",
20
+ "ai",
21
+ "audit"
22
+ ],
23
+ "description": "AEGIS MCP Server \u2014 use AEGIS as a tool in any AI coding agent",
24
+ "type": "module",
25
+ "main": "dist/index.js",
26
+ "bin": {
27
+ "aegis-mcp": "dist/index.js"
28
+ },
29
+ "scripts": {
30
+ "build": "tsc",
31
+ "test": "vitest run",
32
+ "clean": "rm -rf dist"
33
+ },
34
+ "dependencies": {
35
+ "@aegis-scan/core": "workspace:*",
36
+ "@aegis-scan/scanners": "workspace:*",
37
+ "@modelcontextprotocol/sdk": "^1.0.0",
38
+ "zod": "^3.23.0"
39
+ },
40
+ "devDependencies": {
41
+ "@types/node": "^22.0.0",
42
+ "typescript": "^5.8.0",
43
+ "vitest": "^3.1.0"
44
+ }
45
+ }