1 points par GN⁺ 2025-06-01 | 2 commentaires | Partager sur WhatsApp
  • Buttplug MCP est un serveur MCP qui connecte les appareils pour adultes de l’écosystème Buttplug.io à des programmes basés sur des grands modèles de langage (LLM)
  • Les utilisateurs peuvent, via des outils LLM comme Claude Desktop, consulter les informations des appareils ou contrôler diverses fonctions comme les vibrations, l’état de la batterie ou l’intensité du signal
  • À l’heure actuelle, le projet manque encore de maturité fonctionnelle et de stabilité, si bien que l’ensemble ne fonctionne pas de manière fluide et que le contrôle réel des appareils reste difficile
  • L’intégration avec des hôtes MCP comme Ollama et mcphost permet des tests basés sur les outils, mais certaines fonctions (comme l’exploration des ressources) restent limitées
  • Par rapport à d’autres services MCP, ce projet se distingue par sa spécialisation dans le contrôle d’appareils intelligents via LLM, et il est proposé gratuitement en open source

Aperçu du projet

  • buttplug-mcp est un serveur Model Context Protocol (MCP), dédié à l’écosystème Buttplug.io
  • Depuis des programmes LLM prenant en charge les outils, comme Claude Desktop, il est possible d’interroger et de contrôler ses appareils Buttplug
    • Exemples de commandes : "Quels sont mes appareils buttplug connectés ?", "Règle le deuxième moteur du LELO F1S à 50 %", "Quel est le niveau de batterie du Lovense Max 2 ?", "Le signal du WeWibe est-il faible ?"
  • Ces exemples reflètent bien la direction visée, mais l’expérience actuelle réellement implémentée reste instable et décevante

Structure des ressources et des outils pris en charge

  • Ressources API
    • /devices : liste des appareils Buttplug connectés (JSON)
    • /device/{id} : informations détaillées d’un appareil
    • /device/{id}/rssi : intensité du signal de l’appareil (RSSI)
    • /device/{id}/battery : niveau de batterie par appareil
  • Outils
    • device_vibrate : paramètres id, motor, strength (obligatoires : id, strength), avec sélection optionnelle du moteur pour contrôler la vibration

Exemple de schéma JSON (ressources)

{
  "resources": [
    {
      "uri": "devices",
      "name": "Device List",
      "description": "List of connected Buttplug devices in JSON",
      "mimeType": "application/json"
    }
  ]
}

Exemple de schéma JSON (outils)

{
  "tools": [
    {
      "description": "Vibrates device by `id`, selecting `strength` and optional motor",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {"description": "Device ID to query, sourced from `/devices`", "type": "number"},
          "motor": {"description": "Motor number to vibrate, defaults to 0", "type": "number"},
          "strength": {"description": "Strength from 0.0 to 1.0, with 0.0 being off and 1.0 being full", "type": "number"}
        },
        "required": ["id", "strength"]
      },
      "name": "device_vibrate"
    }
  ]
}

État actuel

  • Il s’agit d’un projet expérimental de courte durée lancé le 1er avril 2025 (poisson d’avril)
  • La gestion des connexions de la bibliothèque go-buttplug étant instable, l’interrogation de la liste des appareils fonctionne, mais certains contrôles comme les vibrations ne marchent pas correctement
  • Un appareil virtuel serait nécessaire pour les tests, mais Buttplug.io ne prend en charge que les appareils physiques
  • Le projet en est à un stade précoce, avec des tests end-to-end encore insuffisants
  • À l’avenir, les problèmes de connexion de la bibliothèque go-buttplug ainsi que l’état des hôtes du protocole MCP (notamment leur implémentation centrée sur les outils) feront l’objet d’un examen supplémentaire

Installation

  • Des binaires multiplateformes sont distribués via GitHub Releases
  • L’installation via Homebrew est également prise en charge :
    • brew tap conacademy/homebrew-tap
    • brew install conacademy/tap/buttplug-mcp

Utilisation

  • La gestion des appareils est assurée par l’application hub Intiface Central (port par défaut : 12345)
  • Pour utiliser buttplug-mcp comme serveur MCP dans Claude Desktop, il faut configurer le programme hôte en conséquence
    • Exemple de configuration (fichier JSON) :
    {
      "mcpServers": {
        "buttplug": {
          "command": "/opt/homebrew/bin/buttplug-mcp",
          "args": ["--ws-port", "12345"]
        }
      }
    }
    
  • Après cette configuration, il est possible de l’appliquer en suivant le tutoriel de Claude Desktop, puis d’interroger et de contrôler les appareils en dialoguant avec Claude
  • Des intégrations supplémentaires sont aussi possibles, comme le contrôle de l’éclairage via HomeAssistant MCP

Intégration avec Ollama et mcphost

  • Parmi les hôtes MCP, la prise en charge d’Ollama est possible, avec intégration à des LLM compatibles avec les outils
  • Peut être utilisé avec mcphost (maintenu par le développeur de mcp-go) à l’aide d’une configuration MCP JSON pour buttplug-mcp
    • Exemple :
    $ go install github.com/mark3labs/mcphost@latest
    $ mcphost -m ollama:llama3.3 --config mcp.json
    
  • Seuls les "Tools" sont pris en charge, tandis que les "Resources" sont limitées, ce qui empêche l’énumération des appareils ou l’exploration de leurs propriétés
  • Dans des exemples réels, un message de succès peut être renvoyé pour une commande de vibration, sans qu’aucune réaction de l’appareil ne se produise

Build

  • Système de build basé sur task
    • Exécution : $ task
  • Outils de test utiles :
    • task stdio-schema | jq (vérification du schéma JSON)
    • npx @modelcontextprotocol/inspector node build/index.js (interface Web GUI de MCP Inspector)

Arguments CLI

  • Options principales :
    • -h, --help : aide
    • -l, --log-file : définir la destination du fichier de log
    • -j, --log-json : format de logs JSON
    • --sse : utiliser le transport SSE
    • --sse-host : hôte/port pour la connexion SSE
    • -v, --verbose : logs détaillés
    • --ws-port : port de connexion au serveur Websocket Buttplug

Contribution et code de conduite

  • Les Pull Requests, forks, etc. sont librement bienvenus
  • Respect du Code of Conduct requis

Crédits et licence

  • Utilise les projets open source go-buttplug et go-mcp
    • Inclut la bibliothèque Golang Buttplug.io et ses exemples, ainsi que la bibliothèque Golang du Model Context Protocol
  • Copyright 2025 Neomantra BV, Evan Wies (ConAcademy)
  • Publié sous licence MIT (voir LICENSE.txt pour le détail)

2 commentaires

 
bbulbum 2025-06-03

Ouh… on va peut-être dire que c’est encore trop tôt pour nous…

 
GN⁺ 2025-06-01
Avis sur Hacker News
  • Je partage ceci car je me souviens que la norme Buttplug a déjà été discutée plusieurs fois sur Hacker News.
  • Je trouve que le mot « teledildonics » en lui-même est assez extraordinaire.
    • J’ai même pensé à faire un commit sur BO.io pour l’ajouter à mon CV, mais j’ai aussi un léger malaise à l’idée que cela ne fasse qu’ajouter des sujets de questions bizarres dans la partie pentest de mon parcours.
  • Partage d’informations utiles au sujet de Deldo, un mode de contrôle de sextoys et de teledildonique fonctionnant dans Emacs (https://news.ycombinator.com/item?id=29207607).
  • Quelqu’un demande en plaisantant si c’est ça, le fameux vibe coding.
    • Il cite directement la phrase « We were vibe coding before it was cool » présente sur la page principale de buttplug.io.
    • Il se demande à quoi peuvent bien ressembler les UAT (User Acceptance Testing) sur ce genre de projet.
    • L’OP semble avoir porté une attention assez sérieuse à ce matériel.
    • https://github.com/profullstack/mcp-server est aussi un exemple créé en vibe coding.
  • Je trouve étonnant que des API permettant de contrôler ce type de jouets soient publiques depuis longtemps.
    • Intuitivement, on s’attendrait plutôt à ce que chaque appareil ne propose qu’une application propriétaire fermée, mais la réalité est différente.
    • Je me demande si cela ne vient pas du fait que les grandes entreprises ne se sont pas lancées sur ce marché.
    • Il est expliqué que, dans la plupart des cas, ce n’est pas le fournisseur qui spécifie officiellement l’API, mais la communauté qui l’a reconstruite par rétro-ingénierie.
      • Comme les produits se connectent généralement en Bluetooth, beaucoup se contentent d’un niveau de sécurité limité à l’appairage et à la proximité.
    • Au Danemark, la plupart des appareils électroniques domestiques ne sont pas fermés et ne sont pas non plus très difficiles à hacker.
      • Des appareils comme les micro-ondes, les brosses à dents électriques, les routeurs ou les e-bikes sont aussi des cibles de hacks assez simples.
      • S’il y a bien plus de hackers de sextoys, c’est sans doute parce que ce domaine concentre davantage de passion.
      • Je pensais autrefois que la communauté de hacking des e-bikes était la plus importante, mais celle des sextoys est peut-être encore plus grande.
      • Dans le cas des e-bikes, les motivations sont le plus souvent le débridage de la vitesse ou l’accès à des fonctions statistiques.
      • Je ne suis pas moi-même un hacker d’appareils, mais une simple recherche suffisait pour trouver facilement les outils nécessaires.
      • En pratique, beaucoup d’objets du quotidien n’ont pas une sécurité très robuste.
      • En Europe, il existe aussi une culture qui pousse à préférer des produits sans marque plutôt que ceux des grandes entreprises tech.
      • Même les produits de grandes marques semblent assez faciles à hacker et, avec le matériel en main, la plupart paraissent piratables.
    • Quelqu’un estime que l’accessibilité communautaire s’est améliorée parce qu’il faut permettre aux cam streamers de créer facilement leurs propres extensions d’appareils.
      • Il mentionne le cas de Lovesense, devenu quasiment synonyme de « jouet contrôlé par le chat » sur les sites de streaming.
    • Dans cette industrie, tout semble orienté vers la satisfaction utilisateur en priorité, ce qui expliquerait ce caractère ouvert.
    • Il suppose qu’il existe beaucoup d’appareils ouverts fabriqués en Chine, qui réutilisent tels quels des puces et protocoles génériques bon marché.
      • La fiabilité et la sécurité y sont souvent négligées, ce qui rend la rétro-ingénierie relativement facile.
      • La connexion Bluetooth donne l’impression d’avoir été conçue à bas coût et de manière assez fragile, au point d’être facilement interrompue par le corps humain lui-même.
      • Le contrôleur semble se contenter de diffuser des signaux simples, avec très peu de calcul supplémentaire ou de gestion d’erreurs.
  • Buttplug est une norme open source et un projet logiciel pour contrôler du matériel intime, comme des jouets pour adultes.
  • Le TLD .io me semble être un choix absolument parfait pour ce projet.
    • Réaction amusée à ce sujet.
  • C’est qDot, fondateur et chef de projet de https://buttplug.io.
    • Même si ce n’est plus affiché sur la page principale, les AMA sont toujours les bienvenus s’il y a des questions.
  • J’ai l’impression qu’en ajoutant des tâches programmées de ChatGPT à ce système, on obtiendrait un réveil vraiment atypique.
    • Comme l’intégration Home Assistant est aussi prise en charge, cela pourrait également servir de notification, par exemple pour l’ouverture de la porte du garage.
  • Si quelqu’un dit que la big tech force des fonctionnalités IA dont personne ne veut, j’aimerais bien garder ce site en favori pour le lui montrer.
  • C’est moi l’auteur, et ce projet est un projet personnel « inutile » créé pour le 1er avril.
    • Chaque année, je fais quelque chose d’amusant pour le 1er avril, puis je le mets sur GitHub.
    • Ce serveur MCP n’a pas vraiment de sens pour un usage réel, mais comme le point de départ compte, je l’ai laissé en ligne.
    • Il y a deux ans, j’avais relié Buttplug à un salon de discussion SSH, et j’avais combiné consentement numérique et clés SSH pour construire un graphe d’accès anonymisé.
    • Je ne suis toujours pas mainteneur de Buttplug.io aujourd’hui, mais j’ai participé à plusieurs discussions sur Discord.
    • Je précise aussi qu’ils cherchent de nouveaux mainteneurs parmi les Rustaceans.
    • Le serveur MCP a été écrit en Golang, mais l’écosystème Buttplug semble mieux convenir à Rust.
    • J’ai autrefois travaillé sur la recherche en haptique, avec des brevets liés au domaine et une expérience d’intégration avec VRML.
    • J’ai aussi une expérience avec un appareil de diagnostic de la fonction sexuelle financé par le NIH, ainsi qu’avec des jouets que j’ai fabriqués moi-même.
    • Je travaille actuellement sur les Biaerolar Beats avec un casque EEG de Neurable (https://github.com/ConAcademy/biareolar-beats).
    • J’ai fait vibrer un LELO F1 en vibe coding, mais ce projet-ci est le résultat d’un vrai codage manuel.
    • Récemment, j’ai aussi essayé le vibe coding avec le protocole A2A, notamment avec Claude et Gemini, mais la difficulté d’implémentation était élevée.
    • J’ai créé trois serveurs MCP cette semaine-là (argent, sexe et drogue), et du point de vue des données ouvertes comme des usages réels de l’IA, AgentDank (https://github.com/AgentDank/dank-mcp) est le plus intéressant.
    • Connecter des données personnalisées et des endpoints SQL à des LLM à appels d’outils me semble avoir un potentiel énorme.
  • À la remarque « c’est une interaction sexuelle inefficace », quelqu’un répond : « chacun fait comme il veut ».
  • Quelqu’un se demande comment il faut penser les questions de confidentialité sur les différents services.
    • Avant, on pouvait simplement acheter le produit et l’utiliser sans aucune relation avec le fournisseur, mais aujourd’hui, comme avec les casques VR ou d’autres services, la situation a beaucoup changé.