Skip to main content
Glama
fkom13

MCP Vaultwarden Server

by fkom13
README.md
# 🔐 MCP Vaultwarden Server

[![NPM Version](https://img.shields.io/npm/v/mcp-vaultwarden-server.svg)](https://www.npmjs.com/package/mcp-vaultwarden-server) [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) [![Node](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen.svg)](https://nodejs.org)

Un serveur MCP (Model-Context-Protocol) qui expose une interface simple et robuste pour interagir avec une instance **Vaultwarden** auto-hébergée. Il agit comme un wrapper autour de la CLI officielle de Bitwarden (`bw`), permettant à des agents IA ou des scripts d'automatisation de gérer des secrets de maniÚre programmatique.

## đŸ€” Pourquoi ce projet ?

Vaultwarden est une alternative populaire et lĂ©gĂšre Ă  Bitwarden, mais son automatisation peut ĂȘtre complexe. La CLI officielle (`bw`) nĂ©cessite une gestion manuelle de la session (login, unlock, etc.), ce qui n'est pas idĂ©al pour une utilisation par des agents IA ou dans des scripts non-interactifs.

Ce MCP résout ce problÚme en :
- **Gérant automatiquement la session :** Il déverrouille le coffre à la demande et maintient la session active en cache.
- **Exposant des outils simples :** Fournit des fonctions claires (`get_secret`, `list_secrets`, etc.) via le protocole MCP.
- **Prévenant les blocages :** IntÚgre des timeouts et un systÚme de verrouillage pour gérer les accÚs concurrents de maniÚre fiable.

## ✹ FonctionnalitĂ©s

- **Auto-dĂ©verrouillage :** Le coffre est dĂ©verrouillĂ© Ă  la premiĂšre requĂȘte et la clĂ© de session est mise en cache.
- **Gestion des Conflits :** Un mĂ©canisme de "lock" empĂȘche les dĂ©verrouillages multiples et concurrents.
- **API ComplÚte :** Supporte la lecture, la création, la mise à jour et la suppression de secrets.
- **ModÚles de Secrets :** Fournit des templates JSON pour créer de nouveaux éléments facilement.
- **Sécurité :** S'appuie sur la CLI `bw` officielle pour toutes les opérations cryptographiques.

---

## ⚠ PrĂ©requis

Pour que ce serveur fonctionne, la machine qui l'exécute **doit avoir la CLI Bitwarden (`bw`) installée** et accessible dans le `PATH`.

Suivez les instructions d'installation officielles : [Installer la CLI Bitwarden](https://bitwarden.com/help/cli/).

---

## 📩 Installation

### Méthode 1 : Via NPM (Recommandé)

C'est la méthode la plus simple pour une utilisation avec un client MCP comme `gemini-cli`.

Configurez votre client pour qu'il lance le serveur via `npx` :

```json
{
  "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"
      }
    }
  }
}
```

### Méthode 2 : Depuis les Sources (Git)

1.  **Clonez le dépÎt :**
    ```bash
    git clone https://github.com/fkom13/mcp-vaultwarden.git
    cd mcp-vaultwarden
    ```

2.  **Installez les dépendances :**
    ```bash
    npm install
    ```

3.  **Configurez et lancez :**
    Créez un fichier `.env` à partir de `.env.example` et remplissez-le, puis lancez le serveur.
    ```bash
    cp .env.example .env
    nano .env
    node server.js
    ```

---

## 🔒 Configuration & SĂ©curitĂ©

La configuration se fait via des variables d'environnement.

- `BITWARDEN_HOST`: L'URL de votre instance Vaultwarden.
- `BW_CLIENTID`: Votre Client ID d'API.
- `BW_CLIENTSECRET`: Votre Client Secret d'API.
- `BW_MASTER_PASSWORD`: Votre mot de passe principal.

**AVERTISSEMENT DE SÉCURITÉ :**
La gestion du `BW_MASTER_PASSWORD` est critique.
- **Ne jamais commiter** votre fichier `.env` ou vos secrets dans un dépÎt Git.
- Pour une utilisation en production, préférez des méthodes de gestion de secrets plus robustes, comme les secrets de votre orchestrateur (Kubernetes Secrets, Docker Secrets) ou un service dédié (HashiCorp Vault).
- Ce MCP est conçu pour ĂȘtre exĂ©cutĂ© dans un environnement contrĂŽlĂ© et sĂ©curisĂ©.

---

## 🧰 RĂ©fĂ©rence des Outils (API)

Voici les outils exposés par ce MCP, avec des exemples d'appels.

### `get_secret`
RécupÚre un secret par son nom ou son ID.

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

### `list_secrets`
Recherche des secrets contenant un terme.

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

### `get_secret_template`
Obtient un modÚle JSON pour créer un nouveau secret.

```json
{
  "tool": "get_secret_template",
  "arguments": {
    "type": "login"
  }
}
```
*Types valides : `login`, `note`, `card`, `identity`.*

### `create_secret`
Crée un nouvel élément. Utilisez d'abord `get_secret_template`.

```json
{
  "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\\\"}]}}"
  }
}
```
*Note : Le JSON doit ĂȘtre une chaĂźne de caractĂšres Ă©chappĂ©e.*

### `update_secret`
Met Ă  jour un secret existant par son ID.

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

### `delete_secret`
Supprime un secret par son ID.

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

### `sync`
Force la synchronisation du coffre local avec le serveur distant.

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

---

## đŸ€ Contribution
Les contributions sont les bienvenues ! N'hésitez pas à forker le projet et à ouvrir une Pull Request.

## 📝 Licence
MIT