Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Qt PilotLaunch myapp.py, click the 'submit_button', and capture a screenshot of the result."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Qt Pilot
An MCP server for headless Qt/PySide6 GUI testing. Enables AI assistants like Claude to visually test and interact with Qt desktop applications.
Repository: github.com/neatobandit0/qt-pilot
Features
Launch Qt apps headlessly via Xvfb virtual display
Capture screenshots for visual verification
Simulate interactions: clicks, hovers, keyboard input
Widget discovery by object name
App health monitoring with stderr capture
Full Qt introspection via QTest and Qt APIs
Installation
From GitHub
Manual Installation
Copy the plugin to your Claude plugins directory:
Then add to your ~/.claude.json:
Dependencies
Also requires Xvfb for headless display:
MCP Tools
launch_app
Launch a Qt application headlessly.
capture_screenshot
Capture the current window.
click_widget
Click a widget by its object name.
hover_widget
Hover over a widget.
type_text
Type text into a widget or focused widget.
press_key
Simulate a key press with optional modifiers.
find_widgets
List widgets matching a name pattern.
get_widget_info
Get detailed widget information.
get_app_status
Check if the application is still running and get diagnostics.
wait_for_idle
Wait for the Qt event queue to settle after actions.
close_app
Close the running application.
Requirements for Target Applications
For widget interactions to work, your Qt application must:
Set object names on interactive widgets:
button = QPushButton("Click Me") button.setObjectName("my_button") # Required for widget discoveryUse QApplication (not QCoreApplication)
Show at least one window
Architecture
Example Workflow
Troubleshooting
"Widget not found"
Ensure the widget has
setObjectName()calledUse
find_widgets()to list available widget names
"No app is running"
Call
launch_app()firstCheck that the script/module path is correct
App crashes silently
Use
get_app_status()to check for errorsThe
stderrfield contains crash information
Screenshots are blank
Ensure the application creates and shows a window
Use
wait_for_idle()after launch for window to render
License
MIT License - see LICENSE file.