Docs menu+

Add, switch, rename, rotate tokens, remove. Multi-account workflows.

#Account management

mcpvault is built around the idea that you have many accounts per service. This page covers everything you can do with them: add, switch, rename, rotate the token, remove.

#Add

bash
mcpvault add <service>

Walks you through:

  1. 1Label — short, alphanumeric + dashes. work, personal, acme-prod, merel-staging.
  2. 2Description — what fuzzy search matches. Be specific: "Acme Corp prod, us-east-1" beats "production".
  3. 3Token — pasted, hidden input. Validated live against the upstream API before save.
  4. 4Optional defaults — e.g. default project ref for Supabase, team ID for Vercel.

You can run this as many times as you want per service.

#List

bash
mcpvault list # everything mcpvault list supabase # one service mcpvault list --json # machine-readable

Output groups accounts by service, with the active label marked:

text
supabase ● work Day job, prod + staging ○ personal My side projects ○ client-x Freelance client (us-east-1) github ● personal My personal repos ○ work Org-scoped fine-grained PAT

#Switch the active account

From the CLI:

bash
mcpvault use <service> <label>

From inside a chat client (the natural way):

Switch to my work Supabase.

The agent calls mcpvault_find_account → mcpvault_activate_account. Each per-service wrapper re-reads ~/.mcpvault/active.json on every tool call, so the switch takes effect on the next tool invocation. No client restart, no MCP reconnect.

#Rename a label

bash
mcpvault rename <service> <old-label> <new-label>

Updates the vault and active.json atomically. The audit log keeps the old name for past entries (renames are not a rewrite).

#Update the description

bash
mcpvault describe <service> <label> "Acme Corp prod (us-east-1)"

If you keep getting the wrong account selected by fuzzy search, this is the lever to pull.

#Rotate the token

Replace the credential without deleting the account or losing its label, description and defaults:

bash
mcpvault rotate <service> <label>

Prompts for the new token. Validates against the upstream API. On success, the new token replaces the old one in-place. The audit log records account-rotated. The OS keyring cache is unaffected (the vault key didn't change — only the credential inside it did).

Use this when:

  • The upstream service rotated your PAT (some providers force a 90-day rotation).
  • You suspect the token leaked.
  • You upgraded a fine-grained PAT to a broader scope.

If validation fails, the old token stays in place — never a half-rotated state.

#Remove an account

bash
mcpvault remove <service> <label>

Asks for confirmation. If the account being removed was the active one, you're prompted to pick a replacement (or set active = none).

#Multi-account workflows

A common pattern for a freelance dev:

bash
# personal stuff mcpvault add supabase # label: personal, desc: my side projects mcpvault add github # label: personal, desc: my personal repos mcpvault add vercel # label: personal, desc: side project deploys # day job mcpvault add supabase # label: work, desc: day job, prod + staging mcpvault add github # label: work, desc: company GitHub org # clients mcpvault add supabase # label: client-acme, desc: Acme Corp production mcpvault add github # label: client-acme, desc: Acme repos (read-only PAT)

Then in chat:

I'm working on Acme today. Switch all my accounts to client-acme and list the open PRs.

The agent activates client-acme for both Supabase and GitHub, then calls github_list_pulls.

#Tags (optional)

When adding an account you can set tags. They're not used by fuzzy search but are searchable from the CLI:

bash
mcpvault add supabase # tags: client, prod mcpvault list --tag client

#Pinning a wrapper to one account

Normally a wrapper follows the active label. To make a wrapper always use a specific account regardless of active.json, pass --account in your client's MCP config:

json
{ "mcpServers": { "stripe-readonly": { "command": "mcpvault", "args": ["wrap", "stripe", "--account", "live-readonly"] } } }

Useful if you want a single account to be unaffected by chat-driven switching.

Accounts — mcpvault docs