agent-security-scanner-mcp 4.0.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -58
- package/code-review-agent/TODO.md +1 -1
- package/code-review-agent/dist/bin/cr-agent.js +1 -1
- package/code-review-agent/dist/src/llm/claude-cli.d.ts.map +1 -1
- package/code-review-agent/dist/src/llm/claude-cli.js +1 -2
- package/code-review-agent/dist/src/llm/claude-cli.js.map +1 -1
- package/code-review-agent/src/llm/claude-cli.ts +1 -2
- package/index.js +18 -18
- package/openclaw.plugin.json +1 -1
- package/package.json +3 -2
- package/scripts/postinstall.js +43 -4
- package/server.json +1 -1
- package/src/cli/init-hooks.js +3 -3
- package/src/cli/init.js +1 -1
package/README.md
CHANGED
|
@@ -2,20 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
<img src="./prooflayer-logo.png" alt="ProofLayer Logo" width="400"/>
|
|
4
4
|
|
|
5
|
-
#
|
|
5
|
+
# agent-security-scanner-mcp
|
|
6
6
|
|
|
7
7
|
**Security scanner for AI coding agents and autonomous assistants**
|
|
8
8
|
|
|
9
9
|
Scans code for vulnerabilities, detects hallucinated packages, blocks prompt injection, and provides LLM-powered semantic code review — via MCP (Claude Code, Cursor, Windsurf, Cline) or CLI (OpenClaw, CI/CD).
|
|
10
10
|
|
|
11
|
-
[](https://www.npmjs.com/package/agent-security-scanner-mcp)
|
|
12
|
+
[](https://www.npmjs.com/package/agent-security-scanner-mcp)
|
|
13
13
|
[](https://opensource.org/licenses/MIT)
|
|
14
14
|
[](benchmarks/RESULTS.md)
|
|
15
15
|
[](https://github.com/sinewaveai/agent-security-scanner-mcp/actions/workflows/test.yml)
|
|
16
16
|
|
|
17
|
-
> **Package renamed:** Previously `agent-security-scanner-mcp`. The old name still works for backwards compatibility.
|
|
18
|
-
|
|
19
17
|
</div>
|
|
20
18
|
|
|
21
19
|
---
|
|
@@ -47,10 +45,10 @@ npm install -g @prooflayer/security-scanner
|
|
|
47
45
|
### 🔬 Full Version (Advanced)
|
|
48
46
|
**Enterprise-grade scanner** with AST analysis, taint tracking, cross-file analysis, and LLM-powered semantic review
|
|
49
47
|
|
|
50
|
-
[](https://www.npmjs.com/package/agent-security-scanner-mcp)
|
|
51
49
|
|
|
52
50
|
```bash
|
|
53
|
-
npm install -g
|
|
51
|
+
npm install -g agent-security-scanner-mcp
|
|
54
52
|
```
|
|
55
53
|
|
|
56
54
|
- 🧬 **AST + Taint Analysis** - deep code understanding
|
|
@@ -65,6 +63,8 @@ Continue reading below for full version documentation →
|
|
|
65
63
|
|
|
66
64
|
---
|
|
67
65
|
|
|
66
|
+
> **New in v4.0.0:** LLM-powered semantic code review agent with intent profiling — understands what your project is supposed to do and flags patterns that violate that intent. Same `eval()` call = safe in a build tool, dangerous in an e-commerce app. Supports Claude CLI (no API key needed!), Anthropic, and OpenAI. [See code-review-agent](#-llm-powered-code-review-agent-new-in-v400).
|
|
67
|
+
>
|
|
68
68
|
> **New in v3.11.0:** ClawHub ecosystem security scanning — scanned all 16,532 ClawHub skills and found 46% have critical vulnerabilities. New `scan-clawhub` CLI for batch scanning, 40+ prompt injection patterns, jailbreak detection (DAN mode, dev mode), data exfiltration checks. [See ClawHub Security Dashboard](https://www.proof-layer.com/dashboard).
|
|
69
69
|
>
|
|
70
70
|
> **Also in v3.10.0:** ClawProof OpenClaw plugin — 6-layer deep skill scanner (`scan_skill`) with ClawHavoc malware signatures (27 rules, 121 patterns covering reverse shells, crypto miners, info stealers, C2 beacons, and OpenClaw-specific attacks), package supply chain verification, and rug pull detection.
|
|
@@ -91,14 +91,12 @@ Continue reading below for full version documentation →
|
|
|
91
91
|
## Quick Start
|
|
92
92
|
|
|
93
93
|
```bash
|
|
94
|
-
npx
|
|
94
|
+
npx agent-security-scanner-mcp init claude-code
|
|
95
95
|
```
|
|
96
96
|
|
|
97
97
|
Restart your client after running init. That's it — the scanner is active.
|
|
98
98
|
|
|
99
99
|
> **Other clients:** Replace `claude-code` with `cursor`, `claude-desktop`, `windsurf`, `cline`, `kilo-code`, `opencode`, or `cody`. Run with no argument for interactive client selection.
|
|
100
|
-
>
|
|
101
|
-
> **Note:** `npx agent-security-scanner-mcp` still works for backwards compatibility.
|
|
102
100
|
|
|
103
101
|
## Recommended Workflows
|
|
104
102
|
|
|
@@ -189,19 +187,20 @@ Same code, different verdicts based on what the project is supposed to do:
|
|
|
189
187
|
|
|
190
188
|
### Quick Start
|
|
191
189
|
|
|
190
|
+
After installing `agent-security-scanner-mcp`, the `cr-agent` CLI is automatically available:
|
|
191
|
+
|
|
192
192
|
```bash
|
|
193
|
-
|
|
194
|
-
npm install
|
|
195
|
-
npm run build
|
|
193
|
+
# Install the package (cr-agent is included)
|
|
194
|
+
npm install -g agent-security-scanner-mcp
|
|
196
195
|
|
|
197
196
|
# Analyze a project (no API key needed with claude-cli!)
|
|
198
|
-
npx
|
|
197
|
+
npx cr-agent analyze ./path/to/project -p claude-cli --verbose
|
|
199
198
|
|
|
200
199
|
# View intent profile only
|
|
201
|
-
npx
|
|
200
|
+
npx cr-agent intent ./path/to/project -p claude-cli
|
|
202
201
|
|
|
203
202
|
# Output as SARIF for GitHub Code Scanning
|
|
204
|
-
npx
|
|
203
|
+
npx cr-agent analyze ./path/to/project -f sarif -p claude-cli
|
|
205
204
|
```
|
|
206
205
|
|
|
207
206
|
### LLM Providers
|
|
@@ -843,17 +842,15 @@ Scan an entire project or directory for security vulnerabilities with aggregated
|
|
|
843
842
|
### Install
|
|
844
843
|
|
|
845
844
|
```bash
|
|
846
|
-
npm install -g
|
|
845
|
+
npm install -g agent-security-scanner-mcp
|
|
847
846
|
```
|
|
848
847
|
|
|
849
848
|
Or use directly with `npx` — no install required:
|
|
850
849
|
|
|
851
850
|
```bash
|
|
852
|
-
npx
|
|
851
|
+
npx agent-security-scanner-mcp
|
|
853
852
|
```
|
|
854
853
|
|
|
855
|
-
> **Backwards compatibility:** The old package name `agent-security-scanner-mcp` continues to work.
|
|
856
|
-
|
|
857
854
|
### Prerequisites
|
|
858
855
|
|
|
859
856
|
- **Node.js >= 18.0.0** (required)
|
|
@@ -865,16 +862,16 @@ npx prooflayer-agent-security
|
|
|
865
862
|
|
|
866
863
|
| Client | Command |
|
|
867
864
|
|--------|---------|
|
|
868
|
-
| Claude Code | `npx
|
|
869
|
-
| Claude Desktop | `npx
|
|
870
|
-
| Cursor | `npx
|
|
871
|
-
| Windsurf | `npx
|
|
872
|
-
| Cline | `npx
|
|
873
|
-
| Kilo Code | `npx
|
|
874
|
-
| OpenCode | `npx
|
|
875
|
-
| Cody | `npx
|
|
876
|
-
| **OpenClaw** | `npx
|
|
877
|
-
| Interactive | `npx
|
|
865
|
+
| Claude Code | `npx agent-security-scanner-mcp init claude-code` |
|
|
866
|
+
| Claude Desktop | `npx agent-security-scanner-mcp init claude-desktop` |
|
|
867
|
+
| Cursor | `npx agent-security-scanner-mcp init cursor` |
|
|
868
|
+
| Windsurf | `npx agent-security-scanner-mcp init windsurf` |
|
|
869
|
+
| Cline | `npx agent-security-scanner-mcp init cline` |
|
|
870
|
+
| Kilo Code | `npx agent-security-scanner-mcp init kilo-code` |
|
|
871
|
+
| OpenCode | `npx agent-security-scanner-mcp init opencode` |
|
|
872
|
+
| Cody | `npx agent-security-scanner-mcp init cody` |
|
|
873
|
+
| **OpenClaw** | `npx agent-security-scanner-mcp init openclaw` |
|
|
874
|
+
| Interactive | `npx agent-security-scanner-mcp init` |
|
|
878
875
|
|
|
879
876
|
The `init` command auto-detects your OS, locates the config file, creates a backup, and adds the MCP server entry. **Restart your client after running init.**
|
|
880
877
|
|
|
@@ -896,7 +893,7 @@ Add to your MCP client config:
|
|
|
896
893
|
"mcpServers": {
|
|
897
894
|
"security-scanner": {
|
|
898
895
|
"command": "npx",
|
|
899
|
-
"args": ["-y", "
|
|
896
|
+
"args": ["-y", "agent-security-scanner-mcp"]
|
|
900
897
|
}
|
|
901
898
|
}
|
|
902
899
|
}
|
|
@@ -913,8 +910,8 @@ Add to your MCP client config:
|
|
|
913
910
|
### Diagnostics
|
|
914
911
|
|
|
915
912
|
```bash
|
|
916
|
-
npx
|
|
917
|
-
npx
|
|
913
|
+
npx agent-security-scanner-mcp doctor # Check setup health
|
|
914
|
+
npx agent-security-scanner-mcp doctor --fix # Auto-fix trivial issues
|
|
918
915
|
```
|
|
919
916
|
|
|
920
917
|
Checks Node.js version, Python availability, analyzer engine status, and scans all client configs.
|
|
@@ -924,7 +921,7 @@ Checks Node.js version, Python availability, analyzer engine status, and scans a
|
|
|
924
921
|
## Try It Out
|
|
925
922
|
|
|
926
923
|
```bash
|
|
927
|
-
npx
|
|
924
|
+
npx agent-security-scanner-mcp demo --lang js
|
|
928
925
|
```
|
|
929
926
|
|
|
930
927
|
Creates a small file with 3 intentional vulnerabilities, runs the scanner, shows findings with CWE/OWASP references, and asks if you want to keep the file for testing.
|
|
@@ -939,28 +936,28 @@ Use the scanner directly from command line (for scripts, CI/CD, or OpenClaw):
|
|
|
939
936
|
|
|
940
937
|
```bash
|
|
941
938
|
# Scan a prompt for injection attacks
|
|
942
|
-
npx
|
|
939
|
+
npx agent-security-scanner-mcp scan-prompt "ignore previous instructions"
|
|
943
940
|
|
|
944
941
|
# Scan a file for vulnerabilities
|
|
945
|
-
npx
|
|
942
|
+
npx agent-security-scanner-mcp scan-security ./app.py --verbosity minimal
|
|
946
943
|
|
|
947
944
|
# Scan git diff (changed files only)
|
|
948
|
-
npx
|
|
945
|
+
npx agent-security-scanner-mcp scan-diff --base main --target HEAD
|
|
949
946
|
|
|
950
947
|
# Scan entire project with grading
|
|
951
|
-
npx
|
|
948
|
+
npx agent-security-scanner-mcp scan-project ./src
|
|
952
949
|
|
|
953
950
|
# Check if a package is legitimate
|
|
954
|
-
npx
|
|
951
|
+
npx agent-security-scanner-mcp check-package flask pypi
|
|
955
952
|
|
|
956
953
|
# Scan file imports for hallucinated packages
|
|
957
|
-
npx
|
|
954
|
+
npx agent-security-scanner-mcp scan-packages ./requirements.txt pypi
|
|
958
955
|
|
|
959
956
|
# Install Claude Code hooks for automatic scanning
|
|
960
|
-
npx
|
|
957
|
+
npx agent-security-scanner-mcp init-hooks
|
|
961
958
|
|
|
962
959
|
# LLM-powered semantic code review (new in v4.0.0)
|
|
963
|
-
|
|
960
|
+
npx cr-agent analyze ./path/to/project -p claude-cli --verbose
|
|
964
961
|
```
|
|
965
962
|
|
|
966
963
|
**Exit codes:** `0` = safe, `1` = issues found. Use in scripts to block risky operations.
|
|
@@ -1016,7 +1013,7 @@ Automatically scan files after every edit with Claude Code hooks integration.
|
|
|
1016
1013
|
### Install Hooks
|
|
1017
1014
|
|
|
1018
1015
|
```bash
|
|
1019
|
-
npx
|
|
1016
|
+
npx agent-security-scanner-mcp init-hooks
|
|
1020
1017
|
```
|
|
1021
1018
|
|
|
1022
1019
|
This installs a `post-tool-use` hook that triggers security scanning after `Write`, `Edit`, or `MultiEdit` operations.
|
|
@@ -1024,7 +1021,7 @@ This installs a `post-tool-use` hook that triggers security scanning after `Writ
|
|
|
1024
1021
|
### With Prompt Guard
|
|
1025
1022
|
|
|
1026
1023
|
```bash
|
|
1027
|
-
npx
|
|
1024
|
+
npx agent-security-scanner-mcp init-hooks --with-prompt-guard
|
|
1028
1025
|
```
|
|
1029
1026
|
|
|
1030
1027
|
Adds a `PreToolUse` hook that scans prompts for injection attacks before executing tools.
|
|
@@ -1039,7 +1036,7 @@ The command adds hooks to `~/.claude/settings.json`:
|
|
|
1039
1036
|
"post-tool-use": [
|
|
1040
1037
|
{
|
|
1041
1038
|
"matcher": "Write|Edit|MultiEdit",
|
|
1042
|
-
"command": "npx
|
|
1039
|
+
"command": "npx agent-security-scanner-mcp scan-security \"$TOOL_INPUT_file_path\" --verbosity minimal"
|
|
1043
1040
|
}
|
|
1044
1041
|
]
|
|
1045
1042
|
}
|
|
@@ -1061,7 +1058,7 @@ The command adds hooks to `~/.claude/settings.json`:
|
|
|
1061
1058
|
### Install
|
|
1062
1059
|
|
|
1063
1060
|
```bash
|
|
1064
|
-
npx
|
|
1061
|
+
npx agent-security-scanner-mcp init openclaw
|
|
1065
1062
|
```
|
|
1066
1063
|
|
|
1067
1064
|
This installs a skill to `~/.openclaw/workspace/skills/security-scanner/`.
|
|
@@ -1160,7 +1157,7 @@ AI coding agents introduce attack surfaces that traditional security tools weren
|
|
|
1160
1157
|
| Property | Value |
|
|
1161
1158
|
|----------|-------|
|
|
1162
1159
|
| **Transport** | stdio |
|
|
1163
|
-
| **Package** | `
|
|
1160
|
+
| **Package** | `agent-security-scanner-mcp` (npm) |
|
|
1164
1161
|
| **Tools** | 12 |
|
|
1165
1162
|
| **Languages** | 12 |
|
|
1166
1163
|
| **Ecosystems** | 7 |
|
|
@@ -1243,11 +1240,10 @@ All MCP tools support a `verbosity` parameter to minimize context window consump
|
|
|
1243
1240
|
|
|
1244
1241
|
## Changelog
|
|
1245
1242
|
|
|
1246
|
-
### v4.0.0 (2026-03-
|
|
1243
|
+
### v4.0.0 (2026-03-21) - LLM-Powered Code Review Agent
|
|
1247
1244
|
|
|
1248
|
-
**🚀 Major Release:
|
|
1245
|
+
**🚀 Major Release: LLM-Powered Semantic Code Review**
|
|
1249
1246
|
|
|
1250
|
-
- **Package Rename:** `agent-security-scanner-mcp` → `prooflayer-agent-security` (old name still works for backwards compatibility)
|
|
1251
1247
|
- **LLM-Powered Code Review Agent:** New `code-review-agent/` module for semantic security analysis
|
|
1252
1248
|
- **Intent Profiling:** Understands project purpose to reduce false positives
|
|
1253
1249
|
- **3 LLM Providers:** Anthropic, OpenAI, Claude CLI (no API key needed!)
|
|
@@ -1367,20 +1363,13 @@ All MCP tools support a `verbosity` parameter to minimize context window consump
|
|
|
1367
1363
|
### Default Package
|
|
1368
1364
|
|
|
1369
1365
|
```bash
|
|
1370
|
-
npm install -g
|
|
1366
|
+
npm install -g agent-security-scanner-mcp
|
|
1371
1367
|
```
|
|
1372
1368
|
|
|
1373
1369
|
Includes:
|
|
1374
1370
|
- **All 7 ecosystems** — npm, PyPI, RubyGems, crates.io, pub.dev, CPAN, raku.land (4.3M+ packages total)
|
|
1375
1371
|
- **LLM-powered code review agent** — semantic security analysis with intent profiling
|
|
1376
1372
|
|
|
1377
|
-
### Legacy Package Name
|
|
1378
|
-
|
|
1379
|
-
The old package name continues to work for backwards compatibility:
|
|
1380
|
-
|
|
1381
|
-
```bash
|
|
1382
|
-
npm install -g agent-security-scanner-mcp
|
|
1383
|
-
```
|
|
1384
1373
|
|
|
1385
1374
|
---
|
|
1386
1375
|
|
|
@@ -134,7 +134,7 @@ Stop analysis when estimated cost reaches a configurable threshold (e.g., `--max
|
|
|
134
134
|
|
|
135
135
|
### MCP server integration
|
|
136
136
|
|
|
137
|
-
Expose cr-agent as an MCP tool in the parent
|
|
137
|
+
Expose cr-agent as an MCP tool in the parent agent-security-scanner-mcp server, so AI coding assistants can invoke semantic code review alongside the existing rules-based scanner.
|
|
138
138
|
|
|
139
139
|
### SARIF upload
|
|
140
140
|
|
|
@@ -251,7 +251,7 @@ function toSarif(result) {
|
|
|
251
251
|
driver: {
|
|
252
252
|
name: 'cr-agent',
|
|
253
253
|
version: '0.1.0',
|
|
254
|
-
informationUri: 'https://github.com/
|
|
254
|
+
informationUri: 'https://github.com/sinewaveai/agent-security-scanner-mcp',
|
|
255
255
|
rules: result.findings.map((f, i) => ({
|
|
256
256
|
id: `CR${String(i + 1).padStart(3, '0')}`,
|
|
257
257
|
name: f.title.replace(/\s+/g, ''),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-cli.d.ts","sourceRoot":"","sources":["../../../src/llm/claude-cli.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAyB,MAAM,eAAe,CAAC;AAe1F,qBAAa,iBAAkB,YAAW,WAAW;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,gBAAgB;gBAEzB,KAAK,CAAC,EAAE,MAAM;IAIpB,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAK9C,cAAc,CAAC,CAAC,EACpB,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC;IAoDb,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKjC,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"claude-cli.d.ts","sourceRoot":"","sources":["../../../src/llm/claude-cli.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAyB,MAAM,eAAe,CAAC;AAe1F,qBAAa,iBAAkB,YAAW,WAAW;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,gBAAgB;gBAEzB,KAAK,CAAC,EAAE,MAAM;IAIpB,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAK9C,cAAc,CAAC,CAAC,EACpB,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC;IAoDb,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKjC,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,SAAS;CAwDlB"}
|
|
@@ -72,10 +72,9 @@ export class ClaudeCliProvider {
|
|
|
72
72
|
runClaude(prompt) {
|
|
73
73
|
return new Promise((resolve, reject) => {
|
|
74
74
|
const args = [
|
|
75
|
-
'-p',
|
|
75
|
+
'-p',
|
|
76
76
|
'--output-format', 'json',
|
|
77
77
|
'--model', this.modelId,
|
|
78
|
-
'--no-session-persistence',
|
|
79
78
|
];
|
|
80
79
|
const child = spawn('claude', args, {
|
|
81
80
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-cli.js","sourceRoot":"","sources":["../../../src/llm/claude-cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"claude-cli.js","sourceRoot":"","sources":["../../../src/llm/claude-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAsC,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,GAAG,CAAC,CAAC;AAYtB,MAAM,OAAO,iBAAiB;IACnB,OAAO,CAAS;IAChB,YAAY,GAAG,YAAY,CAAC;IAErC,YAAY,KAAc;QACxB,IAAI,CAAC,OAAO,GAAG,KAAK,IAAI,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAuB;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,QAAuB,EACvB,MAAoB,EACpB,UAAkB;QAElB,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,iBAAiB,GAAG;YACxB,iHAAiH;YACjH,gBAAgB,UAAU,EAAE;YAC5B,SAAS;YACT,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YACnC,KAAK;YACL,mDAAmD;SACpD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,SAAS,GAAiB,IAAI,CAAC;QACnC,MAAM,iBAAiB,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QAExC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;gBACjC,GAAG,iBAAiB;gBACpB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE;aAC7C,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAEzC,2DAA2D;YAC3D,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAEjC,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,SAAS,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1D,iBAAiB,CAAC,IAAI,CACpB,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,EACnC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,yCAAyC,SAAS,CAAC,OAAO,0CAA0C,EAAE,CAChI,CAAC;gBACF,SAAS;YACX,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB,CAAC;YAED,SAAS,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5C,iBAAiB,CAAC,IAAI,CACpB,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,EACnC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,4BAA4B,MAAM,CAAC,KAAK,CAAC,OAAO,iEAAiE,EAAE,CAC7I,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,qBAAqB,CAAC,WAAW,EAAE,SAAU,CAAC,CAAC;IAC3D,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,0DAA0D;QAC1D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpC,CAAC;IAEO,cAAc,CAAC,QAAuB;QAC5C,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,0BAA0B,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;YACxD,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/B,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACpC,KAAK,CAAC,IAAI,CAAC,wBAAwB,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAEO,SAAS,CAAC,MAAc;QAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG;gBACX,IAAI;gBACJ,iBAAiB,EAAE,MAAM;gBACzB,SAAS,EAAE,IAAI,CAAC,OAAO;aACxB,CAAC;YAEF,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE;gBAClC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gBAC/B,OAAO,EAAE,OAAO;aACjB,CAAC,CAAC;YAEH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAE1E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC1B,yEAAyE;oBACzE,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvD,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAC/F,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAoB,CAAC;oBACrD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;wBACpB,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;wBACvE,OAAO;oBACT,CAAC;oBACD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACzB,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxB,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;YACjF,CAAC,CAAC,CAAC;YAEH,qEAAqE;YACrE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC9B,gFAAgF;gBAChF,IAAK,GAA6B,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACpD,MAAM,CAAC,IAAI,KAAK,CAAC,yCAAyC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3F,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,qCAAqC;YACrC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,oEAAoE;IACpE,yDAAyD;IACzD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,OAAO,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,gDAAgD;IAChD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxE,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,qCAAqC;IACrC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC"}
|
|
@@ -108,10 +108,9 @@ export class ClaudeCliProvider implements LLMProvider {
|
|
|
108
108
|
private runClaude(prompt: string): Promise<string> {
|
|
109
109
|
return new Promise((resolve, reject) => {
|
|
110
110
|
const args = [
|
|
111
|
-
'-p',
|
|
111
|
+
'-p',
|
|
112
112
|
'--output-format', 'json',
|
|
113
113
|
'--model', this.modelId,
|
|
114
|
-
'--no-session-persistence',
|
|
115
114
|
];
|
|
116
115
|
|
|
117
116
|
const child = spawn('claude', args, {
|
package/index.js
CHANGED
|
@@ -47,7 +47,7 @@ try {
|
|
|
47
47
|
// Create MCP Server
|
|
48
48
|
const server = new McpServer(
|
|
49
49
|
{
|
|
50
|
-
name: "
|
|
50
|
+
name: "agent-security-scanner-mcp",
|
|
51
51
|
version: _pkgVersion,
|
|
52
52
|
},
|
|
53
53
|
{
|
|
@@ -306,7 +306,7 @@ const cliArgs = process.argv.slice(2);
|
|
|
306
306
|
// CLI mode: scan-prompt <text> [--verbosity minimal|compact|full]
|
|
307
307
|
const text = cliArgs[1];
|
|
308
308
|
if (!text) {
|
|
309
|
-
console.error('Usage:
|
|
309
|
+
console.error('Usage: agent-security-scanner-mcp scan-prompt <text> [--verbosity minimal|compact|full]');
|
|
310
310
|
process.exit(1);
|
|
311
311
|
}
|
|
312
312
|
const verbosityIdx = cliArgs.indexOf('--verbosity');
|
|
@@ -326,7 +326,7 @@ const cliArgs = process.argv.slice(2);
|
|
|
326
326
|
// CLI mode: scan-security <file> [--verbosity minimal|compact|full] [--format json|sarif]
|
|
327
327
|
const filePath = cliArgs[1];
|
|
328
328
|
if (!filePath) {
|
|
329
|
-
console.error('Usage:
|
|
329
|
+
console.error('Usage: agent-security-scanner-mcp scan-security <file> [--verbosity minimal|compact|full] [--format json|sarif]');
|
|
330
330
|
process.exit(1);
|
|
331
331
|
}
|
|
332
332
|
const verbosityIdx = cliArgs.indexOf('--verbosity');
|
|
@@ -348,7 +348,7 @@ const cliArgs = process.argv.slice(2);
|
|
|
348
348
|
const packageName = cliArgs[1];
|
|
349
349
|
const ecosystem = cliArgs[2];
|
|
350
350
|
if (!packageName || !ecosystem) {
|
|
351
|
-
console.error('Usage:
|
|
351
|
+
console.error('Usage: agent-security-scanner-mcp check-package <name> <ecosystem>');
|
|
352
352
|
console.error('Ecosystems: npm, pypi, rubygems, crates, dart, perl, raku');
|
|
353
353
|
process.exit(1);
|
|
354
354
|
}
|
|
@@ -367,7 +367,7 @@ const cliArgs = process.argv.slice(2);
|
|
|
367
367
|
const filePath = cliArgs[1];
|
|
368
368
|
const ecosystem = cliArgs[2];
|
|
369
369
|
if (!filePath || !ecosystem) {
|
|
370
|
-
console.error('Usage:
|
|
370
|
+
console.error('Usage: agent-security-scanner-mcp scan-packages <file> <ecosystem> [--verbosity minimal|compact|full]');
|
|
371
371
|
console.error('Ecosystems: npm, pypi, rubygems, crates, dart, perl, raku');
|
|
372
372
|
process.exit(1);
|
|
373
373
|
}
|
|
@@ -387,7 +387,7 @@ const cliArgs = process.argv.slice(2);
|
|
|
387
387
|
// CLI mode: scan-project <dir> [--recursive] [--diff-only] [--cross-file] [--include '*.py'] [--exclude '*.test.js'] [--verbosity minimal|compact|full]
|
|
388
388
|
const dirPath = cliArgs[1];
|
|
389
389
|
if (!dirPath || dirPath.startsWith('--')) {
|
|
390
|
-
console.error('Usage:
|
|
390
|
+
console.error('Usage: agent-security-scanner-mcp scan-project <directory> [--recursive] [--diff-only] [--cross-file] [--include <pattern>] [--exclude <pattern>] [--verbosity minimal|compact|full]');
|
|
391
391
|
process.exit(1);
|
|
392
392
|
}
|
|
393
393
|
const verbosityIdx = cliArgs.indexOf('--verbosity');
|
|
@@ -455,7 +455,7 @@ const cliArgs = process.argv.slice(2);
|
|
|
455
455
|
// CLI mode: scan-mcp <path> [--verbosity minimal|compact|full]
|
|
456
456
|
const serverPath = cliArgs[1];
|
|
457
457
|
if (!serverPath) {
|
|
458
|
-
console.error('Usage:
|
|
458
|
+
console.error('Usage: agent-security-scanner-mcp scan-mcp <server-path> [--verbosity minimal|compact|full]');
|
|
459
459
|
process.exit(1);
|
|
460
460
|
}
|
|
461
461
|
const verbosityIdx = cliArgs.indexOf('--verbosity');
|
|
@@ -474,7 +474,7 @@ const cliArgs = process.argv.slice(2);
|
|
|
474
474
|
const actionType = cliArgs[1];
|
|
475
475
|
const actionValue = cliArgs[2];
|
|
476
476
|
if (!actionType || !actionValue) {
|
|
477
|
-
console.error('Usage:
|
|
477
|
+
console.error('Usage: agent-security-scanner-mcp scan-action <type> <value> [--verbosity minimal|compact|full]');
|
|
478
478
|
console.error('Types: bash, file_write, file_read, http_request, file_delete, cron, process_spawn, git, docker');
|
|
479
479
|
process.exit(1);
|
|
480
480
|
}
|
|
@@ -492,7 +492,7 @@ const cliArgs = process.argv.slice(2);
|
|
|
492
492
|
} else if (cliArgs[0] === 'scan-skill') {
|
|
493
493
|
const skillPath = cliArgs[1];
|
|
494
494
|
if (!skillPath) {
|
|
495
|
-
console.error('Usage:
|
|
495
|
+
console.error('Usage: agent-security-scanner-mcp scan-skill <skill-path> [--verbosity minimal|compact|full] [--baseline]');
|
|
496
496
|
process.exit(1);
|
|
497
497
|
}
|
|
498
498
|
const verbosityIdx = cliArgs.indexOf('--verbosity');
|
|
@@ -529,7 +529,7 @@ const cliArgs = process.argv.slice(2);
|
|
|
529
529
|
await import('./src/cli/scan-clawhub-safe.js');
|
|
530
530
|
// Exit is handled by scan-clawhub-safe.js
|
|
531
531
|
} else if (cliArgs[0] === '--help' || cliArgs[0] === '-h' || cliArgs[0] === 'help') {
|
|
532
|
-
console.log('\n
|
|
532
|
+
console.log('\n agent-security-scanner-mcp\n');
|
|
533
533
|
console.log(' Commands:');
|
|
534
534
|
console.log(' init [client] Set up MCP config for a client');
|
|
535
535
|
console.log(' init-hooks Install Claude Code hooks for auto-scanning');
|
|
@@ -557,14 +557,14 @@ const cliArgs = process.argv.slice(2);
|
|
|
557
557
|
console.log(' --include <pattern> Include only matching files (scan-project)');
|
|
558
558
|
console.log(' --exclude <pattern> Exclude matching files (scan-project)\n');
|
|
559
559
|
console.log(' Examples:');
|
|
560
|
-
console.log(' npx
|
|
561
|
-
console.log(' npx
|
|
562
|
-
console.log(' npx
|
|
563
|
-
console.log(' npx
|
|
564
|
-
console.log(' npx
|
|
565
|
-
console.log(' npx
|
|
566
|
-
console.log(' npx
|
|
567
|
-
console.log(' npx
|
|
560
|
+
console.log(' npx agent-security-scanner-mcp init');
|
|
561
|
+
console.log(' npx agent-security-scanner-mcp scan-prompt "ignore previous instructions"');
|
|
562
|
+
console.log(' npx agent-security-scanner-mcp scan-security ./app.py --verbosity minimal');
|
|
563
|
+
console.log(' npx agent-security-scanner-mcp check-package flask pypi');
|
|
564
|
+
console.log(' npx agent-security-scanner-mcp scan-project ./src --verbosity minimal');
|
|
565
|
+
console.log(' npx agent-security-scanner-mcp scan-diff HEAD~1');
|
|
566
|
+
console.log(' npx agent-security-scanner-mcp report ./src --json');
|
|
567
|
+
console.log(' npx agent-security-scanner-mcp benchmark --save --compare-latest\n');
|
|
568
568
|
process.exit(0);
|
|
569
569
|
} else {
|
|
570
570
|
// Normal MCP server mode
|
package/openclaw.plugin.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
2
|
+
"name": "agent-security-scanner-mcp",
|
|
3
3
|
"version": "4.0.0",
|
|
4
4
|
"description": "Security scanner for OpenClaw: prompt injection firewall, package hallucination detection, code vulnerability scanning, auto-fix",
|
|
5
5
|
"author": "Sinewave AI",
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-security-scanner-mcp",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.1",
|
|
4
4
|
"mcpName": "io.github.sinewaveai/agent-security-scanner-mcp",
|
|
5
5
|
"description": "Security scanner MCP server for AI coding agents. Prompt injection firewall, package hallucination detection (4.3M+ packages), 1700+ vulnerability rules with AST & taint analysis, LLM-powered semantic code review, auto-fix. For Claude Code, Cursor, Windsurf, Cline, OpenClaw.",
|
|
6
6
|
"main": "index.js",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"bin": {
|
|
9
|
-
"agent-security-scanner-mcp": "index.js"
|
|
9
|
+
"agent-security-scanner-mcp": "index.js",
|
|
10
|
+
"cr-agent": "code-review-agent/dist/bin/cr-agent.js"
|
|
10
11
|
},
|
|
11
12
|
"scripts": {
|
|
12
13
|
"start": "node index.js",
|
package/scripts/postinstall.js
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* postinstall.js -
|
|
4
|
-
*
|
|
3
|
+
* postinstall.js - Setup script for agent-security-scanner-mcp
|
|
4
|
+
* 1. Install Python dependencies for tree-sitter AST engine (optional)
|
|
5
|
+
* 2. Install and build code-review-agent dependencies (optional)
|
|
5
6
|
*/
|
|
6
|
-
import { execFileSync } from "child_process";
|
|
7
|
+
import { execFileSync, execSync } from "child_process";
|
|
7
8
|
import { join, dirname } from "path";
|
|
8
9
|
import { fileURLToPath } from "url";
|
|
10
|
+
import { existsSync } from "fs";
|
|
9
11
|
|
|
10
12
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
11
|
-
const
|
|
13
|
+
const rootDir = join(__dirname, "..");
|
|
14
|
+
const requirementsPath = join(rootDir, "requirements.txt");
|
|
15
|
+
const codeReviewAgentDir = join(rootDir, "code-review-agent");
|
|
12
16
|
|
|
13
17
|
// Check if Python 3 is available
|
|
14
18
|
function findPython() {
|
|
@@ -33,6 +37,7 @@ function isTreeSitterInstalled(pythonCmd) {
|
|
|
33
37
|
}
|
|
34
38
|
}
|
|
35
39
|
|
|
40
|
+
// Setup Python dependencies
|
|
36
41
|
const pythonCmd = findPython();
|
|
37
42
|
|
|
38
43
|
if (!pythonCmd) {
|
|
@@ -58,3 +63,37 @@ if (!pythonCmd) {
|
|
|
58
63
|
);
|
|
59
64
|
}
|
|
60
65
|
}
|
|
66
|
+
|
|
67
|
+
// Setup code-review-agent (LLM-powered semantic analysis)
|
|
68
|
+
if (existsSync(codeReviewAgentDir)) {
|
|
69
|
+
const distExists = existsSync(join(codeReviewAgentDir, "dist", "bin", "cr-agent.js"));
|
|
70
|
+
|
|
71
|
+
if (distExists) {
|
|
72
|
+
console.log("[postinstall] code-review-agent already built — cr-agent CLI available.");
|
|
73
|
+
} else {
|
|
74
|
+
console.log("[postinstall] Setting up code-review-agent (LLM-powered code review)...");
|
|
75
|
+
try {
|
|
76
|
+
// Install dependencies
|
|
77
|
+
execSync("npm install --omit=dev", {
|
|
78
|
+
cwd: codeReviewAgentDir,
|
|
79
|
+
timeout: 180000,
|
|
80
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
// Build TypeScript
|
|
84
|
+
execSync("npm run build", {
|
|
85
|
+
cwd: codeReviewAgentDir,
|
|
86
|
+
timeout: 60000,
|
|
87
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
console.log("[postinstall] code-review-agent installed — run: npx cr-agent --help");
|
|
91
|
+
} catch (err) {
|
|
92
|
+
console.log(
|
|
93
|
+
"[postinstall] Could not set up code-review-agent (optional LLM-powered review).\n" +
|
|
94
|
+
" The main scanner still works. To set up manually:\n" +
|
|
95
|
+
" cd node_modules/agent-security-scanner-mcp/code-review-agent && npm install && npm run build"
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
package/server.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
-
"name": "io.github.sinewaveai/
|
|
3
|
+
"name": "io.github.sinewaveai/agent-security-scanner-mcp",
|
|
4
4
|
"description": "MCP security scanner with prompt injection firewall, package hallucination detection, LLM-powered code review, and auto-fix.",
|
|
5
5
|
"version": "4.0.0",
|
|
6
6
|
"transport": "stdio",
|
package/src/cli/init-hooks.js
CHANGED
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
import { existsSync, readFileSync, writeFileSync, copyFileSync, mkdirSync } from 'fs';
|
|
6
6
|
import { join } from 'path';
|
|
7
7
|
|
|
8
|
-
const SCANNER_HOOK_MARKER = '
|
|
8
|
+
const SCANNER_HOOK_MARKER = 'agent-security-scanner-mcp';
|
|
9
9
|
|
|
10
10
|
function buildHooksConfig(withPromptGuard) {
|
|
11
11
|
const hooks = {
|
|
12
12
|
'post-tool-use': [
|
|
13
13
|
{
|
|
14
14
|
matcher: 'Write|Edit|MultiEdit',
|
|
15
|
-
command: `npx
|
|
15
|
+
command: `npx agent-security-scanner-mcp scan-security "$TOOL_INPUT_FILE_PATH" --verbosity minimal`,
|
|
16
16
|
},
|
|
17
17
|
],
|
|
18
18
|
};
|
|
@@ -21,7 +21,7 @@ function buildHooksConfig(withPromptGuard) {
|
|
|
21
21
|
hooks['pre-tool-use'] = [
|
|
22
22
|
{
|
|
23
23
|
matcher: 'Bash',
|
|
24
|
-
command: `npx
|
|
24
|
+
command: `npx agent-security-scanner-mcp scan-prompt "$TOOL_INPUT_COMMAND" --verbosity minimal`,
|
|
25
25
|
},
|
|
26
26
|
];
|
|
27
27
|
}
|