vaultwarden-mcp
Provides a standardized interface to a Vaultwarden (Bitwarden-compatible) server, enabling management of accounts, ciphers, folders, organizations, sends, two-factor, emergency access, events, and admin operations, plus decrypted vault access, deduplication, and password rotation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vaultwarden-mcpList all my login items for GitHub"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Vaultwarden Mcp
CLI or API | MCP
Version: 0.2.1
Documentation — Installation, deployment, and usage across the API, CLI, MCP, and A2A agent interfaces are maintained in the official documentation.
Related MCP server: Warden MCP Server
Table of Contents
Overview
vaultwarden-mcp exposes a standardized interface to a Vaultwarden (Bitwarden-compatible)
server via the Model Context Protocol — 281 REST operations across 13 domains (accounts,
ciphers, folders, organizations, sends, two-factor, emergency access, events, admin,
identity, icons, misc, public), a decrypted-vault layer for item/folder read and edit, and
vault maintenance (deduplication, password rotation). It is built on the shared
agent-connector-sdk framework (auth, the
action router, telemetry, governance) for fleet consistency.
Action-routed MCP tools — eight domain tools (
vaultwarden_system,vaultwarden_accounts,vaultwarden_ciphers,vaultwarden_folders,vaultwarden_organizations,vaultwarden_sends,vaultwarden_admin,vaultwarden_maintenance) each route to multiple underlying operations via anactionargument, keeping the tool surface small. SettingMCP_TOOL_MODE=verbosealso registers one fully-typed tool per API operation from the generated operation manifest.Two interfaces, one package — use it as a Python API client, an MCP server (
stdio/streamable-http/sse).Destructive operations require
confirm: true. Bulk item removal is soft by default — see Architecture for the remove-route trap.Two crypto backends — a pure-Python native implementation, or delegation to an installed Bitwarden CLI. See Architecture.
Metadata-only knowledge-graph ingestion — a Wire-First
vaultwarden_maintenanceingest action pushes identifiers, types, dates, counts, and relationships into the epistemic-graph Knowledge Graph as typed OWL nodes. Item names, usernames, passwords, notes, URIs, and every key stay out of the graph.Per-tool toggles — enable or disable each tool domain with environment switches.
Enterprise-ready — OTEL/Langfuse telemetry and optional Eunomia access governance.
Installation
Install with uvx (no install — run on demand)
uvx --from "vaultwarden-mcp[mcp]" vaultwarden-mcp # MCP server + full graph engineEvery supported install includes
epistemic-graph[full]. The[mcp]extra adds
Install with pip
python -m pip install vaultwarden-mcp # core (API client)
python -m pip install "vaultwarden-mcp[all]" # + MCP server + A2A agent + telemetryExtra | Installs | Use when |
| Connector-focused MCP server ( | The operator only run the MCP server (smallest install / image) |
| Everything ( | Development / both surfaces |
Console scripts
After installation the following entry points are available on the operator's PATH:
Command | Description |
| Start the MCP server |
Container images (:mcp)
One multi-stage docker/Dockerfile builds the MCP-only image (--target mcp):
Local build tag | Build target | Contents | Entrypoint |
|
|
|
|
docker build --target mcp -t vaultwarden-mcp:mcp-local docker/Usage
As a Python API client
from vaultwarden_mcp.auth import get_client, get_vault_crypto
client = get_client() # resolves provider_configs.vaultwarden from AgentConfig
print(client.server_version())
vault = get_vault_crypto() # unlocks the decrypted-vault backend on demand
for item in vault.list_items():
print(item["id"], item["type"])As an MCP server (CLI)
# Local stdio (for IDEs)
vaultwarden-mcp
# Networked streamable-http
vaultwarden-mcp --transport streamable-http --host 127.0.0.1 --port 8000Calling an MCP tool
Tools are action-routed — pass an action plus a JSON params_json string:
{
"tool": "vaultwarden_system",
"arguments": {
"action": "version",
"params_json": "{}"
}
}Destructive actions (bulk trash, permanent removal, disabling a user) also
require "confirm": true in params_json.
Architecture
vaultwarden_mcp/api/api_client_base.py (VaultwardenApiBase) owns HTTP transport and
authentication: it never follows redirects, stays pinned to the configured origin, bounds
response size and time, and distinguishes three auth modes per request —
user— a bearer token from the account's personal API key (grant_type=client_credentials), cached until shortly before expiry and renewed once on a401;admin— theVW_ADMINsession cookie issued after posting the instance admin token to/admin;none— public endpoints (/alive,/api/version,/api/config, prelogin).
vaultwarden_mcp/api/_routes.py is a committed, data-only catalog of all 281 Vaultwarden
1.37.3 API operations (accounts 39, ciphers 58, organizations 77, two-factor 26, admin 20,
emergency access 18, sends 14, folders 7, identity 6, misc 9, icons 2, events 4, public 1),
normalized from the server's own Rocket route attributes. api/_operation_manifest.py
derives a fully-typed parameter schema per operation from that catalog, consumed when
MCP_TOOL_MODE=verbose to synthesize one MCP tool per operation instead of a generic
params_json fallback.
The soft-remove trap: PUT /api/ciphers/delete moves items to trash (recoverable for
30 days) — this is the only bulk-remove route this package's tools ever call.
POST /api/ciphers/delete and DELETE /api/ciphers are permanent in Vaultwarden and
are deliberately not wired to any bulk-remove tool action.
Decrypted vault access (vaultwarden_mcp/crypto/) is a pluggable VaultCrypto
backend, selected by selector_refs.CRYPTO_BACKEND:
native(default) — pure-Python key derivation (PBKDF2-SHA256 or Argon2id) and HKDF stretching (crypto/keys.py), AES-256-CBC + HMAC-SHA256 EncStrings with the MAC checked before any decryption, and RSA-OAEP unwrap of organization and per-item keys (crypto/encstring.py). Only strict type-2 EncStrings are decrypted; anything else passes through unchanged. Validated against Bitwarden's own published SDK test vectors.bw_cli— delegates key handling to an installed Bitwarden CLI (bw), driving a private, per-instance CLI data directory rather than the invoking user's real login state, with credentials passed only through the child process environment.
Both backends produce and accept records in the Bitwarden CLI JSON shape, so
vaultwarden_mcp/vault/dedupe.py (exact or loose duplicate matching, keep-newest
selection, bulk soft-remove apply) behaves identically in either case of backend.
vaultwarden_mcp/kg_ingest.py projects vault entities as typed OWL nodes
(:VaultwardenItem subclasses, :VaultwardenFolder, :VaultwardenCollection,
:VaultwardenServer) and relationships (:vaultwardenInFolder,
:vaultwardenInOrganization, :vaultwardenInCollection) through the certified
vaultwarden-metadata source preset. Agent Connector SDK source_sync is the sole
graph commit, checkpoint, and reconcile authority. Only
identifiers, type codes, lifecycle dates, counts, and relationships are accepted — every
item name, username, password, note, URI, TOTP seed, custom field, attachment, folder
name, collection name, send content, and key is rejected before it ever reaches the graph
(vaultwarden_mcp/ontology/vaultwarden.ttl). See
docs/ingestion.md for the exact envelope and lifecycle.
MCP
Using as an MCP Server
The MCP Server can be run in stdio (local), streamable-http (networked), or
sse mode.
Runtime configuration
Keep provider_configs.vaultwarden endpoint, credential, selector, and TLS
references in AgentConfig; do not place resolved values in MCP client JSON. See
Environment Variables for the shape of that profile.
MCP Configuration Examples
Install the connector-focused
[mcp]extra. Examples usevaultwarden-mcp[mcp]to add FastMCP / FastAPI throughagent-connector-sdk; the required Agent Connector SDK core still carriesepistemic-graph[full]. The[agent-runtime]extra additionally enables model orchestration.
stdio Transport (local IDEs — Cursor, Claude Desktop, VS Code)
{
"mcpServers": {
"vaultwarden-mcp": {
"command": "uvx",
"args": [
"--from",
"vaultwarden-mcp[mcp]",
"vaultwarden-mcp"
],
"env": {
"MCP_TOOL_MODE": "intent",
"ACCOUNTSTOOL": "True",
"ADMINTOOL": "True",
"CIPHERSTOOL": "True",
"FOLDERSTOOL": "True",
"MAINTENANCETOOL": "True",
"ORGANIZATIONSTOOL": "True",
"SENDSTOOL": "True",
"SYSTEMTOOL": "True"
}
}
}
}Runtime references require an alias-aware launcher such as Arbora. Other launchers must omit those entries and inject the resolved values through their own runtime secret boundary.
Streamable-HTTP Transport (networked / production)
{
"mcpServers": {
"vaultwarden-mcp": {
"command": "uvx",
"args": [
"--from",
"vaultwarden-mcp[mcp]",
"vaultwarden-mcp",
"--transport",
"streamable-http",
"--port",
"8000"
],
"env": {
"TRANSPORT": "streamable-http",
"HOST": "127.0.0.1",
"PORT": "8000",
"MCP_TOOL_MODE": "intent",
"ACCOUNTSTOOL": "True",
"ADMINTOOL": "True",
"CIPHERSTOOL": "True",
"FOLDERSTOOL": "True",
"MAINTENANCETOOL": "True",
"ORGANIZATIONSTOOL": "True",
"SENDSTOOL": "True",
"SYSTEMTOOL": "True"
}
}
}
}Alternatively, connect to a pre-deployed Streamable-HTTP instance by url:
{
"mcpServers": {
"vaultwarden-mcp": {
"url": "http://localhost:8000/vaultwarden-mcp/mcp"
}
}
}Run a reviewed container image as a least-privilege stdio child (no listener or published port):
docker run -i --rm \
--read-only \
--cap-drop=ALL \
--security-opt=no-new-privileges \
--pids-limit=256 \
--tmpfs /tmp:rw,noexec,nosuid,nodev,size=64m \
-e TRANSPORT=stdio \
-e MCP_TOOL_MODE=intent \
-e ACCOUNTSTOOL=True \
-e ADMINTOOL=True \
-e CIPHERSTOOL=True \
-e FOLDERSTOOL=True \
-e MAINTENANCETOOL=True \
-e ORGANIZATIONSTOOL=True \
-e SENDSTOOL=True \
-e SYSTEMTOOL=True \
registry.example.invalid/vaultwarden-mcp@sha256:<digest> vaultwarden-mcpFor containerized network HTTP, supply an authenticated TLS ingress (or
direct server TLS), exact MCP_ALLOWED_HOSTS, and an exact trusted-proxy
CIDR policy through the operator-owned deployment profile. The generator
does not emit an unauthenticated non-loopback listener.
Auto-generated from the code-read env surface (MCP_TOOL_MODE + package vars) — do not edit.
Additional Deployment Options
vaultwarden-mcp can also run as a local container (Docker / Podman / uv) or be
consumed from a remote deployment. The
Deployment guide has full,
copy-paste mcp_config.json for all four transports — stdio, streamable-http,
local container / uv, and remote URL:
Local container — launch a reviewed immutable image as a least-privilege stdio child with no listener or published port.
Remote URL — connect through an operator-supplied authenticated HTTPS ingress. Keep the URL, outbound identity references, trust profile, and exact
MCP_ALLOWED_HOSTSinAgentConfig.
Knowledge-graph database (epistemic-graph)
Every image embeds the epistemic-graph[full] engine. For production — or to share one knowledge graph across multiple agents — run epistemic-graph as its own database container and point the agent at it. Deployment recipes (single-node + Raft HA), connection config, and the full database architecture (with diagrams) are in the epistemic-graph deployment guide. Local engine autostart or an operator-configured remote engine is selected through AgentConfig.
Environment Variables
Package environment variables
Variable | Example | Description |
|
| |
|
| |
|
| options: stdio, streamable-http, sse |
|
| network listeners outside loopback require configured authentication |
|
| |
|
| |
|
| options: none, embedded, remote |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
| — | e.g. registry.example.invalid/vaultwarden-mcp@sha256: |
| — | e.g. registry.example.invalid/vaultwarden-mcp@sha256: |
Inherited agent-connector-sdk variables (apply to every connector)
Variable | Example | Description |
| — | Comma-separated tool allow-list |
| — | Comma-separated tool deny-list |
| — | Comma-separated tag allow-list |
| — | Comma-separated tag deny-list |
| — | Remote Eunomia authorization server URL |
| — | OTLP collector endpoint |
| — | Outbound MCP child auth: |
| — | OIDC client id (service-account auth) |
|
| Runtime secret reference for the OIDC service account |
| — | HTTP Basic username ( |
|
| Runtime secret reference for HTTP Basic auth ( |
|
| Verbose logging |
|
| Unbuffered stdout (recommended in containers) |
|
| URL of the MCP server the agent connects to |
| — | Operator-configured LLM provider for the agent |
| — | Operator-configured model id for the agent |
|
| Serve the AG-UI web interface |
18 package + 17 inherited variable(s). Auto-generated from .env.example + the shared agent-connector-sdk set — do not edit.
The provider_configs.vaultwarden profile referenced above (see vaultwarden_mcp/auth.py)
carries reference-only configuration through AgentConfig:
Field | Notes |
| Toggles the profile. |
| Must resolve to an HTTPS or loopback origin. |
| Exactly one of the two — a named trust policy, e.g. |
| The account's personal API key ( |
| Only needed for decrypted vault operations ( |
| The plaintext instance admin token, only needed for |
|
|
References are env://NAME, vault://…, or secret://…, resolved only at runtime — never
a literal value.
Available MCP Tools
Each tool is action-routed: pass an action and a JSON params_json payload. Tool
domains can be toggled on or off with the listed environment variable. The table below is
auto-generated from the live server by the mcp-readme-table pre-commit hook
(python -m agent_connector_sdk.mcp.readme_tools) — do not edit it by hand.
Condensed action-routed tools (MCP_TOOL_MODE=condensed)
MCP Tool | Toggle Env Var | Description |
|
| Operate the account profile, two-factor methods, emergency access, |
|
| Administer the instance (users, config, diagnostics), plus |
|
| Read and write vault items (ciphers). |
|
| Read and write personal-vault folders. |
|
| Plan/apply vault deduplication and rotate or generate passwords. |
|
| Serve the certified metadata-only source projection. |
|
| Manage organizations, collections, members, groups, and policies, |
|
| Create, list, update, and remove Bitwarden Sends (text or file). |
|
| Read Vaultwarden server liveness, version, and public configuration. |
Verbose 1:1 API-mapped tools (MCP_TOOL_MODE=verbose or both)
MCP Tool | Toggle Env Var | Description |
|
| Generate/rotate the personal API key (client_credentials login secret) |
|
| Get KDF type/iterations for an email before login (also mounted at /identity/accounts/prelogin) |
|
| Rotate the personal API key |
|
| Enable TOTP 2FA by confirming a generated code |
|
| Enable TOTP 2FA (PUT alias) |
|
| Enable/update Duo (or Duo OIDC) 2FA |
|
| Enable/update Duo 2FA (PUT alias) |
|
| Register a new WebAuthn security key for 2FA |
|
| Register a WebAuthn key (PUT alias) |
|
| Enable YubiKey OTP 2FA |
|
| Enable YubiKey OTP 2FA (PUT alias) |
|
| Permanently delete an organization and all its data |
|
| Liveness/health check (also verifies DB connectivity) |
|
| Grantor approves an in-progress request early (skips wait) |
|
| Archive one cipher (hide from default view, distinct from trash) |
|
| Bulk archive ciphers |
|
| Trigger an on-demand database backup (sqlite only) |
|
| Bulk confirm accepted invites, delivering the org key to each new member |
|
| Bulk delete groups |
|
| Bulk remove members from the org |
|
| Bulk delete collections by id |
|
| Bulk-fetch public keys for a list of user ids |
|
| Bulk resend pending invites |
|
| Bulk restore revoked members |
|
| Bulk revoke members |
|
| Return server config/feature-flags/environment URLs used by clients on startup |
|
| Grantor confirms the grantee, delivering the grantor’s vault key encrypted for the grantee |
|
| Confirm one accepted invite |
|
| Create a new organization |
|
| Force-logout a user (invalidate all sessions/security stamp) |
|
| Delete own account (REST DELETE alias) |
|
| Delete an attachment |
|
| Delete an attachment (admin path) |
|
| Delete an attachment (POST alias) |
|
| Delete an attachment (admin path, POST alias) |
|
| Permanently delete a cipher (REST DELETE) |
|
| Permanently delete via admin path (REST DELETE) |
|
| Permanently delete a cipher (POST alias) |
|
| Permanently delete a cipher via admin path |
|
| Soft-delete (move to trash) a cipher |
|
| Soft-delete via admin path |
|
| Bulk permanently delete ciphers by id list |
|
| Bulk permanent delete via admin path |
|
| Bulk permanent delete (POST alias) |
|
| Bulk permanent delete via admin path (POST alias) |
|
| Bulk soft-delete (move to trash) |
|
| Bulk soft-delete via admin path |
|
| Reset configuration overrides back to defaults |
|
| Delete/revoke an emergency-access relationship |
|
| Delete a folder |
|
| Delete a folder (POST alias) |
|
| Delete a group |
|
| Remove one member from the org |
|
| Delete a collection |
|
| Delete a Send |
|
| Unlink a user’s SSO identity (force back to password login) |
|
| Permanently delete an instance user account |
|
| Remove a registered WebAuthn security key |
|
| Disable TOTP 2FA |
|
| Disable a specific 2FA provider |
|
| Disable a specific 2FA provider (PUT alias) |
|
| Disable (lock) a user account instance-wide |
|
| Anonymous: download the actual (still-encrypted) Send file bytes |
|
| Edit a member (POST alias) |
|
| Confirm email-2FA setup with the emailed code |
|
| Grantee accepts a pending emergency-access invite |
|
| Grantor invites another user (by email) as emergency contact |
|
| Re-enable a disabled user account |
|
| Generate a new TOTP secret + provisioning QR data |
|
| Generate a WebAuthn registration challenge |
|
| Get current YubiKey OTP 2FA configuration (masked) |
|
| List current user devices |
|
| Stub empty passkey list (prevents client errors; Vaultwarden does not support WebAuthn passwordless login) |
|
| Get attachment metadata + a short-lived download URL |
|
| Poll status of one auth request by id |
|
| Anonymous poll for approval + encrypted key once approved |
|
| List all pending/approved auth requests for current user |
|
| List only pending auth requests |
|
| Check whether org auto-enrolls new members into password-reset admin recovery |
|
| Get org billing metadata |
|
| Get org billing warning banners |
|
| Get one cipher by id |
|
| Get one cipher with admin-view fields (org admin bypassing normal access) |
|
| Get one cipher with full details incl. collection ids |
|
| List audit-log events for one cipher |
|
| List all ciphers owned by or shared with the user |
|
| List users/groups with access to one collection |
|
| List people the caller has granted emergency access to (as grantor) |
|
| Get one device by identifier |
|
| Get/return device-verification (new-device email) settings |
|
| Get sanitized server config as JSON for diagnostics |
|
| Diagnostic HTTP echo/status-code test endpoint |
|
| Return an empty master-password-policy stub for a placeholder org id |
|
| Get current Duo 2FA configuration (masked) |
|
| Check whether email 2FA is set up / request setup email |
|
| Get one emergency-access record by id |
|
| Get one folder by id |
|
| List all folders |
|
| List people who have granted the caller emergency access (as grantee) |
|
| Get one group |
|
| Get one group with members + collections |
|
| List members of a group |
|
| List org groups (collections of members for access assignment) |
|
| List groups with member/collection details |
|
| Check whether a device identifier is already known for an email |
|
| Get the effective master-password-complexity policy for the org |
|
| List organization members ("users") |
|
| Get one collection’s details |
|
| List all collections in an org |
|
| List collections with per-collection access details |
|
| Get org-scoped cipher listing with per-cipher collection membership |
|
| Check whether an org’s SSO domain claim is verified |
|
| List audit-log events for an organization |
|
| Export all org cipher data (admin-triggered org vault export) |
|
| List members with minimal fields (id/name/email) for UI pickers |
|
| Get organization details |
|
| Get the org’s public key + (if authorized) encrypted private key |
|
| Get the org’s public RSA key |
|
| List available subscription plans |
|
| Get one policy by type |
|
| Get another user public RSA key by user id |
|
| Get the 2FA recovery code (used if all 2FA devices are lost) |
|
| Get the data needed to perform admin password reset for a member (their reset_password_key + KDF settings) |
|
| Get self-host billing metadata |
|
| Get one of the caller’s own Sends by id |
|
| List the caller’s own Sends |
|
| Get the user’s configured equivalent-domains list (for autofill matching) |
|
| List pending security tasks (at-risk password / admin-assigned tasks) for the current device |
|
| List enabled 2FA methods for the user |
|
| Get one member’s full details |
|
| Look up one instance user by email |
|
| List collections the current user has access to (across all orgs) |
|
| List audit-log events for one org member |
|
| Get one instance user by id |
|
| List all instance users (JSON, for the admin table) |
|
| List registered WebAuthn/FIDO2 2FA security keys |
|
| Proxy a Have I Been Pwned breach lookup for a username |
|
| Fetch/cache a site favicon by hostname from the internet |
|
| Serve a favicon from local cache without external fetch (used when icon fetching is disabled) |
|
| Get a user’s KDF type/iterations/memory/parallelism by email before attempting login |
|
| Register a new account (email, name, master-password hash, encrypted keys, KDF params) |
|
| Grantee starts the takeover/view waiting period |
|
| Create/invite a new instance user from the admin panel |
|
| Bulk-provision/deprovision org members + groups from an external directory (SCIM/LDAP-style) |
|
| Current user leaves an organization |
|
| List all policies configured for the org |
|
| List policies visible to an not-yet-member using their invite token |
|
| Bulk move ciphers into a folder (or remove from folder) |
|
| Bulk move ciphers into a folder (PUT alias) |
|
| Return current server time |
|
| Invited user accepts the org invite |
|
| Delete an organization |
|
| Generate/rotate the org’s API key (for client_credentials / public API access) |
|
| Rotate the org’s API key |
|
| Invite a user to the organization by email |
|
| Grantee completes takeover: uploads the grantor’s user key re-encrypted under a NEW master key/password chosen by the grantee |
|
| Request password hint be emailed |
|
| Get org policies applicable to the emergency-access relationship |
|
| Anonymous: fetch a Send’s metadata by access id (for viewing/decrypting) |
|
| Anonymous: get a download URL for a Send file |
|
| Anonymous: legacy get-download-URL path |
|
| Anonymous: legacy path for fetching a Send by access id |
|
| Upload attachment (legacy single-phase) |
|
| Upload attachment via admin path |
|
| Re-key an attachment when its cipher is shared to an org |
|
| Begin attachment upload (v2): register metadata, get upload URL |
|
| Upload the encrypted attachment bytes (v2 second phase) |
|
| Create a new device "login with device" auth request |
|
| Bulk-set which users/groups can access a set of collections |
|
| Bulk-assign a set of ciphers to collections |
|
| Update a cipher |
|
| Update a cipher via the admin path (POST alias) |
|
| Partial update: only folder assignment / favorite flag (no re-encryption needed) |
|
| Move a personal cipher into an organization ("share") |
|
| Create a cipher (personal or org, no collections in this call) |
|
| Create a cipher as an org admin on behalf of the org (unassigned/admin path) |
|
| Create a cipher, optionally assigning collections in the same call |
|
| Bulk import ciphers + folders in one call |
|
| Clear a device push token (POST alias) |
|
| Set collections (v2, POST alias) |
|
| Set collections via admin path (POST alias) |
|
| Set collections (legacy v1, POST alias) |
|
| Persist configuration overrides (the settings normally set via env vars) |
|
| Delete own account (password/OTP confirmation in body) |
|
| Delete/revoke (POST alias) |
|
| Delete a group (POST alias) |
|
| Remove one member from a group |
|
| Delete an organization (POST alias) |
|
| Request account-deletion email (forgot-password-style deletion init) |
|
| Complete account deletion using emailed token |
|
| Set/update device push token |
|
| Confirm email change with token + new encrypted keys |
|
| Request email-change verification token (send code to new address) |
|
| Update an emergency-access grant (POST alias) |
|
| Client-side telemetry/event ingestion endpoint used by web-vault to batch-report UI events |
|
| Rename a folder (POST alias) |
|
| Create a folder |
|
| Update a group (POST alias, id in path) |
|
| Create a group |
|
| Change KDF algorithm/parameters (PBKDF2↔Argon2id, iterations, memory, parallelism) |
|
| Upload/set the user RSA keypair (encrypted private key + public key) |
|
| Bulk import ciphers directly into an organization (personal-vault-style import scoped to an org) |
|
| Upload the organization’s RSA keypair at org-creation time |
|
| Update organization settings (POST alias) |
|
| Delete a collection (POST alias) |
|
| Update a collection (POST alias) |
|
| Create a collection |
|
| Change master password |
|
| Update profile fields (legacy POST alias of PUT) |
|
| Full account key rotation: re-encrypt user key, private key, and every cipher/folder/send key |
|
| Create a text-type (or metadata-only) Send |
|
| Create a file-type Send (legacy single-phase upload) |
|
| Begin a file-type Send (v2): register metadata, get upload URL |
|
| Upload the encrypted Send file bytes (v2 second phase) |
|
| Set initial master password (post-SSO/key-connector account provisioning) |
|
| Set equivalent-domains list |
|
| Rotate security stamp (invalidates all other sessions/JWTs) |
|
| Request email verification (resend verify link) for current email |
|
| Verify current email address ownership via emailed token |
|
| Variant prelogin returning the newer MasterPasswordUnlockData shape |
|
| Pre-validate an SSO organization identifier before redirecting to the IdP |
|
| Get own user profile (email, name, org memberships, premium status) |
|
| Irreversibly delete ALL ciphers in an organization |
|
| Irreversibly delete ALL of the caller’s personal ciphers (and folders) |
|
| Approve/deny an auth request from an already-approved device |
|
| Set avatar color |
|
| Update a cipher (PUT alias) |
|
| Update a cipher via the admin path |
|
| Partial update (PUT alias) |
|
| Share a cipher (PUT alias) |
|
| Bulk share multiple ciphers to an org |
|
| Clear a device push token (public, used by push relay callbacks) |
|
| Set the collections a cipher belongs to (v2, returns updated cipher) |
|
| Set collections via admin path |
|
| Set the collections a cipher belongs to (legacy v1) |
|
| Set/update device push token (PUT alias) |
|
| Update wait-time/type of an emergency-access grant |
|
| Rename a folder |
|
| Update a group |
|
| Set which members belong to a group |
|
| Edit a member (role, collection access, groups) |
|
| Update organization settings (name, billing email, etc.) |
|
| Update a collection (rename, reassign users/groups) |
|
| Update one policy by type |
|
| Update one policy by type (newer response shape) |
|
| Update profile fields (name, avatar color) |
|
| Admin completes account-recovery: submits a brand-new master key for a member using the org-held reset_password_key |
|
| Remove the password requirement from a Send |
|
| Alias/step of admin-initiated password reset |
|
| Member opts in/out of admin password-reset recovery |
|
| Update a Send (name/notes/text/expiry/password/max access count) |
|
| Set equivalent-domains list (PUT alias) |
|
| Finish registration after email verification (submits the same keyset payload as identity_register) |
|
| Send the registration email-verification code |
|
| Resend one pending invite |
|
| Grantor rejects/cancels an in-progress request |
|
| Strip all 2FA methods from a user (admin recovery action) |
|
| Request an OTP (emailed) to re-verify identity before a sensitive action |
|
| Grantor resends a pending emergency-access invite |
|
| Resend a pending registration invite email |
|
| Restore one cipher from trash |
|
| Restore one cipher from trash via admin path |
|
| Bulk restore from trash |
|
| Bulk restore from trash via admin path |
|
| Restore a revoked member |
|
| Restore a revoked member (newer response shape) |
|
| Get last vault revision timestamp (used by clients to decide whether to sync) |
|
| Revoke one member’s access without removing them (keeps external_id/history) |
|
| Send/resend the email-2FA setup verification code |
|
| Send the 2FA email code during login (pre-auth, device-scoped) |
|
| Full vault sync: ciphers, folders, collections, sends, org/policy/domain metadata in one payload |
|
| Grantee begins password takeover: server returns grantor’s KDF settings + encrypted key |
|
| Send a test email to verify SMTP configuration |
|
| Unarchive one cipher |
|
| Bulk unarchive ciphers |
|
| Change a user’s org role from the admin panel |
|
| Force a client-sync revision bump for one/many users |
|
| Verify the OTP from request_otp |
|
| Verify current master password hash (used before sensitive UI actions) |
|
| Return server version string |
|
| Grantee views the grantor’s vault (read-only) after approval/wait elapses |
9 action-routed tool(s) · 281 verbose 1:1 tool(s). Each is enabled unless its <DOMAIN>TOOL toggle is set false; MCP_TOOL_MODE selects the surface (intent default — the six verb-tools, granular set loaded on demand · condensed action-routed · verbose 1:1 · both). Auto-generated — do not edit.
The tool domains this package registers (final names, once every domain module lands):
vaultwarden_system, vaultwarden_accounts, vaultwarden_ciphers, vaultwarden_folders,
vaultwarden_organizations, vaultwarden_sends, vaultwarden_admin, and
vaultwarden_maintenance. Destructive operations require "confirm": true.
Documentation
Full documentation is published to the GitHub Pages site and mirrored under docs/:
See AGENTS.md for domain-specific traps (the soft-vs-hard remove routes, the upper-case
credential alias rule, and the KG metadata-only boundary).
Repository Owners
Contribute
Contributions are welcome! Please ensure code quality by running local checks before submitting pull requests:
Format code using
ruff format .Lint code using
ruff check .Validate type-safety with
mypy .Run test suites using
pytest
Governed capability contract
This package ships a compact canonical skill surface with specialist procedures
kept as referenced workflows. The current MCP tools, skill metadata,
connector_manifest.yml, ontology, mappings, shapes, fixtures, migrations,
tool-schema fingerprints, and certification metadata form one versioned
capability contract. Validate them together; do not rely on stale tool names or
historical per-task skill wrappers.
Runtime endpoints, credentials, certificate trust, tenant identity, retention, and observability policy are deployment inputs and are never packaged values. See Configuration, trust, and privacy before enabling a network transport, connector ingestion, Arbora delegation, or trace export.
Available Tools
9 toolsvaultwarden_accountsVaultwarden AccountsB
Operate the account profile, two-factor methods, emergency access, and audit event feeds.
Dispatches to every Vaultwarden accounts, two_factor,
emergency_access, and events API route by its route name.
CONCEPT:VW-ECO.mcp.account-operations
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Vaultwarden accounts/two_factor/emergency_access/events operation name (a Route.name). Call with action='list_actions' to list every available operation. | |
| params_json | No | JSON object of path/query parameters for the action. | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it largely fails to. It says it dispatches by route name but does not disclose that some dispatched routes are mutating/destructive (2FA disable, emergency access grants, account deletion), any permission or auth requirements, or rate limits. Naming the dispatch pattern is mildly useful, but the safety profile of a multi-domain router is undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact lines, front-loaded with the verb and resource list before the dispatch explanation. The trailing 'CONCEPT:VW-ECO.mcp.account-operations' token is non-prose noise that costs a bit of polish but the core text is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, for a router spanning four distinct API domains, the description stops short of clarifying how route names map to actions or which sub-domains carry destructive operations, leaving an agent to discover that via list_actions. Minimally adequate for the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters and the action='list_actions' discovery path, making 3 the baseline. The description adds no syntax, format, or naming-convention detail for 'action' or 'params_json' beyond what the schema states, so it neither compensates nor detracts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Operate') and enumerates the specific resources it covers: account profile, two-factor methods, emergency access, and audit event feeds. It also explains the dispatch mechanism ('Dispatches to every Vaultwarden accounts, two_factor, emergency_access, and events API route by its route name'), which distinguishes it from siblings like vaultwarden_ciphers or vaultwarden_organizations. The domain scoping gives a competent agent enough to tell it apart from the other module tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the domain listing: the agent infers it should pick this tool for account/2FA/emergency/audit operations. There is no explicit when-to-use framing, no named alternative among the eight siblings, and no mention in the description that action='list_actions' is the discovery entry point (that hint lives only in the schema). Adequate but with a clear gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vaultwarden_adminVaultwarden AdminB
Administer the instance (users, config, diagnostics), plus identity-server and favicon routes.
Admin routes require the instance admin token (VW_ADMIN cookie
auth). When it is not configured, or is rejected, the server's error
is surfaced as a clear {"error", "status"} dict rather than a
raw exception.
CONCEPT:VW-ECO.mcp.admin-operations
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Vaultwarden admin/identity/icons operation name (a Route.name). Call with action='list_actions' to list every available operation. | |
| params_json | No | JSON object of path/query/body parameters for the action. | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose two genuinely useful behavioral facts: admin routes require the instance admin token (VW_ADMIN cookie auth), and rejected/missing credentials surface as a {"error","status"} dict rather than a raw exception. It stops short of describing the read/write/destructive nature of the underlying actions, which matters for a multi-action admin tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence front-loads the purpose cleanly, but the trailing "CONCEPT:VW-ECO.mcp.admin-operations" line is internal taxonomy that adds no value for an agent and dilutes the structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shapes needn't be explained, and the auth/error notes cover the operational essentials. However, for a dispatcher across many admin actions the description gives only category labels (users, config, diagnostics) with no sense of what those actions change.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both action and params_json are well documented in the schema, including the list_actions discovery pattern. The description adds no additional parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ("Administer the instance") and scopes it to users, config, diagnostics, plus identity-server and favicon routes. This distinguishes it from the narrower siblings like vaultwarden_accounts or vaultwarden_ciphers, though the mixed scope (admin + identity + favicon) is slightly muddled.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to reach for this tool versus siblings such as vaultwarden_system or vaultwarden_maintenance; the reader must infer it from the word "Administer." The action='list_actions' discovery hint lives in the schema, not the description, so the description itself offers no routing guidance or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vaultwarden_ciphersVaultwarden CiphersA
Read and write vault items (ciphers).
The decrypted actions (list_items, get_item, create_item,
edit_item) return or accept plaintext item contents because the
caller explicitly asked for them — never log, echo, or otherwise
surface that content elsewhere. move_to_trash soft-deletes items
by id (recoverable). Every other ciphers API route is reachable
by its route name via call_operation.
CONCEPT:VW-ECO.mcp.cipher-operations
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | One of 'list_items', 'get_item', 'create_item', 'edit_item', 'move_to_trash', or any raw ciphers-domain Route.name. Call with action='list_actions' to list every available operation. | |
| params_json | No | JSON object of parameters for the action. | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful behavior: decrypted actions return/accept plaintext (a real security constraint), and move_to_trash is a recoverable soft-delete. It omits auth requirements and rate limits, but the plaintext and soft-delete disclosures are genuine beyond-schema value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence, followed by tightly scoped operational notes; little is wasted. The trailing CONCEPT tag is non-functional noise but doesn't materially bloat the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers the key actions plus the call_operation fallback and a list_actions discovery path. For a multi-action dispatcher with no annotations, this is nearly complete, missing only auth/scope prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents 'action' and 'params_json', establishing a baseline of 3. The description names the valid actions and points to list_actions, but adds no syntax or format detail for the params_json payload beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource pair, 'Read and write vault items (ciphers),' and enumerates the primary actions (list_items, get_item, create_item, edit_item, move_to_trash). An agent can see it operates on vault items, though it never explicitly contrasts itself with siblings like vaultwarden_accounts or vaultwarden_folders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the privileged decrypted actions and notes that other ciphers routes are reachable by route name via call_operation, which implies a usage pattern. However, it offers no explicit when-to-use-this-vs-sibling guidance or prerequisites, leaving selection between the vaultwarden_* tools largely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vaultwarden_foldersVaultwarden FoldersB
Read and write personal-vault folders.
list_folders and create_folder (name) return decrypted
folder names because the caller explicitly asked for them. Every
other folders API route is reachable by its route name via
call_operation.
CONCEPT:VW-ECO.mcp.folder-operations
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | One of 'list_folders', 'create_folder', or any raw folders-domain Route.name. Call with action='list_actions' to list every available operation. | |
| params_json | No | JSON object of parameters for the action. | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does add real value by disclosing that list_folders/create_folder return decrypted folder names and that the tool covers both read and write. It does not state permission requirements, whether creates can fail on duplicates, or any rate limits, leaving meaningful gaps for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core capability and the decryption caveat are front-loaded in the first two sentences, and there is little waste. The trailing 'CONCEPT:VW-ECO.mcp.folder-operations' tag is noise for an agent reader but doesn't harm comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, and the dual-mode dispatch is covered. But for a tool that includes a write operation with zero annotations, the description should say more about write behavior, permissions, and the shape of params_json per action, which it leaves to the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both action and params_json thoroughly. The description only adds the hint that create_folder takes a 'name' parameter, which is marginal beyond what the schema provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource ('Read and write personal-vault folders') and names the specific operations (list_folders, create_folder) plus the fallback route mechanism. The domain scoping ('personal-vault folders') distinguishes it reasonably from siblings like vaultwarden_ciphers or vaultwarden_organizations, though it doesn't explicitly contrast against them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the dispatch model (named actions vs. raw Route.name via call_operation) and notes list_actions exists, which is useful implied guidance. However, it gives no guidance on when to prefer folder operations over sibling tools, and no prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vaultwarden_maintenanceVaultwarden MaintenanceA
Plan/apply vault deduplication and rotate or generate passwords.
Deduplication and rotation results carry item ids and counts only. Applying deduplication or rotating a password requires confirm: true, and a loose deduplication plan is never applied automatically.
CONCEPT:VW-ECO.mcp.maintenance-operations
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | One of 'plan_deduplication', 'apply_deduplication', 'rotate_password', or 'generate_password'. | |
| params_json | No | JSON object of parameters for the action. | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose real behavior: results return item ids and counts only, applying/rotating requires confirm: true, and a loose deduplication plan is never auto-applied. It omits permission/auth requirements and failure behavior, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by tightly packed behavioral constraints. The trailing 'CONCEPT:VW-ECO.mcp.maintenance-operations' tag is boilerplate that does not earn its place, costing a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the safety gating is covered. But for a multi-action tool whose real parameters are hidden in an opaque params_json object, the description gives no per-action parameter guidance, leaving a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value by revealing a 'confirm: true' flag that must be supplied inside params_json and is not documented in the schema. It still does not describe what params_json should contain for each action (e.g., which item id rotate_password needs).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names specific verbs and resources: plan/apply deduplication and rotate/generate passwords. It is clearly distinct from the sibling tool set (accounts, ciphers, folders, etc.), which are all CRUD/resource tools, though the description never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the enumerated actions and the gating rules (apply/rotate need confirm: true), which tells the agent when a write is permitted. However, there is no explicit when-to-use-this-vs-alternatives statement or guidance on which action to pick in a given situation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vaultwarden_metadataVaultwarden MetadataB
Serve the certified metadata-only source projection.
metadata_snapshot returns opaque identifiers, type codes, lifecycle timestamps, counts, and typed relationships. Agent Connector SDK source_sync is the only graph commit/checkpoint/reconcile authority. Backfeed is explicitly unsupported.
CONCEPT:VW-KG.ingest.metadata-only
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | One of 'metadata_snapshot' or 'backfeed_metadata'. | |
| params_json | No | JSON object of metadata-source parameters. | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses meaningful behavior: the snapshot returns opaque identifiers, type codes, lifecycle timestamps, counts and typed relationships, and it states that commit authority lives elsewhere and backfeed is unsupported. It omits permissions, rate limits, and side-effect profile, so the disclosure is partial rather than rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is front-loaded and the middle paragraph is dense but informative, yet the trailing 'CONCEPT:VW-KG.ingest.metadata-only' token is cryptic and does little work for an agent. Length is moderate, but the jargon density reduces effective conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, and the two-parameter surface is small. The definition is adequate but leaves the schema-listed backfeed_metadata action in tension with its claim that backfeed is 'explicitly unsupported', and it provides no sibling-routing context, so it falls short of complete for an agent choosing among nine vaultwarden tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents 'action' and 'params_json', establishing the baseline of 3. The description names metadata_snapshot and backfeed_metadata, but adds no syntax or payload detail for params_json beyond what the schema provides. No extra value beyond structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a verb and resource ('Serve the certified metadata-only source projection') and lists what metadata_snapshot returns, but the phrasing is heavily jargon-laden and never plainly states what the tool is for. It does not distinguish this tool from siblings like vaultwarden_system or vaultwarden_maintenance, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It does communicate some directional guidance: commit/checkpoint/reconcile belongs to source_sync, and backfeed is unsupported. However, there is no explicit when-to-use statement relative to the eight sibling tools; the agent must infer that this is the metadata-projection read path. Implied usage only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vaultwarden_organizationsVaultwarden OrganizationsC
Manage organizations, collections, members, groups, and policies, plus the public LDAP import and misc server-settings/HIBP routes.
Dispatches to every Vaultwarden organizations, public, and
misc API route by its route name.
CONCEPT:VW-ECO.mcp.organization-operations
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Vaultwarden organizations/public/misc operation name (a Route.name). Call with action='list_actions' to list every available operation. | |
| params_json | No | JSON object of path/query parameters for the action. | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the dispatch-by-route-name mechanism, but nothing about mutation vs read behavior, destructive operations (org/policy deletion, LDAP import), authentication or server-config prerequisites, or rate limits — significant gaps for a dispatcher spanning dozens of write routes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded: coverage statement first, dispatch mechanism second. The trailing 'CONCEPT:' token is noise, and the 'plus the public LDAP import and misc...' clause is dense, but overall it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. However, for an unannotated mega-dispatcher over read and write routes, the description omits the operational prerequisites and safety context an agent needs before firing it, leaving it only minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains 'action' as a Route.name and 'params_json' as path/query parameters. The description adds only the general dispatch concept and does not clarify param_json shape for specific actions, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It names a concrete verb ('Manage') plus the resource families (organizations, collections, members, groups, policies, plus public LDAP and misc routes) and states the dispatch mechanism by route name. The domain enumeration implicitly separates it from siblings like vaultwarden_ciphers or vaultwarden_sends, though it never explicitly contrasts them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this tool versus siblings. The claim to also cover 'public' and 'misc server-settings/HIBP routes' actively blurs the boundary against vaultwarden_system and vaultwarden_maintenance without resolving which one wins. The only usage hint (action='list_actions') lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vaultwarden_sendsVaultwarden SendsB
Create, list, update, and remove Bitwarden Sends (text or file).
Dispatches to every Vaultwarden sends API route by its route
name.
CONCEPT:VW-ECO.mcp.send-operations
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Vaultwarden sends operation name (a Route.name). Call with action='list_actions' to list every available operation. | |
| params_json | No | JSON object of path/query parameters for the action. | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden, and it discloses the non-obvious multiplexing behavior (every sends route dispatched by route name) plus that removal is among the actions. It does not state auth requirements, permission scope, or whether removal is permanent/irreversible, which is a real gap for a tool that includes destructive operations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb/resource summary and kept to two short lines plus an identifier. The trailing CONCEPT tag is inert for an agent but does not bloat the text meaningfully.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the parameters are fully documented, so return values and argument shape are covered. What is missing is behavioral context for a multiplexer with no annotations: which actions mutate state, auth/permission needs, and any irreversibility of remove.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented in-schema, including the list_actions discovery hint, so the baseline is 3. The description adds no format or syntax detail for action or params_json beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names specific verbs (create, list, update, remove) and the resource (Bitwarden Sends, text or file), which clearly separates it from siblings like vaultwarden_ciphers or vaultwarden_folders. It also discloses the dispatch mechanism (routing by Route.name). It stops short of enumerating the concrete operations, which it defers to the list_actions action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the reader must infer this tool handles all sends operations and that the schema's action='list_actions' is the discovery path. There is no explicit when-to-use versus siblings or when-not to use, though the routing hint gives a workable entry point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vaultwarden_systemVaultwarden SystemC
Read Vaultwarden server liveness, version, and public configuration.
CONCEPT:VW-ECO.mcp.system-operations
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform. One of: 'alive', 'version', 'config'. | |
| params_json | No | JSON object of parameters (none required). | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It implies a harmless read ('Read', 'public configuration'), but says nothing about whether authentication is required, rate limits, or what happens on a failing/offline server — significant gaps for an ops tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is short, front-loaded, and waste-free. The trailing 'CONCEPT:VW-ECO.mcp.system-operations' tag adds little value for an agent but is brief enough not to be a serious defect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the required 'action' parameter is documented in the schema. However, for a system-operations tool with no annotations, the description omits any guidance on auth requirements or when each action is appropriate, leaving it only minimally viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema enumerates the three valid 'action' values, so the baseline is 3. The description restates the same three capabilities without adding syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') plus a concrete resource set ('Vaultwarden server liveness, version, and public configuration'), which maps to the three schema enum values alive/version/config. It does not name any sibling tool to differentiate itself, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives such as vaultwarden_metadata or vaultwarden_admin, nor any exclusion conditions. Usage (health/version checks) can only be inferred from the word 'liveness', which is thin guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.2.1- First observed
vaultwarden_accounts - First observed
vaultwarden_admin - First observed
vaultwarden_ciphers - First observed
vaultwarden_folders - First observed
vaultwarden_maintenance - First observed
vaultwarden_metadata - First observed
vaultwarden_organizations - First observed
vaultwarden_sends - First observed
vaultwarden_system
TDQS
Scored across 9 tools
Each tool targets a clearly distinct Vaultwarden domain (accounts, admin, ciphers, folders, maintenance, organizations, sends, system, metadata). Minor overlaps like admin vs. system config are differentiated by scope and description.
All tool names follow a consistent vaultwarden_<domain> snake_case pattern. There is no mixing of conventions or vague verb styles.
Nine grouped tools cover a broad API surface without excessive granularity. Each domain earns its place, and the count sits comfortably in the well-scoped range.
The surface covers core CRUD/lifecycle operations for vault items, folders, organizations, sends, accounts, admin, and system routes, with explicit route-name dispatch for remaining API routes. No obvious domain gap is apparent.
Maintenance
Related MCP Connectors
Agent-native notes, tasks, dev-docs, vaults, sync & handoffs. MCP + OpenAPI dual surface.
Give your AI hands. Identity, credential vault, and API gateway for autonomous agents.
Context and control for any AI. Agent identity, scoped access, and proof across tools.
Shared long-term memory vault for AI agents with 20 MCP tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents and automation scripts to securely interact with self-hosted Vaultwarden instances through the Bitwarden CLI, automatically managing vault sessions and providing tools to read, create, update, and delete secrets programmatically.5 npm2MIT
- AlicenseAqualityAmaintenanceMCP server for Vaultwarden/Bitwarden vault management. Enables AI agents to securely create, search, read, and update vault items via the official Bitwarden CLI, with safe-by-default redaction and support for both stdio and SSE transports.53487 npm22MIT
- FlicenseNot gradedqualityDmaintenanceEnables interaction with Bitwarden/Vaultwarden for password and secure note management, including creation, updating, deletion, and search of items and folders.1-

Bitwarden MCP Serverofficial
AlicenseBqualityBmaintenanceEnables AI assistants to securely manage Bitwarden vault items, folders, attachments, and organization administration through the Model Context Protocol.591,948 npm285GPL 3.0