
Desktop GUI automation on macOS, Windows and Linux through accessibility trees, not screenshots.
Public tool metadata for what this MCP can expose to an agent.
list_windowsList all visible application windowsList all visible application windows
No parameter schema in public metadata yet.
get_treeFull accessibility tree for a window as nested JSONFull accessibility tree for a window as nested JSON
No parameter schema in public metadata yet.
find_elementsFind elements by role and/or nameFind elements by role and/or name
No parameter schema in public metadata yet.
clickClick / invoke an element (foreground-independent); button="right", clicks=2; falls back to a real click at the element's centerClick / invoke an element (foreground-independent); button="right", clicks=2; falls back to a real click at the element's center
No parameter schema in public metadata yet.
click_atClick at absolute screen coordinates — fallback for webview/canvas UI; takes button and clicksClick at absolute screen coordinates — fallback for webview/canvas UI; takes button and clicks
No parameter schema in public metadata yet.
dragDrag-and-drop with real pointer events, between coordinates or element handlesDrag-and-drop with real pointer events, between coordinates or element handles
No parameter schema in public metadata yet.
type_textType text into a field (SetValue → EditableText → key injection)Type text into a field (SetValue → EditableText → key injection)
No parameter schema in public metadata yet.
select_optionSelect an option in a combo box or list (a11y items → SetValue → keystrokes), verified by reading the value backSelect an option in a combo box or list (a11y items → SetValue → keystrokes), verified by reading the value back
No parameter schema in public metadata yet.
get_valueGet the current value or text of an elementGet the current value or text of an element
No parameter schema in public metadata yet.
wait_for_windowWait until a window matching a pattern appearsWait until a window matching a pattern appears
No parameter schema in public metadata yet.
wait_for_elementWait until an element exists and optionally has a given stateWait until an element exists and optionally has a given state
No parameter schema in public metadata yet.
screenshotCapture a PNG (write to output_path or return base64)Capture a PNG (write to output_path or return base64)
No parameter schema in public metadata yet.
start_recordingStart recording the screen (or a specific window)Start recording the screen (or a specific window)
No parameter schema in public metadata yet.
stop_recordingStop recording and export as GIF (short clips) or MP4 (long sessions, no re-encode)Stop recording and export as GIF (short clips) or MP4 (long sessions, no re-encode)
No parameter schema in public metadata yet.
learn_layoutResolve semantic names → live handle IDs (one call per session)Resolve semantic names → live handle IDs (one call per session)
No parameter schema in public metadata yet.
run_sequenceExecute a list of actions server-side — no per-action round-tripsExecute a list of actions server-side — no per-action round-trips
No parameter schema in public metadata yet.
Sponsors
Every other tool needs a browser or a vision model. This one reads what the OS already knows.
A cross-platform MCP server for desktop GUI automation — driven by accessibility APIs, not screenshots.
Works with Claude, Codex, Gemini, Ollama, or any OpenAI-compatible client that supports MCP.
bad-ass-mcp recording itself interacting with MarkTheCrab
Most AI desktop automation tools work by taking screenshots and asking a vision model "what do you see?" That's slow, expensive, and fragile.
Every major OS exposes a structured accessibility tree — the same one used by screen readers — that describes every button, text field, combo box, and menu in every running application. bad-ass-mcp speaks that language directly.
gi.repository.Atspicomtypesbad-ass-mcp