Skip to main content
Glama
MSPbotsAI

bitwarden-mcp

by MSPbotsAI

bitwarden-mcp

English | 中文

Bitwarden MCP server for Claude — exposes the Bitwarden Public API's organization member and vault group management as MCP tools, focused on inviting members and assigning them to vault groups ("密码库群组邀请").

Tech stack: Python 3.12 + uv + FastMCP (Starlette/uvicorn)

关联需求:PRD-15544([Self-built MCP] MSPbots Integration - Bitwarden)。完整调研见 vendor-mcp-template/prd/Bitwarden.md

Out of scope: Bitwarden Send (temporary secure credential links) is intentionally not implemented. The Public API does not allow management of individual vault items, and Send requires a stateful, unlocked local bw CLI vault — incompatible with this service's stateless, multi-tenant gateway model.

Quick Start

cd bitwarden-mcp
uv sync

# stdio mode (for Claude Desktop / CLI), single shared credential set from env
BITWARDEN_CLIENT_ID=organization.xxxx BITWARDEN_CLIENT_SECRET=xxxx uv run bitwarden-mcp

Related MCP server: bitwarden-agent-vault-mcp

Authentication

This service is stateless: it never stores or persists Bitwarden credentials. Credentials are either supplied once via environment variables (local dev, AUTH_MODE=env), or per-request via HTTP headers (AUTH_MODE=gateway, production).

Bitwarden's Public API uses OAuth2 Client Credentials (grant_type=client_credentials, scope=api.organization). On every tool call, this service exchanges the caller's client_id + client_secret for a short-lived access_token (~1h TTL) and uses it immediately — the token is not cached across requests, in order to fully comply with the "no persisted credentials" requirement. This adds one extra Identity round trip per call.

Gateway mode HTTP headers (AUTH_MODE=gateway)

Header

类型

是否必填

默认值

枚举值

字段描述

Example

x-bitwarden-client-id

string

必填

组织 API Key 的 Client ID(Admin Console → Settings → Organization info)

organization.3b1f...

x-bitwarden-client-secret

string

必填

对应 Client Secret,仅用于本次请求内换取 access_token,不持久化、不写日志

AbCdEf123...

x-bitwarden-identity-url

string

可选

https://identity.bitwarden.com

Identity Token Endpoint,EU Cloud 传 https://identity.bitwarden.eu,自托管传 https://your.domain.com/identity

https://identity.bitwarden.eu

x-bitwarden-api-url

string

可选

https://api.bitwarden.com

Public API Base URL,EU Cloud 传 https://api.bitwarden.eu,自托管传 https://your.domain.com/api

https://api.bitwarden.eu

Missing either of the two required headers on a /mcp request returns 401 with a required_headers list.

Env mode variables (AUTH_MODE=env, local dev only)

Variable

Default

Description

BITWARDEN_CLIENT_ID

Organization API Key Client ID

BITWARDEN_CLIENT_SECRET

Organization API Key Client Secret

BITWARDEN_API_URL

https://api.bitwarden.com

Public API base URL

BITWARDEN_IDENTITY_URL

https://identity.bitwarden.com

Identity token endpoint base URL

AUTH_MODE

gateway

env or gateway

MCP_TRANSPORT

stdio

stdio or http

MCP_HTTP_PORT

8080

HTTP server port

MCP_HTTP_HOST

0.0.0.0

HTTP server bind address

Get credentials: as an organization Owner, go to Admin Console → SettingsOrganization infoAPI Key. Requires a paid organization plan (Teams/Enterprise) — free personal Bitwarden accounts have no organization and cannot use the Public API.

Claude Desktop Setup

{
  "mcpServers": {
    "bitwarden": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/bitwarden-mcp", "bitwarden-mcp"],
      "env": {
        "BITWARDEN_CLIENT_ID": "organization.xxxx",
        "BITWARDEN_CLIENT_SECRET": "xxxx"
      }
    }
  }
}

Transport Modes

stdio (Claude Desktop / CLI)

BITWARDEN_CLIENT_ID=organization.xxxx BITWARDEN_CLIENT_SECRET=xxxx uv run bitwarden-mcp

HTTP — single-tenant (env mode)

BITWARDEN_CLIENT_ID=organization.xxxx BITWARDEN_CLIENT_SECRET=xxxx \
MCP_TRANSPORT=http AUTH_MODE=env uv run bitwarden-mcp
curl http://localhost:8080/health

HTTP — gateway / multi-tenant (production)

MCP_TRANSPORT=http AUTH_MODE=gateway uv run bitwarden-mcp

Tool List

Base URL: https://api.bitwarden.com (default; overridable per-request, see Authentication).

Tool

Description

Parameters

bitwarden_list_members

列出组织下所有成员

bitwarden_get_member

获取指定成员详情

member_id (string, 必填)

bitwarden_invite_member

邀请新成员加入组织

email (string, 必填), type (int, 可选, 默认 2=User), access_all (bool, 可选, 默认 false), external_id (string, 可选)

bitwarden_reinvite_member

重新发送邀请邮件

member_id (string, 必填)

bitwarden_remove_member

将成员从组织移除

member_id (string, 必填)

bitwarden_list_groups

列出组织下所有密码库群组

bitwarden_create_group

创建新的密码库群组

name (string, 必填), access_all (bool, 可选, 默认 false), external_id (string, 可选)

bitwarden_list_member_groups

查看指定成员当前所属的群组

member_id (string, 必填)

bitwarden_update_member_groups

核心操作:将成员分配到指定的一组密码库群组(全量覆盖,非增量追加)

member_id (string, 必填), group_ids (string[], 必填)

Member type (role) enum: 0=Owner, 1=Admin, 2=User (default/regular Member), 3=Manager, 4=Custom. Member status enum (read-only): 0=Invited, 1=Accepted, 2=Confirmed.

Rate limits: Bitwarden does not publish specific Public API rate-limit numbers (unlike some other vendors). This service passes through 429 responses as-is if Bitwarden throttles a request.

Test Examples

tools/list (gateway mode)

curl -X POST http://localhost:8080/mcp \
  -H "x-bitwarden-client-id: organization.your_client_id" \
  -H "x-bitwarden-client-secret: your_client_secret" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'

tools/call — invite a member

curl -X POST http://localhost:8080/mcp \
  -H "x-bitwarden-client-id: organization.your_client_id" \
  -H "x-bitwarden-client-secret: your_client_secret" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "id": 2,
    "params": {
      "name": "bitwarden_invite_member",
      "arguments": {"email": "user@example.com", "type": 2}
    }
  }'

tools/call — assign a member to vault groups

curl -X POST http://localhost:8080/mcp \
  -H "x-bitwarden-client-id: organization.your_client_id" \
  -H "x-bitwarden-client-secret: your_client_secret" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "id": 3,
    "params": {
      "name": "bitwarden_update_member_groups",
      "arguments": {"member_id": "<member-uuid>", "group_ids": ["<group-uuid>"]}
    }
  }'

Missing headers → 401

curl -i -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
# HTTP/1.1 401 Unauthorized
# {"error":"Missing credentials","required_headers":["x-bitwarden-client-id","x-bitwarden-client-secret"]}

API Reference

Known Limitations

  • No Bitwarden Send support — out of scope by design (see top of this README).

  • bitwarden_update_member_groups is a full replace, not an append — it mirrors the underlying PUT /public/members/{id}/group-ids semantics exactly. To add a member to one more group without removing existing ones, call bitwarden_list_member_groups first, merge in the new group id, then pass the full list.

  • No documented Public API rate limits from Bitwarden — errors are passed through as-is.

  • Token exchange happens on every tool call (no caching), which adds latency but keeps the service fully stateless per the SOP requirement.

  • Requires a paid organization plan (Teams/Enterprise) with an organization API key generated; free personal accounts cannot use this service.

Available Tools

9 tools
bitwarden_create_groupA

Create a new vault group in the Bitwarden organization.

    Use the returned group "id" with bitwarden_update_member_groups to invite
    members into it.

    Args:
        name: Name of the group to create.
        access_all: Whether the group gets access to all collections (default: False).
        external_id: Optional external identifier (e.g. from an HR/IdP system) for syncing.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
access_allNo
external_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden for behavioral transparency. It reveals the returned id and the follow-up invite workflow, but omits permissions required, potential errors (e.g., duplicate names), or reversibility. This is a significant gap 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized with a one-sentence purpose, a useful workflow note, and a structured Args list. It is front-loaded and each sentence earns its place, though the Args section is slightly verbose relative to the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple create operation and presence of an output schema, the description covers the core purpose, parameter meanings, and the follow-up step. It lacks guidance on prerequisites or failure modes, but is largely complete for a straightforward tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters are explicitly explained: name is 'Name of the group to create,' access_all is described as granting access to all collections with a default, and external_id is contextualized as an IdP sync identifier. This adds meaning well beyond the bare schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Create a new vault group in the Bitwarden organization,' using a specific verb and resource. It clearly distinguishes from member-focused sibling tools (e.g., invite_member, list_member_groups) by focusing on group creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a workflow hint about using the returned id with bitwarden_update_member_groups, but it does not explicitly state when to use this tool over alternatives or mention any exclusions. Usage is implied by the 'create' action rather than explicitly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bitwarden_get_memberA

Get a single organization member's details.

    Args:
        member_id: The member's UUID (see bitwarden_list_members).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
member_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavior itself. While 'Get' implies a read-only operation, it doesn't mention error behaviors, authentication requirements, or edge cases. The output schema covers return structure, but the description adds no further transparency beyond the obvious read nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise: one sentence for the purpose plus a short argument annotation. No wasted words, and the information is front-loaded with the primary purpose before the parameter detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the presence of an output schema, the description adequately covers the necessary context: it identifies the sole parameter, tells how to obtain it, and states the purpose. It lacks explicit error-case discussion, but that is a minor gap for a get-by-id tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero description coverage, but the description explains that member_id is a UUID and directs the user to bitwarden_list_members for obtaining it. This adds semantic meaning that the schema lacks, effectively compensating for the schema's lack of parameter detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Get) and the specific resource (a single organization member's details), distinguishing it from sibling tools like bitwarden_list_members (plural) and mutation tools. The verb and resource are precise and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides context by telling the user to obtain the member_id via bitwarden_list_members, which is an alternative tool for a prerequisite step. However, it doesn't explicitly contrast when to use this tool vs. other member-related tools, but the reference to list_members is a useful usage hint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bitwarden_invite_memberA

Invite a new member to the Bitwarden organization by email.

    The invited member receives an email invitation; their "status" starts
    at 0 (Invited) until they accept it. To grant access to specific vault
    groups, follow up with bitwarden_update_member_groups once the invite
    succeeds (the returned member "id" is needed for that call).

    Args:
        email: Email address to invite.
        type: Organization role — 0=Owner, 1=Admin, 2=User (default, i.e. regular
            Member), 3=Manager, 4=Custom (requires the organization to have
            custom permissions enabled).
        access_all: Whether the member gets access to all collections (default: False).
        external_id: Optional external identifier (e.g. from an HR/IdP system) for syncing.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
emailYes
access_allNo
external_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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 email invitation, the initial status value of 0 (Invited), and the prerequisite for type=4 requiring custom permissions. It also clarifies that group access is not granted by this call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a top-line summary followed by parameter details. Each sentence serves a purpose—no wasted words. The Args section is appropriately detailed given the lack of schema descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully equips an agent to invoke the tool correctly: it explains the action, parameter semantics, role enum, and the necessary follow-up. With an output schema present, return value details are covered. It is complete for this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description explains every parameter: the role enum values for type, the meaning of access_all, and the purpose of external_id. It adds critical meaning beyond the JSON schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Invite a new member to the Bitwarden organization by email.' This is a specific verb and resource, clearly distinguishing it from sibling tools like bitwarden_list_members or bitwarden_remove_member.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs to follow up with bitwarden_update_member_groups to grant vault group access, and explains that the returned member 'id' is needed for that call. This provides clear usage context and an alternative next step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bitwarden_list_groupsA

List all vault groups in the Bitwarden organization.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. The verb 'List' implicitly indicates a read-only, non-destructive operation, but no additional context is given about pagination, rate limits, or response format. For a zero-parameter list tool, the description is adequate but not rich; it does not contradict any annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-formed sentence that immediately states the action and object. There is no filler, repetition, or unnecessary detail. It is perfectly concise and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has zero parameters and an output schema exists (which likely defines the return structure), the description is sufficient for a simple list operation. It identifies the organization scope and the resource. No further context is needed for an agent to invoke this correctly, though it could optionally mention that it returns the full organizational group list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, and the schema confirms this with an empty properties object. The description adds no parameter information, but there is nothing to explain. Baseline for zero parameters is 4, and the description does not detract from the schema's completeness.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' with the resource 'vault groups' and scopes it to 'the Bitwarden organization.' This clearly distinguishes it from sibling tools that handle members (e.g., bitwarden_list_members) and from group mutations (e.g., bitwarden_create_group). The intent is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when you need to retrieve all vault groups, but it offers no explicit alternatives or when-not-to-use guidance. Given the sibling tools for member-group associations (e.g., bitwarden_list_member_groups), the description could have mentioned that this tool is for the full group list, not filtered by member. However, the context is clear enough for a simple list operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bitwarden_list_member_groupsA

List the vault group IDs a member currently belongs to.

    Args:
        member_id: The member's UUID (see bitwarden_list_members).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
member_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden. 'List' implies a read-only operation, and 'currently belongs to' indicates a snapshot of membership. However, it does not explicitly state permissions required, whether the operation is safe/non-mutating, or any rate limits. It is minimally sufficient but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, with a single purpose sentence and a brief argument definition. It is front-loaded with the purpose and contains no filler or redundant details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one parameter and an output schema, the description is nearly complete. It specifies the member_id and the intended result. It could mention what happens when the member has no groups (e.g., returns an empty list), but the output schema likely covers the return structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no descriptions for member_id (0% coverage), but the description compensates by explaining 'member_id: The member's UUID (see bitwarden_list_members).' This tells the agent what the value represents and where to obtain it, which is adequate for a single-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'List the vault group IDs a member currently belongs to.' This uses a specific verb (List), resource (vault group IDs), and scope (for a member), which distinguishes it from siblings like bitwarden_list_groups (all groups) or bitwarden_list_members (all members).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit when-to-use or when-not-to-use guidance. It only mentions 'see bitwarden_list_members' for the member_id parameter, which is about sourcing the argument rather than choosing an alternative tool. No alternatives like bitwarden_update_member_groups are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bitwarden_list_membersA

List all members of the Bitwarden organization.

Each member's "status" field is 0=Invited, 1=Accepted, 2=Confirmed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds valuable context by defining the member status field values (0=Invited, 1=Accepted, 2=Confirmed), which is not apparent from the schema alone. It does not mention authorization or pagination, but for a simple list operation this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the core purpose and followed by the status field mapping. Every sentence earns its place with no redundancy or irrelevant detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and an output schema exists, the description does not need to explain return values. The status field mapping adds useful interpretative context, making the description complete for a list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description does not need to explain any parameters, and no extra parameter information is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' with a clear resource ('all members of the Bitwarden organization'), which precisely distinguishes it from sibling tools like bitwarden_list_groups and bitwarden_get_member. No ambiguity about what the tool returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the tool lists all members, so when to use it is implied. However, it does not explicitly mention when to prefer this over bitwarden_get_member or provide any exclusionary guidance, making it adequate but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bitwarden_reinvite_memberA

Resend the invitation email to a member who hasn't accepted it yet.

    Args:
        member_id: The member's UUID (see bitwarden_list_members).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
member_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses the core action (resending an invitation email) but does not mention potential side effects, error cases, or authorization requirements, leaving some behavioral ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one sentence plus a parameter explanation. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the presence of an output schema, the description is largely complete. It would benefit from noting preconditions (e.g., member must be in invited status), but the existing context suffices for basic use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description compensates fully by explaining member_id as the member's UUID and directing to bitwarden_list_members, adding meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Resend' and identifies the resource 'invitation email to a member', clearly distinguishing it from sibling tools like invite_member or remove_member.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It specifies the context ('who hasn't accepted it yet') and references bitwarden_list_members for obtaining the member_id. It does not explicitly state when not to use it, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bitwarden_remove_memberA

Remove a member from the Bitwarden organization.

    Args:
        member_id: The member's UUID (see bitwarden_list_members).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
member_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full responsibility for disclosing behavioral traits. It only states the action 'remove' without revealing consequences such as whether it is irreversible, revokes access immediately, or has any constraints (e.g., cannot remove the last owner). This is a destructive operation, and the lack of such context leaves a significant transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized—two sentences that immediately state the action and param meaning. It is front-loaded with the core purpose and includes a helpful cross-reference to list_members. Every word earns its place, with no unnecessary filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple removal tool with one parameter, the description provides the essential purpose and parameter guidance. However, it omits important context such as permissions required, whether the action is reversible, and what happens if the member does not exist. An output schema exists but is not shown, so the description could still benefit from noting the result of the operation. Overall, it meets the minimum viable threshold but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only provides 'Member Id' with no description. The description adds critical meaning by specifying 'The member's UUID (see bitwarden_list_members),' clarifying the expected format (UUID) and how to obtain it. This goes beyond the schema's minimal title, effectively compensating for the 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action with a specific verb and resource: 'Remove a member from the Bitwarden organization.' This distinguishes it from sibling tools like list, invite, or get member, making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. The only indirect hint is 'see bitwarden_list_members' for obtaining the UUID, but there is no clear directive on conditions, prerequisites, or exclusions. The tool's simple name implies its use case, but the description does not articulate it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bitwarden_update_member_groupsA

Set which vault groups a member belongs to — this is the "group invitation" action.

    IMPORTANT: this REPLACES the member's entire group list, it does not append.
    To add the member to a group without losing existing memberships, first call
    bitwarden_list_member_groups, merge the new group id(s) into that list, then
    pass the full merged list here.

    Args:
        member_id: The member's UUID (see bitwarden_list_members).
        group_ids: Full list of vault group UUIDs the member should belong to
            after this call (see bitwarden_list_groups for available group IDs).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
group_idsYes
member_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states that the tool REPLACES the member's entire group list and does not append, which is a critical destructive behavior. It also clarifies the consequence and provides a safe usage pattern, making the tool's behavior fully transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and appropriately sized. It opens with a clear one-sentence summary, follows with an important caveat in bold, then provides a concise usage workflow, and finally lists params with references to related tools. Every sentence adds value, with no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a mutating operation with a non-obvious replacement behavior), the description covers all necessary aspects: the action, the critical side effect, the safe usage pattern, and each parameter's meaning. Since the output schema is provided, return values need not be explained. The description is fully sufficient for an AI agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only provides parameter names and types, but the description adds meaningful context: member_id is described as 'The member's UUID' with a pointer to bitwarden_list_members, and group_ids is described as the 'Full list of vault group UUIDs' with a pointer to bitwarden_list_groups. This goes beyond the schema and clarifies the expected values and their role in the operation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb ('Set which vault groups a member belongs to') and explicitly identifies it as the 'group invitation' action, distinguishing it from sibling tools like list_member_groups or remove_member. The scope is unambiguous: it updates a member's group memberships.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance, including a critical warning that the operation REPLACES the entire group list rather than appending. It also gives a concrete workflow for safely adding a member to a group without losing existing memberships: first call bitwarden_list_member_groups, merge the new group IDs, then pass the full merged list. This directly addresses when to use this tool and how to avoid unintended side effects.

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. Dates show when Glama detected each change.

  1. 9 tool updatesv0.1.0
    • First observedbitwarden_create_group
    • First observedbitwarden_get_member
    • First observedbitwarden_invite_member
    • First observedbitwarden_list_groups
    • First observedbitwarden_list_member_groups
    • First observedbitwarden_list_members
    • First observedbitwarden_reinvite_member
    • First observedbitwarden_remove_member
    • First observedbitwarden_update_member_groups

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct resource and action: group listing/creation, member listing/retrieval/invitation/removal, and member-group membership operations. There is no overlap that could cause misselection; list vs. get and list vs. update are clearly read vs. write.

Naming Consistency5/5

All tool names follow a consistent 'bitwarden_verb_noun' pattern, using snake_case throughout. The verbs (list, get, invite, reinvite, remove, update, create) are clear and aligned with the noun, making the pattern predictable and easy to follow.

Tool Count5/5

Nine tools is well within the ideal range for a focused server. Each tool covers a meaningful operation for Bitwarden organization member and group management, with no redundant or extraneous utilities.

Completeness4/5

The core workflows for managing members and their group memberships are covered, including invite, remove, list, get, and group assignment. Minor gaps exist: no update or delete for groups, and no separate tool to update a member's role/access_all after creation, but these are workaroundable and do not severely hinder the primary use case.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MCP 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.
    53
    904
    14
    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
  • A
    license
    Not graded
    quality
    B
    maintenance
    Multi-tenant MCP server for self-hosted Kanboard that enables team members to manage Kanboard projects, tasks, and boards with per-user authentication and permissions.
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    MCP server that enables AI models to securely interact with a Bitwarden password manager vault via the rbw CLI.
    11
    1
    -

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/MSPbotsAI/bitwarden-mcp'

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