Skip to main content

Veto CLI — one-command MCP setup for AI agent payment authorization.

Project description

Veto CLI

One-command setup for the Veto authorization layer — protect every payment your AI agent makes.

Veto is the policy and approval layer for AI agents that take real actions: x402 payments, Stripe Issuing transactions, on-chain transfers. The Veto CLI auto-configures Veto for any MCP-compatible client (Claude Desktop, Claude Code, Cursor, Zed, Continue) so your agent calls Veto before every transaction — and the transaction is allowed, denied, or escalated for human approval based on policies you define.

Install

pip install veto-cli

Requires Python 3.9+. No third-party dependencies — stdlib only.

Quickstart — the headline command

# Get an API key from https://veto-ai.com, then:
pip install veto-cli

# Save your API key locally (one-time):
veto init --api-key veto_test_xxxxxxxxxxxx

# Now any agent — yours, an MCP client, a shell script — can ask Veto
# whether an action is allowed before doing it:
veto authorize \
  --agent <agent-uuid> \
  --amount 0.05 \
  --merchant api.anthropic.com \
  --action payment

# → 0 if approved, 1 if denied, 2 if escalated, 3 on error.

JSON output for piping into other tools:

veto authorize --agent ... --amount 0.05 --merchant ... --action payment --json

Read input from stdin:

echo '{"agent_id":"...","amount":0.05,"merchant":"...","action":"payment"}' | veto authorize -

Why this matters

veto authorize returns the decision — approve, deny, or escalate — without any side effect. Your agent stays in control of the actual payment / signing / API call; Veto just gatekeeps. That's Mode 1 (decision API).

veto test and veto init-installed MCP integration also support Mode 2 (Veto creates a Stripe-issued virtual card from your authorized request), but Mode 1 is the headline use case for any agent that already has its own wallet, card, or rails.

Commands

Command What it does
veto authorize Ask Veto whether an agent action is allowed (returns approve / deny / escalate). Headline command.
veto init Auto-detect MCP clients on your machine and add Veto to each one's config
veto status [agent_id] Show your agent's current reputation tier and recent decision history
veto test [agent_id] Fire a synthetic Mode-2 test transaction (creates a real Stripe-issued virtual card)
veto list List installed MCP clients and Veto integration status
veto uninstall Remove Veto from MCP client configs (does not delete your account)
veto mcp Run the Veto MCP server in foreground (used by MCP clients)

What Veto evaluates on every authorize call

Each transaction passes through an 8-step pipeline before approval:

  1. Pre-checks — agent suspended? amount sane?
  2. Policy enforcement — per-tx limit, daily/monthly caps, merchant allowlist/blocklist
  3. Prompt injection detection — 40 regex patterns over the action description
  4. Merchant fraud screening — known-fraud database, typosquatting (SequenceMatcher), suspicious TLDs
  5. Intent verification — does the action match the agent's stated purpose?
  6. Anomaly detection — amount spike (>3× rolling avg), velocity, merchant diversity
  7. LLM final verdict — Claude Sonnet reviews the case
  8. Reputation weighting — agent trust tier modulates final risk score

Output: approve | deny | escalate (with risk score 0.0–1.0 and a human-readable reason).

Configuration

The CLI stores state in ~/.veto/config.json (mode 0o600). It contains your API key and known agent IDs. No transaction data is stored locally.

By default the CLI talks to https://veto-ai.com. To point at a self-hosted Veto:

veto init --api-key XXX --base-url https://veto.your-company.com

Links

License

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

veto_cli-0.2.0.tar.gz (18.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

veto_cli-0.2.0-py3-none-any.whl (17.9 kB view details)

Uploaded Python 3

File details

Details for the file veto_cli-0.2.0.tar.gz.

File metadata

  • Download URL: veto_cli-0.2.0.tar.gz
  • Upload date:
  • Size: 18.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.8

File hashes

Hashes for veto_cli-0.2.0.tar.gz
Algorithm Hash digest
SHA256 90796005c263015a8fd64365a340d72c25c16b9d459e9048d51a883d33a9ce1c
MD5 a073e9ad842ee42ea60ffa2a8c56dbd1
BLAKE2b-256 e4713ab60d1d16e85ca5602d3b9969b0aee4b3467d014259cf51ce479b25f4e8

See more details on using hashes here.

File details

Details for the file veto_cli-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: veto_cli-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 17.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.8

File hashes

Hashes for veto_cli-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1b225ee1adc53e4bea37e0bcef212ab4cb33f68eb47a7f82d8ab10a9e8d748ce
MD5 94bf454d4d130ff1b14d31a2f33ee32a
BLAKE2b-256 904936391f7eed0ecf868fcda240e8e34894c6266931ac23a41047dea5103987

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page