MCP Virtual User
MCP Virtual User
Docker 컨테이너 속의 가상 인간입니다. 귀, 입, 눈, 손이 있습니다.
이것은 무엇인가요?
음성과 브라우저를 통해 웹 앱과 상호작용하는 실제 사용자를 시뮬레이션하는 완전한 독립형 환경입니다. 다음을 갖추고 있습니다:
가상 마이크 — MCP가 어떤 앱이든 하드웨어 마이크에서 오는 것으로 인식하는 오디오(TTS 또는 원본)를 주입할 수 있습니다.
가상 스피커 — MCP가 OS에서 재생하는 모든 오디오를 캡처하여 텍스트로 변환할 수 있습니다.
실제 브라우저 — Playwright로 조작 가능한 Chromium, 영구 로그인 세션 유지.
실제 디스플레이 — 디버깅용 Xvfb + VNC (실시간으로 상황을 지켜볼 수 있습니다).
MCP 인터페이스 — 모든 기능이 Streamable HTTP를 통해 도구로 노출됩니다.
Related MCP server: Lotus MCP
사용 사례
ChatGPT 음성 모드 테스트 — 마이크에 "What's the weather?"를 주입하고, ChatGPT의 음성 응답을 캡처한 다음 텍스트로 변환하여 검증합니다.
Gemini Live 테스트 — Google의 음성 AI를 대상으로 동일한 흐름을 실행합니다.
자사 Mobile Mesh UI 테스트 — 자체 앱을 대상으로 종단 간(end-to-end) 음성 대화 테스트를 수행합니다.
모든 음성 지원 웹 앱 — 브라우저의 마이크/스피커를 사용하는 앱이라면 무엇이든 테스트할 수 있습니다.
아키텍처
┌─────────────────────────────────────────────────────────────┐
│ Docker Container │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ MCP Server (port 8360) │ │
│ │ │ │
│ │ Audio Tools: │ │
│ │ tts_to_mic(text) → Piper TTS → virtual mic │ │
│ │ transcribe_speakers() → parec → Whisper STT │ │
│ │ inject_audio(b64) → raw audio → virtual mic │ │
│ │ capture_audio(secs) → raw audio from speakers │ │
│ │ wait_for_speech() → detect + transcribe │ │
│ │ │ │
│ │ Browser Tools: │ │
│ │ browser_navigate, click, type, screenshot, etc. │ │
│ │ browser_grant_mic_permission(origin) │ │
│ │ │ │
│ │ Screen Tools: │ │
│ │ screen_screenshot, screen_size, vnc_url │ │
│ └──────────┬──────────────────────────┬───────────────┘ │
│ │ │ │
│ ┌──────────▼──────────┐ ┌───────────▼───────────────┐ │
│ │ PulseAudio │ │ Playwright + Chromium │ │
│ │ │ │ │ │
│ │ virtual_mic ◀──────│──│── browser reads as mic │ │
│ │ (pipe-source) │ │ │ │
│ │ │ │ browser plays audio ──▶ │ │
│ │ virtual_speaker ───│──│── captured via .monitor │ │
│ │ (null-sink) │ │ │ │
│ └─────────────────────┘ └───────────────────────────┘ │
│ │
│ ┌─────────────────────┐ ┌───────────────────────────┐ │
│ │ Xvfb :99 │ │ x11vnc + noVNC │ │
│ │ 1920x1080x24 │ │ port 5900 / 6080 │ │
│ └─────────────────────┘ └───────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘빠른 시작
# Build and start
docker compose up -d --build
# Watch the virtual display (open in your browser)
open http://localhost:6080/vnc.html?autoconnect=true
# Test the MCP server
curl http://localhost:8360/mcp -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"health","arguments":{}}}'
# Run smoke tests
bash test-smoke.sh첫 설정(1회만)
# 1. Build and start
docker compose up -d --build
# 2. Open VNC in your browser to see the desktop
open http://localhost:6080/vnc.html?autoconnect=true
# 3. In the VNC window, Chromium is running. Log into:
# - https://chat.openai.com (ChatGPT)
# - https://gemini.google.com (Gemini)
# 4. Export cookies to DragonsKeep so they persist
bash scripts/export-browser-cookies.sh
# 5. Done! Future container starts auto-inject the stored sessions.테스트 실행
# Infrastructure tests (no login required)
cd tests && pip install -r requirements.txt
pytest test_audio_roundtrip.py test_browser.py -v
# ChatGPT conversation tests (requires login)
pytest test_conversations.py -v -m chatgpt --timeout=120
# Gemini conversation tests
pytest test_conversations.py -v -m gemini --timeout=120
# Our Mesh UI conversation tests
pytest test_conversations.py -v -m meshui --timeout=120
# All conversation tests
pytest test_conversations.py -v --timeout=120예제: ChatGPT 음성 모드 테스트
# From any MCP client (Kiro, our mesh agent, etc.)
# 1. Navigate to ChatGPT
browser_navigate("https://chat.openai.com")
# 2. Grant mic permission
browser_grant_mic_permission("https://chat.openai.com")
# 3. Click the voice mode button
browser_click("[data-testid='voice-mode-button']")
# 4. Speak a question (injected into the virtual mic)
tts_to_mic("What is the capital of France?")
# 5. Wait for ChatGPT to respond and transcribe what it says
response = wait_for_speech(timeout_seconds=15)
# response == "The capital of France is Paris."
# 6. Assert
assert "Paris" in response세션 관리
로그인 세션은 ./data/browser-profile/(마운트된 볼륨)에 유지됩니다.
ChatGPT/Gemini 인증 토큰은 암호 관리자를 사용하세요:
쿠키를 암호 관리자에
chatgpt-session/gemini-session으로 저장합니다.컨테이너 시작 시 이 쿠키를 브라우저 프로필에 주입합니다.
또는: VNC(http://localhost:6080)에서 한 번 직접 로그인하면 세션이 유지됩니다.
포트
포트 | 서비스 |
8360 | MCP 서버(Streamable HTTP) |
6080 | noVNC(브라우저 기반 VNC 뷰어) |
5900 | VNC 직접 연결 |
MCP 도구
오디오
도구 | 설명 |
| 텍스트를 합성하여 마이크 입력으로 주입 |
| 스피커 출력을 캡처하여 텍스트로 변환 |
| 원본 오디오 바이트를 가상 마이크에 주입 |
| 가상 스피커에서 원본 오디오를 녹음 |
| 스피커에서 음성을 감지하고 끝날 때까지 대기한 후 변환 |
브라우저
도구 | 설명 |
| URL로 이동 |
| 요소 클릭 |
| 입력란에 텍스트 입력 |
| 키보드 키 누르기 |
| 페이지 스크린샷 캡처 |
| 페이지 텍스트 내용 가져오기 |
| JavaScript 실행 |
| 텍스트가 나타날 때까지 대기 |
| 현재 URL 가져오기 |
| 특정 출처에 마이크 접근 권한 부여 |
화면
도구 | 설명 |
| 전체 데스크톱 스크린샷 |
| 디스플레이 해상도 가져오기 |
| 실시간 VNC 뷰어 URL 가져오기 |
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables AI assistants to perform automated web testing by controlling a Chrome browser to navigate, interact with pages, capture screenshots, extract console logs, and simulate mobile devices for responsive design testing.7
- FlicenseNot gradedqualityDmaintenanceEnables creation of reusable browser automation skills through demonstration by recording user actions in a browser while narrating, then converting those workflows into executable skills that can be invoked through natural language.
- FlicenseNot gradedqualityCmaintenanceEnables automated end-to-end testing and verification of web applications through natural language, with self-healing selectors and dual-mode execution.15
- AlicenseNot gradedqualityAmaintenanceEnables plain-English browser automation via an MCP server, allowing agents to run objectives or test suites in a real browser without selectors or scripts.105Apache 2.0
Related MCP Connectors
Simulation, evaluation and monitoring for voice agents.
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
AI QA tester — real browsers scan sites for bugs, SEO, perf, and accessibility issues via chat.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/macbeth76/mcp-virtual-user'
If you have feedback or need assistance with the MCP directory API, please join our Discord server