Skip to main content
Glama

MCP Virtual User

Ein synthetischer Mensch in einem Docker-Container. Hat Ohren, einen Mund, Augen und Hände.

Was ist das?

Eine vollständig in sich geschlossene Umgebung, die einen echten Benutzer simuliert, der über Sprache und Browser mit Web-Apps interagiert. Sie umfasst:

  • Virtuelles Mikrofon – MCP kann Audio (TTS oder Rohdaten) einspeisen, das jede App als von einem Hardware-Mikrofon stammend betrachtet

  • Virtuelle Lautsprecher – MCP kann jegliches Audio, das das Betriebssystem abspielt, aufnehmen und transkribieren

  • Echter Browser – Chromium mit Playwright-Steuerung und dauerhaften Anmeldesitzungen

  • Echtes Display – Xvfb + VNC zum Debugging (live beobachten, was gerade passiert)

  • MCP-Schnittstelle – alles wird als Tools über Streamable HTTP bereitgestellt

Related MCP server: Lotus MCP

Anwendungsfälle

  • ChatGPT-Sprachmodus testen – „What's the weather?“ in das Mikrofon einspeisen, ChatGPTs gesprochene Antwort aufnehmen, transkribieren und Assertions durchführen

  • Gemini Live testen – gleicher Ablauf gegen Googles Sprach-KI

  • Unsere Mobile Mesh UI testen – vollständige End-to-End-Sprachkonversationstests gegen unsere eigene App

  • Jede Web-App mit Sprachunterstützung – wenn sie Mikrofon/Lautsprecher des Browsers nutzt, können wir sie testen

Architektur

┌─────────────────────────────────────────────────────────────┐
│  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        │    │
│  └─────────────────────┘  └───────────────────────────┘    │
└─────────────────────────────────────────────────────────────┘

Schnellstart

# 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

Erstmalige Einrichtung (einmalig)

# 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.

Tests ausführen

# 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

Beispiel: ChatGPT-ChatGPT-Sprachmodus testen

# 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

Sitzungsverwaltung

Anmeldesitzungen bleiben in ./data/browser-profile/ gespeichert (gemountetes Volume).

Für ChatGPT/Gemini-Authentifizierungscommunities kannst du DragonsKeep verwenden:

  1. Speichere Cookies in DragonsKeep als chatgpt-session / gemini-session

  2. Beim Containerstart werden sie dann in das Browserprofil injiziert

Oder: einmal manuell über VNC (http://localhost:6080) anmelden – die Sitzung bleibt erhalten.

Ports

Port

Dienst

8360

MCP Server (Streamable HTTP)

6080

noVNC (browserbasierter VNC-Viewer)

5900

VNC direkt

MCP-Tools

Audio

Tool

Beschreibung

tts_to_mic

Text synthetisieren und als Mikrofon-Eingabe einspeisen

transcribe_speakers

Lautsprecherausgabe erfassen und als Text transkribieren

inject_audio

Rohe Audio-Bytes in das virtuelle Mikrofon einspeisen

capture_audio

Rohes Audio von den virtuellen Lautsprechern aufnehmen

wait_for_speech

Sprache auf den Lautsprechern erkennen, auf das Ende warten, transkribieren

Browser

Tool

Beschreibung

browser_navigate

Eine URL aufrufen

browser_click

Ein Element anklicken

browser_type

In ein Eingabefeld tippen

browser_press_key

Eine Tastaturtaste drücken

browser_screenshot

Einem Screenshot der Seite aufnehmen

browser_get_text

Den Textinhalt der Seite abrufen

browser_evaluate

JavaScript ausführen

browser_wait_for_text

Warten, bis ein Text auf der Seite erscheint

browser_url

Aktuelle URL abrufen

browser_grant_mic_permission

Mikrofonzugriff für einen Ursprung erlauben

Bildschirm

Tool

Beschreibung

screen_screenshot

Einen Screenshoft des vollständigen Desktops aufnehmen

screen_size

Bildschirmauflösung abrufen

vnc_url

Live-URL des VNC-Vauzürs abrufen

F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • F
    license
    A
    quality
    D
    maintenance
    Enables 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
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables automated end-to-end testing and verification of web applications through natural language, with self-healing selectors and dual-mode execution.
    15
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables plain-English browser automation via an MCP server, allowing agents to run objectives or test suites in a real browser without selectors or scripts.
    105
    Apache 2.0

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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