Skip to content

Evidence and reports ​

Produce an evidence-backed report ​

createClientReport requires a registered engagement, client, title, assessment type, summary, and explicit recordIds. Use [] only when no tool evidence should be attached. Select the evidence records for each report deliberately; the server never silently chooses a limited subset. Audit, scope-gate, and report-workflow records cannot be attached as vulnerability evidence. Supply analyst-confirmed findings with severity, impact, remediation, verifier, timestamp, and evidence references. Scanner output remains an observation until a researcher verifies it. A report with an empty findings array explicitly says no analyst-verified vulnerability findings were included.

json
{
  "tool": "createClientReport",
  "arguments": {
    "engagementId": "client-2026-10",
    "client": "Example Client",
    "title": "External Assessment",
    "assessmentType": "External network",
    "summary": "Assessment activity and verified outcomes are summarized below.",
    "recordIds": [],
    "findings": [],
    "recommendations": ["Review the evidence index and validate remediation with a retest."],
    "methodology": "Authorized, scoped enumeration and manual verification.",
    "limitations": ["The example has no attached scan records."]
  }
}

Replace recordIds with IDs from this engagement and add verified findings only after manual review. Each finding can include evidenceRecordIds, externalEvidence, affected assets, reproduction steps, references, CWE, CVSS vector, and retest status. Optional scopeOfWork text adds report context; it does not change executable scope. The report includes scope details from the registered engagement, verified severity counts, a completeness checklist, an evidence index with raw-output SHA-256 hashes, and limitations. Raw scanner output is kept in private evidence records rather than copied into the client-facing Markdown.

listClientReports takes engagementId. getClientReport takes engagementId and reportId, with format set to markdown or json. The Markdown report is also available as the mcp://pentest/clientReport/{reportId} resource.

For an agent-assisted report, call draftAssessmentReport after assessment records exist. Omit profileId for a deterministic evidence inventory or select a configured draft profile for model-written observations. local-agent permits CLI profiles and loopback openai-compatible profiles; approved-provider permits a configured API or CLI profile, including OpenRouter. Both receive bounded scope, plan and evidence summaries and may suggest unverified candidates. Under metadata-only, the model receives structural counts, tool names, evidence IDs and digests without client or plan prose, target names, authorization reference, evidence summaries or observations; candidate vulnerabilities are rejected. publishAgentReport requires a reviewer and explicit verified findings with evidence IDs and never promotes candidates automatically.

Report instruction ​

The versioned prompt is report-evidence-v4 in agent-prompts.ts. It treats all packet strings as untrusted, cites only supplied parent record IDs, forbids invented facts and broad assurance, and requires the writer to distinguish:

  • successful bounded observation;
  • source hypothesis;
  • failed or denied coverage;
  • model inference;
  • candidate requiring analyst verification;
  • analyst-verified finding.

The summary covers exact scope, evidence dates, methods actually exercised, strongest supported observations and material gaps. Recommendations map to evidence or explicit gaps. Limitations cover skipped tools, unavailable identities, denied actions, version mismatch and data-policy omissions. Candidate findings need successful evidence, a specific asset, observed behavior, consequence, preconditions and a verification path.

Released under AGPL-3.0-or-later. Use only within explicit authorization and scope.