Skip to main content

cua-driver Python SDK

Rust-backed Python SDK and bundled executable for Cua Driver.

Product boundary

This package is for client applications importing Cua Driver as an SDK:

from cua_driver import CuaDriver

It does not contain a Python MCP client. Agents already have runtime-neutral MCP clients and should configure the bundled server directly:

cua-driver mcp

The removed pre-release MCP facade used CuaDriver.stdio(), AsyncCuaDriver, *Args, and transport classes. Application code imports the typed Rust-backed SDK shown below; agent code supplies cua-driver mcp to its agent SDK.

Installation

Install and usage docs live at https://cua.ai/docs/how-to-guides/driver/install and https://cua.ai/docs/reference/cua-driver/mcp-tools.

The wheel contains generated UniFFI bindings, a platform-specific Rust SDK library, and the cua-driver executable. CuaDriver.create() loads the runtime in the importing process and does not require the executable or daemon.

SDK example

import asyncio

from cua_driver import (
    CaptureScope,
    CuaDriver,
    CursorReducedMotion,
    EndSessionInput,
    GetDesktopStateInput,
    SetAgentCursorThemeInput,
    StartSessionInput,
)

async def main() -> None:
    driver = CuaDriver.create()
    await driver.start_session(
        StartSessionInput(session="demo", capture_scope=CaptureScope.DESKTOP)
    )
    try:
        await driver.set_agent_cursor_theme(
            SetAgentCursorThemeInput(
                session="demo",
                theme_id="cua.default",
                reduced_motion=CursorReducedMotion.AUTO,
            )
        )
        desktop = await driver.get_desktop_state(
            GetDesktopStateInput(session="demo", screenshot_out_file=None)
        )
        print(desktop.images[0].mime_type)
    finally:
        await driver.end_session(EndSessionInput(session="demo"))
        await driver.shutdown()


asyncio.run(main())

SDK operations are asynchronous. Desktop calls return a typed ToolResult with text, images, verification/error metadata, and structured_json / raw_json for platform-extensible results. Session lifecycle calls return dedicated generated records.

The agent cursor is session-owned. Its default theme and custom dotLottie authoring workflow are documented in docs/cursor-themes.md. Custom source is compiled and installed with the local CLI; SDK and MCP tools select only an installed theme ID. The built-in cursor shows the sanitized public session name in a badge below the pointer.

Authorization integrations

standard is promptless for normal automation. An application that needs to authorize attachment to an existing logged-in Chromium profile can construct a configured runtime with CuaDriver.create_configured_with_authorization_host(options, host). Implement DriverAuthorizationHost.authorize() in trusted application code and return the request's exact digest with ALLOW, DENY, or CANCEL.

CuaDriver.create_configured_with_activity_observer(options, observer) emits content-free action, refusal, grant, and session events. The observer cannot change authorization or tool results. Use create_configured_with_host_integrations when the application needs both.

See the SDK reference for complete examples and the callback trust rules.

CuaDriver.connect(socket_path) remains available while existing applications migrate. It exposes the same methods over the installed daemon, but it does not provide a second SDK contract.

shutdown() closes admission, waits for already admitted operations to finish, and is idempotent. Calls started after shutdown fail with DriverError.Shutdown. Destroying a binding handle releases native resources, but orderly applications should still await shutdown().

Daemon-backed MCP host

Applications that must also expose MCP to an external agent can own a private daemon child. The child provides a stable permission identity and session lifetime for short-lived or external clients:

import asyncio

from cua_driver import CuaDriver, EmbeddedCuaDriverHost, get_binary_path


async def main() -> None:
    host = EmbeddedCuaDriverHost(
        binary_path=str(get_binary_path()),
        host_bundle_id="com.example.your-app",
    )
    connection = await host.start()
    driver = CuaDriver.connect(connection.socket_path)
    try:
        # Application calls use driver. An agent runtime can launch
        # connection.mcp.command with connection.mcp.args and environment.
        print(await driver.metadata())
    finally:
        del driver
        await host.stop()


asyncio.run(main())

start() coalesces concurrent callers, stop() cancels startup and is idempotent, and restart() returns a new generation/PID/endpoint. Destroy SDK clients and MCP proxies before stopping or restarting, then reconnect from the new connection. wait_for_exit(connection.generation) observes unexpected termination. Dropping the host closes its parent-liveness pipe and kills the child as a fallback, but orderly applications should still await stop().

Binary wrapper

The package also exposes the bundled executable:

from cua_driver import get_binary_path, run_cua_driver

print(get_binary_path())
exit_code = run_cua_driver(["mcp"])

Platform support

Platform Architecture Status
macOS 13+ Universal (ARM64 + x86_64) Supported
Linux x86_64 Supported
Windows x86_64 Supported
Windows ARM64 Supported

License

MIT License — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

cua_driver-0.14.0-py3-none-win_arm64.whl (21.5 MB view details)

Uploaded Python 3Windows ARM64

cua_driver-0.14.0-py3-none-win_amd64.whl (23.1 MB view details)

Uploaded Python 3Windows x86-64

cua_driver-0.14.0-py3-none-manylinux_2_31_x86_64.whl (24.4 MB view details)

Uploaded Python 3manylinux: glibc 2.31+ x86-64

cua_driver-0.14.0-py3-none-manylinux_2_31_aarch64.whl (24.4 MB view details)

Uploaded Python 3manylinux: glibc 2.31+ ARM64

cua_driver-0.14.0-py3-none-macosx_13_0_universal2.whl (33.9 MB view details)

Uploaded Python 3macOS 13.0+ universal2 (ARM64, x86-64)

File details

Details for the file cua_driver-0.14.0-py3-none-win_arm64.whl.

File metadata

  • Download URL: cua_driver-0.14.0-py3-none-win_arm64.whl
  • Upload date:
  • Size: 21.5 MB
  • Tags: Python 3, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.3

File hashes

Hashes for cua_driver-0.14.0-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 25df785eaf3d09e817e7dcf1c312b3e1e7f1144801ea1b2e56f5452f8b6b34c8
MD5 27c29b321c79d62e1fef5220f8b7aa82
BLAKE2b-256 9bb82b8642d61651d6b48a014b4188a9f2eedb31d3e47ead471aa1b6906832be

See more details on using hashes here.

File details

Details for the file cua_driver-0.14.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: cua_driver-0.14.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 23.1 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.3

File hashes

Hashes for cua_driver-0.14.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 a0a833f1c52a124a33dc59b385f8d19b3c9c4ab74c42b378c64dc4ff61d27784
MD5 8aefb436c1a25e6bd2795e368c8fd3fd
BLAKE2b-256 9c9fae1caa78d6fa9f51fa5c5eefe2d6ad49f6c02d486d71e136eb08cae55317

See more details on using hashes here.

File details

Details for the file cua_driver-0.14.0-py3-none-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for cua_driver-0.14.0-py3-none-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 803f8906704134654d89300c0d0a2594d0318c581e306f7faf020c99ef2241f0
MD5 cf271e2214f2909a2cff27419cd04eee
BLAKE2b-256 f1bbd6b17df803d02a044c4e7112328e1276bfb3e55a4b61d285c68ed902d827

See more details on using hashes here.

File details

Details for the file cua_driver-0.14.0-py3-none-manylinux_2_31_aarch64.whl.

File metadata

File hashes

Hashes for cua_driver-0.14.0-py3-none-manylinux_2_31_aarch64.whl
Algorithm Hash digest
SHA256 1b1ac441a7d941fca5da193e4ecff74f8c6167c1e08101f881270cf279b96e1c
MD5 4a247110a71b1dbc63b1c01683a3f0c8
BLAKE2b-256 9ba810780b97b57c5191f0d80404978c0ce90e6e2498384bafc5441d122df007

See more details on using hashes here.

File details

Details for the file cua_driver-0.14.0-py3-none-macosx_13_0_universal2.whl.

File metadata

File hashes

Hashes for cua_driver-0.14.0-py3-none-macosx_13_0_universal2.whl
Algorithm Hash digest
SHA256 86e240fedf6cd5c382b054265282b4429593233234f60dff5c4a5c1160803cc7
MD5 1e1ea93536e0ca0c2cd72d94868d54d8
BLAKE2b-256 47cd141e49485d74b9c660c28494c39a2c915d72b4f7fe05276a19d198b0a221

See more details on using hashes here.

Release history Release notifications | RSS feed

0.28.1

5 files

0.28.0

5 files

0.27.0

5 files

0.26.1

5 files

0.26.0

5 files

0.25.0

5 files

0.24.0

5 files

0.23.2

5 files

0.22.2

5 files

0.22.1

5 files

0.22.0

5 files

0.21.0

5 files

0.20.0

5 files

0.19.3

5 files

0.19.2

5 files

0.19.1

5 files

0.19.0

5 files

0.18.0

5 files

0.17.0

5 files

0.16.0

5 files

0.14.2

5 files

0.14.1

5 files

This release

0.14.0 This release

5 files

0.13.1

5 files

0.13.0

5 files

0.12.5

5 files

0.12.4

5 files

0.12.3

5 files

0.12.2

5 files

0.11.0

5 files

0.10.0

5 files

0.9.1

5 files

0.9.0

5 files

0.8.3

5 files

0.8.2

5 files

0.8.1

5 files

0.8.0

5 files

0.7.1

5 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page