{
  "checker": {
    "claims": [
      {
        "claim": "The MCP server search_pairs tool searches pairs by address",
        "command": "<guest-path> tools/call {\"tool\": \"search_pairs\", \"arguments\": {\"query\": \"So11111111111111111111111111111111111111112\", \"limit\": 3}}",
        "evidence": "So11111111111111111111111111111111111111112\\\",\\n  \\\"tokenSymbol\\\": \\\"SOL\\\",\\n  \\\"dexId\\\": \\\"orca\\\",\\n  \\\"priceUsd\\\": 102.026,\\n  \\\"volumeH24\\\": 106598846.24,\\n  \\\"txnsH1\\\": 5191,\\n  \\\"liquidityUsd\\\": 29143515.62,\\n  \\\"pairUrl\\\": \\\"https://dexscreener.com/solana/czfq3xzzdmsdgduyrnltrhgc47cxcztlg4crryfu44ze\\\"\\n}\"}, {\"type\": \"text\", \"text\": \"{\\n  \\\"chainId\\\": \\\"solana\\\",\\n  \\\"pairAddress\\\": \\\"8sLbNZoA1cfnvMJLPfp98ZLAnFSYCFApfJKMbiXNLwxj\\\",\\n  \\\"tokenAddress\\\": \\\"So11111111111111111111111111111111111111112\\\",\\n  \\\"tokenSymbol\\\": \\\"SOL\\\",\\n  \\\"dexId\\\": \\\"raydium\\\",\\n  \\\"priceUsd\\\": 102.073,\\n  \\\"vo",
        "expected": "matching pairs containing the wrapped SOL address",
        "input": "{\"tool\": \"search_pairs\", \"arguments\": {\"query\": \"So11111111111111111111111111111111111111112\", \"limit\": 3}}",
        "kind": "claim",
        "outcome": "Real input produced the expected result: So11111111111111111111111111111111111111112",
        "source": "Search pairs by name, symbol, or address",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "CLI search finds tokens by address",
        "command": "./ds search So11111111111111111111111111111111111111112 --json",
        "evidence": "So11111111111111111111111111111111111111112\",\n    \"tokenSymbol\": \"SOL\",\n    \"tokenName\": \"Wrapped SOL\",\n    \"quoteSymbol\": \"USDC\",\n    \"priceUsd\": 102.026,\n    \"priceChangeH1\": 0.74,\n    \"priceChangeH24\": 0.5,\n    \"volumeH24\": 106598846.24,\n    \"volumeH6\": 33058559.75,\n    \"volumeH1\": 9154470.07,\n    \"volumeM5\": 513705.32,\n    \"buysH1\": 2425,\n    \"sellsH1\": 2766,\n    \"buysH24\": 35690,\n    \"sellsH24\": 41641,\n    \"txnsH1\": 5191,\n    \"txnsH24\": 77331,\n    \"liquidityUsd\": 29143515.62,\n    \"marketCap\": 0.0,\n    \"fdv\": 0.0,\n    \"holdersCount\": null,\n    \"holdersSource\": null,\n    \"pairCreatedAtMs\": ",
        "expected": "JSON pairs containing the wrapped SOL address",
        "input": "ds search So11111111111111111111111111111111111111112 --json",
        "kind": "claim",
        "outcome": "Real input produced the expected result: So11111111111111111111111111111111111111112",
        "returncode": 0,
        "source": "Search tokens by name, symbol, or address",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "ds task daemon --once runs one due scan cycle and exits",
        "command": "./ds task daemon --task cycle-check --once --no-alerts",
        "evidence": "Tip: Run ds setup to pick your chains and preferences (takes 30 seconds).\n\ntask=cycle-check results=3 top=ANT alerts=disabled",
        "expected": "one cycle scans the task and prints its summary",
        "input": "task cycle-check (created with --chains solana --limit 3)",
        "kind": "cycle",
        "method": "run-once: daemon --once with --no-alerts so no external webhook is contacted",
        "outcome": "Triggered one cycle by hand (run-once: daemon --once with --no-alerts so no external webhook is contacted; normal trigger: ds task daemon polling loop (poll_seconds default 5.0)): Tip: Run ds setup to pick your chains and preferences (takes 30 seconds).\n\ntask=cycle-check results=3 top=ANT alerts=disabled",
        "returncode": 0,
        "schedule": "ds task daemon polling loop (poll_seconds default 5.0)",
        "source": "dexscreener_cli/cli.py",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "<guest-path>"
      ],
      "kind": "mcp",
      "scope": "product operation",
      "serverInfo": {
        "name": "dexscreener-cli-mcp-tool",
        "version": "1.30.0"
      },
      "tool_result": {
        "content": [
          {
            "text": "{\n  \"chainId\": \"solana\",\n  \"pairAddress\": \"Czfq3xZZDmsdGdUyrNLtRhGc47cXcZtLG4crryfu44zE\",\n  \"tokenAddress\": \"So11111111111111111111111111111111111111112\",\n  \"tokenSymbol\": \"SOL\",\n  \"dexId\": \"orca\",\n  \"priceUsd\": 102.026,\n  \"volumeH24\": 106598846.24,\n  \"txnsH1\": 5191,\n  \"liquidityUsd\": 29143515.62,\n  \"pairUrl\": \"https://dexscreener.com/solana/czfq3xzzdmsdgduyrnltrhgc47cxcztlg4crryfu44ze\"\n}",
            "type": "text"
          },
          {
            "text": "{\n  \"chainId\": \"solana\",\n  \"pairAddress\": \"8sLbNZoA1cfnvMJLPfp98ZLAnFSYCFApfJKMbiXNLwxj\",\n  \"tokenAddress\": \"So11111111111111111111111111111111111111112\",\n  \"tokenSymbol\": \"SOL\",\n  \"dexId\": \"raydium\",\n  \"priceUsd\": 102.073,\n  \"volumeH24\": 552050.49,\n  \"txnsH1\": 5112,\n  \"liquidityUsd\": 477105.13,\n  \"pairUrl\": \"https://dexscreener.com/solana/8slbnzoa1cfnvmjlpfp98zlanfsycfapfjkmbixnlwxj\"\n}",
            "type": "text"
          },
          {
            "text": "{\n  \"chainId\": \"solana\",\n  \"pairAddress\": \"58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2\",\n  \"tokenAddress\": \"So11111111111111111111111111111111111111112\",\n  \"tokenSymbol\": \"SOL\",\n  \"dexId\": \"raydium\",\n  \"priceUsd\": 102.34,\n  \"volumeH24\": 2495514.05,\n  \"txnsH1\": 3057,\n  \"liquidityUsd\": 19109944.23,\n  \"pairUrl\": \"https://dexscreener.com/solana/58oqchx4ywmvkdwllzzbi4chocc2fqcuwbkwmihlyqo2\"\n}",
            "type": "text"
          }
        ],
        "isError": false,
        "structuredContent": {
          "result": [
            {
              "chainId": "solana",
              "dexId": "orca",
              "liquidityUsd": 29143515.62,
              "pairAddress": "Czfq3xZZDmsdGdUyrNLtRhGc47cXcZtLG4crryfu44zE",
              "pairUrl": "https://dexscreener.com/solana/czfq3xzzdmsdgduyrnltrhgc47cxcztlg4crryfu44ze",
              "priceUsd": 102.026,
              "tokenAddress": "So11111111111111111111111111111111111111112",
              "tokenSymbol": "SOL",
              "txnsH1": 5191,
              "volumeH24": 106598846.24
            },
            {
              "chainId": "solana",
              "dexId": "raydium",
              "liquidityUsd": 477105.13,
              "pairAddress": "8sLbNZoA1cfnvMJLPfp98ZLAnFSYCFApfJKMbiXNLwxj",
              "pairUrl": "https://dexscreener.com/solana/8slbnzoa1cfnvmjlpfp98zlanfsycfapfjkmbixnlwxj",
              "priceUsd": 102.073,
              "tokenAddress": "So11111111111111111111111111111111111111112",
              "tokenSymbol": "SOL",
              "txnsH1": 5112,
              "volumeH24": 552050.49
            },
            {
              "chainId": "solana",
              "dexId": "raydium",
              "liquidityUsd": 19109944.23,
              "pairAddress": "58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2",
              "pairUrl": "https://dexscreener.com/solana/58oqchx4ywmvkdwllzzbi4chocc2fqcuwbkwmihlyqo2",
              "priceUsd": 102.34,
              "tokenAddress": "So11111111111111111111111111111111111111112",
              "tokenSymbol": "SOL",
              "txnsH1": 3057,
              "volumeH24": 2495514.05
            }
          ]
        }
      },
      "tool_result_checked": true,
      "tool_schema_bytes": 13491,
      "tools": [
        "scan_hot_tokens",
        "get_rate_budget_stats",
        "save_preset",
        "list_presets",
        "create_task",
        "list_tasks",
        "run_task_scan",
        "run_due_tasks",
        "test_task_alert",
        "list_task_runs",
        "export_state_bundle",
        "import_state_bundle",
        "search_pairs",
        "inspect_token",
        "get_cli_quickstart"
      ],
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "Inspect a token by address on a chain",
        "command": "./ds inspect So11111111111111111111111111111111111111112 --chain solana --json",
        "deferred": false,
        "evidence": ",\n    \"sellsH1\": 2775,\n    \"buysH24\": 35694,\n    \"sellsH24\": 41650,\n    \"txnsH1\": 5204,\n    \"txnsH24\": 77344,\n    \"liquidityUsd\": 29160966.83,\n    \"marketCap\": 0.0,\n    \"fdv\": 0.0,\n    \"holdersCount\": 8746986,\n    \"holdersSource\": \"geckoterminal\",\n    \"pairCreatedAtMs\": 1688106058000,\n    \"ageHours\": 29144.889084961666\n  },\n  \"distributionProxy\": {\n    \"liquidity_to_market_cap\": 0.0,\n    \"volume_to_liquidity_24h\": 3.6556,\n    \"buy_sell_imbalance_1h\": -0.0665,\n    \"status\": \"concentrated-liquidity\"\n  },\n  \"boostTotal\": 40.0,\n  \"boostCount\": 4,\n  \"hasProfile\": true,\n  \"additionalPairCount\": 29\n}",
        "expected": "JSON token details for wrapped SOL",
        "input": "So11111111111111111111111111111111111111112 --chain solana --json",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "Repository offline test suite (CI test job runs pytest tests/ -q)",
        "command": "",
        "deferred": false,
        "evidence": "Ran pytest tests/ -q in the venv: 72 passed, 2 failed (tests/test_cli_json.py::test_search_json_output and test_inspect_json_output, JSONDecodeError). Not a README claim; the failures look related to the 'Tip: Run ds setup' line printed to stdout before JSON on a fresh install. Recorded as a finding, not a product success.",
        "expected": "documented command completes successfully",
        "input": "",
        "kind": "example",
        "outcome": "Ran pytest tests/ -q in the venv: 72 passed, 2 failed (tests/test_cli_json.py::test_search_json_output and test_inspect_json_output, JSONDecodeError). Not a README claim; the failures look related to the 'Tip: Run ds setup' line printed to stdout before JSON on a fresh install. Recorded as a finding, not a product success.",
        "source": ".github/workflows/ci.yml",
        "verdict": "blocked"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "install.sh with unpinned mcp>=1.23.0 installed mcp 2.3.0, which removed mcp.server.fastmcp; dexscreener-mcp crashed on start (ModuleNotFoundError). Fixed by running .venv/bin/pip install 'mcp>=1.23.0,<2' (installed mcp 1.30.0). Product source not edited.",
    "pip install -q pytest added to the venv to run the repo's CI test command.",
    "Test suite: 2 of 74 failed (tests/test_cli_json.py search/inspect JSON tests, JSONDecodeError); not fixed, recorded as a finding.",
    "README 'ds setup' was not run (interactive); a non-interactive 'Tip' line is printed on stdout before JSON output on a fresh install."
  ],
  "fault_owner": "repo",
  "main_blocker": null,
  "operation": "Search Dexscreener tokens through the dexscreener-mcp stdio server (search_pairs) and the ds CLI, and run one scheduler cycle (ds task daemon --once)",
  "operation_scope": "Linux guest, Python 3.12.3 (README needs 3.11+), no API keys; public Dexscreener API reachable (HTTP 200). MORALIS_API_KEY optional and unset.",
  "outcome": "working",
  "plain_failure": "On a fresh install the MCP server does not start unless the mcp library is pinned below version 2, because the project's dependency range allows mcp 2.x, which removed the API the server uses. Separately, two of the project's JSON-output tests fail on a fresh install. After the pin, the MCP search, CLI search and inspect, and the one-cycle scheduler run all worked.",
  "steps": [
    "git clone is replaced by the pinned snapshot already in <guest-path>",
    "./install.sh (README Mac/Linux installer: creates .venv, pip install -e ., runs ds doctor)",
    "./ds search So11111111111111111111111111111111111111112 --json",
    "./dexscreener-mcp (stdio MCP) tools/call search_pairs {query, limit:3}",
    "./ds inspect So11111111111111111111111111111111111111112 --chain solana --json",
    "./ds task create cycle-check --chains solana --limit 3",
    "./ds task daemon --task cycle-check --once --no-alerts",
    "pytest tests/ -q (repo test suite from CI)"
  ],
  "stuck_step": null,
  "suggested_fix": "Pin mcp<2 in pyproject.toml dependencies (or migrate dexscreener_cli/mcp_server.py to the mcp 2.x MCPServer API). Send the 'Tip: Run ds setup' message to stderr, or skip it when --json is used, so JSON stdout parses; then re-run tests/test_cli_json.py."
}
