{
  "checker": {
    "claims": [
      {
        "claim": "get_capabilities lists all tools for the full list of 20 tools",
        "command": "<guest-path> <guest-path> tools/call {\"tool\": \"get_capabilities\", \"arguments\": {}}",
        "evidence": "list_properties: List all GSC sites/properties you have access to (start here)\\n  - get_site_details: Get verification and ownership details for a site\\n\\nAnalytics & Reporting:\\n  - get_search_analytics: Top queries and pages with clicks, impressions, CTR, position\\n  - get_performance_overview: Summary of site performance for a time period\\n  - compare_search_periods: Compare performance between two time periods\\n  - get_search_by_page_query: Search terms driving traffic to a specific page\\n  - get_advanced_search_analytics: Advanced filtering by country, device, query, page\\n\\nURL Inspectio",
        "expected": "tool list including list_properties",
        "input": "{\"tool\": \"get_capabilities\", \"arguments\": {}}",
        "kind": "claim",
        "outcome": "Real input produced the expected result: list_properties: List all GSC sites/properties you have access to",
        "source": "*Ask your AI assistant to \"call get_capabilities\" for the full list of all 20 tools.*",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Entry points inspected (gsc_server.py main(), README, CLAUDE.md, pyproject.toml scripts). The server is a request-driven MCP stdio/SSE server with no scheduler, cron, loop, --once or webhook trigger; it only runs when an MCP client calls a tool.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Entry points inspected (gsc_server.py main(), README, CLAUDE.md, pyproject.toml scripts). The server is a request-driven MCP stdio/SSE server with no scheduler, cron, loop, --once or webhook trigger; it only runs when an MCP client calls a tool.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "<guest-path>",
        "<guest-path>"
      ],
      "kind": "mcp",
      "scope": "product operation",
      "serverInfo": {
        "name": "gsc-server",
        "version": "1.30.0"
      },
      "tool_result": {
        "content": [
          {
            "text": "Google Search Console MCP Server\n\nAUTH STATUS:\n\u274c Not authenticated \u2014 call the 'reauthenticate' tool first to open a browser login window.\nDetails: Authentication failed. Please either:\n1. Set up OAuth by setting GSC_OAUTH_CLIENT_SECRETS_FILE to an absolute path, or (for clone installs) placing a client_secrets.json file in the script directory, then call the 'reauthenticate' tool to open a browser login window and complete authentication, or\n2. Set GSC_CREDENTIALS_PATH to an absolute path, or (for clone installs) place a service account credentials file in one of these locations: <guest-path>, <guest-path>\n\nIf you installed via uvx, the 'script directory' is an internal uv cache that you cannot access \u2014 you MUST use the environment variables with absolute paths.\n\nGETTING STARTED:\n1. If not authenticated, call the 'reauthenticate' tool to complete OAuth login.\n2. Call 'list_properties' to see all your GSC sites and get the exact site_url for other tools.\n3. Use any tool below with the site_url from step 2.\n\nAVAILABLE TOOLS:\n\nAuthentication:\n  <secret>\n\nProperties:\n  - list_properties: List all GSC sites/properties you have access to (start here)\n  - get_site_details: Get verification and ownership details for a site\n\nAnalytics & Reporting:\n  - get_search_analytics: Top queries and pages with clicks, impressions, CTR, position\n  - get_performance_overview: Summary of site performance for a time period\n  - compare_search_periods: Compare performance between two time periods\n  - get_search_by_page_query: Search terms driving traffic to a specific page\n  - get_advanced_search_analytics: Advanced filtering by country, device, query, page\n\nURL Inspection & Indexing:\n  - inspect_url_enhanced: Detailed crawl/index status for a specific URL\n  - batch_url_inspection: Inspect up to 10 URLs at once\n  - check_indexing_issues: Check multiple URLs for indexing problems\n\nSitemaps:\n  - get_sitemaps: List all sitemaps for a site\n  - list_sitemaps_enhanced: Detailed sitemap info including errors and warnings\n  - manage_sitemaps: Submit or delete sitemaps (requires GSC_ALLOW_DESTRUCTIVE=true for delete)\n\nDestructive (disabled by default, set GSC_ALLOW_DESTRUCTIVE=true to enable):\n  - add_site: Add a new property to GSC\n  - delete_site: Remove a property from GSC\n",
            "type": "text"
          }
        ],
        "isError": false,
        "structuredContent": {
          "result": "Google Search Console MCP Server\n\nAUTH STATUS:\n\u274c Not authenticated \u2014 call the 'reauthenticate' tool first to open a browser login window.\nDetails: Authentication failed. Please either:\n1. Set up OAuth by setting GSC_OAUTH_CLIENT_SECRETS_FILE to an absolute path, or (for clone installs) placing a client_secrets.json file in the script directory, then call the 'reauthenticate' tool to open a browser login window and complete authentication, or\n2. Set GSC_CREDENTIALS_PATH to an absolute path, or (for clone installs) place a service account credentials file in one of these locations: <guest-path>, <guest-path>\n\nIf you installed via uvx, the 'script directory' is an internal uv cache that you cannot access \u2014 you MUST use the environment variables with absolute paths.\n\nGETTING STARTED:\n1. If not authenticated, call the 'reauthenticate' tool to complete OAuth login.\n2. Call 'list_properties' to see all your GSC sites and get the exact site_url for other tools.\n3. Use any tool below with the site_url from step 2.\n\nAVAILABLE TOOLS:\n\nAuthentication:\n  <secret>\n\nProperties:\n  - list_properties: List all GSC sites/properties you have access to (start here)\n  - get_site_details: Get verification and ownership details for a site\n\nAnalytics & Reporting:\n  - get_search_analytics: Top queries and pages with clicks, impressions, CTR, position\n  - get_performance_overview: Summary of site performance for a time period\n  - compare_search_periods: Compare performance between two time periods\n  - get_search_by_page_query: Search terms driving traffic to a specific page\n  - get_advanced_search_analytics: Advanced filtering by country, device, query, page\n\nURL Inspection & Indexing:\n  - inspect_url_enhanced: Detailed crawl/index status for a specific URL\n  - batch_url_inspection: Inspect up to 10 URLs at once\n  - check_indexing_issues: Check multiple URLs for indexing problems\n\nSitemaps:\n  - get_sitemaps: List all sitemaps for a site\n  - list_sitemaps_enhanced: Detailed sitemap info including errors and warnings\n  - manage_sitemaps: Submit or delete sitemaps (requires GSC_ALLOW_DESTRUCTIVE=true for delete)\n\nDestructive (disabled by default, set GSC_ALLOW_DESTRUCTIVE=true to enable):\n  - add_site: Add a new property to GSC\n  - delete_site: Remove a property from GSC\n"
        }
      },
      "tool_result_checked": true,
      "tool_schema_bytes": 21399,
      "tools": [
        "get_capabilities",
        "list_properties",
        "add_site",
        "delete_site",
        "get_search_analytics",
        "get_site_details",
        "get_sitemaps",
        "inspect_url_enhanced",
        "batch_url_inspection",
        "check_indexing_issues",
        "get_performance_overview",
        "get_advanced_search_analytics",
        "compare_search_periods",
        "get_search_by_page_query",
        "list_sitemaps_enhanced",
        "get_sitemap_details",
        "submit_sitemap",
        "delete_sitemap",
        "manage_sitemaps",
        "get_creator_info",
        "reauthenticate"
      ],
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "Offline test suite for the server (documented in CLAUDE.md)",
        "command": "<guest-path> test_gsc_server.py -v",
        "deferred": false,
        "evidence": "pass/workspace/.venv/lib/python3.11/site-packages/google/api_core/_python_version_support.py:254: FutureWarning: You are using a Python version (3.11.17) which Google will stop supporting in new releases of google.api_core once it reaches its end of life (2027-10-24). Please upgrade to the latest Python version, or at least Python 3.12, to continue receiving updates for google.api_core past that date.\n    warnings.warn(message, FutureWarning)\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n======================== 52 passed, 1 warning in 4.84s =========================",
        "expected": "all tests pass",
        "input": "test_gsc_server.py",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "CLAUDE.md",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "Used 'uv pip install -p .venv/bin/python' to point uv at the venv explicitly; otherwise the README commands are unchanged.",
    "Installed pytest into the venv because CLAUDE.md's documented test command needs it; it is not in requirements.txt.",
    "Did not run list_properties or any analytics tool: no Google credentials available in the VM (needs_credentials). Nothing was installed or downloaded beyond the Python dependencies; no browser was used.",
    "README uvx path (uvx mcp-search-console) not run; it fetches the published package instead of the checked-out source."
  ],
  "fault_owner": "prerequisite",
  "main_blocker": null,
  "operation": "Run the Google Search Console MCP server (gsc_server.py) over stdio and call its tools, e.g. get_capabilities (works) and list_properties (needs Google credentials).",
  "operation_scope": "Local clone install per README Step 2 Option B on Python 3.11+ (VM has uv 0.13.5 and CPython 3.11.17 in the venv). Real GSC data calls need a Google OAuth client_secrets.json or a service account JSON, neither of which exists in this VM. Tested with GSC_SKIP_OAUTH=true so no browser login is attempted.",
  "outcome": "working",
  "plain_failure": "The server starts and its tools respond, and the offline test suite passes (52 tests). But the tools that read real Search Console data cannot run until someone supplies a Google login file or service-account key. The check of get_capabilities correctly reports 'Not authenticated', so the auth path works as documented.",
  "steps": [
    "curl/uv already present; uv venv .venv",
    "uv pip install -r requirements.txt (README Option B, clone path)",
    "GSC_SKIP_OAUTH=true .venv/bin/python gsc_server.py (MCP stdio) and tools/call get_capabilities -> returned tool list and 'Not authenticated' auth status",
    "uv pip install pytest, then .venv/bin/pytest test_gsc_server.py -v (CLAUDE.md) -> 52 passed"
  ],
  "stuck_step": "README 'Step 1 \u2014 Set Up Google API Credentials' (OAuth client_secrets.json or service account JSON) before any real Search Console call such as list_properties.",
  "suggested_fix": "Provide a GSC_OAUTH_CLIENT_SECRETS_FILE (with a browser login) or a GSC_CREDENTIALS_PATH service account key with GSC_SKIP_OAUTH=true, then re-run list_properties against a verified property."
}
