Migration guide
October 2026 development update
This section describes the current working-tree behavior. It supersedes the historical 0.9.0 notes below.
- Upgrade to Node.js 22.19.0 or newer and run
npm ci. The MCP SDK and bundled Inspector have been updated;node-nmapis no longer a dependency. - Use stdio for a local MCP client. Legacy
MCP_TRANSPORT=sseis removed. Streamable HTTP binds to loopback by default. Public binding requires bearer verification, an issuer, audience, exact origin list, and HTTPS public URL. - Give authenticated HTTP tokens
read,write, orexecutescopes for the operations they need. Map provider-specific names withMCP_AUTH_READ_SCOPE,MCP_AUTH_WRITE_SCOPE, andMCP_AUTH_EXECUTE_SCOPE.MCP_AUTH_SCOPESis ignored. Remote scanner calls also requireMCP_REMOTE_EXECUTION_ENABLED=trueon a dedicated deployment. - Create an engagement with its signed authorization reference, allowed and excluded targets, and authorization time window. Active tools require that engagement ID. Existing calls without it will fail schema validation.
- Supply
recordIdsexplicitly tocreateClientReport, including[]when no scanner evidence is attached. ExistingscopeModeand elicitation arguments are removed; executable scope comes from the engagement record. - Set
MCP_NUCLEI_TEMPLATES_DIRto an absolute reviewed, signed HTTP template directory before using Nuclei. Caller-selected template paths are disabled. The optionaldocker-compose.nuclei.ymlmounts a host template directory read-only. Docker Compose defaults to local stdio; HTTP and Linux packet capture use explicit profiles. - Set
PENTEST_DATA_DIRto a private persistent directory and migrate any records you need from older logs manually. The new evidence and report files have a different format and do not import legacy scan journals. - Remove all client calls to
setMode. There is one researcher workflow and all MCP actions are logged. The package is licensed AGPL-3.0-or-later. - For managed assessment, save an assessment plan with exact
allowedToolNames, then configure a privatePENTEST_AGENT_PROFILES_FILE. Localcodex execandclaude -pprofiles need dedicated home, work, and MCP data directories but no hosted API key. Container Codex adds a pinned image and bridge root. API profiles are report-only. - Use
modelDataPolicy: "local-agent"when engagement data must stay in a local CLI process. Useapproved-provideronly when that provider and the client-work route are approved. Daybreak access is optional. - After an interrupted managed run, the durable start receipt blocks replay. Confirm that the former model process stopped, then call
reconcileAgentAssessmentwith its run ID, reviewer, and rationale. This closes the former worker scope when its private directory is available. - Replace packaged fixture receipts with
scripts/run-real-acceptance.mjs. The verifier has no default target or authorization and writes evidence only to the explicitly selected private data directory.
Historical migration: 0.8.x -> 0.9.0
Summary
Version 0.9.0 hardens tool resolution, expands full workflow coverage, and reduces report/admin overhead.
Breaking / Notable Changes
- Node.js baseline is now
>=22.7.5(required for bundled latest MCP Inspector) - Streamable HTTP (
MCP_TRANSPORT=http) is the recommended network mode - SSE remains supported but deprecated
- Auth config moved to
MCP_AUTH_*+MCP_OIDC_*variables - New tools added:
trafficCapture,hydraBruteforce,privEscAudit,extractionSweep - New report-admin tools:
listEngagementRecords,getEngagementRecord createClientReportnow supports SoW capture through MCP elicitation (scopeMode=ask) with automatic template fallbackhttpxresolution is hardened:- prefers
httpx-toolkit - validates fallback
httpxis ProjectDiscovery-compatible - rejects Python HTTPX CLI collisions
- prefers
- Bundled inspector launcher added:
pentest-mcp inspector
Environment Variable Migration
Preferred (new)
MCP_AUTH_ENABLEDMCP_AUTH_MODE(currentlybearer)MCP_AUTH_SCOPESMCP_AUTH_AUDIENCEMCP_OIDC_ISSUERMCP_OIDC_JWKS_URLMCP_OIDC_INTROSPECTION_URL
Legacy aliases (temporary)
MCP_OAUTH_ENABLED->MCP_AUTH_ENABLEDMCP_OAUTH_PROVIDER_URL->MCP_OIDC_ISSUERMCP_OAUTH_SCOPES->MCP_AUTH_SCOPES
Transport Migration
Recommended
bash
MCP_TRANSPORT=http npm startLegacy compatibility
bash
MCP_TRANSPORT=sse npm startSSE mode now emits deprecation warnings and should be phased out.
Docker Migration
No compose profile names changed. Existing profiles still work:
bash
docker-compose --profile stdio up
docker-compose --profile http up
docker-compose --profile sse upDocker image now includes hydra, sqlmap, tcpdump, and an httpx-toolkit alias to ProjectDiscovery httpx.
Inspector Migration
Instead of installing Inspector separately:
bash
pentest-mcp inspectorYou can pass Inspector flags directly:
bash
pentest-mcp inspector --helpValidation Checklist
- Confirm Node runtime is 22.7.5+.
- Run
npm installandnpm run build. - Start in
httpmode and verify/health. - Test one recon tool (
httpxProbe) and one workflow tool (hydraBruteforceorextractionSweep). - Run
pentest-mcp inspectorand confirm Inspector comes up without separate install. - If auth is enabled, verify both missing-token and valid-token paths.