Fanvault CLI
Your storefront,
in your terminal.
Everything the app does, as commands. Built for people running several creators at once, and for the coding agents they hand the keyboard to.
npm install -g fanvault
fanvault auth login # opens a browser — no token needed
fv whoami
# no browser? use a token instead
export FANVAULT_TOKEN=fv_mcp_...Try
76 commands
Why a CLI and not just MCP.
A folder per creator
Drop a .fanvault.json in a client's directory and every command run there acts on that storefront. Nothing to remember, nothing to pass. It holds no secret, so it is safe to commit — the credential stays in your config directory.
Built for coding agents
One `fv commands` call returns the entire command tree as JSON, so an agent learns the surface without reading dozens of help screens. Output turns to JSON automatically when piped, and --fields trims a page of orders to the two columns that matter.
Local files, no round trip
Upload a folder of photos, write a shipping label PDF to disk, read a CSV of prices. The CLI runs on your machine, so files are just files.
Safe by default
Destructive and payment commands refuse to run without --confirm, and --yes will not do it. Money is always integer cents, and a value that looks like dollars in a cents field is rejected before it reaches the API.
Many creators
One folder, one storefront.
An agency running twenty personas should not be picking a creator on every command. Bind the directory once and the right storefront is already selected.
A project file can only select a profile you already hold. It can never create one, name a token, or point the CLI at another server — so cloning a repo can never redirect your credentials.
# ~/clients/acme/.fanvault.json
{
"profile": "acme-agency",
"creator": "acme_official"
}
$ cd ~/clients/acme
$ fv post create --body "New drop is live"
→ acting as acme_official (from ./.fanvault.json)For agents
Predictable enough to automate.
stdout carries the payload and nothing else, so piping into jq always works. Warnings, prompts and progress go to stderr. Every failure is a JSON envelope with a stable code and a hint written to be acted on.
$ fv listing cancel --listing-ids 42
{
"error": "listing cancel needs confirmation.",
"code": "confirm_required",
"exit": 4,
"hint": "Re-run with --confirm once a human has reviewed.",
"details": { "args": { "listing_ids": [42] } }
}
$ echo $?
4Access
Two ways to connect.
Sign in with a browser and there is nothing to copy or paste. Use a token where there is no browser to open.
Sign in with a browsereasiest
fanvault auth login opens your browser, you approve once, and the CLI keeps itself signed in from then on. No token to store or rotate.
Creator accounts signed in this way get read, write and confirm-gated delete. The payments scope is token-only.
Use a tokenCI, containers, agents
Mint one at Settings → CLI and it works for the CLI and MCP alike. Set FANVAULT_TOKEN and it runs with no config file at all.
Prefer fanvault auth login --token - to paste one, so it never lands in your shell history.
Scopes
read, write, destructive and payments are opt-in per token. Give an agent read and write and it cannot delete anything, whatever it is asked to do.
On disk
Credentials live in a file only your user can read, and the CLI never prints one back. Revoke a token and every machine using it stops immediately.
Put your storefront on autopilot.
The full command reference lives at https://fanvault.shop/developers/api.