Skip to main content
Glama
X1pheR

bws-secret-delivery-mcp

by X1pheR

bws-secret-delivery-mcp

A deliberately narrow Model Context Protocol server for Bitwarden Secrets Manager. It uses Bitwarden's official bws CLI to resolve secrets and deliver them directly to approved local files without returning secret values to the MCP client or model.

This community project is not affiliated with or endorsed by Bitwarden, Inc.

Why this exists

General-purpose Bitwarden/BWS MCP servers are useful when an agent genuinely needs to see or manage secrets. Infrastructure automation often needs a different boundary: the agent should be able to say which secret goes to which approved consumer file without receiving the secret itself.

bws-secret-delivery-mcp intentionally does less:

  • metadata-only project and secret discovery;

  • direct secret-to-file delivery;

  • complete raw env-file generation from selected secrets;

  • no plaintext secret retrieval;

  • no arbitrary command execution;

  • no creation, editing or deletion of Bitwarden secrets or projects.

Related MCP server: VaultBridge

Tool surface

Tool

Behavior

bws_status

Verify local configuration and authenticated BSM access.

bws_project_list

List project metadata.

bws_secret_list

List secret metadata; values and notes are omitted.

bws_secret_write_file

Atomically write one secret value to an approved file.

bws_secret_write_raw_env_file

Atomically write a complete raw KEY=value env file from selected secrets.

There is intentionally no get_secret, run, create, edit, or delete tool.

Requirements

  • Python 3.12+

  • Bitwarden Secrets Manager CLI (bws)

  • A dedicated Bitwarden Machine Account with access only to the projects the MCP server needs

  • An MCP client that supports stdio servers

Install bws using Bitwarden's official installation instructions.

Configuration

The server is configured with environment variables supplied by the MCP host:

Variable

Required

Default

Meaning

BWS_ACCESS_TOKEN_FILE

yes

-

Private file containing one Machine Account access token. Must have no group/other permissions.

BWS_ALLOWED_OUTPUT_DIRS

yes

-

os.pathsep-separated list of existing directories. Secret writes are rejected outside these roots.

BWS_BIN

no

bws

Path or command name for the official bws executable.

BWS_SERVER_URL

no

Bitwarden default

Optional Bitwarden server URL passed to bws --server-url.

BWS_TIMEOUT_SECONDS

no

30

CLI timeout, maximum 120 seconds.

BWS_DEFAULT_FILE_MODE

no

0600

Mode for new output files. Execute/world permissions are rejected. Existing file mode and ownership are preserved.

Example MCP registration:

{
  "mcpServers": {
    "bws-secret-delivery": {
      "command": "uv",
      "args": [
        "run",
        "--frozen",
        "--directory",
        "/opt/bws-secret-delivery-mcp",
        "bws-secret-delivery-mcp"
      ],
      "env": {
        "BWS_ACCESS_TOKEN_FILE": "/run/secrets/bws-machine-token",
        "BWS_ALLOWED_OUTPUT_DIRS": "/srv/app-a/.secrets:/srv/app-b/.secrets"
      }
    }
  }
}

Keep allowed output roots narrow. A dedicated consumer secret directory is safer than allowing an entire application or stack tree.

Raw env files

bws_secret_write_raw_env_file writes one complete file in deterministic key order. Values are emitted exactly after KEY=. Values containing NUL, LF or CR are rejected because the format is intentionally line-oriented.

For Docker Compose 2.30+ use the file with format: raw so Compose does not interpret $, quotes or other characters in secret values:

env_file:
  - path: ./.secrets/runtime.env
    format: raw

Example tool input:

{
  "target_path": "/srv/my-app/.secrets/runtime.env",
  "secrets": {
    "DATABASE_PASSWORD": "database-password",
    "API_TOKEN": "2e71f52b-0000-0000-0000-000000000000"
  }
}

Each mapping value is either an exact Bitwarden secret key or a secret UUID. If a key is ambiguous, supply project_id or use a UUID.

File-safety behavior

  • target_path must be absolute.

  • Its resolved parent must remain inside a configured output root.

  • Existing symlinks and non-regular target files are rejected.

  • Existing targets with permissions for other are rejected.

  • Writes use a temporary file in the same directory, fsync, atomic os.replace(), then a parent-directory fsync.

  • Existing mode and ownership are preserved when possible.

  • MCP responses contain target metadata and secret identifiers, never secret values or value lengths.

Development

python -m venv .venv
. .venv/bin/activate
pip install -e '.[test]'
pytest

Scope

This server is for interactive/operator-driven secret delivery. It is not intended to replace declarative secret renderers, deployment orchestration, Kubernetes secret operators, or a full Bitwarden administration client.

License

MIT

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    -
    quality
    D
    maintenance
    Enables secure management of agent-scoped secrets in HashiCorp Vault through MCP protocol. Provides per-agent namespacing, multiple authentication methods (API key, JWT, mTLS), and optional encryption/decryption capabilities with built-in rate limiting.
    3
  • A
    license
    -
    quality
    D
    maintenance
    Secret management MCP server for AI coding agents that prevents secrets from entering the LLM context window by returning metadata only and using side-channel injection. Integrates with Bitwarden and offers hooks for auto-capture and leak prevention.
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    An MCP server for using Bitwarden Secrets Manager as durable credential storage for agent workflows, enabling secure secret storage, retrieval, and injection into trusted executables.
    7
    MIT

View all related MCP servers

Related MCP Connectors

  • Encrypted secret store and rotation for autonomous agent credentials

  • Issue, rotate and revoke scoped API-key passes for 25+ providers — the agent never sees a real key

  • Remote MCP for Copilot CLI switch gate MCP, structured receipts, audit logs, and reviewer-ready evid

View all MCP Connectors

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/X1pheR/bws-secret-delivery-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server