Skip to main content
Glama
AIWerk

@aiwerk/mcp-server-vault

by AIWerk
README.md
# @aiwerk/mcp-server-vault

Bitwarden / Vaultwarden MCP server — BYOK vault access for AI agents.

> [!WARNING]
> **Security: do not use 0.2.2 or earlier.** Those versions returned item notes through `list_vault_items` (first 80 characters) and `get_vault_metadata` (full notes) for secure notes and login items. On a secure note the notes are the secret itself. Fixed in **0.2.3**, which returns only `has_notes`. If you ran either tool on an older version, treat the secrets kept in notes as exposed to your agent's context and its model provider.
>
> 0.2.3 is on npm (published with provenance) and is the `latest` tag, so a plain `npx -y @aiwerk/mcp-server-vault` gets the fixed version. Only an explicit `@0.2.2` pin still gets the vulnerable one.

Exposes 6 tools over stdio. Secret values and note contents are **never** sent in plaintext through `list_vault_items` or `get_vault_metadata`. Secrets are delivered only through Bitwarden Sends (E2E-encrypted one-time URLs).

## Install

```bash
npx -y @aiwerk/mcp-server-vault
```

## Configure

| Variable | Required | Default | Description |
|---|---|---|---|
| `VAULT_API_BASE` | ✅ | — | Base URL of your Bitwarden/Vaultwarden instance (no trailing slash), e.g. `https://pass.aiwerk.ch` |
| `VAULT_CLIENT_ID` | ✅ | — | Personal API key `client_id` (e.g. `user.abc-def-1234`) |
| `VAULT_CLIENT_SECRET` | ✅ | — | Personal API key `client_secret` |
| `VAULT_MASTER_PASSWORD` | ✅ | — | Vault master password (used for E2E decryption key derivation) |
| `VAULT_EXPOSED_COLLECTION` | — | `mcp-exposed` | Name of the collection visible to agents |
| `VAULT_AGENT_CREATED_COLLECTION` | — | `mcp-agent-created` | Name of the collection for agent-created secrets |
| `VAULT_API_TIMEOUT_MS` | — | `15000` | HTTP timeout in milliseconds |
| `DRY_RUN` | — | `0` | Set `1` to log write operations without executing them |
| `READ_ONLY` | — | `0` | Set `1` to block all write operations (Send creation and save) |

## Auth — Personal API Key

1. Log in to your Bitwarden/Vaultwarden instance
2. Go to **Account Settings → Security → Keys → API Key**
3. Note the `client_id` and `client_secret`
4. Reference: https://bitwarden.com/help/personal-api-key/

## Vault Setup

Before using this server, create two collections in your Vaultwarden organization:
- **`mcp-exposed`** — items you want to expose to agents (your existing secrets: API keys, passwords, etc.)
- **`mcp-agent-created`** — items written by agents via `save_generated_secret`

Add items to `mcp-exposed` via the Vaultwarden web UI.

### Custom fields

Optionally add these custom fields to items in `mcp-exposed` for fine-grained control:

| Field | Type | Purpose |
|---|---|---|
| `mcp-scope` | text | Comma-separated glob list of tool/server names allowed to use this item (e.g. `stripe.*,openai`) |
| `mcp-chat-reveal-allowed` | text | `"true"` to allow chat delivery of the Send URL |
| `mcp-delivery-channel` | text | `"chat"` (default), `"telegram"`, or `"email"` |

## Tools

| Tool | Description |
|---|---|
| `list_vault_items` | List items from `mcp-exposed` and `mcp-agent-created`. Returns metadata only — no secret values. |
| `get_vault_metadata` | Get full metadata for a named item (name, type, username, URIs, custom fields, expiry). No password/secret. |
| `reveal_secret_via_send` | Reveal a secret via a Bitwarden Send (E2E-encrypted one-time URL with configurable TTL and max-views). |
| `get_totp_code` | Get the current TOTP code for a login item, including remaining seconds in the period. |
| `save_generated_secret` | Save an agent-generated secret (password / api-key) into `mcp-agent-created` as a secure note. CREATE-only — no overwrite. |
| `save_login_item` | Save sign-in credentials (username + password + optional URL + TOTP seed) into `mcp-agent-created` as a real login item. CREATE-only — no overwrite. |
| `health_check` | Check connectivity: auth status, API version, collection visibility, item counts, latency. |

## Security model

- **Opt-in exposure**: only items in `mcp-exposed` or `mcp-agent-created` are accessible; all other items return `item_not_visible`
- **Read-only existing items**: no `update_*`, `delete_*`, or `change_*` tools exist
- **Secret value delivery via Send only**: `list_vault_items` and `get_vault_metadata` never return passwords, TOTP seeds, or api-key values
- **E2E encryption preserved**: the server decrypts vault data locally (master password stays in env vars, never sent over the wire)
- **Constrained agent writes**: `save_generated_secret` and `save_login_item` are CREATE-only into the dedicated `mcp-agent-created` collection

> **Note:** Actual `{{vault:NAME}}` placeholder resolution in tool call arguments happens in the AIWerk hosted bridge, not in this server. The bridge's resolution uses the same BYOC credentials. See the bridge-patch companion document for details.

## License

MIT — AIWerk <kontakt@aiwerk.ch>

Homepage: https://aiwerkmcp.com

TDQS

A4.1/5.0

Scored across 7 tools

Disambiguation4/5

Each tool has a largely distinct purpose, and descriptions explicitly cross-reference alternatives (e.g. save_login_item vs save_generated_secret, reveal_secret_via_send vs get_totp_code). The main overlap is list_vault_items vs get_vault_metadata, which both return metadata, though the descriptions clarify listing vs single-item detail.

Naming Consistency4/5

Most tools follow a clear verb_noun pattern (list_vault_items, get_vault_metadata, reveal_secret_via_send, save_generated_secret, save_login_item, get_totp_code). health_check is the only noun-style outlier, but it is a widely conventional name, so consistency is mostly maintained.

Tool Count5/5

Seven tools is well-scoped for a vault integration, covering listing, reading, revealing, writing, TOTP, and health. No tool appears redundant or filler.

Completeness3/5

Read and create operations are well covered (list, metadata, reveal, save secret, save login, TOTP, health), but the lifecycle is incomplete: there is no update, delete, or revoke operation for items or Sends. Agents cannot modify or clean up existing vault entries, which is a notable gap for a credential store.

Maintenance

ActivityMaintained
ResponsivenessNo issues