@sulthonzh/mcp-audit 1.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.
- package/README.md +134 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +165 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/config-loader.d.ts +17 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +72 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/reporter/report-generator.d.ts +7 -0
- package/dist/reporter/report-generator.d.ts.map +1 -0
- package/dist/reporter/report-generator.js +240 -0
- package/dist/reporter/report-generator.js.map +1 -0
- package/dist/reporters/sarif-reporter.d.ts +18 -0
- package/dist/reporters/sarif-reporter.d.ts.map +1 -0
- package/dist/reporters/sarif-reporter.js +148 -0
- package/dist/reporters/sarif-reporter.js.map +1 -0
- package/dist/scanners/config-scanner.d.ts +11 -0
- package/dist/scanners/config-scanner.d.ts.map +1 -0
- package/dist/scanners/config-scanner.js +399 -0
- package/dist/scanners/config-scanner.js.map +1 -0
- package/dist/scanners/docker-scanner.d.ts +13 -0
- package/dist/scanners/docker-scanner.d.ts.map +1 -0
- package/dist/scanners/docker-scanner.js +384 -0
- package/dist/scanners/docker-scanner.js.map +1 -0
- package/dist/scanners/helm-scanner.d.ts +16 -0
- package/dist/scanners/helm-scanner.d.ts.map +1 -0
- package/dist/scanners/helm-scanner.js +385 -0
- package/dist/scanners/helm-scanner.js.map +1 -0
- package/dist/scanners/k8s-scanner.d.ts +14 -0
- package/dist/scanners/k8s-scanner.d.ts.map +1 -0
- package/dist/scanners/k8s-scanner.js +315 -0
- package/dist/scanners/k8s-scanner.js.map +1 -0
- package/dist/scanners/server-scanner.d.ts +13 -0
- package/dist/scanners/server-scanner.d.ts.map +1 -0
- package/dist/scanners/server-scanner.js +346 -0
- package/dist/scanners/server-scanner.js.map +1 -0
- package/dist/types/security-result.d.ts +35 -0
- package/dist/types/security-result.d.ts.map +1 -0
- package/dist/types/security-result.js +3 -0
- package/dist/types/security-result.js.map +1 -0
- package/dist/utils/logger.d.ts +19 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +71 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +77 -0
package/README.md
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# MCP Audit 🔍
|
|
2
|
+
|
|
3
|
+
Security scanner for MCP (Model Context Protocol) servers — and your container/K8s/Helm infrastructure too. Think of it as `npm audit` but for your AI agent integrations and cloud-native deployments.
|
|
4
|
+
|
|
5
|
+
## Why MCP Audit?
|
|
6
|
+
|
|
7
|
+
Everyone's installing MCP servers like crazy, but nobody's checking if they're about to give a plugin full access to their filesystem, data, and context. MCP Audit gives you visibility into what these servers can actually do — and flags the risky stuff before it bites you.
|
|
8
|
+
|
|
9
|
+
It also scans Dockerfiles, Kubernetes manifests, and Helm charts, because your AI tools don't live in a vacuum. They run in containers, on clusters, behind charts. Might as well audit the whole stack.
|
|
10
|
+
|
|
11
|
+
## What It Scans
|
|
12
|
+
|
|
13
|
+
| Target | Command | What It Catches |
|
|
14
|
+
|--------|---------|-----------------|
|
|
15
|
+
| MCP config files | `mcp-audit scan` | Risky permissions, overly broad file access |
|
|
16
|
+
| MCP server repos | `mcp-audit check <repo>` | Prompt injection, hardcoded secrets, trust scoring |
|
|
17
|
+
| Dockerfiles | `mcp-audit docker <path>` | Root user, exposed secrets, outdated base images |
|
|
18
|
+
| Kubernetes manifests | `mcp-audit k8s <path>` | Privileged containers, hostNetwork, runaway resources |
|
|
19
|
+
| Helm charts | `mcp-audit helm <path>` | Hardcoded secrets in values.yaml, unsafe defaults |
|
|
20
|
+
|
|
21
|
+
## Quick Start
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install -g mcp-audit
|
|
25
|
+
|
|
26
|
+
# Scan your MCP config
|
|
27
|
+
mcp-audit scan
|
|
28
|
+
|
|
29
|
+
# Audit a remote MCP server
|
|
30
|
+
mcp-audit check github.com/user/mcp-server
|
|
31
|
+
|
|
32
|
+
# Scan a Dockerfile
|
|
33
|
+
mcp-audit docker ./Dockerfile
|
|
34
|
+
|
|
35
|
+
# Scan K8s manifests
|
|
36
|
+
mcp-audit k8s ./manifests
|
|
37
|
+
|
|
38
|
+
# Scan a Helm chart
|
|
39
|
+
mcp-audit helm ./my-chart
|
|
40
|
+
|
|
41
|
+
# CI mode (exits with code on findings)
|
|
42
|
+
mcp-audit check --ci
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Usage
|
|
46
|
+
|
|
47
|
+
### Scan MCP Configuration
|
|
48
|
+
Checks `claude_desktop_config.json`, `.cursor/mcp.json`, and other MCP config files for risky permissions.
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
mcp-audit scan
|
|
52
|
+
mcp-audit scan -o report.json # save report
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Check a Remote Server
|
|
56
|
+
Clones the repo, runs static analysis, and generates a trust score based on GitHub signals.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
mcp-audit check https://github.com/username/mcp-server
|
|
60
|
+
mcp-audit check https://github.com/username/mcp-server --ci # CI-friendly
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Docker Security
|
|
64
|
+
```bash
|
|
65
|
+
mcp-audit docker ./Dockerfile
|
|
66
|
+
mcp-audit docker ./docker-dir # scans all Dockerfiles in directory
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Detects: root user, `ADD` vs `COPY`, hardcoded secrets, `latest` tags, missing `.dockerignore`.
|
|
70
|
+
|
|
71
|
+
### Kubernetes Security
|
|
72
|
+
```bash
|
|
73
|
+
mcp-audit k8s ./manifests
|
|
74
|
+
mcp-audit k8s ./manifests --strict # stricter checks
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Detects: privileged containers, hostNetwork/hostPID, missing resource limits, `alwaysPullPolicy` not set, containers running as root.
|
|
78
|
+
|
|
79
|
+
### Helm Chart Security
|
|
80
|
+
```bash
|
|
81
|
+
mcp-audit helm ./my-chart
|
|
82
|
+
mcp-audit helm ./my-chart --strict -o report.json
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Automatically detects Helm charts (looks for `Chart.yaml`). Scans `values.yaml` for hardcoded secrets and privileged flags, strips Go template syntax from `templates/` and runs K8s security checks, and validates `Chart.yaml` for deprecated API versions and missing metadata.
|
|
86
|
+
|
|
87
|
+
### CI Integration
|
|
88
|
+
All scanners support `--ci` for pipeline-friendly output and proper exit codes. Use `--strict` to fail on warnings too.
|
|
89
|
+
|
|
90
|
+
```yaml
|
|
91
|
+
# GitHub Actions example
|
|
92
|
+
- name: Security Audit
|
|
93
|
+
run: |
|
|
94
|
+
npx mcp-audit k8s ./k8s --ci --strict
|
|
95
|
+
npx mcp-audit docker . --ci
|
|
96
|
+
npx mcp-audit helm ./charts --ci
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Configuration
|
|
100
|
+
|
|
101
|
+
Create `mcp-audit.config.json` to customize:
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"vulnerabilityDatabase": "https://raw.githubusercontent.com/your-org/mcp-vuln-db/main/database.json",
|
|
106
|
+
"trustWeight": {
|
|
107
|
+
"stars": 0.3,
|
|
108
|
+
"tests": 0.3,
|
|
109
|
+
"ci": 0.2,
|
|
110
|
+
"age": 0.2
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Pre-commit Hook
|
|
116
|
+
|
|
117
|
+
```yaml
|
|
118
|
+
# .pre-commit-config.yaml
|
|
119
|
+
repos:
|
|
120
|
+
- repo: local
|
|
121
|
+
hooks:
|
|
122
|
+
- id: mcp-audit
|
|
123
|
+
name: MCP Security Audit
|
|
124
|
+
entry: mcp-audit check --ci
|
|
125
|
+
language: system
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Contributing
|
|
129
|
+
|
|
130
|
+
PRs welcome. Open an issue first if it's a significant change.
|
|
131
|
+
|
|
132
|
+
## License
|
|
133
|
+
|
|
134
|
+
MIT
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const config_scanner_1 = require("./scanners/config-scanner");
|
|
6
|
+
const server_scanner_1 = require("./scanners/server-scanner");
|
|
7
|
+
const report_generator_1 = require("./reporter/report-generator");
|
|
8
|
+
const logger_1 = require("./utils/logger");
|
|
9
|
+
const config_loader_1 = require("./config/config-loader");
|
|
10
|
+
const docker_scanner_1 = require("./scanners/docker-scanner");
|
|
11
|
+
const k8s_scanner_1 = require("./scanners/k8s-scanner");
|
|
12
|
+
const helm_scanner_1 = require("./scanners/helm-scanner");
|
|
13
|
+
commander_1.program
|
|
14
|
+
.name('mcp-audit')
|
|
15
|
+
.description('Security scanner for MCP (Model Context Protocol) servers')
|
|
16
|
+
.version('1.0.0');
|
|
17
|
+
commander_1.program
|
|
18
|
+
.command('scan')
|
|
19
|
+
.description('Scan local MCP configuration files for security issues')
|
|
20
|
+
.option('-v, --verbose', 'Verbose output')
|
|
21
|
+
.option('-o, --output <file>', 'Output file for report')
|
|
22
|
+
.action(async (options) => {
|
|
23
|
+
try {
|
|
24
|
+
logger_1.logger.info('Starting MCP configuration scan...');
|
|
25
|
+
const config = (0, config_loader_1.loadConfig)();
|
|
26
|
+
const results = await (0, config_scanner_1.scanConfig)(config, options.verbose);
|
|
27
|
+
await (0, report_generator_1.generateReport)(results, options.output);
|
|
28
|
+
logger_1.logger.info('✅ Configuration scan completed');
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
logger_1.logger.error('❌ Configuration scan failed:', error);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
commander_1.program
|
|
36
|
+
.command('check')
|
|
37
|
+
.description('Check a specific MCP server for security issues')
|
|
38
|
+
.argument('<repository>', 'GitHub repository URL or path')
|
|
39
|
+
.option('-v, --verbose', 'Verbose output')
|
|
40
|
+
.option('-o, --output <file>', 'Output file for report')
|
|
41
|
+
.option('--ci', 'CI mode (silent, exit codes only)')
|
|
42
|
+
.option('--depth <number>', 'Scan depth for analysis', '2')
|
|
43
|
+
.action(async (repository, options) => {
|
|
44
|
+
try {
|
|
45
|
+
logger_1.logger.info(`Starting MCP server analysis for: ${repository}`);
|
|
46
|
+
const config = (0, config_loader_1.loadConfig)();
|
|
47
|
+
const results = await (0, server_scanner_1.checkServer)(repository, {
|
|
48
|
+
...config,
|
|
49
|
+
scanDepth: parseInt(options.depth)
|
|
50
|
+
}, options.verbose);
|
|
51
|
+
await (0, report_generator_1.generateReport)(results, options.output);
|
|
52
|
+
if (!options.ci) {
|
|
53
|
+
logger_1.logger.info('✅ Server analysis completed');
|
|
54
|
+
}
|
|
55
|
+
process.exit(results.issues.length > 0 ? 1 : 0);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
logger_1.logger.error('❌ Server analysis failed:', error);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
commander_1.program
|
|
63
|
+
.command('docker')
|
|
64
|
+
.description('Scan Dockerfiles, compose files, and .env for container security issues')
|
|
65
|
+
.argument('<path>', 'Directory or file to scan')
|
|
66
|
+
.option('-v, --verbose', 'Verbose output')
|
|
67
|
+
.option('-o, --output <file>', 'Output file for report')
|
|
68
|
+
.option('--strict', 'Treat warnings as errors (exit 1)')
|
|
69
|
+
.option('--ci', 'CI mode (no color, exit codes only)')
|
|
70
|
+
.action(async (targetPath, options) => {
|
|
71
|
+
try {
|
|
72
|
+
if (!options.ci)
|
|
73
|
+
logger_1.logger.info(`Scanning Docker configs in: ${targetPath}`);
|
|
74
|
+
const results = await (0, docker_scanner_1.scanDocker)(targetPath, { strict: options.strict });
|
|
75
|
+
await (0, report_generator_1.generateReport)(results, options.output);
|
|
76
|
+
if (!options.ci) {
|
|
77
|
+
const score = results.score ?? 'N/A';
|
|
78
|
+
const issueCount = results.issues.length;
|
|
79
|
+
logger_1.logger.info(`✅ Docker scan completed — ${issueCount} issue(s) found, score: ${score}`);
|
|
80
|
+
}
|
|
81
|
+
const hasHigh = results.issues.some((i) => i.severity === 'high');
|
|
82
|
+
const fail = options.strict ? results.issues.length > 0 : hasHigh;
|
|
83
|
+
process.exit(fail ? 1 : 0);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
logger_1.logger.error('❌ Docker scan failed:', error);
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
commander_1.program
|
|
91
|
+
.command('k8s')
|
|
92
|
+
.description('Scan Kubernetes manifests (YAML) for security misconfigurations')
|
|
93
|
+
.argument('<path>', 'Directory or file to scan')
|
|
94
|
+
.option('-v, --verbose', 'Verbose output')
|
|
95
|
+
.option('-o, --output <file>', 'Output file for report')
|
|
96
|
+
.option('--strict', 'Treat all issues as failures (exit 1)')
|
|
97
|
+
.option('--ci', 'CI mode (no color, exit codes only)')
|
|
98
|
+
.action(async (targetPath, options) => {
|
|
99
|
+
try {
|
|
100
|
+
if (!options.ci)
|
|
101
|
+
logger_1.logger.info(`Scanning K8s manifests in: ${targetPath}`);
|
|
102
|
+
const results = await (0, k8s_scanner_1.scanK8s)(targetPath, { strict: options.strict });
|
|
103
|
+
await (0, report_generator_1.generateReport)(results, options.output);
|
|
104
|
+
if (!options.ci) {
|
|
105
|
+
const score = results.score ?? 'N/A';
|
|
106
|
+
const issueCount = results.issues.length;
|
|
107
|
+
logger_1.logger.info(`✅ K8s scan completed — ${issueCount} issue(s) found, score: ${score}`);
|
|
108
|
+
}
|
|
109
|
+
const hasHigh = results.issues.some((i) => i.type === 'high');
|
|
110
|
+
const fail = options.strict ? results.issues.length > 0 : hasHigh;
|
|
111
|
+
process.exit(fail ? 1 : 0);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
logger_1.logger.error('❌ K8s scan failed:', error);
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
commander_1.program
|
|
119
|
+
.command('helm')
|
|
120
|
+
.description('Scan Helm charts for security misconfigurations')
|
|
121
|
+
.argument('<path>', 'Helm chart directory or parent directory')
|
|
122
|
+
.option('-v, --verbose', 'Verbose output')
|
|
123
|
+
.option('-o, --output <file>', 'Output file for report')
|
|
124
|
+
.option('--strict', 'Treat all issues as failures (exit 1)')
|
|
125
|
+
.option('--ci', 'CI mode (no color, exit codes only)')
|
|
126
|
+
.action(async (targetPath, options) => {
|
|
127
|
+
try {
|
|
128
|
+
if (!options.ci)
|
|
129
|
+
logger_1.logger.info(`Scanning Helm charts in: ${targetPath}`);
|
|
130
|
+
const results = await (0, helm_scanner_1.scanHelm)(targetPath, { strict: options.strict });
|
|
131
|
+
await (0, report_generator_1.generateReport)(results, options.output);
|
|
132
|
+
if (!options.ci) {
|
|
133
|
+
const score = results.score ?? 'N/A';
|
|
134
|
+
const issueCount = results.issues.length;
|
|
135
|
+
logger_1.logger.info(`✅ Helm scan completed — ${issueCount} issue(s) found, score: ${score}`);
|
|
136
|
+
}
|
|
137
|
+
const hasHigh = results.issues.some((i) => i.type === 'high');
|
|
138
|
+
const fail = options.strict ? results.issues.length > 0 : hasHigh;
|
|
139
|
+
process.exit(fail ? 1 : 0);
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
logger_1.logger.error('❌ Helm scan failed:', error);
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
commander_1.program
|
|
147
|
+
.command('config')
|
|
148
|
+
.description('Manage MCP Audit configuration')
|
|
149
|
+
.option('--init', 'Initialize configuration file')
|
|
150
|
+
.option('--show', 'Show current configuration')
|
|
151
|
+
.action(async (options) => {
|
|
152
|
+
const config = (0, config_loader_1.loadConfig)();
|
|
153
|
+
if (options.init) {
|
|
154
|
+
await (0, config_loader_1.initializeConfig)();
|
|
155
|
+
logger_1.logger.info('✅ Configuration initialized');
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (options.show) {
|
|
159
|
+
console.log(JSON.stringify(config, null, 2));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
console.log('Use --init to create configuration or --show to view current config');
|
|
163
|
+
});
|
|
164
|
+
commander_1.program.parse();
|
|
165
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface MCPAuditConfig {
|
|
2
|
+
vulnerabilityDatabase: string;
|
|
3
|
+
trustWeight: {
|
|
4
|
+
stars: number;
|
|
5
|
+
tests: number;
|
|
6
|
+
ci: number;
|
|
7
|
+
age: number;
|
|
8
|
+
};
|
|
9
|
+
allowedFileAccess: string[];
|
|
10
|
+
scanDepth: number;
|
|
11
|
+
excludePatterns: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare function getConfigPath(): string;
|
|
14
|
+
export declare function getDefaultConfigPath(): string;
|
|
15
|
+
export declare function loadConfig(configPath?: string): MCPAuditConfig;
|
|
16
|
+
export declare function initializeConfig(configPath?: string): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=config-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/config/config-loader.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAyBD,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,cAAc,CAyB9D;AAED,wBAAsB,gBAAgB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getConfigPath = getConfigPath;
|
|
7
|
+
exports.getDefaultConfigPath = getDefaultConfigPath;
|
|
8
|
+
exports.loadConfig = loadConfig;
|
|
9
|
+
exports.initializeConfig = initializeConfig;
|
|
10
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const os_1 = require("os");
|
|
13
|
+
const DEFAULT_CONFIG = {
|
|
14
|
+
vulnerabilityDatabase: 'https://raw.githubusercontent.com/sulthonzh/mcp-vulnerability-database/main/database.json',
|
|
15
|
+
trustWeight: {
|
|
16
|
+
stars: 0.3,
|
|
17
|
+
tests: 0.3,
|
|
18
|
+
ci: 0.2,
|
|
19
|
+
age: 0.2
|
|
20
|
+
},
|
|
21
|
+
allowedFileAccess: [
|
|
22
|
+
'~/documents',
|
|
23
|
+
'~/projects',
|
|
24
|
+
'~/downloads'
|
|
25
|
+
],
|
|
26
|
+
scanDepth: 2,
|
|
27
|
+
excludePatterns: [
|
|
28
|
+
'node_modules/**',
|
|
29
|
+
'dist/**',
|
|
30
|
+
'build/**',
|
|
31
|
+
'**/*.log',
|
|
32
|
+
'**/*.tmp'
|
|
33
|
+
]
|
|
34
|
+
};
|
|
35
|
+
function getConfigPath() {
|
|
36
|
+
return path_1.default.join(process.cwd(), 'mcp-audit.config.json');
|
|
37
|
+
}
|
|
38
|
+
function getDefaultConfigPath() {
|
|
39
|
+
return path_1.default.join((0, os_1.homedir)(), '.mcp-audit.json');
|
|
40
|
+
}
|
|
41
|
+
function loadConfig(configPath) {
|
|
42
|
+
const configFile = configPath || getConfigPath();
|
|
43
|
+
if (fs_extra_1.default.existsSync(configFile)) {
|
|
44
|
+
try {
|
|
45
|
+
const userConfig = fs_extra_1.default.readJsonSync(configFile);
|
|
46
|
+
return { ...DEFAULT_CONFIG, ...userConfig };
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.warn(`Warning: Could not parse config file ${configFile}, using defaults`);
|
|
50
|
+
return DEFAULT_CONFIG;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Check for global config
|
|
54
|
+
const globalConfigFile = getDefaultConfigPath();
|
|
55
|
+
if (fs_extra_1.default.existsSync(globalConfigFile)) {
|
|
56
|
+
try {
|
|
57
|
+
const globalConfig = fs_extra_1.default.readJsonSync(globalConfigFile);
|
|
58
|
+
return { ...DEFAULT_CONFIG, ...globalConfig };
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.warn(`Warning: Could not parse global config file ${globalConfigFile}, using defaults`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return DEFAULT_CONFIG;
|
|
65
|
+
}
|
|
66
|
+
async function initializeConfig(configPath) {
|
|
67
|
+
const configFile = configPath || getConfigPath();
|
|
68
|
+
const config = loadConfig();
|
|
69
|
+
await fs_extra_1.default.writeJson(configFile, config, { spaces: 2 });
|
|
70
|
+
console.log(`Configuration initialized at: ${configFile}`);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=config-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/config/config-loader.ts"],"names":[],"mappings":";;;;;AAwCA,sCAEC;AAED,oDAEC;AAED,gCAyBC;AAED,4CAMC;AAjFD,wDAA0B;AAC1B,gDAAwB;AACxB,2BAA6B;AAe7B,MAAM,cAAc,GAAmB;IACrC,qBAAqB,EAAE,2FAA2F;IAClH,WAAW,EAAE;QACX,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,GAAG;QACV,EAAE,EAAE,GAAG;QACP,GAAG,EAAE,GAAG;KACT;IACD,iBAAiB,EAAE;QACjB,aAAa;QACb,YAAY;QACZ,aAAa;KACd;IACD,SAAS,EAAE,CAAC;IACZ,eAAe,EAAE;QACf,iBAAiB;QACjB,SAAS;QACT,UAAU;QACV,UAAU;QACV,UAAU;KACX;CACF,CAAC;AAEF,SAAgB,aAAa;IAC3B,OAAO,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC;AAC3D,CAAC;AAED,SAAgB,oBAAoB;IAClC,OAAO,cAAI,CAAC,IAAI,CAAC,IAAA,YAAO,GAAE,EAAE,iBAAiB,CAAC,CAAC;AACjD,CAAC;AAED,SAAgB,UAAU,CAAC,UAAmB;IAC5C,MAAM,UAAU,GAAG,UAAU,IAAI,aAAa,EAAE,CAAC;IAEjD,IAAI,kBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,kBAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAC/C,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,UAAU,EAAE,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,wCAAwC,UAAU,kBAAkB,CAAC,CAAC;YACnF,OAAO,cAAc,CAAC;QACxB,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,MAAM,gBAAgB,GAAG,oBAAoB,EAAE,CAAC;IAChD,IAAI,kBAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,kBAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;YACvD,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,YAAY,EAAE,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,+CAA+C,gBAAgB,kBAAkB,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,UAAmB;IACxD,MAAM,UAAU,GAAG,UAAU,IAAI,aAAa,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,MAAM,kBAAE,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,iCAAiC,UAAU,EAAE,CAAC,CAAC;AAC7D,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { scanConfig } from './scanners/config-scanner';
|
|
2
|
+
export { checkServer } from './scanners/server-scanner';
|
|
3
|
+
export { generateReport } from './reporter/report-generator';
|
|
4
|
+
export { loadConfig, initializeConfig } from './config/config-loader';
|
|
5
|
+
export { logger } from './utils/logger';
|
|
6
|
+
export { scanDocker } from './scanners/docker-scanner';
|
|
7
|
+
export { SecurityResult, SecurityIssue } from './types/security-result';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// MCP Audit - Main entry point
|
|
3
|
+
// This file serves as the main entry point for the package
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.scanDocker = exports.logger = exports.initializeConfig = exports.loadConfig = exports.generateReport = exports.checkServer = exports.scanConfig = void 0;
|
|
6
|
+
var config_scanner_1 = require("./scanners/config-scanner");
|
|
7
|
+
Object.defineProperty(exports, "scanConfig", { enumerable: true, get: function () { return config_scanner_1.scanConfig; } });
|
|
8
|
+
var server_scanner_1 = require("./scanners/server-scanner");
|
|
9
|
+
Object.defineProperty(exports, "checkServer", { enumerable: true, get: function () { return server_scanner_1.checkServer; } });
|
|
10
|
+
var report_generator_1 = require("./reporter/report-generator");
|
|
11
|
+
Object.defineProperty(exports, "generateReport", { enumerable: true, get: function () { return report_generator_1.generateReport; } });
|
|
12
|
+
var config_loader_1 = require("./config/config-loader");
|
|
13
|
+
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_loader_1.loadConfig; } });
|
|
14
|
+
Object.defineProperty(exports, "initializeConfig", { enumerable: true, get: function () { return config_loader_1.initializeConfig; } });
|
|
15
|
+
var logger_1 = require("./utils/logger");
|
|
16
|
+
Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
|
|
17
|
+
var docker_scanner_1 = require("./scanners/docker-scanner");
|
|
18
|
+
Object.defineProperty(exports, "scanDocker", { enumerable: true, get: function () { return docker_scanner_1.scanDocker; } });
|
|
19
|
+
// Re-export command for programmatic usage
|
|
20
|
+
// Note: program is not exported due to circular dependency
|
|
21
|
+
// Use cli module directly for programmatic access
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,+BAA+B;AAC/B,2DAA2D;;;AAE3D,4DAAuD;AAA9C,4GAAA,UAAU,OAAA;AACnB,4DAAwD;AAA/C,6GAAA,WAAW,OAAA;AACpB,gEAA6D;AAApD,kHAAA,cAAc,OAAA;AACvB,wDAAsE;AAA7D,2GAAA,UAAU,OAAA;AAAE,iHAAA,gBAAgB,OAAA;AACrC,yCAAwC;AAA/B,gGAAA,MAAM,OAAA;AACf,4DAAuD;AAA9C,4GAAA,UAAU,OAAA;AAGnB,2CAA2C;AAC3C,2DAA2D;AAC3D,kDAAkD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SecurityResult } from '../types/security-result';
|
|
2
|
+
export interface ReportOptions {
|
|
3
|
+
format: 'json' | 'table' | 'summary' | 'sarif';
|
|
4
|
+
output?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function generateReport(result: SecurityResult, outputPath?: string): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=report-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-generator.d.ts","sourceRoot":"","sources":["../../src/reporter/report-generator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAiB,MAAM,0BAA0B,CAAC;AAGzE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB/F"}
|