H
HoldMyBeer-gg/bad-ass-mcp
Cross-platform GUI MCP for interacting with your desktop in macos, Windows, and Linux
no SECURITY.md
View on GitHub ↗Link checked 2026-11-12 · HTTP 200 · opens the vendor's own site
Install & config
Install command from the repository
pip install bad-ass-mcp
Parsed from the README we fetched on 2026-10-26; we have not executed it.
This is the install method the repository states, not an MCP client config, so no JSON is generated.
Key names differ by client: Clients & CLI
- Star count
- 8 ★ · HoldMyBeer-gg/bad-ass-mcp · read from the GitHub search API · (checked 2026-11-13 20:00:50)
- Source
- read directly from its GitHub page · type: open-source project
- Harvest history
- first seen 2026-10-22 · last seen 2026-11-14 · seen 27× · listed by 2 sources
- Score
- score 203 · 8 ★ · 2 sources · repo
- Install
pip install bad-ass-mcp
FAQ (answers come from our records)
How do I install it?
The repository provides this install command:
pip install bad-ass-mcp. It comes from the repository itself; we cannot guarantee it runs as-is in your client.Who is it for?
We filed it under these tags: 开源项目. The tags come from the entry itself, not a taxonomy we imposed.
Who maintains it?
repository
HoldMyBeer-gg/bad-ass-mcp;first catalogued 2026-10-22;last seen 2026-11-14。There is no official certification or quality rating here — we record sources and dates only.# bad-ass-mcp
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
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
## Why
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.
macOS: AXUIElement via PyObjC
Linux: AT-SPI2 via gi.repository.Atspi
Windows: UI Automation via comtypes
Actions fire on control objects directly, so the target window doesn't need focus. The user can keep working while automation runs in the background.
## Tools
| Tool | Description |
| listwindows | List all visible application windows |
| gettree | Full accessibility tree for a window as nested JSON |
| findelements | Find elements by role and/or name |
| click | Click / invoke an element (foreground-independent); button="right", clicks=2; falls back to a real click at the element's center |
| clickat | Click at absolute screen coordinates — fallback for webview/canvas UI; takes button and clicks |
| drag | Drag-and-drop with real pointer events, between coordinates or element handles |
| typetext | Type text into a field (SetValue → EditableText → key injection) |
| selectoption | Select an option in a combo box or list (a11y items → SetValue → keystrokes), verified by reading the value back |
| getvalue | Get the current value or text of an element |
| waitforwindow | Wait until a window matching a pattern appears |
| waitforelement | Wait until an element exists and optionally has a given state |
| screenshot | Capture a PNG (write to outputpath or return base64) |
| startrecording | Start recording the screen (or a specific window) |
| stoprecording | Stop recording and export as GIF (short clips) or MP4 (long sessions, no re-encode) |
| learnlayout | Resolve semantic names → live handle IDs (one call per session) |
| runsequence | Execute a list of actions server-side — no per-action round-trips |
## Field notes: when the tree isn't enough
Observed driving large native apps (a game editor, a DAW) on Windows:
Context menus don't exist in the a11y tree until they're open, and nothing in UIA opens them. click(handle, button="right") or clickat(x, y, button="right") does; the menu is then a readable window.
Double-click targets (list rows that open an editor) often expose only a Select action, which highlights the row and stops. Use clicks=2.
Tab strips can behave the same way: a11y Select highlights the tab without switching the page. click now falls back to a real pointer click when no pattern takes, which switches it.
Stock Win32 combo boxes are unreliable through UIA: the item list only exists while dropped down, and SetValue can succeed on one combo and silently no-op on the next one in the same dialog. selectoption ends with a keystroke strategy (focus, type the item, Return) and reads the value back, so ok: false means it really didn't change.
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
## Why
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.
macOS: AXUIElement via PyObjC
Linux: AT-SPI2 via gi.repository.Atspi
Windows: UI Automation via comtypes
Actions fire on control objects directly, so the target window doesn't need focus. The user can keep working while automation runs in the background.
## Tools
| Tool | Description |
| listwindows | List all visible application windows |
| gettree | Full accessibility tree for a window as nested JSON |
| findelements | Find elements by role and/or name |
| click | Click / invoke an element (foreground-independent); button="right", clicks=2; falls back to a real click at the element's center |
| clickat | Click at absolute screen coordinates — fallback for webview/canvas UI; takes button and clicks |
| drag | Drag-and-drop with real pointer events, between coordinates or element handles |
| typetext | Type text into a field (SetValue → EditableText → key injection) |
| selectoption | Select an option in a combo box or list (a11y items → SetValue → keystrokes), verified by reading the value back |
| getvalue | Get the current value or text of an element |
| waitforwindow | Wait until a window matching a pattern appears |
| waitforelement | Wait until an element exists and optionally has a given state |
| screenshot | Capture a PNG (write to outputpath or return base64) |
| startrecording | Start recording the screen (or a specific window) |
| stoprecording | Stop recording and export as GIF (short clips) or MP4 (long sessions, no re-encode) |
| learnlayout | Resolve semantic names → live handle IDs (one call per session) |
| runsequence | Execute a list of actions server-side — no per-action round-trips |
## Field notes: when the tree isn't enough
Observed driving large native apps (a game editor, a DAW) on Windows:
Context menus don't exist in the a11y tree until they're open, and nothing in UIA opens them. click(handle, button="right") or clickat(x, y, button="right") does; the menu is then a readable window.
Double-click targets (list rows that open an editor) often expose only a Select action, which highlights the row and stops. Use clicks=2.
Tab strips can behave the same way: a11y Select highlights the tab without switching the page. click now falls back to a real pointer click when no pattern takes, which switches it.
Stock Win32 combo boxes are unreliable through UIA: the item list only exists while dropped down, and SetValue can succeed on one combo and silently no-op on the next one in the same dialog. selectoption ends with a keystroke strategy (focus, type the item, Return) and reads the value back, so ok: false means it really didn't change.
Listed badge (optional)
Copy this line into the README if you want the listing mark. Optional, and it does not affect being listed.
[](https://anclum.com/en/s/holdmybeer-gg-bad-ass-mcp/)
- Source
- github · https://github.com/HoldMyBeer-gg/bad-ass-mcp
- Browse by field
- Open source
- Traction
- 8 ★
- Listed by
- 2 independent sources
- added
- today
- Security policy
- no
SECURITY.mdat the repository root (which does not mean it is unsafe)
More like this
Filed under
Every tag opens the full list for that filter. Counts are the live catalogue figures.