VetoVetoDocs
SDK · CLI · MCP

CLI

The veto CLI — login, scaffold a merchant, manage policy, and drive any protocol-speaking merchant (discover, catalog, quote, pay, status, receipt verify). Zero dependencies, runs on Node ≥ 22.6.

@veto-protocol/cli ports the magic-link / device-code login and adds buyer + merchant verbs that drive any protocol-speaking merchant over plain fetch. Zero runtime dependencies; runs under node --experimental-strip-types.

npx @veto-protocol/cli --help

Auth

veto login [--email <e>] [--force]   # magic-link device-code sign-in → ~/.veto/config.json
veto logout                          # delete saved credentials
veto whoami [--json]                 # print the signed-in identity (masked)

Merchant setup

veto init [dir] [--force]            # scaffold a runnable merchant (server.ts + .env)
veto keys [--json]                   # mint a receipt-signing seed + publish-ready JWKS
veto policy show [--json]            # show the active MerchantPolicy (hosted)
veto policy set <field> <value>      # change one policy field (creates a new version)

Buyer flow (drives any merchant by URL)

veto discover <url> [--json]                                 # GET the discovery manifest
veto catalog  <url> [--json]                                 # list products
veto quote    <url> --sku <s> --qty <n> [--intent ..] \
                    [--mandate <jws|@file>] [--rail mock]    # create a session
veto pay      <url> --session <id> --payment '<json>'|@file | --mock
veto status   <url> --session <id>                           # poll session state
veto receipt verify <jws> [--jwks <url|@file>]               # offline receipt verification

MCP install

veto mcp install [--client claude|cursor|continue]   # write the MCP server config block
veto mcp print [--json]                              # print the config without writing

Every command surfaces errors in the protocol shape { reason_codes, error_human }, so a failure is always reason-coded — the same vocabulary the API uses.