{
  "run_id": "snyk--agent-scan-claude-haiku-5-5-1792769781434926661",
  "checker": {
    "claims": [
      {
        "claim": "inspect lists the tools of configured MCP servers without analysis",
        "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": "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",
        "expected": "tool names such as get_current_time are printed",
        "input": "/tmp/scan-work/mcp.json pointing at the demo MCP server",
        "kind": "claim",
        "outcome": "Real input produced the expected result: get_current_time",
        "returncode": 0,
        "source": "Inspect components without analysis",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "the bundled demo MCP server exposes tools that Agent Scan reports",
        "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": "delete_file                \n",
        "expected": "the delete_file tool is listed",
        "input": "/tmp/scan-work/mcp.json pointing at demoserver/server.py",
        "kind": "claim",
        "outcome": "Real input produced the expected result: delete_file",
        "returncode": 0,
        "source": "This repository includes a vulnerable MCP server that demonstrates Model Context Protocol security findings that Agent Scan reports.",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "token-based analysis needs a Snyk API token",
        "command": "",
        "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",
        "expected": "",
        "input": "",
        "kind": "claim",
        "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",
        "source": "Set the token as an environment variable",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "blocked"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "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.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "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.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "checks": [
        {
          "check": "operation",
          "details": {
            "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",
            "needs_browser": false,
            "needs_credentials": false,
            "returncode": 0,
            "scope": "product operation",
            "stderr": "",
            "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]",
            "working": true
          },
          "optional": false,
          "status": "PASS"
        },
        {
          "check": "credentials_error",
          "details": {
            "argv": [
              "<guest-path>",
              "--python",
              "3.13",
              "snyk-agent-scan@latest",
              "scan",
              "/tmp/scan-work/mcp.json",
              "--dangerously-run-mcp-servers",
              "--no-skills"
            ],
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": true,
            "returncode": 1,
            "scope": "partial: missing credentials",
            "stderr": "",
            "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]",
            "working": false
          },
          "optional": false,
          "status": "PASS"
        }
      ],
      "scope": "product operation",
      "working": false
    },
    "evidence_strength": "partly_checked",
    "example_checks": [
      {
        "claim": "inspect without security analysis on a machine with no agent configs",
        "command": "<guest-path> --python 3.13 snyk-agent-scan@latest inspect",
        "deferred": false,
        "evidence": "Snyk Agent Scan v0.6.9\n\nNo MCP client configurations found on this machine.",
        "expected": "reports that no MCP client configurations were found",
        "input": "no arguments",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md Examples: # Inspect without security analysis",
        "verdict": "yes"
      },
      {
        "claim": "inspect the demo MCP server from the README demo config",
        "command": "<guest-path> --python 3.13 snyk-agent-scan@latest inspect /tmp/scan-work/mcp.json --dangerously-run-mcp-servers --suppress-mcpserver-io=true",
        "deferred": false,
        "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",
        "expected": "lists the demo tools including delete_file",
        "input": "demo config at /tmp/scan-work/mcp.json, absolute uv and repo paths",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md Demo: step 2 mcp.json and step 3",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "diagnosis": null
}
