Warden MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BW_BIN | No | Explicit path to the Bitwarden CLI binary (bw). By default it looks for the bundled binary or system PATH. | |
| BW_HOST | No | The URL of the Bitwarden or Vaultwarden server (e.g., https://vaultwarden.example.com). | |
| BW_USER | No | The email address for Bitwarden/Vaultwarden login. | |
| READONLY | No | Set to 'true' to block all write operations (create/edit/delete/move/restore/attachments). | |
| BW_CLIENTID | No | The Bitwarden API Client ID for authentication. | |
| BW_PASSWORD | No | The master password required to unlock the vault. | |
| BW_CLIENTSECRET | No | The Bitwarden API Client Secret for authentication. | |
| KEYCHAIN_BW_HOME_ROOT | No | Root directory where Bitwarden CLI state is stored to avoid session/config clashes. | |
| KEYCHAIN_SESSION_TTL_MS | No | Session Time-To-Live in milliseconds. | 900000 |
| KEYCHAIN_MAX_HEAP_USED_MB | No | Maximum heap memory usage in MB before triggering fuse (set '0' to disable). | 1536 |
| KEYCHAIN_SESSION_MAX_COUNT | No | Maximum number of active sessions. | 32 |
| KEYCHAIN_METRICS_LOG_INTERVAL_MS | No | Interval for logging metrics in milliseconds (0 to disable). | 0 |
| KEYCHAIN_SESSION_SWEEP_INTERVAL_MS | No | Interval for sweeping expired sessions in milliseconds. | 60000 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| keychain_statusA | Returns Bitwarden CLI status (locked/unlocked, server, user). This is a lazy check: not-ready status does not mean later keychain tool calls cannot unlock or recover on demand. |
| keychain_syncA | Pull the latest vault data from the server (bw sync). Returns the last sync timestamp. |
| keychain_sdk_versionA | Return the Bitwarden SDK version reported by the bundled bw CLI. Use this read-only check when diagnosing CLI/runtime compatibility without touching vault data. |
| keychain_encodeA | Base64-encode a string with bw encode. This never mutates the vault; it only returns encoded text. |
| keychain_generateA | Generate a password or passphrase with bw generate. This never mutates the vault; pass reveal=true to return the value, and NOREVEAL or KEYCHAIN_NOREVEAL force redaction. |
| keychain_generate_usernameA | Generate a username like the Bitwarden generator (random word, plus-addressed email, catch-all, forwarded alias). This never mutates the vault; pass reveal=true to return the value, and NOREVEAL or KEYCHAIN_NOREVEAL force redaction. |
| keychain_list_foldersA | List personal Bitwarden folders visible to the current user. Use this to discover folder ids for item organization; returns safe folder id/name summaries only. |
| keychain_create_folderA | Create a personal Bitwarden folder. Use this to organize items outside organization collections. |
| keychain_edit_folderA | Rename an existing personal Bitwarden folder by id. This mutates only folder metadata, not the items inside it, and returns the updated folder id/name summary. |
| keychain_delete_folderA | Delete a personal Bitwarden folder. Destructive: there is no restore helper in this server. |
| keychain_list_org_collectionsA | List organization-scoped collections for the required organizationId. Use this after discovering an organization to find collection ids; returns safe id/name summaries. |
| keychain_create_org_collectionA | Create a new organization-scoped collection inside the required organizationId. Use this for shared vault grouping; returns the created collection summary. |
| keychain_edit_org_collectionA | Rename an existing organization-scoped collection inside the required organizationId. This mutates collection metadata only and returns the updated collection summary. |
| keychain_delete_org_collectionA | Delete an organization collection. Destructive: there is no restore helper in this server. |
| keychain_move_item_to_organizationA | Move an existing vault item into the required organizationId. Optionally pass collectionIds to assign organization collections during the move; collection ids are organization collections, not personal folders. Returns the moved item summary with normal redaction rules. |
| keychain_list_organizationsA | List organizations available to the current Bitwarden user so you can discover the organizationId required for org-scoped tools. |
| keychain_list_collectionsA | List collections in the current vault, optionally filtered by organizationId. Use list_org_collections when you already know the organization and only want organization-scoped collections. |
| keychain_search_itemsA | Search vault items by text and filters (org/folder/collection/url). This wraps bw list items --search, which does not reliably search custom field values. |
| keychain_get_itemA | Get the full vault item by stable item id. Secret fields and signed attachment URLs are redacted by default; pass reveal=true only when the caller is allowed to receive secrets. |
| keychain_get_uriA | Get the first login URI matched by bw get uri for a search term. Terms can be names, ids, or other bw-supported selectors and may be ambiguous, so use an exact item id when possible. URI values are returned as non-secret scalar results. |
| keychain_get_notesA | Get item notes matched by bw get notes for a search term. Notes are treated as secret output here: value is null unless reveal=true and NOREVEAL is not active. Terms can be ambiguous, so prefer an exact item id when possible. |
| keychain_get_exposedA | Check the exposed-password count returned by bw get exposed for a search term. Terms follow bw lookup behavior and may be ambiguous; use an exact item id or precise selector when possible. Not-found results return a null scalar value instead of a thrown not-found error. |
| keychain_get_folderA | Get one personal Bitwarden folder by stable folder id via bw get folder. Use this to verify a folder id before item updates; returns safe folder metadata only. |
| keychain_get_collectionA | Get a collection by id (bw get collection). Use organizationId when you need to disambiguate an organization-scoped lookup. |
| keychain_get_organizationA | Get one Bitwarden organization by stable organization id via bw get organization. Use list_organizations first when the id is unknown; returns organization metadata only. |
| keychain_get_org_collectionA | Get an organization collection by id (bw get org-collection). organizationId is optional and narrows the org-scoped lookup when provided. |
| keychain_delete_itemA | Delete a vault item by id. By default this is a soft delete to trash and can be restored with restore_item; set permanent=true to hard delete through bw. Returns only the requested id, not the deleted item contents. |
| keychain_delete_itemsA | Delete multiple vault items by id in one session. Soft-deletes to trash by default; set permanent=true to hard delete every id. Returns per-id ok/error results so partial failures are visible. |
| keychain_restore_itemA | Restore a soft-deleted vault item from trash by id. Use this after delete_item or delete_items when permanent was omitted or false; hard-deleted items cannot be restored. Returns the restored item summary with normal redaction rules. |
| keychain_create_attachmentA | Attach base64-encoded file bytes to an existing item. Returns the updated item summary with normal redaction rules, so secrets stay hidden unless reveal is allowed. |
| keychain_delete_attachmentA | Delete an attachment from its parent item using itemId plus attachmentId. The attachment id comes from item attachment metadata; this is destructive for that attachment and then refetches the parent item. Returns the updated item summary with normal redaction rules. |
| keychain_get_attachmentA | Download an attachment from a parent item and return raw bytes as contentBase64. Pass itemId plus an attachment id, or an unambiguous filename selector resolved from the item metadata before calling bw get attachment. The response includes filename, byte count, and base64 content for local decoding. |
| keychain_send_listA | List all the Sends owned by you (bw send list). This is read-only and does not mutate the vault. |
| keychain_send_templateA | Get a Bitwarden Send JSON template from bw send template. Choose a text or file template with object values send.text/text or send.file/file before using encoded create/edit flows. This is read-only and does not create a Send. |
| keychain_send_getA | Get Sends owned by you. Use text=true to return text content; downloadFile=true to download a file send (bw send get). |
| keychain_send_createA | Quick-create a Bitwarden Send through bw send. Use type=text with text, or type=file with filename plus contentBase64; deleteInDays controls expiration deletion, maxAccessCount limits accesses, and password protects the Send. For advanced JSON templates or edits, use send_create_encoded and send_edit instead. |
| keychain_send_create_encodedA | Create a Send with the advanced bw send create flow. Provide an encodedJson template or raw json to encode, or create directly from text/file fields; file uses filename plus contentBase64 and hidden only affects text Sends. Use this when you need template-level fields beyond the quick send_create options. |
| keychain_send_editA | Edit an existing Send with the advanced bw send edit flow. Provide encodedJson or raw json containing the Send edit payload; raw json is encoded before invoking bw. Optional itemId maps to --itemid for item-linked Send edits. |
| keychain_send_remove_passwordA | Remove a Send's saved password so recipients no longer need that password. This is destructive for the Send password only; it does not delete the Send content. Use send_delete when the entire Send should be removed. |
| keychain_send_deleteA | Delete a Bitwarden Send by id through bw send delete. This is destructive for the Send and its shared content; it does not delete any vault item that may have been used to create it. Returns the bw result payload when available. |
| keychain_receiveA | Receive a Bitwarden Send from an HTTPS url. Provide password when the Send is protected; obj=true returns the parsed JSON object, downloadFile=true downloads file bytes as base64, and the default returns received text. This reads a shared Send and does not create or modify vault items. |
| keychain_get_usernameA | Get a login username matched by bw get username for a search term. Usernames are treated as non-secret scalar output, but exact item ids are safest for ambiguous names. |
| keychain_get_passwordA | Get a login password by search term (bw get password). The value is null unless reveal=true, and NOREVEAL or KEYCHAIN_NOREVEAL can still force redaction. |
| keychain_get_totpA | Get the current TOTP code by search term (bw get totp). The value is null unless reveal=true, and NOREVEAL or KEYCHAIN_NOREVEAL can still force redaction. |
| keychain_get_password_historyA | Get an item password history (if any). Returning passwords requires reveal=true. |
| keychain_create_loginA | Create a login item with username/password/TOTP/URI data. Use this for website or app credentials instead of a secure note, card, or identity. Accepts custom fields and attachments, supports folder/organization/collection scoping, and returns a redacted item summary by default. |
| keychain_create_loginsA | Create multiple login items in one call. Use this when you need several independent credentials at once, with the same login-item behavior as create_login. Set continueOnError to keep going after a failure and receive per-item ok/error results; returned items are redacted by default. |
| keychain_set_login_urisA | Set or update the URI list on a login item. mode=replace overwrites the full list; mode=merge updates existing URIs and adds new ones by URI. Match values can be domain, host, startsWith, exact, regex, or never. |
| keychain_create_noteA | Create a secure note item. Use this for free-form text or secrets that do not belong in a login, card, identity, or SSH key item. Accepts custom fields plus folder/organization/collection scoping, and returns a redacted item summary by default. |
| keychain_create_ssh_keyA | Create an SSH key object stored as a secure note with standard fields. Use this when you need a public/private key pair plus optional fingerprint or comment, not a login or payment card. The private key is stored in a hidden field and redacted in returned summaries; folder, organization, and collection scoping is supported. |
| keychain_create_cardA | Create a payment card item. Use this for cardholder name, brand, number, expiry, and code, not for login credentials or notes. Accepts custom fields plus folder/organization/collection scoping, and returned summaries redact the card number, code, and hidden fields. |
| keychain_create_identityA | Create an identity item. Use this for personal, contact, and address data instead of a login or card. Accepts structured identity fields plus custom fields and scoping, and returned summaries redact sensitive identity fields and hidden custom fields. |
| keychain_update_itemA | Update selected fields of an item by id. The patch is applied to the current item, so omitted fields stay unchanged while explicit nulls and empty arrays overwrite the stored folder, collection, login URI, or custom-field values. Use this for partial edits instead of reconstructing the full item. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/icoretech/warden-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server