1P by GN⁺ 4일전 | ★ favorite | 댓글 2개
  • Buttplug MCP는 Buttplug.io 생태계 내 성인용 디바이스를 대형 언어 모델(LLM) 기반 프로그램과 연동하는 MCP 서버
  • 사용자는 Claude Desktop 등 LLM 툴을 통해 디바이스 정보를 조회하거나 진동, 배터리 상태, 신호 세기 등 다양한 기능 제어가 가능함
  • 현재는 기능적 완성도와 안정성이 부족해 전체 기능이 매끄럽지 않고, 실제 디바이스 제어에 어려움이 있음
  • Ollama, mcphost 등 MCP 호스트와 연동하여 툴 기반의 테스트가 가능하나, 일부 기능(자원 탐색 등)은 제한됨
  • 이 프로젝트는 다른 MCP 서비스와 비교해 LLM-기반 스마트 디바이스 제어에 특화되어 있으며 오픈소스로 무료 제공됨

프로젝트 개요

  • buttplug-mcp는 Model Context Protocol(MCP) 서버로, Buttplug.io 생태계 전용
  • Claude Desktop과 같은 툴 지원 LLM 프로그램에서 자신의 Buttplug 디바이스를 질의·제어 가능함
    • 예시 명령: "내 연결된 buttplug 디바이스는?", "LELO F1S의 두 번째 모터를 50%로", "Lovense Max 2의 배터리 잔량은?", "WeWibe 신호 약함 여부?"
  • 위 예시는 목표 방향에 가깝지만, 실제 구현된 현재 경험은 불안정하고 실망스러운 상태

지원 리소스 및 툴 구조

  • API 리소스
    • /devices: 연결된 Buttplug 디바이스 리스트(JSON)
    • /device/{id}: 디바이스 개별 상세 정보
    • /device/{id}/rssi: 디바이스 신호 세기(RSSI)
    • /device/{id}/battery: 디바이스 별 배터리 잔량
    • device_vibrate: id, motor, strength 파라미터(필수: id, strength), 선택적으로 모터 지정해 진동을 제어

JSON 스키마 예시(리소스)

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

JSON 스키마 예시(툴)

{
  "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"
    }
  ]
}

현재 상태

  • 2025년 4월 1일(만우절)에 시작한 실험적 단기 프로젝트임
  • go-buttplug 라이브러리의 연결 관리가 불안정해, 디바이스 리스트 질의는 되나 진동 기능 등 일부 제어가 원활하지 않음
  • 테스트 목적으로 가상 디바이스가 필요하나 Buttplug.io는 물리적 디바이스만 지원함
  • 엔드투엔드 테스트가 충분히 이뤄지지 않은 초기 단계임
  • 향후 go-buttplug 라이브러리의 연결 문제와 MCP 프로토콜의 호스트 상태(툴 중심 구현 등)를 추가로 검토할 예정임

설치 안내

  • 다중 플랫폼용 바이너리 파일이 GitHub Releases에 배포됨
  • Homebrew를 통한 설치도 지원됨:
    • brew tap conacademy/homebrew-tap
    • brew install conacademy/tap/buttplug-mcp

사용법

  • 디바이스 관리는 Intiface Central 허브 앱에서 담당(기본 포트 12345)
  • Claude Desktop에서 MCP 서버로 buttplug-mcp를 사용할 수 있도록 호스트 프로그램에 설정 필요
    • 예시 설정(JSON 파일):
    {
      "mcpServers": {
        "buttplug": {
          "command": "/opt/homebrew/bin/buttplug-mcp",
          "args": ["--ws-port", "12345"]
        }
      }
    }
    
  • 위 설정 후 Claude Desktop의 튜토리얼을 참고하여 적용 가능, Claude와 대화하며 디바이스 질의·제어 가능
  • HomeAssistant MCP를 통한 조명 제어 등 추가 연동 활용 가능

Ollama 및 mcphost와의 통합

  • MCP 호스트 중 Ollama 지원이 가능하며, 툴 지원 LLM과 연동 가능
  • mcphost(mcp-go 개발자가 관리)와 함께 buttplug-mcp용 MCP JSON 설정으로 사용 가능
    • 예시:
    $ go install github.com/mark3labs/mcphost@latest
    $ mcphost -m ollama:llama3.3 --config mcp.json
    
  • "Tools"만 지원하고 "Resources"는 제한되어 디바이스 나열이나 속성 탐색 불가
  • 실제 예시에서는 디바이스 진동 명령에 대한 성공 메시지는 반환하지만, 디바이스 반응이 없을 수 있음

빌드

  • task 기반 빌드 시스템 적용
    • 실행: $ task
  • 유용한 테스트 도구:
    • task stdio-schema | jq (JSON 스키마 확인)
    • npx @modelcontextprotocol/inspector node build/index.js (MCP Inspector Web GUI)

CLI 인자

  • 주요 옵션:
    • -h, --help: 도움말
    • -l, --log-file: 로그파일 목적지 지정
    • -j, --log-json: JSON 로그 형식
    • --sse: SSE 전송 사용
    • --sse-host: SSE 연결용 호스트/포트
    • -v, --verbose: 상세 로그
    • --ws-port: Buttplug Websocket 서버 접속 포트

기여 및 코드 오브 컨덕트

  • Pull Request, 포크 등 자유롭게 환영
  • Code of Conduct 준수 필요

크레딧 및 라이선스

  • go-buttplug, go-mcp 오픈소스 프로젝트 활용
    • Buttplug.io Golang 라이브러리 및 예시, Model Context Protocol Golang 라이브러리 포함
  • 2025 Neomantra BV, Evan Wies(ConAcademy) 저작
  • MIT 라이선스로 공개(자세한 라이선스는 LICENSE.txt 참고)

어우.. 우리에겐 너무 이르다고 해야할지..

Hacker News 의견
  • 예전에 Hacker News에서 Buttplug 표준에 대해 여러 번 논의가 있었던 기억이 있어 공유함
  • Teledildonics라는 단어 자체가 대단하다고 생각함
    • BO.io에 커밋해서 내 이력서에 넣고 싶다는 생각도 하지만, 내 펜테스트 항목이 괴상한 질문거리만 늘릴 것 같은 찜찜함도 느낌
  • Emacs에서 동작하는 섹스토이 컨트롤 및 teledildonics 모드 Deldo와 관련해 참고할만한 정보(https://news.ycombinator.com/item?id=29207607) 공유
  • 이게 그 유명한 vibe coding이냐고 재미있게 물음
    • buttplug.io 메인 페이지에 We were vibe coding before it was cool이라는 문구가 있는 걸 직접 인용함
    • 이런 프로젝트의 UAT(User Acceptance Testing)는 대체 어떻게 생겼을지 궁금함
    • OP가 이런 하드웨어에는 신경을 꽤 쓴 것 같음
    • https://github.com/profullstack/mcp-server도 vibe coding으로 만들어진 사례
  • 이런 장난감을 컨트롤하는 API가 예전부터 공개되어 있다는 사실이 신기함
    • 원래 같으면 각 장치가 폐쇄적인 전용 앱만 제공하는 게 더 자연스럽다고 생각하지만, 현실은 다름
    • 대기업들이 이 시장에 뛰어들지 않으면서 이렇게 된 건 아닐지 궁금함
    • 벤더가 공식적으로 API를 명세하는 게 아니라, 커뮤니티가 역공학으로 만들어낸 경우가 대부분인 사실 설명
      • 제품들은 대개 블루투스로 연결되기 때문에, 보안은 페어링과 근접성 정도로 만족하는 경우가 많음
    • 덴마크에선 집에 있는 전자기기 대부분이 폐쇄적이지 않고, 해킹도 어렵지 않음
      • 마이크로파, 전동칫솔, 라우터, e-bike 같은 기기들도 간단한 해킹 대상임
      • 섹스토이 해커들이 훨씬 많은 이유는 이쪽에 더 많은 열정이 몰리는 현상
      • 예전엔 e-bike 해킹 커뮤니티가 가장 큰 줄 알았으나, 섹스토이 쪽이 더 클 수도 있다고 추정함
      • e-bike 해킹 이유는 대부분 속도 제한 해제나 통계 기능 때문임
      • 나는 디바이스 해커가 아니지만, 검색만으로 필요한 툴을 쉽게 찾을 수 있었음
      • 실제로 일상 기기들에 보안이 견고하지 않은 경우가 많음
      • 유럽에선 주요 테크 기업 제품 대신 비브랜드 제품을 사길 원하는 문화도 존재
      • 큰 브랜드 제품도 해킹이 쉬운 편이고, 하드웨어만 있으면 대부분 해킹 가능하다고 느낌
    • 캠 스트리머들이 자신만의 장치 확장 기능을 만들기 쉽게 해야 해서 커뮤니티 접근성이 높아졌다는 의견
      • Lovesense가 스트리밍 사이트에서 “채팅으로 컨트롤되는 장난감”의 대명사로 자리잡은 사례 언급
    • 이 업계에선 사용자 만족을 최우선으로 두기 때문에 이렇게 오픈된 걸로 보임
    • 중국산 오픈 기기들이 많고, 저렴한 범용 칩과 프로토콜을 그대로 사용하는 경우가 대부분이라고 추정함
      • 신뢰성이나 보안도 소홀하게 다뤄서 역공학이 어렵지 않음
      • 블루투스 연결이 저렴하고 허술하게 설계된 느낌이고, 심지어 사람 신체로 인해 연결이 끊기기도 쉬움
      • 컨트롤러는 단순 신호만 스트리밍하며 추가 연산이나 오류 처리도 거의 없는 듯함
  • Buttplug는 성인 장난감과 같은 친밀한 하드웨어를 제어하는 오픈 소스 표준 및 소프트웨어 프로젝트임
  • .io TLD가 이 프로젝트엔 정말 찰떡 선택이라고 느낌
    • 이에 대해 웃긴 반응을 보임
  • qDot이고, https://buttplug.io의 창립자 및 프로젝트 리드임
    • 이미 메인 페이지에서 내려갔지만 질문이 있다면 언제든 AMA 환영임
  • 이 시스템에 ChatGPT 예약 작업을 더하면 정말 색다른 알람시계가 될 것 같다고 생각함
    • 홈 어시스턴트 통합도 지원해서 차고문 열림 같은 알림으로도 사용할 수 있을 듯함
  • 누군가 빅테크가 원치 않는 AI 기능을 강제로 넣는다고 하면, 이 사이트를 북마크해두고 보여주고 싶다는 생각
  • 본인(저자)인데, 이 프로젝트는 만우절에 만들어진 ‘쓸데없는’ 개인 프로젝트임
    • 매년 만우절에 재미 삼아 만든 게 GitHub에 올라가게 됨
    • 이 MCP 서버는 실사용에는 별 의미가 없지만, 시작점이 중요하므로 올려둔 상태
    • 2년 전엔 Buttplug를 SSH 챗룸과 연동했었고, 디지털 동의와 SSH 키를 조합해 익명화된 액세스 그래프를 구성한 경험 설명
    • 현재도 Buttplug.io 메인테이너는 아니지만 Discord에서 여러 논의를 했었음
    • Rustacean(러스트 커뮤니티 멤버) 중 신규 메인테이너도 찾고 있다고 전달
    • MCP 서버는 Golang으로 작성했지만, Buttplug 생태계엔 Rust가 더 어울릴 듯함
    • 예전에는 햅틱스(haptics) 연구를 했고, 관련 특허와 VRML 통합 경험 있음
    • NIH 연구비로 만든 성기능 진단 기기 및 직접 제작한 장난감 경험도 소유
    • 지금은 Neurable EEG 헤드셋으로 Biaerolar Beats 연구 진행 중임(https://github.com/ConAcademy/biareolar-beats)
    • vibe coding으로 LELO F1을 울려봤지만, 이 프로젝트는 실제 손수 코딩한 결과물
    • 최근엔 Claude, Gemini와 같이 A2A 프로토콜로 vibe code도 시도했으나 구현 난이도가 높았음
    • MCP 서버를 그 주에 3개(돈·섹스·마약) 만들었고, 오픈 데이터 및 AI 실사용 결과 측면에선 AgentDank(https://github.com/AgentDank/dank-mcp)가 가장 흥미로움
    • 커스텀 데이터와 SQL 엔드포인트를 툴 호출형 LLM에 붙이는 건 엄청난 잠재력이라고 느낌
  • "그 방식이 비효율적인 성적 상호작용"이라는 말에 "그건 각자의 자유"라는 반응
  • 다양한 서비스에서의 프라이버시 문제에 대해 어떻게 생각하는지 궁금함
    • 예전엔 그냥 제품만 사고 벤더와는 아무런 관계 없이 쓸 수 있었는데, 요즘은 VR 고글이나 다른 서비스처럼 상황이 많이 바뀌었다는 의견