Verified desktop control for agents on Windows and Linux: apps with no API, windows, shell, browser.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
Verified control of the whole desktop, for agents and programs, on Windows and Linux. Ghost gives Claude Code, Codex, Cursor, any MCP harness, or a plain script the operating system's own control surface: the apps with no API, the windows, the shell, and the browser you are already logged into - in the background without taking your screen or cursor, with every action proven to have happened.
Like Playwright, but for the native desktop, and built for agents. Ghost does the perceiving, the acting, and the verifying; the model you are already running does any looking that is needed, so there is no vision API key to set.
One MCP surface, two engines: Win32 UI Automation on Windows, AT-SPI2 over D-Bus on Linux. The verbs, the locator tiers and the act-then-verify loop are written once and behave the same on both. Platform support Β· Linux setup
background. Since 0.20 it is also constructive: anything Ghost
starts (an app, a windowed browser) is born on a hidden desktop that has its own
input queue and cannot take your foreground, and the ordinary verbs drive it there
by window title. A call that truly has no background path fails naming the action
instead of quietly taking the screen. Since 0.22 the policy is locked there:
no tool call can raise it, so an agent cannot decide on its own to take your
mouse. You can, by setting GHOST_FOCUS_LOCK=off in the server's environment.
And since 0.23 a window that grabs the foreground on its own - browsers do, on
their own accessibility calls - is handed straight back, so your typing keeps
going where you are looking. Measured on a real desktop with a person typing
throughout: of roughly 490 keystrokes a run, zero to one reached the window
the agent was driving.
(how)ghost verify drives the real MCP server over
stdio and audits every claim above against hard timing budgets, exiting non-zero
if any of them does not hold on your hardware.verified / focus_confirmed - never a
blind ok:true. Agents fail by acting and not knowing if it worked; Ghost closes
that loop.ghost_see (every element with
its name, role and on-screen centre) or ghost_screenshot itself. Ghost's own
vision tier is optional, exists for callers with no model of their own, and is off
until configured.See it in one script: examples/background_agent_demo.py
drives an app in the background while the foreground stays yours.
Honest comparison vs Playwright-MCP / cua-driver / Computer Use:
docs/comparison.md.
Vision is the smallest part of it. In a typical session an agent calls Ghost mostly to act, to manage windows and processes, to run commands, and to read state back.
| Use | Tools | Typical caller |
|---|---|---|
| Driving apps with no API: installers, legacy line-of-business software, vendor portals, WPF and Electron tools | ghost_act, ghost_key, ghost_scroll, ghost_drag | agents, RPA scripts |
| Window and process control: launch invisibly, focus, minimize, restore, close, recover hidden windows, sweep orphaned browsers | ghost_window, ghost_desktop_*, ghost_stats | agents, ops scripts |
| A terminal for the agent: builds, git, CLIs, persistent PowerShell state, spawning another Claude Code session | ghost_shell, ghost_run | coding agents on Windows |
| Driving the browser you are already signed into, through its DevTools port: tabs, navigation, DOM clicks, JS eval, page text | 19 ghost_browser_* and ghost_tab_* tools | agents, web automations |
| Reading data out of apps with no export: accessibility text, tab text, OCR | ghost_see mode=text, ghost_tab_text | agents, reporting scripts |
| Making "did it work" a machine check: element exists, value equals, wait for idle or text | ghost_assert, ghost_wait | QA agents, CI |
| Isolated desktops: overnight GUI work and parallel agents that never touch the human's screen | ghost_window op=launch, the focus policy, ghost_desktop_* | autonomous runs |
| Reproducible multi-step flows with retries and conditions, no model in the loop | intents via ghost run, POST /run, ghost_execute_intent | scheduled jobs |
| The clipboard as a bridge into apps that resist typing | ghost_clipboard | all of the above |
Every row runs under the same guarantees: the action returns verified, the
default policy never takes your foreground, and Ctrl+Alt+G stops every Ghost
process at once.
Ghost is the layer between a model and the desktop. The model reasons; Ghost sees the screen the way the operating system does, acts on real controls without touching your foreground, and reports whether the action took. It gives programmatic control over any desktop application - native Win32, Electron, WPF, UWP, GTK, Qt, or otherwise - to an agent, a script, or a program.
On Windows it uses UI Automation for element discovery, SendInput for keyboard/mouse injection, and DXGI/GDI for screen capture. On Linux it uses AT-SPI2 over D-Bus for discovery and actions, XTEST (X11) or the RemoteDesktop portal / uinput (Wayland) for input, and X11 GetImage or the Screenshot portal for capture. The Linux engine is pure Rust - no -devel packages to install.
Ship it three ways:
ghost-mcp server - the primary surface: a Model Context Protocol server for
Claude Code, Claude Desktop, Codex, Cursor, and any MCP client (54 tools on Windows)ghost CLI - one-shot commands, great for scripts and CI (ghost click --name "Submit")ghost-http server - local REST API, call it from Python, Node, curl, anything (curl http://127.0.0.1:7878/list-windows)The MCP surface is 20 desktop verbs, 19 ghost_browser_* / ghost_tab_* tools for
driving individual browser tabs in the background (Chrome, Comet, Edge, Brave), and
15 Windows-only tools: the focus policy plus ghost_desktop_* for explicit control of
isolated Windows desktops the user never sees. Under the default policy you rarely
need the latter: ghost_window op=launch already starts the app on the hidden
desktop auto, and ghost_see / ghost_act / ghost_key / ghost_scroll reach it
with window=<title> exactly as they reach a window on your own desktop
(target.surface in the response tells you which). UIA, window messages and capture
work fully there. Real SendInput does not, because Windows refuses it off the
input desktop, and typing is proven by reading the control's value back, so a target
that drops posted characters returns an error rather than a false success. The
desktop verbs and the browser tools build on Linux as well; the focus policy and
hidden desktops are Windows-only.
No Claude required. No browser required. No CDP. It drives apps through the OS's own automation and input APIs, so it works with native apps that have no API and no automation hooks of their own - the same reliability whether or not an app was built to be automated.
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/ghost)<a href="https://allmcps.com/mcp/ghost"><img src="https://allmcps.com/api/badge/ghost?style=directory" alt="Ghost on AllMCPs" /></a>