@mcp-guardian/server
Advanced tools
+6
-110
| { | ||
| "name": "@mcp-guardian/server", | ||
| "version": "4.1.0", | ||
| "version": "4.1.1", | ||
| "description": "Security, cost, and health governance proxy for MCP infrastructure — three-layer detection engine (regex + schema + LLM), monorepo, corpus, CI/CD", | ||
@@ -58,110 +58,5 @@ "type": "module", | ||
| ], | ||
| "scripts": { | ||
| "build": "pnpm --filter @mcp-guardian/plugin-sdk run build && tsc --project tsconfig.json && mkdir -p dist/database/migrations && cp src/database/migrations/*.sql dist/database/migrations/ && turbo run build", | ||
| "build:guardian": "pnpm --filter @mcp-guardian/plugin-sdk run build && tsc --project tsconfig.json", | ||
| "test": "vitest run && turbo run test", | ||
| "test:policy-proxy-utils": "vitest run tests/policy/ tests/proxy/ tests/utils/ --reporter=dot", | ||
| "test:enterprise-profile": "GUARDIAN_ENTERPRISE_MODE=true GUARDIAN_STRICT_MODE=true vitest run tests/policy/ tests/proxy/ tests/license/enterprise-license-posture.test.ts tests/enterprise/ tests/ai/sync-semantic-request.test.ts --reporter=dot", | ||
| "validate:enterprise-matrix": "vitest run tests/enterprise/preflight-matrix.test.ts --reporter=dot", | ||
| "harness:premortem-profiles": "GUARDIAN_ENTERPRISE_MODE=false pnpm exec vitest run tests/e2e/adversarial-proxy.e2e.test.ts --reporter=dot && GUARDIAN_ENTERPRISE_MODE=true GUARDIAN_CI_BYPASS_LICENSE=true pnpm exec vitest run tests/e2e/adversarial-proxy.e2e.test.ts --reporter=dot", | ||
| "test:integration": "vitest run --config vitest.integration.config.ts", | ||
| "test:scale-postgres": "node scripts/test-scale-postgres.mjs", | ||
| "test:scale-proxy": "node scripts/test-scale-proxy-replicas.mjs", | ||
| "typecheck": "turbo run typecheck", | ||
| "dogfood": "node scripts/run-dogfood-scenario.cjs", | ||
| "e2e:tui": "node scripts/run-e2e-tui.cjs", | ||
| "test:ai-live": "node scripts/run-live-ai-learning.cjs", | ||
| "tui": "node dist/cli.js tui --policy default-policy.yaml", | ||
| "live:tui-demo": "node scripts/run-live-tui-demo.cjs --stream", | ||
| "doctor": "node dist/cli.js doctor --policy default-policy.yaml", | ||
| "onboard": "node dist/cli.js onboard", | ||
| "control-plane": "node dist/cli.js control-plane", | ||
| "analyze": "node dist/cli.js analyze", | ||
| "autopilot:init": "node dist/cli.js autopilot init", | ||
| "autopilot:start": "node dist/cli.js autopilot start", | ||
| "autopilot:status": "node dist/cli.js autopilot status", | ||
| "eval": "tsx corpus/run-eval.ts", | ||
| "harness:export": "tsx adversarial-harness/scripts/export-harness-rules.ts", | ||
| "harness:attacks": "node adversarial-harness/scripts/generate-custom-attacks.mjs", | ||
| "harness:python": "PYTHONPATH=adversarial-harness/python python3 adversarial-harness/python/run_comprehensive_eval.py", | ||
| "harness:comprehensive": "PYTHONPATH=adversarial-harness/python python3 adversarial-harness/python/comprehensive_test_harness.py", | ||
| "harness:matrix": "node adversarial-harness/scripts/generate-matrix-fixtures.mjs", | ||
| "harness:analysis-adv": "node adversarial-harness/scripts/generate-analysis-adv-fixtures.mjs", | ||
| "harness:node": "node adversarial-harness/scripts/run-node-tests.mjs", | ||
| "harness:parity": "tsx adversarial-harness/scripts/compare-node-python.ts", | ||
| "harness": "node adversarial-harness/run-harness.mjs", | ||
| "security-swarm": "node security-swarm/run.mjs --live", | ||
| "security-swarm:fast": "node security-swarm/run.mjs --fast --live", | ||
| "security-swarm:live": "node security-swarm/run.mjs --live", | ||
| "security-swarm:ci": "node security-swarm/run.mjs --quiet", | ||
| "security-swarm:calibrate": "tsx scripts/security-swarm/calibrate-semantic.ts", | ||
| "security-swarm:seed-semantic": "GUARDIAN_SEMANTIC_STORE_CALIBRATION=true SWARM_CALIBRATE_CAPTURE=true node scenarios/real-life/run-official-filesystem-scenario.mjs && SWARM_CALIBRATE_AUTO_LABEL=true pnpm security-swarm:calibrate", | ||
| "security-swarm:corpus-pr": "node security-swarm/scripts/open-corpus-pr.mjs", | ||
| "security-swarm:threat-lab": "SWARM_THREAT_LAB=true node security-swarm/agents/threat-lab.mjs", | ||
| "security-swarm:tool-watch": "SWARM_TOOL_WATCH=true node security-swarm/agents/tool-watch.mjs", | ||
| "security-swarm:red-team-personas": "SWARM_RED_TEAM_PERSONAS=true node security-swarm/agents/red-team-personas.mjs", | ||
| "security-swarm:auto-threat-research": "GUARDIAN_THREAT_RESEARCH_AUTO=true SWARM_THREAT_RESEARCH_AUTO=true node security-swarm/agents/auto-threat-research.mjs", | ||
| "security-swarm:auto-threat-e2e": "tsx scripts/security-swarm/smoke-auto-threat-research-e2e.ts", | ||
| "security-swarm:analyze": "node security-swarm/run-analysis.mjs", | ||
| "security-swarm:schedule": "node scripts/security-swarm/schedule-analysis.mjs", | ||
| "security-swarm:visuals-data": "node security-swarm/agents/visuals-data.mjs", | ||
| "security-swarm:analyze:full": "node security-swarm/run-analysis.mjs --full --continuous", | ||
| "real-life:filesystem": "node scenarios/real-life/run-official-filesystem-scenario.mjs", | ||
| "agent:proxy-traffic": "node scripts/agent-proxy-traffic.mjs", | ||
| "enterprise:evidence-pack": "node scripts/package-enterprise-evidence.mjs", | ||
| "enterprise:compliance-report": "node scripts/generate-compliance-report.mjs", | ||
| "enterprise:siem": "node scripts/generate-compliance-evidence.mjs", | ||
| "enterprise:sbom": "node scripts/generate-sbom.mjs", | ||
| "enterprise:red-team": "node scripts/continuous-red-team.mjs", | ||
| "enterprise:compliance-evidence": "node scripts/generate-compliance-evidence.mjs", | ||
| "enterprise:evidence-check": "node scripts/compliance-evidence-check.mjs", | ||
| "enterprise:rotate-encryption": "node scripts/rotate-field-encryption.mjs", | ||
| "enterprise:preflight": "sh scripts/verify-enterprise-preflight.sh", | ||
| "enterprise:preflight:multi-region": "sh scripts/verify-multi-region-preflight.sh", | ||
| "enterprise:pilot": "sh scripts/verify-multi-tenant-pilot.sh", | ||
| "enterprise:cutover": "sh scripts/verify-production-cutover.sh", | ||
| "real-life:swarm": "node security-swarm/run-analysis.mjs", | ||
| "real-life:continuous": "node scenarios/real-life/run-continuous-live-attack.mjs", | ||
| "verify:corpus": "bash scripts/verify-corpus-parity.sh", | ||
| "dashboard:build": "npm run build --prefix deploy/dashboard-spa", | ||
| "dashboard:serve": "node scripts/serve-dashboard.mjs", | ||
| "dashboard:proxy": "sh scripts/start-dashboard-proxy.sh", | ||
| "dashboard:dev": "npm run dev --prefix deploy/dashboard-spa", | ||
| "soc:api": "tsx src/soc-api-server.ts", | ||
| "soc:api:dev": "SOC_API_PORT=4040 tsx watch src/soc-api-server.ts", | ||
| "soc:full": "concurrently --kill-others \"pnpm soc:api:dev\" \"pnpm dashboard:dev\"", | ||
| "cloud:dev": "pnpm --filter @mcp-guardian/cloud dev", | ||
| "cloud:build": "pnpm --filter @mcp-guardian/cloud build", | ||
| "cloud:test": "pnpm --filter @mcp-guardian/cloud test", | ||
| "cloud:migrate": "pnpm --filter @mcp-guardian/cloud run db:migrate", | ||
| "cloud:migrate:prod": "./scripts/cloud-migrate-production.sh", | ||
| "cloud:verify-prod": "./scripts/verify-pro-production.sh", | ||
| "publish:npm": "./scripts/publish-npm-all.sh", | ||
| "cloud:register-pro-key": "node apps/cloud/scripts/register-pro-license.mjs", | ||
| "eval:full": "ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY tsx corpus/run-eval.ts", | ||
| "eval:attack-learning": "tsx scripts/simulate-attack-learning-stream.ts", | ||
| "eval:attack-learning:long": "tsx scripts/long-attack-learning-eval.ts", | ||
| "eval:attack-learning:charts": "tsx scripts/generate-attack-learning-charts.ts", | ||
| "ai:export-training-data": "tsx scripts/ai/export-training-data.ts", | ||
| "ai:train-tenant-model": "tsx scripts/ai/train-tenant-model.ts", | ||
| "security-swarm:shadow-red-team": "tsx scripts/security-swarm/run-shadow-red-team.ts", | ||
| "benchmark:concurrent": "tsx benchmarks/concurrent-tool-calls.ts", | ||
| "benchmark:concurrent-proxy": "tsx benchmarks/concurrent-proxy-tool-calls.ts", | ||
| "benchmark:proxy-tiers": "tsx benchmarks/proxy-slo-by-concurrency.ts", | ||
| "benchmark:multi-proxy": "tsx benchmarks/concurrent-multi-proxy.ts", | ||
| "benchmark:proxy-slo": "tsx benchmarks/run.ts", | ||
| "parity:control-data-plane": "tsx scripts/control-plane/run-parity-harness.mjs", | ||
| "soak:data-plane": "node scripts/control-plane/run-data-plane-soak.mjs", | ||
| "start": "node dist/index.js", | ||
| "dev": "tsx watch src/index.ts", | ||
| "lint": "tsc --noEmit", | ||
| "version:check": "node scripts/verify-version-alignment.cjs", | ||
| "prepack": "node scripts/prepack-npm-deps.mjs", | ||
| "postpack": "node scripts/postpack-npm-deps.mjs", | ||
| "prepublishOnly": "npm run build && npm test", | ||
| "postinstall": "node scripts/postinstall-windows.cjs" | ||
| }, | ||
| "dependencies": { | ||
| "@mcp-guardian/core": "^3.2.0", | ||
| "@mcp-guardian/plugin-sdk": "^3.2.0", | ||
| "@mcp-guardian/core": "^4.1.1", | ||
| "@mcp-guardian/plugin-sdk": "^4.1.1", | ||
| "@modelcontextprotocol/sdk": "^1.25.2", | ||
@@ -209,3 +104,3 @@ "@opentelemetry/api": "^1.9.1", | ||
| "tsx": "^4.7.0", | ||
| "turbo": "^2.9.12", | ||
| "turbo": "^2.9.14", | ||
| "typescript": "^5.4.0", | ||
@@ -224,5 +119,6 @@ "vitest": "^3.2.4" | ||
| "esbuild": ">=0.25.0", | ||
| "vite": ">=6.4.2" | ||
| "vite": ">=6.4.2", | ||
| "qs": ">=6.15.2" | ||
| } | ||
| } | ||
| } |
+9
-1
@@ -14,4 +14,12 @@ # MCP Guardian | ||
| **Version 4.1.0** · [Website](https://mcp-guardian-cloud.vercel.app) · [npm](https://www.npmjs.com/package/@mcp-guardian/server) · [Changelog](CHANGELOG.md) | ||
| **Version 4.1.1** · [Website](https://mcp-guardian-cloud.vercel.app) · [npm](https://www.npmjs.com/package/@mcp-guardian/server) · [Changelog](CHANGELOG.md) | ||
| ### What's new in 4.1.1 | ||
| **npm install hygiene** — fixes supply-chain scanner findings from 4.1.0: | ||
| - Published tarballs no longer include `postinstall` or other lifecycle scripts | ||
| - `workspace:` dependencies are rewritten to semver (`^4.1.1`) at pack time | ||
| - Publish **all** packages via `./scripts/publish-npm-all.sh` (core → plugin-sdk → server → cli) | ||
| ### What's new in 4.1.0 | ||
@@ -18,0 +26,0 @@ |
+25
-0
@@ -59,2 +59,27 @@ # Security Policy | ||
| ## npm install / supply-chain scanners | ||
| Third-party scanners (Socket, npm audit UI, Snyk) may flag `@mcp-guardian/server` as follows. This is expected for a **network security proxy**: | ||
| | Alert | Why it appears | Mitigation in 4.1.1+ | | ||
| |---|---|---| | ||
| | **Install scripts** | Older tarballs shipped `postinstall` / `prepack` in `package.json` | Lifecycle scripts stripped at `prepack`; no code runs on `npm install` | | ||
| | **Manifest confusion** | 4.1.0 was published with unresolved `workspace:` deps and without `@mcp-guardian/core@4.1.x` | Publish full chain via `./scripts/publish-npm-all.sh`; deps rewritten to `^4.1.1` | | ||
| | **Network access** | Proxy, CVE lookups (OSV/NVD), optional cloud observatory | Required by design — see threat model above | | ||
| | **Shell access** | Policy engine detects shell injection; optional subprocess for MCP stdio servers | Required by design — does not execute on install | | ||
| | **Dependency CVEs** | Transitive deps (e.g. `qs`, `turbo` in dev/build) | `pnpm.overrides` pin patched versions; run `pnpm audit` before release | | ||
| Install only from npm: | ||
| ```bash | ||
| npm install @mcp-guardian/server@latest | ||
| ``` | ||
| Verify tarball before publish (maintainers): | ||
| ```bash | ||
| npm pack --dry-run && tar -xOf mcp-guardian-server-*.tgz package/package.json | jq '.scripts,.dependencies["@mcp-guardian/core"]' | ||
| # Expect: scripts absent or empty; core dep "^4.1.1" not "workspace:..." | ||
| ``` | ||
| ## Supported Versions | ||
@@ -61,0 +86,0 @@ |
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 2 instances
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 3 instances
No tests
QualityPackage does not have any tests. This is a strong signal of a poorly maintained or low quality package.
Unidentified License
LicenseSomething that seems like a license was found, but its contents could not be matched with a known license.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Install scripts
Supply chain riskInstall scripts are run when the package is installed or built. Malicious packages often use scripts that run automatically to execute payloads or fetch additional code.
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 2 instances
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 3 instances
Unidentified License
LicenseSomething that seems like a license was found, but its contents could not be matched with a known license.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
721
1.12%0
-100%3
50%12877969
-0.05%1
Infinity%+ Added
+ Added
Updated