bitwarden-mcp
Provides tools for managing Bitwarden organization members and vault groups, including inviting members, listing members/groups, and assigning members to groups.
Click on "Install 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., "@bitwarden-mcpInvite alice@company.com to the Sales group"
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.
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-mcpRelated 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 |
| string | 必填 | 无 | 无 | 组织 API Key 的 Client ID(Admin Console → Settings → Organization info) |
|
| string | 必填 | 无 | 无 | 对应 Client Secret,仅用于本次请求内换取 access_token,不持久化、不写日志 |
|
| string | 可选 |
| 无 | Identity Token Endpoint,EU Cloud 传 |
|
| string | 可选 |
| 无 | Public API Base URL,EU Cloud 传 |
|
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 |
| — | Organization API Key Client ID |
| — | Organization API Key Client Secret |
|
| Public API base URL |
|
| Identity token endpoint base URL |
|
|
|
|
|
|
|
| HTTP server port |
|
| HTTP server bind address |
Get credentials: as an organization Owner, go to Admin Console → Settings → Organization info → API 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-mcpHTTP — 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/healthHTTP — gateway / multi-tenant (production)
MCP_TRANSPORT=http AUTH_MODE=gateway uv run bitwarden-mcpTool List
Base URL: https://api.bitwarden.com (default; overridable per-request, see Authentication).
Tool | Description | Parameters |
| 列出组织下所有成员 | 无 |
| 获取指定成员详情 |
|
| 邀请新成员加入组织 |
|
| 重新发送邀请邮件 |
|
| 将成员从组织移除 |
|
| 列出组织下所有密码库群组 | 无 |
| 创建新的密码库群组 |
|
| 查看指定成员当前所属的群组 |
|
| 核心操作:将成员分配到指定的一组密码库群组(全量覆盖,非增量追加) |
|
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_groupsis a full replace, not an append — it mirrors the underlyingPUT /public/members/{id}/group-idssemantics exactly. To add a member to one more group without removing existing ones, callbitwarden_list_member_groupsfirst, 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 toolsbitwarden_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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| access_all | No | ||
| external_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| member_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| Yes | |||
| access_all | No | ||
| external_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| member_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| member_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| member_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| group_ids | Yes | ||
| member_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
v0.1.0- First observed
bitwarden_create_group - First observed
bitwarden_get_member - First observed
bitwarden_invite_member - First observed
bitwarden_list_groups - First observed
bitwarden_list_member_groups - First observed
bitwarden_list_members - First observed
bitwarden_reinvite_member - First observed
bitwarden_remove_member - First observed
bitwarden_update_member_groups
TDQS
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.
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.
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.
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
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
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP Gateway: wrap any MCP server with cold-start retries, uptime SLA, and per-execution MPP billing.
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
111
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.5390414MIT
- AlicenseAqualityBmaintenanceAn 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 gradedqualityBmaintenanceMulti-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
- FlicenseBqualityDmaintenanceMCP server that enables AI models to securely interact with a Bitwarden password manager vault via the rbw CLI.111-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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