密码管理服务器

一个基于MCP协议的Vaultwarden服务器,提供自动解锁、冲突管理和完整的API功能,适用于自动化脚本和AI代理管理密码。

  • by fkom13
  • JavaScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 fkom13/mcp-vaultwarden

使用说明

🔐 MCP Vaultwarden服务器

模型上下文协议(MCP)服务器,它公开了一个简单而健壮的接口,用于与实例交互 库房守卫 自托管。它充当Bitwarden官方CLI的包装器(bw),允许人工智能代理或自动化脚本以编程方式管理秘密。

🤔 为什么是这个项目?

VaultWarden是BitWarden的一个流行且轻量级的替代方案,但其自动化可能很复杂。官方CLI(bw)需要手动会话管理(登录、解锁等),这不适合人工智能代理或非交互式脚本使用。

此MCP通过以下方式解决此问题:

  • 自动管理会话: 它按需解锁vault并缓存活动会话。
  • 展示简单的工具: 提供清晰的功能(get_secret, list_secrets等)通过MCP协议。
  • 防止堵塞: 集成超时和锁定系统,以可靠地管理竞争对手的访问。

✨ 功能

  • 自动解锁: vault在第一次请求时解锁,会话密钥被缓存。
  • 冲突管理: “锁定”机制可防止多重和并发解锁。
  • 完整API: 支持读取、创建、更新和删除机密。
  • 秘密模型: 提供JSON模板以轻松创建新元素。
  • 安全: 基于CLI bw 所有加密操作的官方。

⚠️ 先决条件

要使此服务器工作,运行它的机器 必须具有Bitwarden CLI(bw)已安装 并且可在 PATH.

请遵循官方安装说明: 安装程序la CLI Bitwarden.


📦 安装

方法1:通过NPM(推荐)

这是与MCP客户端一起使用的最简单方法 gemini-cli.

将客户端配置为通过以下方式启动服务器: npx :

{
  "mcpServers": {
    "vaultwarden": {
      "command": "npx",
      "args": [
        "mcp-vaultwarden-server"
      ],
      "env": {
        "BITWARDEN_HOST": "https://votre-instance.vaultwarden.com",
        "BW_CLIENTID": "user.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "BW_CLIENTSECRET": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "BW_MASTER_PASSWORD": "votre-mot-de-passe-maitre"
      }
    }
  }
}

方法2:来自源代码(Git)

  1. 克隆存储库:

    git clone https://github.com/fkom13/mcp-vaultwarden.git
    cd mcp-vaultwarden
    
  2. 安装依赖项:

    npm install
    
  3. 配置并启动: 创建文件 .env 从 .env.example 然后填充它,然后启动服务器。

    cp .env.example .env
    nano .env
    node server.js
    

🔒 配置和安全

通过环境变量进行配置。

  • BITWARDEN_HOST:VaultWarden实例的URL。
  • BW_CLIENTID:您的客户端API ID。
  • BW_CLIENTSECRET:您的秘密API客户端。
  • BW_MASTER_PASSWORD:您的主密码。

安全警告: 管理 BW_MASTER_PASSWORD 最严厉的批评。

  • 从不提交 你的文件 .env 或者你在Git存储库中的秘密。
  • 对于生产使用,请选择更强大的秘密管理方法,如Orchestrator的秘密(Kubernetes秘密、Docker秘密)或专用服务(HashiCorp Vault)。
  • 该MCP设计用于在受控和安全的环境中运行。

🧰 工具参考(API)

以下是MCP公开的工具,以及调用示例。

get_secret

通过姓名或ID检索秘密。

{
  "tool": "get_secret",
  "arguments": {
    "name": "API Key - OpenAI"
  }
}

list_secrets

搜索包含术语的秘密。

{
  "tool": "list_secrets",
  "arguments": {
    "search_term": "database"
  }
}

get_secret_template

获取JSON模板以创建新秘密。

{
  "tool": "get_secret_template",
  "arguments": {
    "type": "login"
  }
}

有效期类型: login, note, card, identity.

create_secret

创建一个新元素。首先使用 get_secret_template.

{
  "tool": "create_secret",
  "arguments": {
    "item_json": "{\\\"type\\\":1,\\\"name\\\":\\\"Mon Nouveau Login\\\",\\\"notes\\\":\\\"Ceci est une note secrète.\\\",\\\"favorite\\\":false,\\\"login\\\":{\\\"username\\\":\\\"monuser\\\",\\\"password\\\":\\\"MonP@ssw0rd!\\\",\\\"uris\\\":[{\\\"uri\\\":\\\"https://example.com\\\"}]}}"
  }
}

注意:JSON必须是转义字符串。

update_secret

通过其ID更新现有秘密。

{
  "tool": "update_secret",
  "arguments": {
    "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "item_json": "{\\\"name\\\":\\\"Ancien Login (Mis à jour)\\\"}"
  }
}

delete_secret

通过其ID删除秘密。

{
  "tool": "delete_secret",
  "arguments": {
    "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
  }
}

sync

强制本地vault与远程服务器同步。

{
  "tool": "sync",
  "arguments": {}
}

🤝 贡献

欢迎捐款!不要犹豫分叉项目并打开拉取请求。

📝 许可证

麻省理工学院