buttplug-mcp는 Buttplug.io 생태계용 Model Context Protocol 서버로, Claude Desktop 같은 도구 지원 LLM 프로그램이 연결된 Genital Interface Devices를 조회하고 제어하게 해줌
- 제공 기능은
/devices, /device/{id}, /device/{id}/rssi, /device/{id}/battery 리소스와 device_vibrate 도구이며, 진동 강도는 0.0~1.0 범위로 지정함
- 현재 상태는 실험적이며 불안정함; 2025-04-01에 빠른 교육용 프로젝트로 시작됐고,
go-buttplug의 연결 처리 불안정 때문에 엔드투엔드 테스트가 제대로 완료되지 않음
- 사용하려면 Intiface Central을 실행해 WebSocket 서버 포트를 확인하고, Claude Desktop 같은 MCP 호스트 설정에
buttplug-mcp 실행 파일과 --ws-port 12345 같은 인자를 등록해야 함
- Ollama 기반 로컬 추론에서는
mcphost로 도구 호출을 실험했지만, 해당 환경에서는 Tools만 지원되고 Resources는 지원되지 않아 장치 열거와 세부 조회가 되지 않음
프로젝트 목적과 지원 범위
buttplug-mcp는 Model Context Protocol 서버로, Buttplug.io ecosystem에 연결된 장치를 LLM 프로그램에서 조회하고 제어하게 해줌
- Claude Desktop 같은 도구 지원 LLM 프로그램에서 다음과 같은 프롬프트를 목표로 함
- 연결된 Buttplug 장치 조회
- 특정 장치의 특정 모터를 50% 강도로 설정
- Lovense Max 2의 배터리 잔량 확인
- WeWibe의 신호 약함 여부 확인
- README는 위 경험이 목표 상태이며, 현재 경험은 불안정하고 답답하다는 주의문을 명시함
MCP 리소스와 도구
- 지원 리소스는 연결 장치와 장치 상태를 JSON 형태로 조회하는 데 초점을 둠
/devices: 연결된 Buttplug 장치 목록
/device/{id}: /devices에서 얻은 숫자 ID 기반 장치 정보
/device/{id}/rssi: 장치 ID 기반 RSSI 신호 레벨
/device/{id}/battery: 장치 ID 기반 배터리 레벨
- 지원 도구는
device_vibrate 하나임
- 파라미터는
id, 선택적 motor, strength
motor 기본값은 0
strength는 0.0이 꺼짐, 1.0이 최대 강도인 숫자 범위
- README에는 리소스와 도구의 JSON Schema 예시로
schema_resources.json, schema_tools.json가 포함됨
현재 상태와 제한
- 프로젝트는 2025-04-01 April Fool’s Day에 시작됐고, 전날 만든 금융 시장 데이터용 실험적 MCP 서비스
dbn-go 이후 만든 빠른 교육용 프로젝트임
- 동작은 하지만 기반 라이브러리
go-buttplug의 연결 처리가 불안정하다고 되어 있음
- Claude로 장치 목록 조회는 가능했지만, 특정 장치는 Intiface Central만으로도 진동하지 않았고 “읽기 전용 모드”처럼 보였다고 되어 있음
- 물리 장치에 의존하지 않고 테스트할 수 있는 가상 Buttplug.io 장치가 있으면 좋겠다는 제한도 있음
- README는 아직 진정한 의미의 엔드투엔드 테스트가 완료되지 않았다고 명시함
- 앞으로
go-buttplug의 연결 불안정 원인을 더 살펴보고, MCP 호스트들이 Tools와 Resources, Resource Templates를 현재 어떻게 지원하는지 이해해야 한다고 되어 있음
설치와 Claude Desktop 사용
brew tap conacademy/homebrew-tap
brew install conacademy/tap/buttplug-mcp
- 사용하려면 Intiface Central 허브 애플리케이션을 내려받아 장치를 관리하고, 서버 포트를 확인해야 함
- Claude Desktop에서는 MCP 서버 설정에 실행 파일과 WebSocket 포트를 등록함
- MacOS Homebrew 설치 경로 예시는
/opt/homebrew/bin/buttplug-mcp
- 설정 예시는
--ws-port 12345를 사용함
{
"mcpServers": {
"buttplug": {
"command": "/opt/homebrew/bin/buttplug-mcp",
"args": [
"--ws-port", "12345"
]
}
}
}
Ollama와 mcphost 실험
- 로컬 추론에서는 Ollama를 지원하는 MCP 호스트를 사용할 수 있음
- 도구를 지원하는 Ollama LLM을 사용해야 함
- 실험에는
mcphost가 쓰였고, 이 프로젝트는 mcp-go 라이브러리 개발자가 만든 MCP 호스트임
- 실행 예시는
mcp.json에 앞선 설정을 저장한 뒤 llama3.3 모델로 실행함
go install github.com/mark3labs/mcphost@latest
mcphost -m ollama:llama3.3 --config mcp.json
- README 기준으로
mcphost에서는 Tools만 지원되고 Resources는 지원되지 않아 장치를 열거하거나 세부 조회할 수 없었음
phi4-mini로 device_vibrate 도구 호출은 성공 응답을 받았지만, 앞서 명시한 현재 상태 문제 때문에 실제 장치는 진동하지 않았음
빌드, 테스트 도구, CLI
- 빌드는 task로 수행되며, 결과 바이너리는
bin/buttplug-mcp에 생성됨
task
- 빌드 과정은
go mod tidy 후 go build -o bin/buttplug-mcp cmd/buttplug-mcp/main.go를 실행함
- 유용한 테스트 도구는 다음과 같음
task stdio-schema | jq: JSON Schema 출력
npx @modelcontextprotocol/inspector node build/index.js: MCP Inspector Web GUI
- CLI 옵션은 도움말, 로그 파일, JSON 로그, SSE 전송, SSE 호스트, verbose 로그, Buttplug WebSocket 서버 포트 설정을 지원함
--ws-port int: Buttplug WebSocket 서버에 연결할 포트
--sse: 기본 STDIO 대신 SSE Transport 사용
--log-file string: 로그 파일 목적지 또는 MCP_LOG_FILE 환경변수 사용
--log-json: JSON 로그 사용
--verbose: 상세 로그 사용