@aiwerk/mcp-server-vault
Securely access a Bitwarden/Vaultwarden vault through 6 MCP tools, exposing only metadata and delivering secrets via E2E-encrypted Bitwarden Sends.
List vault items from
mcp-exposedandmcp-agent-createdcollections, with optional name/collection filters — metadata only, never secret values or note contents.Get full metadata for a named item (username, URIs, custom fields, scope, expiry,
has_notes) — no passwords, TOTP seeds, api-key values, or notes.Reveal a secret via a Bitwarden Send one-time URL with configurable TTL and max-views, choosing fields like value, username, password, totp, notes, or uri.
Retrieve the current TOTP code for a login item, including remaining seconds and algorithm.
Save an agent-generated secret (password or api-key) into
mcp-agent-createdas a secure note — CREATE-only, no overwrite.Save a login item (username + password + optional URL + optional TOTP seed) into
mcp-agent-createdas a real login — CREATE-only.Run a health check for auth status, API version, collection visibility, item counts, and latency.
Security constraints: no update/delete tools; writes blocked when
READ_ONLY=1;DRY_RUN=1logs without executing; secrets are E2E-encrypted locally.
Provides tools for interacting with a Bitwarden vault, including listing items, retrieving metadata, revealing secrets via Bitwarden Sends, getting TOTP codes, and saving generated secrets or login items.
Provides tools for interacting with a Vaultwarden vault, including listing items, retrieving metadata, revealing secrets via Bitwarden Sends, getting TOTP codes, and saving generated secrets or login items.
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., "@@aiwerk/mcp-server-vaultlist vault items"
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.
@aiwerk/mcp-server-vault
Bitwarden / Vaultwarden MCP server — BYOK vault access for AI agents.
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
npx -y @aiwerk/mcp-server-vaultRelated MCP server: VaultBridge
Configure
Variable | Required | Default | Description |
| ✅ | — | Base URL of your Bitwarden/Vaultwarden instance (no trailing slash), e.g. |
| ✅ | — | Personal API key |
| ✅ | — | Personal API key |
| ✅ | — | Vault master password (used for E2E decryption key derivation) |
| — |
| Name of the collection visible to agents |
| — |
| Name of the collection for agent-created secrets |
| — |
| HTTP timeout in milliseconds |
| — |
| Set |
| — |
| Set |
Auth — Personal API Key
Log in to your Bitwarden/Vaultwarden instance
Go to Account Settings → Security → Keys → API Key
Note the
client_idandclient_secretReference: 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 viasave_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 |
| text | Comma-separated glob list of tool/server names allowed to use this item (e.g. |
| text |
|
| text |
|
Tools
Tool | Description |
| List items from |
| Get full metadata for a named item (name, type, username, URIs, custom fields, expiry). No password/secret. |
| Reveal a secret via a Bitwarden Send (E2E-encrypted one-time URL with configurable TTL and max-views). |
| Get the current TOTP code for a login item, including remaining seconds in the period. |
| Save an agent-generated secret (password / api-key) into |
| Save sign-in credentials (username + password + optional URL + TOTP seed) into |
| Check connectivity: auth status, API version, collection visibility, item counts, latency. |
Security model
Opt-in exposure: only items in
mcp-exposedormcp-agent-createdare accessible; all other items returnitem_not_visibleRead-only existing items: no
update_*,delete_*, orchange_*tools existSecret value delivery via Send only:
list_vault_itemsandget_vault_metadatanever return passwords, TOTP seeds, or api-key valuesE2E encryption preserved: the server decrypts vault data locally (master password stays in env vars, never sent over the wire)
Constrained agent writes:
save_generated_secretandsave_login_itemare CREATE-only into the dedicatedmcp-agent-createdcollection
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
Available Tools
7 toolsget_totp_codeARead-only
Get the current TOTP code for a vault login item with TOTP configured. Returns the 6-digit code, the remaining seconds in the current period, and the algorithm. Use the remaining_seconds field to decide whether to use the code immediately or wait for a fresh period.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact item name (case-sensitive) of a vault login item with TOTP configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful context about the return values and how to interpret remaining_seconds, but beyond that it mainly restates the read-only nature already captured by readOnlyHint=true. No hidden side effects, permissions, or rate limits are disclosed, so it adds limited extra value beyond annotations.
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 description is two sentences, front-loaded with the core function and includes only actionable information. It is appropriately sized for a simple tool.
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?
For a single-parameter read tool with readOnlyHint and no output schema, the description adequately covers the return values and provides actionable guidance on using remaining_seconds. It lacks error handling details, but that is not critical for basic invocation.
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?
The input schema already fully describes the name parameter with details on exact, case-sensitive matching. The description reinforces this but does not add new meaning beyond the schema, aligning with the baseline for 100% schema coverage.
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 clearly states 'Get the current TOTP code for a vault login item with TOTP configured,' specifying the verb, resource, and condition. It also lists the return fields, distinguishing it from sibling tools like save_login_item or reveal_secret_via_send.
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 provides clear context: it is for vault login items with TOTP configured, and advises using remaining_seconds to decide when to use the code. However, it does not explicitly mention alternatives or when-not-to-use, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vault_metadataARead-only
Get full metadata for a named vault item. Returns name, type, username (for login items), URIs, custom fields, scope, expiry, and whether the item has notes. Password, TOTP seed, api-key values and note contents are NEVER returned. Use reveal_secret_via_send (field "notes" for the notes) or get_totp_code instead.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact item name (case-sensitive) as it appears in the vault. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only declare readOnlyHint and openWorldHint; the description goes well beyond them by disclosing the exact returned field set and, critically, the fields that are deliberately withheld. That security-relevant disclosure is the kind of behavioral context an agent cannot infer from structured data.
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 tight sentences: capability first, return contents second, exclusions and alternatives last. Every clause carries information and nothing is repeated from the schema or annotations.
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?
With no output schema, the description compensates by enumerating the returned fields and the withheld ones, and it names the escape hatches for secrets. There is nothing further an agent needs in order to call this correctly.
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 already documents that 'name' must be the exact, case-sensitive vault name. The description adds only 'named vault item', which contributes no syntax or matching detail beyond the schema, so the baseline of 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 opens with a specific verb and resource ('Get full metadata for a named vault item') and immediately enumerates exactly which fields come back. It also carves out the secret-reading territory by pointing at reveal_secret_via_send and get_totp_code, so an agent can separate it from the siblings without opening a schema.
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 gives a clear negative boundary ('Password, TOTP seed, api-key values and note contents are NEVER returned') and routes the agent to the correct alternatives for those cases, including the exact field name for notes. It does not say when to reach for this versus list_vault_items, so the enumeration-vs-single-item choice is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkARead-only
Check connectivity and configuration of the Bitwarden/Vaultwarden vault. Authenticates, syncs, and reports: auth status, API version, collection visibility, item counts, latency. Run this first after a new install or after rotating credentials.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows it is a safe read operation that may access external systems. The description adds behavioral details beyond annotations: it 'Authenticates, syncs, and reports' specific metrics, implying network calls and credential verification. It doesn't describe error behavior or side effects, but for a health check with annotations, this is adequate.
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 description is two sentences: the first states what it does and what it reports, the second gives when to use it. Every word earns its place; there is no filler, redundancy, or irrelevant detail. The structure is front-loaded with the core purpose and outputs.
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?
For a simple tool with no parameters and no output schema, the description covers the necessary context: what it checks, what it reports, and when to run it. It could be slightly more explicit about interpreting results or potential error states, but it is sufficient for an agent to understand the tool's role and invocation timing. The list of reported metrics adds completeness beyond a generic 'health check'.
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?
The tool has zero parameters, so the schema already fully covers them (coverage 100%). Per the baseline for no params, a score of 4 is appropriate; the description doesn't need to document parameters. It does not add any param-specific semantics, but that's not a gap given there are none.
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 clearly states the tool checks connectivity and configuration of the Bitwarden/Vaultwarden vault, with a specific verb ('Check') and resource. It enumerates concrete outputs (auth status, API version, collection visibility, item counts, latency), which distinguishes it from sibling tools that list, get, reveal, generate, or save items. This is a focused diagnostic tool, easily differentiated from the other operations.
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 explicitly says 'Run this first after a new install or after rotating credentials,' giving clear when-to-use guidance. Although it doesn't name alternatives, it establishes a recommended ordering (run first) and the context (new install, credential rotation), which is sufficient for an agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vault_itemsARead-only
List vault items from the mcp-exposed and mcp-agent-created collections. Returns metadata only. Secret values and note contents are NEVER included (has_notes says whether notes exist). Use reveal_secret_via_send to obtain the actual value through a secure Bitwarden Send URL.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Case-insensitive substring filter on item names. Omit to return all items. | |
| collection | No | Restrict to one collection. Omit to return items from both mcp-exposed and mcp-agent-created. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint, so the description carries most of the behavioral burden. It does so well by disclosing that only metadata is returned, that secret values and note contents are NEVER included, and that has_notes indicates note existence — meaningful context beyond the annotations.
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 short sentences, front-loaded with what is returned and what is excluded, then the redirect to the alternative tool. No sentence is wasted.
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?
With an output schema absent, the description compensates by describing the return shape (metadata only, has_notes field) and the security boundary. Nothing an agent needs to call this correctly is missing.
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 both the filter and collection parameters are fully documented in the schema. The description adds no syntax or semantics beyond that, making the baseline of 3 appropriate.
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 specific verb+resource (list vault items) and names the exact scope (mcp-exposed and mcp-agent-created collections), which an agent could not infer otherwise. It also implicitly separates itself from retrieval tools by declaring metadata-only output.
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?
Explicitly routes the agent to reveal_secret_via_send when the actual secret value is needed, which is the key usage decision. It does not, however, clarify when to prefer this over the sibling get_vault_metadata, so the alternative coverage is partial rather than complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reveal_secret_via_sendA
Reveal a vault secret through a Bitwarden Send, an E2E-encrypted one-time URL. Creates a temporary Send with a configurable TTL and max-views limit. The secret value is encrypted client-side; only the URL fragment (never sent to server) can decrypt it. Blocked when READ_ONLY=1. Logs to DRY_RUN without creating a real Send when DRY_RUN=1.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact item name (case-sensitive) of the vault item to reveal. | |
| field | No | Field to reveal. Defaults to "value" (notes for api-key/password/note items, password for login items). Other options: "username", "password", "totp", "notes" (the item notes, e.g. on a login), "uri0" (or uri1, uri2, ...). | |
| max_views | No | Maximum number of times the Send URL can be accessed. Default 1, range [1, 100]. | |
| ttl_seconds | No | Bitwarden Send TTL in seconds. Default 300 (5 min), range [30, 86400]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it explains client-side encryption, that the URL fragment is never sent to the server and is the only decryptor, and that the operation is blocked under READ_ONLY=1 and only logged under DRY_RUN=1. This resolves the apparent tension between the 'reveal' framing and readOnlyHint=false by clarifying it creates a temporary Send rather than mutating the vault item.
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?
Four tight sentences that front-load the purpose, then add security model, then gating flags. No filler; each sentence carries distinct, decision-relevant information.
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?
With no output schema, the description conveys what is produced (a temporary Send URL) and the encryption/expiry model, but does not explicitly state the return shape or where the decryptable fragment is surfaced. For a 4-param tool this is nearly complete.
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%, with field, max_views, and ttl_seconds all fully documented including ranges and defaults. The description references configurable TTL and max-views but adds no syntax or format meaning beyond the schema, 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?
States a specific verb (reveal), resource (vault secret), and mechanism (Bitwarden Send, an E2E-encrypted one-time URL). This clearly distinguishes it from siblings like get_vault_metadata and get_totp_code, which do not create shareable links.
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?
Describes what the tool does and notes the READ_ONLY=1 block and DRY_RUN behavior, but never states when to prefer this over alternatives such as get_vault_metadata or list_vault_items. Usage is implied rather than explicitly routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_generated_secretA
Save an agent-generated secret into the mcp-agent-created collection. CREATE-only: cannot overwrite an existing item (name collision returns an error). The secret is E2E-encrypted with the vault org key before transmission. Sets mcp-created-by, mcp-created-at, mcp-expires-at, and mcp-used-in custom fields automatically. Blocked when READ_ONLY=1. Logs to DRY_RUN without creating a real cipher when DRY_RUN=1.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Unique name for this secret within the mcp-agent-created collection. Case-sensitive. Name collision returns an error. Pick a distinct name. | |
| type | Yes | Logical type of this secret. "password" for user passwords, "api-key" for API tokens and keys. | |
| notes | No | Optional non-sensitive annotation (e.g. where this key is used). Not the secret itself. | |
| value | Yes | The secret value to store (max 4096 chars). Assumed already generated by the agent. | |
| used_in | No | Free-form context string, e.g. "publish_protected_html @ aiwerk.ch/press/2026-05". Stored as mcp-used-in custom field. | |
| expires_in_days | No | Days until the secret expires (sets mcp-expires-at). Default 30, max 365. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations, which only declare readOnlyHint=false and openWorldHint=true. The description discloses E2E encryption before transmission, auto-populated custom fields, blocking under READ_ONLY=1, and DRY_RUN logging behavior – rich operational context an agent cannot get from structured fields.
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?
Dense but front-loaded: the core action leads, followed by the CREATE-only constraint and behavioral caveats. Each clause carries a distinct fact, though the run-on stream of constraints is slightly dense.
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?
For a write tool with full schema coverage and no output schema, the description covers creation semantics, overwrite behavior, encryption, auto-fields, and both READ_ONLY and DRY_RUN gating conditions. Nothing essential to correct invocation is missing.
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 all six parameters thoroughly. The description adds only minor mapping detail (mcp-expires-at, mcp-used-in custom fields) that overlaps with the schema, so the baseline 3 is appropriate.
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?
Specific verb+resource ('Save an agent-generated secret into the mcp-agent-created collection') with a clearly bounded scope. It distinguishes itself from the sibling save_login_item by specifying the agent-generated, mcp-created-collection target rather than a generic login item.
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 states the CREATE-only constraint and that name collisions error, which is useful context for invocation. However, it never names when to use this over save_login_item or the other siblings, leaving the primary routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_login_itemA
Save login credentials (username, password, URL, optional TOTP seed) as a Vaultwarden login item in the mcp-agent-created collection. Use this instead of save_generated_secret when the credential is a sign-in (username + password), so it surfaces as a real login item with get_totp_code support. CREATE-only: cannot overwrite an existing item (name collision returns an error). At least one of username or password is required. All fields are E2E-encrypted with the vault org key before transmission. Sets mcp-created-by, mcp-created-at, mcp-expires-at, and mcp-used-in custom fields automatically. Blocked when READ_ONLY=1. Logs to DRY_RUN without creating a real cipher when DRY_RUN=1.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | No | Optional login URL (e.g. "https://app.example.com/login"). Stored as the login URI. | |
| name | Yes | Unique name for this login within the mcp-agent-created collection. Case-sensitive. Name collision returns an error. Pick a distinct name. | |
| totp | No | Optional TOTP seed (otpauth:// URI or raw base32 secret). Enables get_totp_code on this item. | |
| notes | No | Optional non-sensitive annotation. Not the credential itself. | |
| used_in | No | Free-form context string, e.g. "smallinvoice portal login". Stored as mcp-used-in custom field. | |
| password | No | Login password (max 4096 chars). Optional, but at least one of username or password is required. | |
| username | No | Login username / account identifier. Optional, but at least one of username or password is required. | |
| expires_in_days | No | Days until the item expires (sets mcp-expires-at). Default 30, max 365. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply readOnlyHint=false and openWorldHint=true. The description adds substantial non-obvious behavior: CREATE-only with collision errors, at least one of username/password required, E2E encryption with the vault org key before transmission, auto-set custom fields (mcp-created-by/at/expires-at/used-in), and environment gating (blocked when READ_ONLY=1, logs to DRY_RUN when DRY_RUN=1). This is exactly the value-add the structured fields don't provide.
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?
Dense but front-loaded: purpose and the sibling comparison come first, then constraints (CREATE-only, field requirement), then encryption and environment behavior. Every clause carries signal, though the paragraph is long and slightly dense; minor trimming could improve flow without loss.
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?
For a mutation tool with no output schema, the description covers what an agent needs: create-only semantics, failure mode (name collision), required-field rule, encryption, auto-set metadata, and READ_ONLY/DRY_RUN gating. Nothing material is missing given the rich schema and annotation coverage.
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 schema already documents each field, giving a baseline of 3. The description adds a genuine cross-parameter constraint not encoded in the schema — 'At least one of username or password is required' (both are individually optional there) — and characterizes totp as enabling get_totp_code, which is useful semantics beyond the field list.
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?
Opens with a specific verb+resource: saving login credentials (username/password/URL/TOTP) as a Vaultwarden login item in a defined collection. It explicitly distinguishes itself from the sibling save_generated_secret by name and by the sign-in use case. An agent can identify the tool without opening the schema.
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?
Gives an explicit routing rule: 'Use this instead of save_generated_secret when the credential is a sign-in (username + password).' It also notes the downstream benefit (get_totp_code support) and the hard constraint (CREATE-only, name collision errors), so when-to-use and when-not-to-use are both covered.
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.
3 tool updates
v0.2.3- Changed
reveal_secret_via_send1 field changed- changed
Input schema / properties / field / descriptionPrevious value: -"Field to reveal. Defaults to \"value\" (notes for api-key/password/note items, password for login items). Other options: \"username\", \"password\", \"totp\", \"uri0\" (or uri1, uri2, ...)."New value: +"Field to reveal. Defaults to \"value\" (notes for api-key/password/note items, password for login items). Other options: \"username\", \"password\", \"totp\", \"notes\" (the item notes, e.g. on a login), \"uri0\" (or uri1, uri2, ...)."
- Changed
save_generated_secret1 field changed- changed
Input schema / properties / name / descriptionPrevious value: -"Unique name for this secret within the mcp-agent-created collection. Case-sensitive. Name collision returns an error — pick a distinct name."New value: +"Unique name for this secret within the mcp-agent-created collection. Case-sensitive. Name collision returns an error. Pick a distinct name."
- Changed
save_login_item1 field changed- changed
Input schema / properties / name / descriptionPrevious value: -"Unique name for this login within the mcp-agent-created collection. Case-sensitive. Name collision returns an error — pick a distinct name."New value: +"Unique name for this login within the mcp-agent-created collection. Case-sensitive. Name collision returns an error. Pick a distinct name."
7 tool updates
v0.2.2- First observed
get_totp_code - First observed
get_vault_metadata - First observed
health_check - First observed
list_vault_items - First observed
reveal_secret_via_send - First observed
save_generated_secret - First observed
save_login_item
TDQS
Scored across 7 tools
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.
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.
Seven tools is well-scoped for a vault integration, covering listing, reading, revealing, writing, TOTP, and health. No tool appears redundant or filler.
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
Related MCP Connectors
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
MCP-first toolbox for agents: KV storage, auth, queue, and utility tools. Free in early access.
Related MCP Servers
- 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.53876 npm18MIT
- AlicenseNot gradedqualityDmaintenanceSecret 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.1MIT
- AlicenseAqualityCmaintenanceAn MCP server for using Bitwarden Secrets Manager as durable credential storage for agent workflows, enabling secure secret storage, retrieval, and injection into trusted executables.7MIT
- AlicenseNot gradedqualityCmaintenanceMCP server enabling AI agents to use secrets (API keys, tokens) via encrypted vault, executing HTTP/shell/SSH actions server-side while never exposing secret values to the AI.MIT