{
  "run_id": "snyk--agent-scan-claude-haiku-5-5-1792769781434926661",
  "date": "2026-10-23T15:40:19.928358+00:00",
  "repo": "snyk/agent-scan",
  "kind": "repo",
  "source": "https://github.com/snyk/agent-scan",
  "commit": "a8c8c5879a008edacb2a50d1a9fe0a40ee91d205",
  "model": "claude-haiku-5-5",
  "model_version": "claude-haiku-5-5",
  "test_version": "readme-bdc1b9b3c0d2673aef87e076d14084a8123ddcf09d520c1ee2e364a37c3f4bb9",
  "pass": null,
  "outcome": "needs_credentials",
  "time_to_working_s": null,
  "total_s": 238.4933888912201,
  "steps": [
    "cd <guest-path> && pwd && ls -la && git status 2>&1 | head -3; id -u; python3 --version; cat /etc/os-release | head -2; ls /inputs 2>&1",
    "cd <guest-path> && cat README.md 2>/dev/null | head -300",
    "cd <guest-path> && sed -n 300,400p README.md; echo ----; cat .python-version; echo ----; grep -n -i \"install\\|uv \\|pip\" CONTRIBUTING.md Makefile | head -40; ls .coldpass; which uv uvx curl; env | grep -i -E \"proxy|snyk\" | sed 's/=.*/=<set>/'",
    "cd <guest-path> && git init -q && git remote add origin https://github.com/snyk/agent-scan && git fetch --depth 1 origin a8c8c5879a008edacb2a50d1a9fe0a40ee91d205 2>&1 | tail -3; git reset --mixed FETCH_HEAD 2>&1 | tail -2; git log --oneline -1 2>&1; git status --short | head -5",
    "curl -LsSf https://astral.sh/uv/install.sh -o /tmp/uv-install.sh 2>&1; echo rc=$?; ls -la /tmp/uv-install.sh 2>&1; (env NODE_USE_ENV_PROXY=1 sh /tmp/uv-install.sh 2>&1 | tail -5); echo rc=$?; ls ~/.local/bin 2>/dev/null",
    "cd /tmp && export PATH=$HOME/.local/bin:$PATH && uv --version && uvx --python 3.13 snyk-agent-scan@0.6.0 --version 2>&1 | tail -5; echo rc=$?; uvx --python 3.13 snyk-agent-scan@latest --help 2>&1 | head -60",
    "cd <guest-path> && ls demoserver && sed -n 1,80p demoserver/server.py | head -80; echo ----; grep -n \"dependencies\" -A12 pyproject.toml | head -30; echo; ls docs help | head; cat .coldpass/* 2>/dev/null | head -5; ls -la .coldpass",
    "mkdir -p /tmp/scan-work && cat > /tmp/scan-work/mcp.json <<'EOF'\n{\n  \"mcpServers\": {\n    \"Demo MCP Server\": {\n      \"type\": \"stdio\",\n      \"command\": \"<host-path>\",\n      \"args\": [\"run\", \"--directory\", \"<guest-path>\", \"mcp\", \"run\", \"demoserver/server.py\"]\n    }\n  }\n}\nEOF\ncd /tmp && export PATH=$HOME/.local/bin:$PATH; echo HOME=$HOME; ls -la <host-path> 2>&1; timeout 600 uvx --python 3.13 snyk-agent-scan@latest inspect /tmp/scan-work/mcp.json --dangerously-run-mcp-servers --print-errors 2>&1 | tail -60; echo rc=${PIPESTATUS[0]}",
    "cd /tmp && export PATH=$HOME/.local/bin:$PATH; U=$(command -v uv); echo $U; sed -i \"s#<host-path>\" /tmp/scan-work/mcp.json && cat /tmp/scan-work/mcp.json && timeout 900 uvx --python 3.13 snyk-agent-scan@latest inspect /tmp/scan-work/mcp.json --dangerously-run-mcp-servers --suppress-mcpserver-io=true 2>&1 | tail -80; echo rc=${PIPESTATUS[0]}",
    "cd /tmp && export PATH=$HOME/.local/bin:$PATH; env -u SNYK_TOKEN timeout 900 uvx --python 3.13 snyk-agent-scan@latest scan /tmp/scan-work/mcp.json --dangerously-run-mcp-servers --suppress-mcpserver-io=true --no-skills 2>&1 | tail -30; echo rc=${PIPESTATUS[0]}",
    "ls -la <guest-path> 2>&1; ls <guest-path>; cd <guest-path> && grep -rn -i \"interval\\|cron\\|schedul\\|while True\\|--once\\|--now\\|background\" src --include=*.py | grep -v test | head -30; echo ---; grep -n \"^def \\|add_argument(\\\"--\" src/agent_scan/run.py | head -60",
    "cd <guest-path> && grep -n \"expected_returncode\\|credentials_error\\|\\\"checks\\\"\\|'checks'\\|testable\\|\\\"reason\\\"\\|deferred\\|stays_running\\|expected_file\" check.py | head -60; grep -n \"def main\\|argparse\\|add_argument\" check.py | head",
    "cd <guest-path> && sed -n 696,712p check.py; sed -n 1128,1140p check.py; sed -n 1273,1300p check.py",
    "cd /tmp && U=<guest-path>; timeout 900 $U --python 3.13 snyk-agent-scan@latest inspect </dev/null 2>&1 | tail -15; echo rc=${PIPESTATUS[0]}; cd <guest-path> && grep -c \"Inspect components without analysis\" README.md; grep -n \"This repository includes a vulnerable MCP server that demonstrates Model Context Protocol security findings that Agent Scan reports.\" README.md | cut -c1-20; grep -n \"snyk-agent-scan inspect \\[CONFIG_FILE...\\]    Inspect components without analysis\" README.md | cut -c1-30",
    "cd <guest-path> && U=<guest-path> && cat > probe.json <<EOF\n{\"checks\":[\n {\"check\":\"operation\",\"kind\":\"cli\",\"argv\":[\"$U\",\"--python\",\"3.13\",\"snyk-agent-scan@latest\",\"inspect\",\"/tmp/scan-work/mcp.json\",\"--dangerously-run-mcp-servers\",\"--suppress-mcpserver-io=true\"],\"cwd\":\"/tmp\",\"expected_text\":\"get_current_time\"},\n {\"check\":\"credentials_error\",\"kind\":\"cli\",\"argv\":[\"$U\",\"--python\",\"3.13\",\"snyk-agent-scan@latest\",\"scan\",\"/tmp/scan-work/mcp.json\",\"--dangerously-run-mcp-servers\",\"--no-skills\"],\"cwd\":\"/tmp\",\"expected_returncode\":1}\n]}\nEOF\ncat > claims.json <<EOF\n[\n {\"kind\":\"claim\",\"claim\":\"inspect lists the tools of configured MCP servers without analysis\",\"source\":\"Inspect components without analysis\",\"input\":\"/tmp/scan-work/mcp.json pointing at the demo MCP server\",\"expected\":\"tool names such as get_current_time are printed\",\"probe_kind\":\"cli\",\"argv\":[\"$U\",\"--python\",\"3.13\",\"snyk-agent-scan@latest\",\"inspect\",\"/tmp/scan-work/mcp.json\",\"--dangerously-run-mcp-servers\",\"--suppress-mcpserver-io=true\"],\"cwd\":\"/tmp\",\"expected_text\":\"get_current_time\"},\n {\"kind\":\"claim\",\"claim\":\"the bundled demo MCP server exposes tools that Agent Scan reports\",\"source\":\"This repository includes a vulnerable MCP server that demonstrates Model Context Protocol security findings that Agent Scan reports.\",\"input\":\"/tmp/scan-work/mcp.json pointing at demoserver/server.py\",\"expected\":\"the delete_file tool is listed\",\"probe_kind\":\"cli\",\"argv\":[\"$U\",\"--python\",\"3.13\",\"snyk-agent-scan@latest\",\"inspect\",\"/tmp/scan-work/mcp.json\",\"--dangerously-run-mcp-servers\",\"--suppress-mcpserver-io=true\"],\"cwd\":\"/tmp\",\"expected_text\":\"delete_file\"},\n {\"kind\":\"claim\",\"claim\":\"token-based analysis needs a Snyk API token\",\"source\":\"Set the token as an environment variable\",\"testable\":false,\"reason\":\"scan needs SNYK_TOKEN from a Snyk account (app.snyk.io); no credential is available in this guest. Scan without the token was run and exits 1 asking for SNYK_TOKEN; see probe.json credentials_error check\"}\n]\nEOF\ncat > examples.json <<EOF\n[\n {\"kind\":\"example\",\"claim\":\"inspect without security analysis on a machine with no agent configs\",\"source\":\"README.md Examples: # Inspect without security analysis\",\"input\":\"no arguments\",\"expected\":\"reports that no MCP client configurations were found\",\"argv\":[\"$U\",\"--python\",\"3.13\",\"snyk-agent-scan@latest\",\"inspect\"],\"cwd\":\"/tmp\",\"stdin\":\"\",\"expected_text\":\"No MCP client configurations found on this machine.\"},\n {\"kind\":\"example\",\"claim\":\"inspect the demo MCP server from the README demo config\",\"source\":\"README.md Demo: step 2 mcp.json and step 3\",\"input\":\"demo config at /tmp/scan-work/mcp.json, absolute uv and repo paths\",\"expected\":\"lists the demo tools including delete_file\",\"argv\":[\"$U\",\"--python\",\"3.13\",\"snyk-agent-scan@latest\",\"inspect\",\"/tmp/scan-work/mcp.json\",\"--dangerously-run-mcp-servers\",\"--suppress-mcpserver-io=true\"],\"cwd\":\"/tmp\",\"stdin\":\"\",\"expected_text\":\"delete_file\"}\n]\nEOF\ncat > cycles.json <<'EOF'\n{\"detected\":false,\"reason\":\"Entry points inspected: src/agent_scan/run.py and cli.py are one-shot commands (scan, inspect, help, evo, guard). The only loop-like code is in traffic_capture.py and agents/base.py, which are not schedulers. README 'Background Mode (MDM)' scans on a schedule but reports to an external Snyk Evo service that is not in this repository and needs a Snyk account; no local cron, --once, or --now trigger exists in the product. Nothing was run as a cycle.\",\"checks\":[]}\nEOF\nfor f in probe claims examples cycles; do python3 -m json.tool $f.json >/dev/null && echo \"$f ok\"; done; cd <guest-path> && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | python3 -m json.tool | head -150",
    "pgrep -fa \"demoserver|snyk-agent-scan|mcp run\" || echo \"no leftover processes\"; mkdir -p <guest-path> && cat > <guest-path> <<'EOF'\n{\"outcome\":\"needs_credentials\",\n \"fault_owner\":\"prerequisite\",\n \"operation\":\"Snyk Agent Scan CLI (snyk-agent-scan v0.6.9 from PyPI): inspect the demo MCP server's tools, and scan MCP configs for risks\",\n \"operation_scope\":\"Working without a Snyk account: the inspect command lists the tools of the bundled demo MCP server. The full scan (risk analysis through the Snyk API) needs a SNYK_TOKEN from app.snyk.io, which was not available in this guest. Background Mode (Snyk Evo) is outside this repository.\",\n \"steps\":[\n  \"git init; git remote add origin https://github.com/snyk/agent-scan; git fetch --depth 1 origin a8c8c5879a008edacb2a50d1a9fe0a40ee91d205; git reset --mixed FETCH_HEAD\",\n  \"curl -LsSf https://astral.sh/uv/install.sh -o /tmp/uv-install.sh; env NODE_USE_ENV_PROXY=1 sh /tmp/uv-install.sh (uv 0.13.5 installed to <guest-path>)\",\n  \"uvx --python 3.13 snyk-agent-scan@latest inspect /tmp/scan-work/mcp.json --dangerously-run-mcp-servers --suppress-mcpserver-io=true (run from /tmp; lists 7 demo tools)\",\n  \"uvx --python 3.13 snyk-agent-scan@latest inspect (README Examples; reports no MCP configs on this machine)\",\n  \"uvx --python 3.13 snyk-agent-scan@latest scan /tmp/scan-work/mcp.json --dangerously-run-mcp-servers --no-skills (exit 1: needs SNYK_TOKEN)\"],\n \"deviations\":[\n  \"Guest python3 is 3.12.3; README requires Python 3.13 for uvx. Installed uv and let uvx fetch Python 3.13 (uvx --python 3.13). System Python was not changed.\",\n  \"uv was installed by downloading the astral.sh installer to a file and running it, instead of piping curl into sh.\",\n  \"README demo config runs `uv run mcp run demoserver/server.py` relative to the repo root. The config lives in /tmp/scan-work (outside the checkout), so it uses an absolute uv path and `uv run --directory <guest-path>\",\n  \"Probes run with cwd /tmp instead of the checkout, because snyk-agent-scan is a published package (same rule as npx).\",\n  \"The full `scan` needs SNYK_TOKEN, which is not provided. Recorded as a credentials_error check in probe.json and as a blocked claim. `--dangerously-run-mcp-servers` was used only on the bundled demo server in this disposable guest.\",\n  \"Demo server writes /tmp/.small-mcp-server as a side effect (product source behavior).\"],\n \"stuck_step\":\"uvx --python 3.13 snyk-agent-scan@latest scan ... (requires SNYK_TOKEN)\",\n \"main_blocker\":\"The scan command needs a Snyk API token (SNYK_TOKEN). No token is available in this guest.\",\n \"plain_failure\":\"The tool runs and can list the tools of an MCP server without a login. The actual security scan will not run without a Snyk account token, and the tool asks for one and exits with an error.\",\n \"suggested_fix\":\"Provide a SNYK_TOKEN from a Snyk account to test the full scan. The inspect path already works and was verified with the bundled demo server.\"}\nEOF\npython3 -m json.tool <guest-path> >/dev/null && echo report ok; cd <guest-path> && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | python3 -c \"import json,sys; d=json.load(sys.stdin); print('valid',d['valid'],'problems',d['problems'],'replay',d['replay']['status'])\""
  ],
  "stuck_step": "uvx --python 3.13 snyk-agent-scan@latest scan ... (requires SNYK_TOKEN)",
  "error_excerpt": "The scan command needs a Snyk API token (SNYK_TOKEN). No token is available in this guest.",
  "what_it_did": "Snyk Agent Scan CLI (snyk-agent-scan v0.6.9 from PyPI): inspect the demo MCP server's tools, and scan MCP configs for risks",
  "suggested_fix": "Provide a SNYK_TOKEN from a Snyk account to test the full scan. The inspect path already works and was verified with the bundled demo server.",
  "tokens_in": 441021,
  "tokens_out": 16736,
  "cost_usd": 0.023754550000000003,
  "usage_complete": true,
  "checks": [
    {
      "status": "PASS",
      "details": {
        "working": true,
        "argv": [
          "<guest-path>",
          "--python",
          "3.13",
          "snyk-agent-scan@latest",
          "inspect",
          "/tmp/scan-work/mcp.json",
          "--dangerously-run-mcp-servers",
          "--suppress-mcpserver-io=true"
        ],
        "kind": "cli",
        "returncode": 0,
        "stdout": "Snyk Agent Scan v0.6.9\n\n--dangerously-run-mcp-servers is set: contacting every MCP server listed in the \nscanned configs without prompting. This starts stdio subprocesses and connects \nto remote URLs.\n\n\u25cf Scanning /tmp/scan-work/mcp.json found 1 mcp server\n\u2502\n\u2514\u2500\u2500 Demo MCP Server\n    \u251c\u2500\u2500 tool        get_current_time           \n    \u251c\u2500\u2500 tool        sum                        \n    \u251c\u2500\u2500 tool        multiply                   \n[excerpt truncated]",
        "stderr": "",
        "needs_credentials": false,
        "needs_browser": false,
        "scope": "product operation"
      },
      "check": "operation",
      "optional": false
    },
    {
      "status": "PASS",
      "details": {
        "working": false,
        "argv": [
          "<guest-path>",
          "--python",
          "3.13",
          "snyk-agent-scan@latest",
          "scan",
          "/tmp/scan-work/mcp.json",
          "--dangerously-run-mcp-servers",
          "--no-skills"
        ],
        "kind": "cli",
        "returncode": 1,
        "stdout": "Snyk Agent Scan v0.6.9\n\n--dangerously-run-mcp-servers is set: contacting every MCP server listed in the \nscanned configs without prompting. This starts stdio subprocesses and connects \nto remote URLs.\nTip: set --suppress-mcpserver-io=true to hide server stderr output.\n\n[Demo MCP Server] [10/23/26 15:39:56] INFO     Processing request of type       \nserver.py:733\n[Demo MCP Server]                              ListPromptsRequest               \n[Demo MCP Server]                     INFO     Processing request of type       \nserver.py:733\n[excerpt truncated]",
        "stderr": "",
        "needs_credentials": true,
        "needs_browser": false,
        "scope": "partial: missing credentials"
      },
      "check": "credentials_error",
      "optional": false
    }
  ],
  "safety": {
    "version": "z2x-1",
    "rules_version": "z2x-1",
    "summary": "Review signals: 91 known vulnerability. 5 static matches retained as context.",
    "findings": [
      {
        "kind": "known-vulnerability",
        "count": 91,
        "note": "OSV reports a known vulnerability in this dependency version.",
        "location_count": 5
      }
    ],
    "context": [
      {
        "kind": "hardcoded-secret",
        "count": 5,
        "note": "Gitleaks found a possible hardcoded secret; value withheld.",
        "location_count": 3
      }
    ],
    "limitations": [
      "A short run cannot establish that code is safe.",
      "Connections show IP addresses; proxies can hide the final hostname.",
      "Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing."
    ],
    "static": {
      "dependency_note": "OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check."
    },
    "evidence_url": "/safety/?run=snyk--agent-scan-claude-haiku-5-5-1792769781434926661",
    "evidence_file": "/data/safety/snyk--agent-scan-claude-haiku-5-5-1792769781434926661.json.gz"
  },
  "agent_execution": "native_agent",
  "agent_runtime": "claude-code",
  "agent_runtime_version": "2.1.300 (Claude Code)",
  "tool_transport": "mcp-assigned-vm",
  "platform": "linux",
  "reasoning": "low",
  "service_tier": null,
  "resources": {
    "cpus": 2,
    "memory_mib": 4096,
    "disk_mib": 32768
  },
  "native_tool_calls": 16,
  "native_bundle": null,
  "architecture": null,
  "backend": "hyperv",
  "platform_details": {
    "backend": "hyperv",
    "os": "linux"
  },
  "platform_conflicts": null,
  "sandbox_source": null,
  "source_pin": {
    "commit": "a8c8c5879a008edacb2a50d1a9fe0a40ee91d205",
    "url": "https://github.com/snyk/agent-scan"
  },
  "purpose": "initial",
  "profile": {
    "model": "claude-haiku-5-5",
    "reasoning": "low"
  },
  "fault": {
    "owner": "prerequisite",
    "status": "diagnosed",
    "reason": "The scan command needs a Snyk API token (SNYK_TOKEN). No token is available in this guest."
  },
  "fix_id": null,
  "verifies_run_id": null,
  "hosting": null,
  "operation_scope": "product operation",
  "tool_calls": 16,
  "guest_setup": null,
  "runtime": null,
  "runtime_version": null,
  "runtime_revision": null,
  "source_revision": null,
  "evidence_version": null,
  "failure_origin": null,
  "evidence_strength": "partly_checked",
  "works": "partly",
  "install_s": null,
  "first_use_s": null,
  "mcp": "none",
  "needs": [
    "credentials"
  ],
  "needs_which": "SNYK_TOKEN",
  "agent_interface": [],
  "license": "Apache-2.0",
  "repo_url": "https://github.com/snyk/agent-scan",
  "cost_to_try": "needs an account or key",
  "hardware": null,
  "what_failed": "The scan command needs a Snyk API token (SNYK_TOKEN).",
  "local_or_hosted": "both",
  "cycle_checks": [
    {
      "kind": "cycle",
      "claim": "Scheduled or looping main behavior",
      "source": "repository entry points",
      "input": "source inspection",
      "expected": "identify the product trigger",
      "verdict": "yes",
      "outcome": "Entry points inspected: src/agent_scan/run.py and cli.py are one-shot commands (scan, inspect, help, evo, guard). The only loop-like code is in traffic_capture.py and agents/base.py, which are not schedulers. README 'Background Mode (MDM)' scans on a schedule but reports to an external Snyk Evo service that is not in this repository and needs a Snyk account; no local cron, --once, or --now trigger exists in the product. Nothing was run as a cycle.",
      "evidence": "Entry points inspected: src/agent_scan/run.py and cli.py are one-shot commands (scan, inspect, help, evo, guard). The only loop-like code is in traffic_capture.py and agents/base.py, which are not schedulers. README 'Background Mode (MDM)' scans on a schedule but reports to an external Snyk Evo service that is not in this repository and needs a Snyk account; no local cron, --once, or --now trigger exists in the product. Nothing was run as a cycle.",
      "command": ""
    }
  ],
  "claims": [
    {
      "kind": "claim",
      "claim": "inspect lists the tools of configured MCP servers without analysis",
      "source": "Inspect components without analysis",
      "input": "/tmp/scan-work/mcp.json pointing at the demo MCP server",
      "expected": "tool names such as get_current_time are printed",
      "command": "<guest-path> --python 3.13 snyk-agent-scan@latest inspect /tmp/scan-work/mcp.json --dangerously-run-mcp-servers --suppress-mcpserver-io=true",
      "verdict": "yes",
      "outcome": "Real input produced the expected result: get_current_time",
      "evidence": "get_current_time           \n    \u251c\u2500\u2500 tool        sum                        \n    \u251c\u2500\u2500 tool        multiply                   \n    \u251c\u2500\u2500 tool        get_comments               \n    \u251c\u2500\u2500 tool        get_api_key                \n    \u251c\u2500\u2500 tool        send_email                 \n    \u2514\u2500\u2500 tool        delete_file                \n",
      "returncode": 0,
      "source_checked": true,
      "source_file": "README.md"
    },
    {
      "kind": "claim",
      "claim": "the bundled demo MCP server exposes tools that Agent Scan reports",
      "source": "This repository includes a vulnerable MCP server that demonstrates Model Context Protocol security findings that Agent Scan reports.",
      "input": "/tmp/scan-work/mcp.json pointing at demoserver/server.py",
      "expected": "the delete_file tool is listed",
      "command": "<guest-path> --python 3.13 snyk-agent-scan@latest inspect /tmp/scan-work/mcp.json --dangerously-run-mcp-servers --suppress-mcpserver-io=true",
      "verdict": "yes",
      "outcome": "Real input produced the expected result: delete_file",
      "evidence": "delete_file                \n",
      "returncode": 0,
      "source_checked": true,
      "source_file": "README.md"
    },
    {
      "kind": "claim",
      "claim": "token-based analysis needs a Snyk API token",
      "source": "Set the token as an environment variable",
      "input": "",
      "expected": "",
      "command": "",
      "verdict": "blocked",
      "outcome": "scan needs SNYK_TOKEN from a Snyk account (app.snyk.io); no credential is available in this guest. Scan without the token was run and exits 1 asking for SNYK_TOKEN; see probe.json credentials_error check",
      "evidence": "scan needs SNYK_TOKEN from a Snyk account (app.snyk.io); no credential is available in this guest. Scan without the token was run and exits 1 asking for SNYK_TOKEN; see probe.json credentials_error check",
      "source_checked": true,
      "source_file": "README.md"
    }
  ],
  "claims_note": null,
  "example_checks": [
    {
      "kind": "example",
      "claim": "inspect without security analysis on a machine with no agent configs",
      "source": "README.md Examples: # Inspect without security analysis",
      "input": "no arguments",
      "command": "<guest-path> --python 3.13 snyk-agent-scan@latest inspect",
      "evidence": "Snyk Agent Scan v0.6.9\n\nNo MCP client configurations found on this machine.",
      "deferred": false,
      "expected": "reports that no MCP client configurations were found",
      "returncode": 0,
      "verdict": "yes",
      "outcome": "command completed successfully"
    },
    {
      "kind": "example",
      "claim": "inspect the demo MCP server from the README demo config",
      "source": "README.md Demo: step 2 mcp.json and step 3",
      "input": "demo config at /tmp/scan-work/mcp.json, absolute uv and repo paths",
      "command": "<guest-path> --python 3.13 snyk-agent-scan@latest inspect /tmp/scan-work/mcp.json --dangerously-run-mcp-servers --suppress-mcpserver-io=true",
      "evidence": "Snyk Agent Scan v0.6.9\n\n--dangerously-run-mcp-servers is set: contacting every MCP server listed in the \nscanned configs without prompting. This starts stdio subprocesses and connects \nto remote URLs.\n\n\u25cf Scanning /tmp/scan-work/mcp.json found 1 mcp server\n\u2502\n\u2514\u2500\u2500 Demo MCP Server\n    \u251c\u2500\u2500 tool        get_current_time           \n    \u251c\u2500\u2500 tool        sum                        \n    \u251c\u2500\u2500 tool        multiply                   \n    \u251c\u2500\u2500 tool        get_comments               \n    \u251c\u2500\u2500 tool        get_api_key                \n    \u251c\u2500\u2500 tool        send_email                 \n    \u2514\u2500\u2500 tool        delete_file",
      "deferred": false,
      "expected": "lists the demo tools including delete_file",
      "returncode": 0,
      "verdict": "yes",
      "outcome": "command completed successfully"
    }
  ],
  "does_what_it_says": "partly",
  "maintenance": {
    "last_commit_at": "2026-10-22T14:57:22Z",
    "commits_90d": 119,
    "merged_prs_90d": 74,
    "open_issues": 12,
    "open_prs": 13,
    "reply_share": 0.12,
    "reply_threads": 34,
    "median_reply_hours": 12.4,
    "last_release_at": "2026-10-20T12:04:30Z",
    "archived": false,
    "verdict": "maintained",
    "note": "actively maintained: last commit 1 days ago; 119 commits and 74 merged PRs in 90 days; 12 open issues, 13 open PRs; 4 of 34 recent threads got a maintainer reply, median first reply 12.4h; latest release 2026-10-20"
  },
  "maintenance_verdict": "maintained",
  "maintenance_note": "actively maintained: last commit 1 days ago; 119 commits and 74 merged PRs in 90 days; 12 open issues, 13 open PRs; 4 of 34 recent threads got a maintainer reply, median first reply 12.4h; latest release 2026-10-20",
  "maintained": "active",
  "maintained_note": "last commit 0 days ago; 5 open issues, 1 answered or closed",
  "last_commit_at": "2026-10-23T12:34:06Z",
  "last_release_at": "2026-10-20T12:04:30Z",
  "open_issues": 5,
  "answered_issues": 1,
  "platforms_claimed": [
    "linux",
    "mac",
    "windows"
  ],
  "topic": "mcp-server",
  "agent_interfaces": [
    {
      "interface": "mcp",
      "evidence": "README metadata",
      "observed": false,
      "operation_checked": false
    },
    {
      "interface": "cli",
      "evidence": "independent checker",
      "observed": true,
      "operation_checked": true
    }
  ],
  "agent_interfaces_note": "README metadata is a discovery hint, not pinned documentation proof. Observed interfaces were exercised in this run. An empty list means unknown.",
  "mcp_context": null,
  "tested_at": "2026-10-23T15:40:19.928358+00:00",
  "tested_commit": "a8c8c5879a008edacb2a50d1a9fe0a40ee91d205",
  "tested_with": {
    "agent": "claude-code",
    "agent_version": "2.1.300 (Claude Code)",
    "model": "claude-haiku-5-5",
    "model_route": "claude-haiku-5-5",
    "reasoning": "low",
    "os": "linux",
    "backend": "hyperv",
    "transport": "mcp-assigned-vm"
  },
  "setup_identity": {
    "repo": "snyk/agent-scan",
    "source": "https://github.com/snyk/agent-scan",
    "commit": "a8c8c5879a008edacb2a50d1a9fe0a40ee91d205",
    "source_revision": null,
    "os": "linux",
    "architecture": null,
    "backend": "hyperv",
    "model": "claude-haiku-5-5",
    "model_version": "claude-haiku-5-5",
    "agent_execution": "native_agent",
    "agent_runtime": "claude-code",
    "agent_runtime_version": "2.1.300 (Claude Code)",
    "tool_transport": "mcp-assigned-vm",
    "runtime": null,
    "runtime_version": null,
    "runtime_revision": null,
    "sandbox_source": null,
    "guest_setup": null,
    "source_pin": {
      "commit": "a8c8c5879a008edacb2a50d1a9fe0a40ee91d205",
      "url": "https://github.com/snyk/agent-scan"
    },
    "platform_details": {
      "os": "linux",
      "backend": "hyperv"
    },
    "platform_conflicts": null,
    "reasoning": "low",
    "service_tier": null,
    "resources": {
      "cpus": 2,
      "memory_mib": 4096,
      "disk_mib": 32768
    },
    "operation": "Snyk Agent Scan CLI (snyk-agent-scan v0.6.9 from PyPI): inspect the demo MCP server's tools, and scan MCP configs for risks",
    "operation_scope": "product operation",
    "hosting": null,
    "kind": "repo",
    "test_version": "readme-bdc1b9b3c0d2673aef87e076d14084a8123ddcf09d520c1ee2e364a37c3f4bb9",
    "evidence_version": null
  },
  "other_model": null,
  "other_run_id": null,
  "models_agree": null,
  "furthest_model": null,
  "transcript_url": null,
  "report_url": "/reports/snyk--agent-scan-claude-haiku-5-5-1792769781434926661.json"
}
