H
HoldMyBeer-gg/bad-ass-mcp
Cross-platform GUI MCP for interacting with your desktop in macos, Windows, and Linux
无 SECURITY.md
在 GitHub 查看 ↗链接已于 2026-11-12 核查 · HTTP 200 · 打开的是厂商自己的官网
安装与配置
取自该仓库的安装命令
pip install bad-ass-mcp
解析自我们于 2026-10-26 抓取的该仓库 README;我们未执行过。
这条是仓库自己写的安装方式,不是 MCP 客户端配置,所以不生成 JSON。
配置项的键名以你的客户端为准:客户端与 CLI
- ★ 数取值
- 8 ★ · HoldMyBeer-gg/bad-ass-mcp · 取自 GitHub 搜索 API · (2026-11-13 20:00:50 核对)
- 来源明细
- 从该仓库的 GitHub 页面直接读取 · 条目类型:开源项目
- 收录与活跃
- 收录于 2026-10-22 · 最近见到 2026-11-14 · 共见到 27 次 · 被 2 个来源列出
- 评分构成
- 综合分 203 · 8 ★ · 2 个来源 · repo
- 安装
pip install bad-ass-mcp
常见问题(答案都来自我们的记录)
怎么安装?
该仓库给出的安装命令是
pip install bad-ass-mcp。我们的记录里它是仓库自己提供的;不保证在你的客户端上直接可用。它适合谁 / 用来做什么?
我们把它归在这些标签下: 开源项目。标签来自条目自身,不是我们强加的分类。
谁维护它、还在更新吗?
仓库
HoldMyBeer-gg/bad-ass-mcp;我们收录于 2026-10-22;最近见到 2026-11-14。这里没有"官方认证"或"质量评级"——我们只记录来源与时间。# 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.
收录徽章(可选)
想把收录标记放进 README 就复制这行,可选,不影响收录。
[](https://anclum.com/zh/s/holdmybeer-gg-bad-ass-mcp/)
- 来源
- github · https://github.com/HoldMyBeer-gg/bad-ass-mcp
- 按领域浏览
- 开源项目
- Traction
- 8 ★
- 收录来源
- 2 个独立来源
- 收录于
- 今天
- 安全策略
- 我们没在该仓库根目录找到
SECURITY.md(这不代表不安全)
同类推荐
所属领域与标签
每个标签都能点进去看同类的全部条目。数字是当前库里的真实条数。