Releases: CursorTouch/MacOS-MCP
Releases · CursorTouch/MacOS-MCP
Release list
v0.3.11
What's Changed
Added
- Add a desktop-state capture profiling utility (
python -m macos_mcp.profiling.desktop_state) with layer-by-layer, per-app, and vision-overhead timing breakdowns, plus--save-screenshotto save the last annotated capture to disk - Add a desktop creation tool that opens a new Mission Control Space via Accessibility-based automation of the Dock's Mission Control UI
Changed
- Speed up desktop state capture (roughly 3-4x locally, both with and without vision):
- Skip re-scanning an app's menu bar when a windowless app (e.g. Spotlight) reports it again as a top-level child during the windowless fallback scan
- Skip descending into closed (0-size)
AXMenusubmenus, since a closed menu can never contain a visible/interactive element - Remove an unconditional 50ms sleep from
get_foreground_window
Fixed
- Notification tool no longer fails for non-ASCII text (CJK, emoji): pass
ensure_ascii=Falsetojson.dumpswhen building thedisplay notificationAppleScript, since AppleScript string literals don't support\uXXXXescapes (#27) - Extension no longer exits at startup under Claude Desktop:
manifest.json/server.jsonnow setMACOS_MCP_SKIP_PERMISSION_CHECK=1by default so the published extension can reach the existing warn-instead-of-exit escape hatch whenAXIsProcessTrustedWithOptions()reports false for a disclaimed subprocess even though the host's own grant is inherited; skip mode also suppresses the focus-stealing System Preferences popup (#26)
v0.3.10
v0.3.9
What's Changed
- Fix screenshot capture on macOS 15+ (CGWindowListCreateImage returns NULL) by @howielevy-ionq in #24
- perf: throttle EventObserver app re-scan to cut idle CPU by @kinjung in #20
- fix: AXWindows role-misclassification recursion on macOS 26 Tahoe (Snapshot RecursionError) by @Austin519 in #18
- fix: drain autorelease pools on secondary AX threads to stop idle memory leak by @brendancsmith in #17
- feat: implement Tau extension for macOS-MCP and reorganize documentation structure by @Jeomon
- Update supported macOS versions to include macOS 26 (Tahoe) and macOS 27 (Golden Gate) by @Jeomon
- refactor: remove macos-mcp extension and initialize tau settings configuration by @Jeomon
New Contributors
- @howielevy-ionq made their first contribution in #24
- @kinjung made their first contribution in #20
- @Austin519 made their first contribution in #18
- @brendancsmith made their first contribution in #17
Full Changelog: v0.3.8...v0.3.9
v0.3.8
What's Changed
- fix: resolve three issues preventing v0.3.7 from running as a Claude Desktop extension by @Jeomon in #13
- feat: update entry point to serve, switch shell execution to bash, an… by @Jeomon in #14
- fix: drain autorelease pools on secondary AX threads to stop idle memory leak by @brendancsmith in #17
- fix: AXWindows role-misclassification recursion on macOS 26 Tahoe (Snapshot RecursionError) by @Austin519 in #18
- perf: throttle EventObserver app re-scan to cut idle CPU by @kinjung in #20
New Contributors
- @brendancsmith made their first contribution in #17
- @Austin519 made their first contribution in #18
- @kinjung made their first contribution in #20
Full Changelog: v0.3.7...v0.3.8
v0.3.7
Bug Fixes
Fix SyntaxError on import — _SCRAPE_MAX_CHARS misplaced above decorator (#8)
macos-mcp 0.3.6 was completely broken on import due to _SCRAPE_MAX_CHARS = 20_000 being placed between the @mcp.tool(...) decorator and def scrape_tool(...). Python raised a SyntaxError before serving a single tool call. The constant has been moved above the decorator.
Fix AXObserver memory leak in EventObserver (~10–17 MB/min) (#7)
Two cooperating bugs caused steady linear physical footprint growth during long-running sessions, eventually triggering OOM on extended use:
AppObserver.start()leaked partial CF state on failure — early-exit paths afterAXObserverCreatesucceeded leftAXObserverand run loop source references alive and never released by the AX framework._update_observersretried unobservable PIDs every 0.1 s — failed PIDs were never marked as seen, so system/permission-denied apps triggered a newAXObserverCreatecall (and leak) on every event loop tick (~10 objects/second).
Both sites are now fixed: start() cleans up partial state at each failure path, and _update_observers unconditionally marks PIDs as seen regardless of success or failure.
v0.3.4
v0.3.3
macOS-MCP v0.3.3
✨ Features
- Notification Tool — Send macOS notification banners with titles, subtitles, and custom sounds
- App Tool 'move' Mode — New mode for precise window repositioning
- Scrollable Elements Detection — Improved detection of scrollable UI elements
🐛 Fixes
- Fixed window resize and move operations with proper AXValue wrapping
- Improved scroll label retrieval performance
🔄 Improvements
- Enhanced Accessibility API module with better pattern matching
- Optimized control interactions and event handling
v0.3.1
v0.3.0
What's Changed
- Add Pi integration with AX element tools by @richard-devbot in #6
New Contributors
- @richard-devbot made their first contribution in #6
Full Changelog: v0.2.3...v0.3.0