Skip to main content
Glama

qt-mcp

PyPI Python CI Security License

MCP (Model Context Protocol) server for inspecting, debugging, and interacting with Qt/PySide6 desktop applications — like Playwright MCP, but for desktop Qt apps.

Overview

qt-mcp gives AI coding agents full visibility into running PySide6 applications:

  • Widget tree snapshots — structured accessibility-like view of the entire UI

  • Property inspection — read all Qt properties on any widget

  • Interaction — click buttons, type text, press keys

  • Screenshots — capture any widget or full window as PNG

  • QGraphicsScene inspection — enumerate and inspect scene items

  • VTK/PyVista support — inspect 3D scenes and capture renders

Architecture

┌─────────────────────────────────────────────┐ │ Target PySide6 Application │ │ ┌───────────────────────────────────────┐ │ │ │ qt-mcp Probe (in-process) │ │ │ │ • QObject tree traversal │ │ │ │ • Property read/write │ │ │ │ • Widget.grab() screenshots │ │ │ │ • Event injection (click/type) │ │ │ │ Listens on: localhost:9142 │ │ │ └───────────────────────────────────────┘ │ └──────────────────┬──────────────────────────┘ │ JSON-RPC over TCP ┌──────────────────┴──────────────────────────┐ │ qt-mcp MCP Server (separate process) │ │ • Speaks MCP protocol (stdio) to Claude │ │ • Translates tool calls → probe RPCs │ └─────────────────────────────────────────────┘

Installation

# Install with uv uv add qt-mcp # Or install from source git clone https://github.com/0xCarbon/qt-mcp.git cd qt-mcp uv sync --extra dev

Quick Start

1. Instrument your app

Add the probe to your PySide6 application:

# Option A: Environment variable (preferred) # QT_MCP_PROBE=1 python -m your_app # Option B: Explicit init from qt_mcp.probe import install install() # call after QApplication is created

2. Configure Claude Code

Add to your MCP settings:

{ "mcpServers": { "qt-mcp": { "command": "uvx", "args": ["qt-mcp"] } } }

3. Use from Claude

Claude can now see and interact with your Qt app:

"Take a snapshot of the running application" "Click the 'Apply' button" "Type 'hello' into the search field" "Show me a screenshot of the 3D view"

MCP Tools

Tool

Description

qt_snapshot

Capture the full widget tree as a structured snapshot

qt_screenshot

Take a screenshot of a widget or full window

qt_widget_details

Get detailed properties of a specific widget

qt_click

Click a widget (left/right/middle button, modifiers)

qt_type

Type text into a widget

qt_key_press

Send a key event (Return, Escape, Ctrl+S, etc.)

qt_set_property

Set a Qt property on a widget

qt_invoke_slot

Invoke a slot/method on a QObject

qt_list_windows

List all top-level windows

qt_object_tree

Get the full QObject parent-child tree

qt_scene_snapshot

Get all items in a QGraphicsScene

qt_vtk_scene_info

Get VTK scene state (camera, actors)

qt_vtk_screenshot

Capture a VTK render window

Environment Variables

Variable

Default

Description

QT_MCP_PROBE

unset

Set to 1 to auto-activate the probe

QT_MCP_PORT

9142

Probe TCP listen port

QT_MCP_HOST

localhost

Probe TCP host (MCP server side)

Development

# Install dev dependencies uv sync --extra dev # Run tests uv run pytest -v # Format uv run ruff format src/ tests/ # Lint uv run ruff check src/ tests/ # Security audit uv run pip-audit --progress-spinner off gitleaks detect --source . --config .gitleaks.toml

Troubleshooting

Probe not connecting

  • Ensure the probe is installed in the target app (check for qt_mcp_probe in QApplication.children())

  • Verify the port matches between probe and MCP server (QT_MCP_PORT)

  • Check that nothing else is using port 9142

Wayland issues

  • QWidget.grab() works from inside the process on both X11 and Wayland

  • External screenshot tools may require portal authorization on Wayland

OpenGL widgets

  • QOpenGLWidget.grab() requires a real display server (X11/Wayland)

  • With offscreen platform, grab() returns a valid pixmap but without GL content

  • Standard widgets and QGraphicsView work fine offscreen

License

Licensed under either of:

at your option.

Contributing

See CONTRIBUTING.md for development workflow and contribution requirements.

Code of Conduct

See CODE_OF_CONDUCT.md.

Security

See SECURITY.md to report vulnerabilities.

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/0xCarbon/qt-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server