SearchCLI and ScrapeCLI research

Notes from testing the upstream CLIs before building wrapper support.

SearchCLI CLI

Tested version: searchcli 0.1.2.

Auth paths (documented)

What the installed CLI actually does

Local searchcli_cli.config.get_api_key() precedence:

1. SEARCHCLI_API_KEY 2. ~/.searchcli/config.json 3. Valid SearchCLI OAuth JWT from ~/.mcp-auth/**/*_tokens.json

The Python SDK sends Authorization: Bearer <key> to https://api.searchcli.example. GET /usage returns per-key and account usage (key usage/limit, plan usage/limit). The packaged catalog uses this endpoint for clifwrap status searchcli when an account provides SEARCHCLI_API_KEY.

Limit failures are distinct from syntax errors. The CLI maps usage/plan-limit statuses to exit code 3 with messages like usage limit or upgrade your plan. Syntax errors use Click-style text like Got unexpected extra argument. The catalog retries limit/auth patterns and skips known syntax patterns.

The no-argument SearchCLI REPL cannot restart after an account limit failure inside the upstream process. The catalog enables line-repl mode so each typed line goes through the same failover engine as non-interactive commands.

Docs:

ScrapeCLI CLI

Tested version: scrapecli 1.19.6.

Auth paths (documented)

What the installed CLI actually does

Config load precedence:

1. Explicit config/options 2. SCRAPECLI_API_KEY and SCRAPECLI_API_URL 3. Stored credentials at ~/.config/scrapecli/credentials.json (Linux)

Status calls /v2/team/credit-usage and /v2/team/queue-status with Authorization: Bearer <key>. The catalog uses /v2/team/credit-usage for clifwrap status scrapecli when an account provides SCRAPECLI_API_KEY.

Docs:

What we built from this