CLI Reference
All MeowPass CLI commands. Install with brew install meowrithm/tap/meowpass.
Quickstart (4 commands)
brew install meowrithm/tap/meowpass
mp login
mp init
mp run -- npm start
After init, all commands use your default vault automatically, with no --vault flag needed.
Getting Started
mp login
Sign in via your browser using WorkOS AuthKit (browser loopback auth-code). No master password.
Usage: mp login
$ mp login
Opening your browser to sign in...
If it doesn't open, paste this URL manually:
https://api.workos.com/user_management/authorize?…
✓ Logged in as you@example.com
mp init
Scan for .env files, create a vault, and push all secrets. Sets as default vault. Use --recursive for monorepos: one vault per subproject.
Usage: mp init [--name vault-name] [--vault existing-id] [--recursive]
--name : Vault name (default: directory name)
--vault : Use existing vault instead of creating one
--recursive : Monorepo mode: init every subdirectory with a .env into its own vault + .meowpass.yaml (skips node_modules, dist, etc.)
$ mp init
Found 2 env file(s):
• .env • .env.production
Create vault "my-project"? [Y/n] y
Created vault "my-project" (ID: abc123)
Pushed 12 secrets from .env
# Monorepo: one vault per project:
$ mp init --recursive
Found 3 project(s) with .env files:
• apps/api • apps/web • packages/worker
✓ apps/api → vault "apps-api" (9 secrets)
✓ apps/web → vault "apps-web" (14 secrets)
✓ packages/worker → vault "packages-worker" (3 secrets)
mp doctor
Check MeowPass configuration, API connectivity, auth status, and vault health.
Usage: mp doctor
$ mp doctor
MeowPass Doctor
================
[OK] Config file ~/.meowpass/config.yaml
[OK] API reachable 245ms
[OK] Authentication you@example.com (pro)
[OK] Encryption salt found
[OK] Session token cached in keychain
[OK] Default vault my-project
Secrets
mp set
Encrypt and store a secret. Creates version 1 or bumps version on update.
Usage: mp set KEY VALUE [--vault id] [--ttl duration]
--vault : Vault ID (optional if default set)
--ttl : Auto-expire after duration (e.g., 24h, 30m, 168h)
$ mp set STRIPE_KEY sk_live_abc123
Secret 'STRIPE_KEY' set (version 1)
$ mp set DEPLOY_TOKEN xyz --ttl 24h
Secret 'DEPLOY_TOKEN' set (version 1) [expires in 24h]
mp get
Decrypt a secret. Copies to clipboard by default.
Usage: mp get KEY [--vault id] [--no-clipboard]
--no-clipboard : Print to stdout instead of clipboard
$ mp get STRIPE_KEY
Secret 'STRIPE_KEY' copied to clipboard
$ mp get STRIPE_KEY --no-clipboard
sk_live_abc123
mp list
List all secret keys in a vault with versions and last update date.
Usage: mp list [--vault id]
$ mp list
KEY VERSION UPDATED
DATABASE_URL v3 2026-05-05
STRIPE_KEY v1 2026-05-04
OPENAI_API_KEY v2 2026-05-03
mp delete
Permanently delete a secret from the vault.
Usage: mp delete KEY [--vault id]
$ mp delete OLD_TOKEN
Secret 'OLD_TOKEN' deleted.
Sync & Run
mp pull
Decrypt all secrets and write to a .env file.
Usage: mp pull [--vault id] [--env name]
--env : Environment name (writes .env.{name})
$ mp pull
Synced 12 secrets to .env
$ mp pull --env production
Synced 8 secrets to .env.production
mp push
Parse a local .env file, encrypt, and upload all secrets to the vault.
Usage: mp push [--vault id] [--env name]
$ mp push
Pushed 12 secrets from .env
$ mp push --env staging
Pushed 6 secrets from .env.staging
mp run
Decrypt vault secrets and inject into a subprocess as environment variables. Secrets never touch disk.
Usage: mp run [--vault id] [--env name] -- command [args...]
$ mp run -- npm start
[server] Listening on :3000
$ mp run -- docker compose up
$ mp run -- python manage.py runserver
$ mp run -- go run .
mp diff
Compare local .env with vault secrets. Shows added, removed, and changed keys with values.
Usage: mp diff [--vault id] [--env name] [--exit-on-drift]
--exit-on-drift : Exit code 1 if differences found (for CI)
$ mp diff
+ NEW_LOCAL_KEY (local only)
- REMOVED_KEY (vault only)
~ DATABASE_URL (value differs)
= STRIPE_KEY (unchanged)
Comparing .env ↔ vault: 1 added, 1 removed, 1 changed
Versioning
mp history
Show version history for a secret. Last 10 versions are retained.
Usage: mp history KEY [--vault id]
$ mp history DATABASE_URL
History for DATABASE_URL:
VERSION DATE
v4 2026-05-05 14:22 (current)
v3 2026-04-28 09:11
v2 2026-04-15 16:45
v1 2026-04-01 10:30
mp rollback
Restore a secret to a previous version. Creates a new version (non-destructive).
Usage: mp rollback KEY --version N [--vault id]
$ mp rollback DATABASE_URL --version 2
Rolled back 'DATABASE_URL' from v4 to v2 (now at v5)
Vaults & Teams
mp vault create
Create a new encrypted vault.
Usage: mp vault create NAME
$ mp vault create my-api
Vault 'my-api' created (ID: a1b2c3d4)
mp vault list
List all vaults you own or have access to.
Usage: mp vault list
$ mp vault list
ID NAME CREATED
a1b2c3d4 my-api 2026-05-01
e5f6g7h8 my-web 2026-05-04
mp share
Share a vault with a team, granting scoped access to each member (server-side; no key exchange).
Usage: mp share VAULT_ID --team TEAM_ID
$ mp share a1b2c3d4 --team t1a2b3c4
Vault shared with team t1a2b3c4.
mp team create
Create a team for vault sharing.
Usage: mp team create NAME
$ mp team create backend
Team 'backend' created (ID: t1a2b3c4)
mp team invite
Invite a member to a team by email.
Usage: mp team invite EMAIL --team ID [--role member|admin|owner]
$ mp team invite sarah@acme.dev --team t1a2b3c4 --role admin
Backup
mp export
Export an encrypted backup of a vault's secrets to a local file. Includes every environment. Protected by a separate backup password (AES-256-GCM); the file never leaves your machine.
Usage: mp export [--vault id] [--out file]
--vault : Vault to export (defaults to active vault)
--out : Output file (default: meowpass-backup.mpbackup)
$ mp export --out my-app.mpbackup
Backup password: ********
Confirm backup password: ********
Exported 20 secret(s) to my-app.mpbackup (encrypted).
Keep the backup password safe: it's the only way to decrypt this file.
mp import
Decrypt an .mpbackup file with its backup password and push the secrets into the target vault, re-encrypting under that vault's key.
Usage: mp import [--file backup.mpbackup] [--vault id]
--file : Backup file to import (or pass as the first argument)
--vault : Target vault (defaults to active vault)
$ mp import my-app.mpbackup
Backup password: ********
Imported 20 secret(s) into vault a1b2c3d4.
Deploy Integrations
mp vercel sync
Decrypt vault secrets locally and push them to a Vercel project's environment variables. The MeowPass env auto-maps to a Vercel target (production → production, staging/preview → preview, otherwise development).
Usage: mp vercel sync --project NAME [--env name] [--target t] [--vercel-token tok] [--vercel-team slug] [--dry-run] [--vault id]
--project : Vercel project name or ID (required)
--env : MeowPass environment to sync (default: default)
--target : Override Vercel target: production, preview, development
--vercel-token : Vercel API token (or set VERCEL_TOKEN)
--vercel-team : Vercel team slug for team projects
--dry-run : Show what would sync without pushing
$ mp vercel sync --project my-app --env production
Syncing 12 secrets to Vercel project "my-app" (target: production)
+ DATABASE_URL (created)
↻ STRIPE_KEY (updated)
...
Done. 8 created, 4 updated, 0 unchanged.
Prefer a browser flow? Connect Vercel via OAuth and sync from the web. See the Vercel guide. For giving AI agents brokered access to providers, see the Credential Gateway.
Utilities
CI/CD: secrets are decrypted server-side, so CI only needs a scoped API key. Create one with mp apikey create ci-key, set it as MEOWPASS_TOKEN, then run mp pull, or use the GitHub Action.
mp apikey create
Generate an API key for MCP server or CI/CD.
Usage: mp apikey create NAME
$ mp apikey create my-mcp-key
API key created: mp_a1b2c3d4e5f6...
Save this key: it won't be shown again.
mp git-hook install
Install a pre-commit hook for drift detection.
Usage: mp git-hook install [--vault id] [--strict]
--strict : Block commits when drift detected (default: warn only)
$ mp git-hook install
Installed pre-commit hook (warn-only mode)
$ mp git-hook install --strict
Installed pre-commit hook (strict mode)
mp whoami
Show current authenticated user.
Usage: mp whoami
$ mp whoami
Email: you@example.com
Name: Your Name
Plan: pro