Simple OPC-UA GUI client built on asyncua and PyQt6.

PRs welcome for any wished improvements.
QSettings.client.nodes.root.get_child(['0:Objects', '2:MyNode']).PyQt6 is required. Python 3.14 or newer.
pip install opcua-client
opcua-client
pip install opcua-client --upgrade to update.
The project uses uv for environment and build
management.
uv sync # install deps + dev tools into .venv
uv run python app.py
uv run python tests.py # integration tests need a free port
uv run mypy uaclient uawidgets # type check
After editing any .ui or .qrc source, run make to regenerate
uaclient/*_ui.py, uaclient/theme/breeze_resources.py, and
uawidgets/resources.py. Targets:
make — regenerate UI / resource Python from Qt sources.make run — launch the GUI.make edit — open the main .ui in Qt Creator.Cutting a release:
uv run python release.py # bumps pyproject.toml, tags, uv build, uv publish
asyncua is currently consumed via a local path source
([tool.uv.sources] asyncua = { path = "../opcua-asyncio", editable = true })
because the 2.x line is still in pre-release. Drop the source entry once
asyncua>=2.0 is on PyPI.
$ claude mcp add opcua-client-gui \
-- python -m otcore.mcp_server <graph>