{
  "run_id": "finereli--whatsapp-mcp-claude-haiku-5-5-1792785224818035339",
  "checker": {
    "claims": [
      {
        "claim": "The server is read-only and cannot send WhatsApp messages",
        "command": "",
        "evidence": "Needs an OAuth token from /authorize, which only completes after a WhatsApp phone is linked (src/index.ts proceed(): token is returned only when isPaired()). No Cloudflare account and no phone in this guest.",
        "expected": "cannot be checked without an authenticated MCP session",
        "input": "none (no send tool in the MCP tool list; no authenticated call possible here)",
        "kind": "claim",
        "outcome": "Needs an OAuth token from /authorize, which only completes after a WhatsApp phone is linked (src/index.ts proceed(): token is returned only when isPaired()). No Cloudflare account and no phone in this guest.",
        "source": "It can't send anything.",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "blocked"
      },
      {
        "claim": "Setup needs a Cloudflare Workers Paid account, Node 20+, and a phone",
        "command": "",
        "evidence": "Prerequisites missing in this disposable guest: no Cloudflare account, no Workers Paid plan, no phone to scan the WhatsApp QR code. Node 22 was installed and npm install succeeded; the deploy step (npm run deploy / wrangler deploy) was not run.",
        "expected": "deploy and link with a real account and phone",
        "input": "none",
        "kind": "claim",
        "outcome": "Prerequisites missing in this disposable guest: no Cloudflare account, no Workers Paid plan, no phone to scan the WhatsApp QR code. Node 22 was installed and npm install succeeded; the deploy step (npm run deploy / wrangler deploy) was not run.",
        "source": "You need a Cloudflare account on the Workers Paid plan (see the note below), Node 20 or later, and your phone.",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "blocked"
      },
      {
        "claim": "Read tools top up from WhatsApp when the stored copy is older than ten minutes",
        "command": "",
        "evidence": "Needs a linked WhatsApp account and an authenticated MCP session; both require a phone scan and a Cloudflare deployment, neither available here.",
        "expected": "a read tool returns messages after a pull",
        "input": "none",
        "kind": "claim",
        "outcome": "Needs a linked WhatsApp account and an authenticated MCP session; both require a phone scan and a Cloudflare deployment, neither available here.",
        "source": "Every read tool first tops up from WhatsApp if the stored copy is more than ten minutes old.",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "blocked"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Daily pull of WhatsApp messages at 04:00 UTC",
        "command": "",
        "evidence": "Missing prerequisite: the account must be linked to WhatsApp before the cron pulls anything; no Cloudflare deployment and no phone here.",
        "expected": "a daily pull of stored messages",
        "input": "none",
        "kind": "cycle",
        "method": "not run: the scheduled() handler in src/index.ts only pulls when isPaired() is true, and this guest has no paired account; wrangler dev's local scheduled endpoint would be the substitute",
        "outcome": "Missing prerequisite: the account must be linked to WhatsApp before the cron pulls anything; no Cloudflare deployment and no phone here.",
        "schedule": "cron 0 4 * * * (04:00 UTC daily)",
        "source": "wrangler.jsonc",
        "verdict": "blocked"
      }
    ],
    "details": {
      "checks": [
        {
          "check": "credentials_error",
          "details": {
            "argv": [
              "npm",
              "run",
              "dev",
              "--",
              "--port",
              "8787",
              "--ip",
              "127.0.0.1"
            ],
            "credentials_error": "Remote MCP authentication required (HTTP 401)",
            "hosting": "local",
            "kind": "mcp_http",
            "needs_credentials": true,
            "scope": "local MCP initialize + tools/list",
            "transport": "streamable-http",
            "url": "http://127.0.0.1:8787/mcp",
            "working": false
          },
          "optional": false,
          "status": "PASS"
        }
      ],
      "scope": "partial checks",
      "working": false
    },
    "evidence_strength": "nothing_checked",
    "example_checks": [
      {
        "claim": "The repo's own offline test suite passes",
        "command": "npm test",
        "deferred": false,
        "evidence": " comes first\nok   last thing THEY said, not me\nok   unnamed count\nok   save reports saved and which have chats\nok   named chat leaves the unnamed list\nok   new name shows in chat list\nok   sender name used in messages\nok   empty name removes it\nok   group message sender resolves to custom name\nok   toJid(\"+972 52-421-9320\", undefined)\nok   toJid(\"052-421-9320\", 972)\nok   toJid(\"052-421-9320\", undefined)\nok   toJid(\"00972524219320\", undefined)\nok   toJid(\"524219320\", 972)\nok   toJid(\"<email>\", undefined)\nok   toJid(\"abc\", 972)\nok   toJid(\"+1 (818) 917-7834\", 972)\n\nall passed",
        "expected": "all tests pass",
        "input": "none",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "package.json scripts.test",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "diagnosis": null
}
