phantom-mcp
phantom-mcp
MCP-Server, der es Claude Code ermöglicht, iOS-Simulatoren, Android-Emulatoren und echte Geräte zu sehen und zu steuern. 22 Tools zum Testen mobiler Apps, ohne das Terminal zu verlassen.
Claude kann Screenshots machen, den Bildschirm lesen, tippen, scrollen, Felder ausfüllen, Assertionen prüfen, Videos aufnehmen — automatisch, auf iOS und Android.
Ein Testbericht mit Screenshots wird bei jeder Testsitzung automatisch generiert.
Architektur
Claude Code
| MCP protocol (stdio)
v
Phantom (Node.js TypeScript)
| |
v v
iOS Android
xcrun simctl ADB
WebDriverAgent UIAutomator
(localhost:8100) (adb shell)
| |
v v
Simulateur / iPhone Emulateur / DeviceVoraussetzungen
Tool | Erforderlich für | Überprüfung |
macOS 13+ | alles | - |
Xcode 15+ | iOS |
|
Node.js 18+ | alles |
|
Appium 3+ | iOS (WDA) |
|
xcuitest driver | iOS (WDA) |
|
Android SDK | Android |
|
Installation
Option A — npm (empfohlen)
# 1. Installer le package
npm install -g phantom-mcp
# 2. Installer Appium + driver iOS
npm install -g appium
appium driver install xcuitest
# 3. Enregistrer dans Claude Code
claude mcp add -s user phantom -- npx phantom-mcpOption B — aus den Quellen
git clone https://github.com/nthimpulse/phantom-mcp.git
cd phantom-mcp
npm install
npm run build
claude mcp add -s user phantom -- node "$(pwd)/build/index.js"Die 22 Tools
Geräteverwaltung
Tool | Beschreibung |
| Listet alle Geräte auf (iOS-Sims + Android-Emus + echte Geräte) |
| Wählt das aktive Gerät aus. Startet es automatisch, falls es ausgeschaltet ist |
Beobachtung
Tool | Beschreibung |
| Erstellt einen Screenshot des aktiven Geräts |
| Barrierefreiheitsbaum mit Index [N] für jedes Element |
| Wartet darauf, dass ein Element erscheint (mit Timeout) |
| Scrollt, bis ein Element gefunden wird |
Assertionen
Tool | Beschreibung |
| Prüft, ob ein Text auf dem Bildschirm IST |
| Prüft, ob ein Text NICHT auf dem Bildschirm ist |
Interaktion
Tool | Beschreibung |
| Tippen (per Index, Koordinaten oder Text) |
| Langes Drücken (Kontextmenüs) |
| Texteingabe mit Clear-Option |
| Wischen (hoch/runter/links/rechts) |
Navigation
Tool | Beschreibung |
| Öffnet eine URL / einen Deep Link |
Geräteaktionen
Tool | Beschreibung |
| Simuliert ein Schütteln |
| Ändert die Ausrichtung (Hochformat/Querformat) |
| Startet/stoppt die Videoaufnahme |
App-Lebenszyklus
Tool | Beschreibung |
| Startet eine App per Bundle-ID / Paketname |
| Schließt eine App |
Analyse & Automatisierung (Stufe 3)
Tool | Beschreibung |
| Barrierefreiheitsprüfung: fehlende Labels, zu kleine Tippflächen, Bilder ohne Alt-Text |
| Automatischer Testbericht: start zum Beginnen der Nachverfolgung, end zum Generieren des Markdowns. Jede Aktion wird automatisch protokolliert. |
| Vergleicht zwei Screenshots Pixel für Pixel, um visuelle Regressionen zu erkennen |
| Führt dieselbe Aktion auf mehreren Geräten mit einem Befehl aus |
Automatische Funktionsweise
Geräteauswahl
Phantom startet niemals automatisch ein Gerät. Es fordert dich auf zu wählen:
Wenn nur 1 Gerät aktiv ist, wird es automatisch verwendet
Wenn mehrere aktiv sind, wirst du aufgefordert, mit
set_devicezu wählenWenn keines aktiv ist, wird die Liste der verfügbaren Geräte angezeigt
Auto-Launch WDA (iOS)
WebDriverAgent wird automatisch beim ersten iOS-Tool gestartet, das es benötigt. Erster Start ~60-90s (Xcode-Build), danach sofort.
ADB Multi-Device (Android)
Alle ADB-Befehle zielen auf das Gerät ab, das über -s <serial> ausgewählt wurde. Keine Verwirrung bei mehreren Geräten.
Texteingabe (AZERTY-kompatibel)
Die Eingabe verwendet pbcopy + Cmd+V (Einfügen) anstelle der virtuellen Tastatur. Dies ist sofort einsatzbereit und funktioniert mit allen Tastaturlayouts (AZERTY, QWERTY usw.).
Automatischer Testbericht
Jede Aktion (Tippen, Eingeben, Wischen, Assertion...) wird automatisch mit einem Screenshot aufgezeichnet. Am Ende des Tests wird ein Markdown-Bericht in /tmp/phantom-report-xxx/ generiert.
Sicherheit
Alle Systembefehle laufen über
execFile(keine Shell)Eingaben werden per Regex validiert: Bundle-IDs, UDIDs, Paketnamen, AVD-Namen, URLs
iOS-Prädikate werden maskiert (Anti-Injection)
Android-Text wird für die Geräte-Shell maskiert
Kein
as any, keinexec()Shell
Konfiguration
Optionale Umgebungsvariablen:
PHANTOM_WDA_PATH— Pfad zu WebDriverAgent (Standard: ~/.appium/...)PHANTOM_WDA_URL— WDA-URL (Standard: http://localhost:8100)
Fehlerbehebung
WDA-Endlosschleife bei Absturz
MobAI oder ein anderes Tool verwendet Port 8100.
lsof -i :8100
pkill -f "MobAI""Kein Gerät verfügbar"
xcrun simctl list devices available # iOS
adb devices -l # AndroidWDA startet nicht
cd ~/.appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent
xcodebuild -project WebDriverAgent.xcodeproj \
-scheme WebDriverAgentRunner \
-destination "platform=iOS Simulator,name=iPhone 17 Pro" \
testADB nicht gefunden
ls ~/Library/Android/sdk/platform-tools/adbProjektstruktur
phantom/
src/
index.ts Point d'entree MCP (22 tools)
platforms/
types.ts Interfaces communes
ios/
simctl.ts Wrapper xcrun simctl
wda.ts Client WDA + auto-launch
android/
adb.ts Wrapper ADB complet
tools/ 22 tools (19 fichiers)
utils/
device-manager.ts Detection + routing multi-device
xml.ts Parser XML partage
docs/
README.md Ce fichier
TUTORIAL.md Tuto pas-a-pas
FLOWS.md Exemples de flows de testThis server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/nthImpulse/phantom-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server