{
  "checker": {
    "claims": [
      {
        "claim": "README says npm run build builds the TypeScript project",
        "command": "npm run build",
        "evidence": "shx chmod +x dist/*.js\n\n",
        "expected": "TypeScript compiles to dist",
        "input": "npm run build",
        "kind": "claim",
        "outcome": "Real input produced the expected result: shx chmod +x dist/*.js",
        "returncode": 0,
        "source": "- `npm run build`: Build the TypeScript project",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "The server needs a Brave Search API key to run",
        "command": "",
        "evidence": "No Brave Search API key is available in this guest; obtaining one would require credentials, which were not requested. Startup without a key was observed to exit 1 with 'A Brave API key is required' (see probe credentials_error check).",
        "expected": "",
        "input": "",
        "kind": "claim",
        "outcome": "No Brave Search API key is available in this guest; obtaining one would require credentials, which were not requested. Startup without a key was observed to exit 1 with 'A Brave API key is required' (see probe credentials_error check).",
        "source": "- `BRAVE_API_KEY`: Your Brave Search API key (required unless `BRAVE_API_KEY_FILE` is set)",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "blocked"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Entry points inspected: README and package.json scripts (build, test, serve:http, inspector) and src/*.ts for setInterval/cron/schedule/webhook/--once/--now. The only timer is a poll delay (setTimeout pollInterval) inside the summarizer request in src/tools/summarizer/index.ts, which is not a scheduled cycle. The server runs on demand over stdio or HTTP.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Entry points inspected: README and package.json scripts (build, test, serve:http, inspector) and src/*.ts for setInterval/cron/schedule/webhook/--once/--now. The only timer is a poll delay (setTimeout pollInterval) inside the summarizer request in src/tools/summarizer/index.ts, which is not a scheduled cycle. The server runs on demand over stdio or HTTP.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "checks": [
        {
          "check": "install",
          "details": {
            "argv": [
              "npm",
              "run",
              "build"
            ],
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": false,
            "returncode": 0,
            "scope": "partial: install",
            "stderr": "",
            "stdout": "\n> @brave/brave-search-mcp-server@2.1.4 build\n> shx rm -rf dist && tsc && shx chmod +x dist/*.js\n",
            "working": false
          },
          "optional": false,
          "status": "PASS"
        },
        {
          "check": "credentials_error",
          "details": {
            "argv": [
              "node",
              "dist/index.js"
            ],
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": true,
            "returncode": 1,
            "scope": "partial: missing credentials",
            "stderr": "Error: A Brave API key is required via --brave-api-key, BRAVE_API_KEY, --brave-api-key-file, or BRAVE_API_KEY_FILE. You can get one at https://brave.com/search/api/.\nInvalid configuration",
            "stdout": "",
            "working": false
          },
          "optional": false,
          "status": "PASS"
        }
      ],
      "scope": "partial checks",
      "working": false
    },
    "evidence_strength": "partly_checked",
    "example_checks": [
      {
        "claim": "Run the documented test suite",
        "command": "npm test",
        "deferred": false,
        "evidence": "rom a file\n      ---\n      duration_ms: 3.037651\n      type: 'test'\n      ...\n    # Subtest: rejects empty files\n    ok 2 - rejects empty files\n      ---\n      duration_ms: 2.905552\n      type: 'test'\n      ...\n    # Subtest: reports missing files with the path and reason\n    ok 3 - reports missing files with the path and reason\n      ---\n      duration_ms: 0.247068\n      type: 'test'\n      ...\n    1..3\nok 25 - readBraveApiKeyFromFile\n  ---\n  duration_ms: 6.289499\n  type: 'suite'\n  ...\n1..25\n# tests 78\n# suites 26\n# pass 78\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 25363.950692",
        "expected": "78 tests, 0 failures",
        "input": "npm test",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md Development > Available Scripts",
        "verdict": "yes"
      },
      {
        "claim": "Local HTTP serving needs an API key; the documented serve:http script was not run because it requires BRAVE_API_KEY",
        "command": "",
        "deferred": false,
        "evidence": "Brave Search API key is required by the server (BRAVE_API_KEY) and none was available; the documented npm run serve:http and MCP Inspector steps were not run. Startup without a key was checked instead (probe credentials_error).",
        "expected": "documented command completes successfully",
        "input": "",
        "kind": "example",
        "outcome": "Brave Search API key is required by the server (BRAVE_API_KEY) and none was available; the documented npm run serve:http and MCP Inspector steps were not run. Startup without a key was checked instead (probe credentials_error).",
        "source": "README.md Development > Testing via MCP Inspector",
        "verdict": "blocked"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "node/npm were not installed in the guest; installed Node 22.23.4 from the official nodejs.org tarball instead of the README (which gives no installer). Node 22.x is the README-required version.",
    "The Brave Search API key was not available, so the documented tool calls, serve:http, and MCP Inspector steps were not run. Only the missing-key startup error was checked.",
    "git init and fetch of the pin were run because the snapshot had no git metadata."
  ],
  "fault_owner": "prerequisite",
  "main_blocker": "No Brave Search API key is available in this guest; the server refuses to start without one.",
  "operation": "Build the Brave Search MCP server from the README and run its stdio MCP server, then call a search tool (e.g. brave_web_search).",
  "operation_scope": "Pinned commit af08e0d48e812a3966ea2211854db5f0e8eee32d on Ubuntu 24.04 (node 22.23.4, npm 10.9.9). The build and unit tests were run. A real tool call was NOT made because the server requires a Brave Search API key (BRAVE_API_KEY), which is not available in this guest and was not obtained.",
  "outcome": "needs_credentials",
  "plain_failure": "The server builds and its 78 tests pass, but it cannot actually search without a Brave Search API key. That key was not provided, so no search was run and the product's real output was not observed.",
  "steps": [
    "git init; git remote add origin https://github.com/brave/brave-search-mcp-server; git fetch --depth 1 origin af08e0d48e812a3966ea2211854db5f0e8eee32d; git reset --mixed FETCH_HEAD",
    "Installed Node.js 22.23.4 (README requires Node 22.x) from nodejs.org tarball, SHA256 verified against SHASUMS256.txt; linked into /usr/local/bin",
    "npm ci (runs prepare: format + build)",
    "npm run build (README Local Build) - succeeded",
    "npm test (README Development > Available Scripts) - 78 tests, 0 failures",
    "node dist/index.js (README Command Line Options / stdio default) with no API key - exits 1 with 'A Brave API key is required via --brave-api-key, BRAVE_API_KEY, ...'"
  ],
  "stuck_step": "Running the server and calling a tool: node dist/index.js requires BRAVE_API_KEY (or --brave-api-key / BRAVE_API_KEY_FILE).",
  "suggested_fix": "Re-run with a Brave Search API key supplied as BRAVE_API_KEY (or BRAVE_API_KEY_FILE) in the guest, then run probe/claims for a real brave_web_search call. No change to the repository is needed."
}
