Skip to content

acapl/wolt-pp-cli

Repository files navigation

Wolt CLI

Wolt's full city-wide discovery feed in your terminal — browse, filter, sort, search, and track venues across Wolt's 975 markets without opening the app.

Wolt's consumer API exposes every venue in every city with full metadata (delivery time, rating, distance, cuisine, badges) but no CLI fully exploits it. This one syncs the discovery feed locally, lets you fuse filters and sorts in a single shot (now --max-delivery 25 --min-rating 9.0 --category pizza), tracks favorites against a 7-day baseline (track status), surfaces the daily turnover (changes --since yesterday), and emits stable JSON for agents (agent brief --json).

Learn more at Wolt.

Install

The recommended path installs both the wolt-pp-cli binary and the pp-wolt agent skill in one shot:

npx -y @mvanhorn/printing-press install wolt

For CLI only (no skill):

npx -y @mvanhorn/printing-press install wolt --cli-only

Without Node (Go fallback)

If npx isn't available (no Node, offline), install the CLI directly via Go (requires Go 1.26.3 or newer):

go install github.com/acapl/wolt-pp-cli/cmd/wolt-pp-cli@latest

This installs the CLI only — no skill.

Pre-built binary

Download a pre-built binary for your platform from the latest release. On macOS, clear the Gatekeeper quarantine: xattr -d com.apple.quarantine <binary>. On Unix, mark it executable: chmod +x <binary>.

Install for Hermes

From the Hermes CLI:

hermes skills install mvanhorn/printing-press-library/cli-skills/pp-wolt --force

Inside a Hermes chat session:

/skills install mvanhorn/printing-press-library/cli-skills/pp-wolt --force

Install for OpenClaw

Tell your OpenClaw agent (copy this):

Install the pp-wolt skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-wolt. The skill defines how its required CLI can be installed.

Authentication

No authentication. The Wolt consumer API endpoints we use (/v1/cities, /v1/pages/restaurants, /v1/pages/front) are fully public; this CLI fetches the same JSON your browser does.

Quick Start

# Fetch today's full Belgrade venue feed (1818 venues) into the local snapshot store.
wolt-pp-cli sync --city belgrade


# Show the fastest acceptable options right now.
wolt-pp-cli now --city belgrade --max-delivery 25 --min-rating 9.0 --json


# Top 5 pizza places by rating.
wolt-pp-cli now --city belgrade --category pizza --sort rating --limit 5


# Track favorite venues and see current vs typical delivery time.
wolt-pp-cli track add 'Roll Sushi'; wolt-pp-cli track status --agent


# Today's openings, closures, and delivery-time movers.
wolt-pp-cli changes --city belgrade --since yesterday

Unique Features

These capabilities aren't available in any other tool for this API.

Local state that compounds

  • track — Persist a list of favorite venues and check their current online status next to a 7-day median delivery time so you know if 'currently 45 min' is normal or unusual.

    Use when the user has favorite venues whose drift over time matters — order quality often correlates with delivery-time stability.

    wolt-pp-cli track add 'Roll Sushi'; wolt-pp-cli track status --agent
  • changes — Show which venues came online or went offline since a prior snapshot and which had material delivery-time changes.

    Reach for this when the user wants to surface today's openings and closures across the chain — useful for daily ordering decisions.

    wolt-pp-cli changes --city belgrade --since yesterday --agent
  • drift — For one venue, show median and p90 delivery time, online-rate per day, and an ASCII sparkline of the last N days.

    Use when the user notices 'this place got slow' and wants to know if it's a real trend or one bad night.

    wolt-pp-cli drift 'Thai Indochine' --days 14 --agent
  • worth-it — Show only venues whose current delivery time is close to their 7-day median, filtering out spurious 'too good to be true' outliers about to balloon.

    Use when the user wants the fastest-acceptable option AND wants confidence that the listed time is realistic.

    wolt-pp-cli worth-it --city belgrade --max-delivery 30 --agent
  • quietest-time — For one venue, returns the hour-of-day with the historically lowest median delivery time over the last 14 days.

    Helpful when the user is flexible on timing and wants the hour the venue is fastest.

    wolt-pp-cli quietest-time 'Pizza Bar' --agent

Discovery that the website cannot do

  • rare — List cuisines or venues that fewer than N venues in the city carry today.

    Reach for this when the user wants to discover niche cuisines that the homepage's popular-cuisine grid hides.

    wolt-pp-cli rare --city belgrade --max-venues 3 --agent
  • presence — Find a venue or chain across every synced city; great for asking 'where in Serbia is McDonald's available right now?'

    Use when the user is planning across multiple cities (catering, travel) and needs to know which Wolt markets carry a chain.

    wolt-pp-cli presence "McDonald's" --country RS --agent

Agent-native plumbing

  • agent brief — One stable JSON object with the top-10 venues by blended rating-and-speed score, current open count, snapshot age, and three stochastic-mix picks — designed for LLM ingestion.

    Use when an agent needs the city's discovery state in one read for downstream reasoning ('what should I order tonight?').

    wolt-pp-cli agent brief --city belgrade --json

Usage

Run wolt-pp-cli --help for the full command reference and flag list.

Commands

cities

Wolt's global city directory (975 cities)

  • wolt-pp-cli cities list - List every Wolt city globally

pages

Discovery pages: full city feed and curated front-page

  • wolt-pp-cli pages front - Curated front-page (categories + featured shelves) by lat/lon
  • wolt-pp-cli pages restaurants - Full city discovery feed (1818 venues for Belgrade) by lat/lon

Output Formats

# Human-readable table (default in terminal, JSON when piped)
wolt-pp-cli cities

# JSON for scripting and agents
wolt-pp-cli cities --json

# Filter to specific fields
wolt-pp-cli cities --json --select id,name,status

# Dry run — show the request without sending
wolt-pp-cli cities --dry-run

# Agent mode — JSON + compact + no prompts in one flag
wolt-pp-cli cities --agent

Agent Usage

This CLI is designed for AI agent consumption:

  • Non-interactive - never prompts, every input is a flag
  • Pipeable - --json output to stdout, errors to stderr
  • Filterable - --select id,name returns only fields you need
  • Previewable - --dry-run shows the request without sending
  • Read-only by default - this CLI does not create, update, delete, publish, send, or mutate remote resources
  • Offline-friendly - sync/search commands can use the local SQLite store when available
  • Agent-safe by default - no colors or formatting unless --human-friendly is set

Exit codes: 0 success, 2 usage error, 3 not found, 5 API error, 7 rate limited, 10 config error.

Use with Claude Code

Install the focused skill — it auto-installs the CLI on first invocation:

npx skills add mvanhorn/printing-press-library/cli-skills/pp-wolt -g

Then invoke /pp-wolt <query> in Claude Code. The skill is the most efficient path — Claude Code drives the CLI directly without an MCP server in the middle.

Use as an MCP server in Claude Code (advanced)

If you'd rather register this CLI as an MCP server in Claude Code, install the MCP binary first:

go install github.com/acapl/wolt-pp-cli/cmd/wolt-pp-mcp@latest

Then register it:

claude mcp add wolt wolt-pp-mcp

Use with Claude Desktop

This CLI ships an MCPB bundle — Claude Desktop's standard format for one-click MCP extension installs (no JSON config required).

To install:

  1. Download the .mcpb for your platform from the latest release.
  2. Double-click the .mcpb file. Claude Desktop opens and walks you through the install.

Requires Claude Desktop 1.0.0 or later. Pre-built bundles ship for macOS Apple Silicon (darwin-arm64) and Windows (amd64, arm64); for other platforms, use the manual config below.

Manual JSON config (advanced)

If you can't use the MCPB bundle (older Claude Desktop, unsupported platform), install the MCP binary and configure it manually.

go install github.com/acapl/wolt-pp-cli/cmd/wolt-pp-mcp@latest

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "wolt": {
      "command": "wolt-pp-mcp"
    }
  }
}

Health Check

wolt-pp-cli doctor

Verifies configuration and connectivity to the API.

Configuration

Config file: ~/.config/wolt-pp-cli/config.toml

Static request headers can be configured under headers; per-command header overrides take precedence.

Troubleshooting

Not found errors (exit code 3)

  • Check the resource ID is correct
  • Run the list command to see available items

API-specific

  • ls/now returns nothing on the first run — Run wolt-pp-cli sync --city <city-slug> first. The CLI is a local-snapshot CLI — every read is offline once synced.
  • drift/changes returns empty on the first day — These commands need at least 2 snapshots. Run sync again later (or schedule with sync --watch 6h) and the diff/drift queries will populate.
  • presence finds nothing for a chain you know exists in another city — presence searches only the cities you have synced. Run wolt-pp-cli sync --city <other-city> for each city you want to include in cross-city searches.

Sources & Inspiration

This CLI was built by studying these projects and resources:

Generated by CLI Printing Press

About

Browse, filter, sort, search, and track Wolt restaurant/venue discovery across 975 cities — local SQLite snapshots, daily diff, agent-native JSON, no auth.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors