@integsec/agentic-pentest-proxy 0.1.0 → 0.1.2

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 CHANGED
@@ -2,23 +2,23 @@
2
2
 
3
3
  **Scope enforcement proxy for AI-driven penetration testing.**
4
4
 
5
- The IntegSec Agentic Pentest MCP Proxy sits between an AI agent (Claude, GPT, etc.) and an MCP tool server (Kali MCP, Nuclei MCP, [TurboPentest](https://turbopentest.com), etc.), intercepting every tool call and validating it against a scope manifest before it reaches the upstream server. Out-of-scope targets, banned techniques, and expired engagement windows are blocked in real time with a full audit trail.
5
+ The IntegSec Agentic Pentest MCP Proxy sits between an AI agent (Claude, GPT, etc.) and an MCP tool server ([TurboPentest](https://turbopentest.com), Nuclei MCP, etc.), intercepting every tool call and validating it against a scope manifest before it reaches the upstream server. Out-of-scope targets, banned techniques, and expired engagement windows are blocked in real time with a full audit trail.
6
6
 
7
7
  Built by **[IntegSec](https://integsec.com)** — offensive cybersecurity testing and threat simulation for modern organizations moving at AI speed.
8
8
 
9
9
  ```
10
- ┌──────────┐ JSON-RPC ┌─────────────────────┐ JSON-RPC ┌──────────────┐
11
- AI Agent ──────────────────▶│ IntegSec Agentic ──────────────────▶│ Upstream MCP
12
- (Claude) ◀──────────────────│ Pentest MCP Proxy ◀──────────────────│ (Kali / │
13
- └──────────┘ allow / block │ audit)forwarded │ TurboPentest)│
14
- └─────────────────────┘ └──────────────┘
15
-
16
-
17
- ┌───────────┐
18
- Audit Log
19
- (JSONL /
20
- Cloud)
21
- └───────────┘
10
+ +------------+ JSON-RPC +---------------------+ JSON-RPC +----------------+
11
+ | AI Agent | ----------> | IntegSec Agentic | ----------> | Upstream MCP |
12
+ | (Claude) | <---------- | Pentest MCP Proxy | <---------- | (TurboPentest) |
13
+ +------------+ allow/block | (validate + audit) | forwarded +----------------+
14
+ +---------------------+
15
+ |
16
+ v
17
+ +-----------+
18
+ | Audit Log |
19
+ | (JSONL / |
20
+ | Cloud) |
21
+ +-----------+
22
22
  ```
23
23
 
24
24
  > **Using AI agents for pentesting?** [TurboPentest](https://turbopentest.com) delivers agentic penetration testing powered by Claude — 15 orchestrated security tools, OWASP Top 10 coverage, results in under 4 hours, blockchain-attested reports. Starting at $99/domain. Pair it with this proxy for scope-safe autonomous testing.
@@ -66,7 +66,6 @@ The IntegSec Agentic Pentest MCP Proxy solves this by enforcing scope at the pro
66
66
 
67
67
  **No prompt engineering. No honor system. Enforcement.**
68
68
 
69
- This is the same scope enforcement philosophy behind [IntegSec's](https://integsec.com) human-expert-led penetration testing services — applied to autonomous AI agents.
70
69
 
71
70
  ---
72
71
 
@@ -116,10 +115,10 @@ cat > scope.json << 'EOF'
116
115
  }
117
116
  EOF
118
117
 
119
- # Run the proxy (stdio mode, wrapping kali-mcp)
118
+ # Run the proxy (stdio mode, wrapping TurboPentest MCP)
120
119
  SCOPE_MANIFEST_PATH=./scope.json \
121
120
  UPSTREAM_MCP_COMMAND=npx \
122
- UPSTREAM_MCP_ARGS="-y,@anthropic/kali-mcp" \
121
+ UPSTREAM_MCP_ARGS="-y,@turbopentest/mcp-server" \
123
122
  integsec-agentic-pentest-proxy
124
123
  ```
125
124
 
@@ -275,7 +274,7 @@ Point `TECHNIQUE_MAP_PATH` at this file. Custom mappings are merged with built-i
275
274
  # stdio mode — wrap any MCP server
276
275
  SCOPE_MANIFEST_PATH=./scope.json \
277
276
  UPSTREAM_MCP_COMMAND=npx \
278
- UPSTREAM_MCP_ARGS="-y,@anthropic/kali-mcp" \
277
+ UPSTREAM_MCP_ARGS="-y,@turbopentest/mcp-server" \
279
278
  integsec-agentic-pentest-proxy
280
279
 
281
280
  # HTTP mode — reverse proxy to a running MCP server
@@ -293,14 +292,14 @@ Add to your Claude Desktop `claude_desktop_config.json`:
293
292
  ```json
294
293
  {
295
294
  "mcpServers": {
296
- "kali-mcp-scoped": {
295
+ "turbopentest-scoped": {
297
296
  "command": "npx",
298
297
  "args": ["-y", "@integsec/agentic-pentest-proxy"],
299
298
  "env": {
300
299
  "SCOPE_MANIFEST_PATH": "/path/to/scope.json",
301
300
  "MCP_TRANSPORT": "stdio",
302
301
  "UPSTREAM_MCP_COMMAND": "npx",
303
- "UPSTREAM_MCP_ARGS": "-y,@anthropic/kali-mcp",
302
+ "UPSTREAM_MCP_ARGS": "-y,@turbopentest/mcp-server",
304
303
  "AUDIT_LOG_PATH": "./audit/"
305
304
  }
306
305
  }
@@ -315,13 +314,13 @@ Add to your `.mcp.json` or project settings:
315
314
  ```json
316
315
  {
317
316
  "mcpServers": {
318
- "kali-scoped": {
317
+ "turbopentest-scoped": {
319
318
  "command": "npx",
320
319
  "args": ["-y", "@integsec/agentic-pentest-proxy"],
321
320
  "env": {
322
321
  "SCOPE_MANIFEST_PATH": "./scope.json",
323
322
  "UPSTREAM_MCP_COMMAND": "npx",
324
- "UPSTREAM_MCP_ARGS": "-y,@anthropic/kali-mcp"
323
+ "UPSTREAM_MCP_ARGS": "-y,@turbopentest/mcp-server"
325
324
  }
326
325
  }
327
326
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/transports/stdio.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,wBAAsB,aAAa,CACjC,KAAK,EAAE,qBAAqB,EAC5B,eAAe,EAAE,MAAM,EACvB,YAAY,GAAE,MAAM,EAAO,GAC1B,OAAO,CAAC,IAAI,CAAC,CAoDf"}
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/transports/stdio.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,wBAAsB,aAAa,CACjC,KAAK,EAAE,qBAAqB,EAC5B,eAAe,EAAE,MAAM,EACvB,YAAY,GAAE,MAAM,EAAO,GAC1B,OAAO,CAAC,IAAI,CAAC,CA2Df"}
@@ -1,8 +1,15 @@
1
1
  import { spawn } from "child_process";
2
2
  import { createInterface } from "readline";
3
3
  export async function runStdioProxy(proxy, upstreamCommand, upstreamArgs = []) {
4
- const upstream = spawn(upstreamCommand, upstreamArgs, {
4
+ // On Windows, commands like "npx" are .cmd wrappers that require shell
5
+ // resolution, and paths may contain spaces (e.g. "C:\Program Files\...").
6
+ // Build a single quoted command string and use shell: true with no args
7
+ // array to avoid ENOENT, EINVAL, and DEP0190 issues.
8
+ const quote = (s) => (s.includes(" ") ? `"${s}"` : s);
9
+ const cmdString = [quote(upstreamCommand), ...upstreamArgs.map(quote)].join(" ");
10
+ const upstream = spawn(cmdString, {
5
11
  stdio: ["pipe", "pipe", "inherit"],
12
+ shell: true,
6
13
  });
7
14
  if (!upstream.stdin || !upstream.stdout) {
8
15
  throw new Error("Failed to open stdio pipes to upstream MCP server");
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/transports/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAA4B,EAC5B,eAAuB,EACvB,eAAyB,EAAE;IAE3B,MAAM,QAAQ,GAAiB,KAAK,CAAC,eAAe,EAAE,YAAY,EAAE;QAClE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;KACnC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;IAC3C,WAAW,CAAC,KAAK,EAAE,CAAC;IAEpB,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClF,MAAM,cAAc,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IAExF,2BAA2B;IAC3B,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACnC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACjE,IAAI,OAAO,EAAE,CAAC;gBACZ,QAAQ,CAAC,KAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YACrC,CAAC;iBAAM,IAAI,QAAQ,EAAE,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;YAC/C,QAAQ,CAAC,KAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,gDAAgD;IAChD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACjC,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/transports/stdio.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "mcpServers": {
3
- "kali-mcp-scoped": {
3
+ "turbopentest-scoped": {
4
4
  "command": "npx",
5
5
  "args": ["-y", "@integsec/agentic-pentest-proxy"],
6
6
  "env": {
7
7
  "SCOPE_MANIFEST_PATH": "/path/to/scope.json",
8
8
  "MCP_TRANSPORT": "stdio",
9
9
  "UPSTREAM_MCP_COMMAND": "npx",
10
- "UPSTREAM_MCP_ARGS": "-y,@anthropic/kali-mcp",
10
+ "UPSTREAM_MCP_ARGS": "-y,@turbopentest/mcp-server",
11
11
  "AUDIT_LOG_PATH": "./audit/"
12
12
  }
13
13
  }
@@ -0,0 +1,32 @@
1
+ {
2
+ "engagement_id": "ENG-2026-TEST-001",
3
+ "client": "IntegSec Internal",
4
+ "operator": "security@integsec.com",
5
+ "authorized_targets": {
6
+ "ip_ranges": [],
7
+ "domains": [
8
+ "turbopentest.com",
9
+ "*.turbopentest.com",
10
+ "integsec.com",
11
+ "*.integsec.com",
12
+ "lfo.pw",
13
+ "*.lfo.pw",
14
+ "pentestprepper.com",
15
+ "*.pentestprepper.com"
16
+ ],
17
+ "urls": [
18
+ "https://turbopentest.com",
19
+ "https://integsec.com",
20
+ "https://lfo.pw",
21
+ "https://pentestprepper.com"
22
+ ],
23
+ "cloud_accounts": []
24
+ },
25
+ "excluded_targets": [],
26
+ "authorized_techniques": ["recon", "web_app", "api_testing", "ssl_tls"],
27
+ "excluded_techniques": ["dos", "destructive", "social_engineering"],
28
+ "engagement_window": {
29
+ "start": "2026-03-27T00:00:00Z",
30
+ "end": "2026-04-27T23:59:59Z"
31
+ }
32
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integsec/agentic-pentest-proxy",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "IntegSec Agentic Pentest MCP Proxy — enforce penetration testing engagement scope for AI agents",
5
5
  "type": "module",
6
6
  "bin": {