{"name":"io.github.mobabur94/hammerspoon","slug":"mobabur94-hammerspoon","title":null,"description":"macOS automation via Hammerspoon — 75 tools for windows, Spaces, audio, Bluetooth, and more","url":"https://mcp.market/server/mobabur94-hammerspoon","rating":null,"grade":"C","score":62,"certified":false,"status":"active","category":"media","tags":["media"],"presence":{"score":20,"stars":1,"forks":0,"downloads_week":22,"last_push_at":"2026-08-08T04:56:40.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/mobabur94/hammerspoon-mcp","website":null,"version":"0.1.0","remotes":[],"packages":[{"registryType":"npm","identifier":"hammerspoon-mcp","version":"0.1.0","transport":{"type":"stdio"}}],"tools":[{"name":"hs_alert","description":"Show a large on-screen alert message (HUD-style overlay that auto-dismisses).","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_audio_datasources","description":"List available data sources for a device (e.g., 'Internal Speakers' vs 'Headphones' on the same device). Can also set the active source.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_audio_default","description":"Get or set the default audio device. When setting, matches by name substring (case-insensitive).","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_audio_devices","description":"List all audio devices (input + output). Shows name, UID, type, volume, mute state, and whether it's the current default.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_audio_mute","description":"Get or toggle mute for a specific device or the default output.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_audio_volume","description":"Get or set volume for a specific device (by name substring) or the default output. Volume is 0-100.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_audio_watch","description":"Start watching audio device changes (device added/removed, default changed, volume changed). Events appear as updates to resource `watcher://audio`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_battery","description":"Get battery status.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_bluetooth_connect","description":"Connect to a paired Bluetooth device by name or MAC address.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_bluetooth_devices","description":"List paired Bluetooth devices with connection status. Use `connected: true` to filter to only connected devices.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_bluetooth_disconnect","description":"Disconnect a Bluetooth device by name or MAC address.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_bluetooth_power","description":"Turn Bluetooth on or off.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_bluetooth_status","description":"Get Bluetooth power state and discoverability.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_brightness","description":"Get or set display brightness (0-100).","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_caffeinate","description":"Prevent the Mac from sleeping for a duration. Like the `caffeinate` command but manageable.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_click","description":"Click at screen coordinates.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_clipboard","description":"Read or write the system clipboard.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_dark_mode","description":"Get or toggle macOS dark mode.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_eval","description":"Execute arbitrary Lua code in the Hammerspoon runtime. Returns the string result. Use for anything not covered by other tools.","write_action":true,"price_micros":0,"input_schema":null},{"name":"hs_execute","description":"Run a shell command and return its output. Uses hs.execute which runs in the user's environment.","write_action":true,"price_micros":0,"input_schema":null},{"name":"hs_finder_open","description":"Open a path in Finder (file or folder). Reveals in Finder if it's a file.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_finder_selection","description":"Get the currently selected files/folders in Finder.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_focus_cancel_timer","description":"Cancel a scheduled Focus mode timer (from hs_focus_schedule) without disabling DND.","write_action":true,"price_micros":0,"input_schema":null},{"name":"hs_focus_install_shortcut","description":"Creates helper Shortcuts for Focus mode control. Opens the Shortcuts app with instructions. You need to manually create: 1. \"Enable DND\" shortcut: Set Focus → Do Not Disturb → Turn On 2. \"Disable DND\" shortcut: Set Focus → Do Not Disturb → Turn Off 3. \"Toggle Focus\" shortcut: Set Focus → Do Not Disturb → Toggle This only needs to be done once.","write_action":true,"price_micros":0,"input_schema":null},{"name":"hs_focus_schedule","description":"Enable DND for a specified duration, then automatically disable it. Uses hs.timer.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_focus_shortcut","description":"Enable or disable Focus/DND using macOS Shortcuts app. Requires a shortcut named \"Toggle Focus\" to be installed. Use hs_focus_install_shortcut first if you haven't set one up. This is the most reliable method on macOS 13+.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_focus_status","description":"Get the current Do Not Disturb / Focus mode status. Returns whether DND is active and the active focus profile name if available.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_focus_toggle","description":"Toggle Do Not Disturb on/off via Control Center. Brief visual flash of Control Center is unavoidable.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_focus_window","description":"Focus a window by its ID or by title substring match.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_get_clipboard_history","description":"Read the full clipboard history buffer. Returns array of {text, timestamp, app}. Requires `hs_watch_clipboard_history` to be running.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_hotkey","description":"Press a key combination. Examples: \"cmd+c\", \"cmd+shift+4\", \"return\", \"escape\".","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_kill_app","description":"Quit an application by name.","write_action":true,"price_micros":0,"input_schema":null},{"name":"hs_launch_app","description":"Launch or activate an application by name.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_list_apps","description":"List running applications.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_list_layouts","description":"List all saved window layout names.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_list_watchers","description":"List all active watchers.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_list_windows","description":"List all visible windows. Returns array of {id, app, title, frame: {x,y,w,h}, isMinimized}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_mouse_position","description":"Get current mouse cursor position.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_move_window","description":"Move and/or resize a window by ID.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_notify","description":"Post a macOS notification.","write_action":true,"price_micros":0,"input_schema":null},{"name":"hs_open_url","description":"Open a URL in the default browser or a specific app.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_quicklook","description":"Show a Quick Look preview of a file (press Space equivalent).","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_restore_layout","description":"Restore a previously saved window layout by name. Windows are matched by app name + title.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_save_layout","description":"Save the current window positions as a named layout. Can be restored later with hs_restore_layout.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_screens","description":"Get info about connected displays.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_screenshot","description":"Take a screenshot. Returns base64 PNG.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_spaces_active","description":"Get the currently focused space ID and which screen it's on.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_spaces_add","description":"Create a new space on the specified screen (or main screen). Briefly flashes Mission Control.","write_action":true,"price_micros":0,"input_schema":null},{"name":"hs_spaces_goto","description":"Switch to a specific space by ID or by index (1-based position on the main screen). Note: briefly flashes Mission Control.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_spaces_list","description":"List all Spaces across all screens. Returns per-screen arrays of space IDs with the active space marked. Also shows which windows are on each space.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_spaces_mission_control","description":"Toggle Mission Control, App Exposé, Launchpad, or Show Desktop.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_spaces_move_window","description":"Move a window to a different space. The window stays focused but appears on the target space.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_spaces_remove","description":"Remove a space by ID. Cannot remove the active space or the last remaining space. Briefly flashes Mission Control.","write_action":true,"price_micros":0,"input_schema":null},{"name":"hs_spaces_window_spaces","description":"Show which space(s) a window is on (some windows appear on all spaces).","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_spaces_windows","description":"List all windows on a specific space.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_system_info","description":"Get detailed system information: hostname, OS version, CPU, memory, uptime, thermal state.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_timer_cancel","description":"Cancel a running timer by name.","write_action":true,"price_micros":0,"input_schema":null},{"name":"hs_timer_list","description":"List all active timers.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_timer_start","description":"Start a named countdown timer. Shows a notification and emits an event when it fires. Useful for pomodoro, reminders, etc.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_trash","description":"Move a file or folder to Trash (reversible delete).","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_type","description":"Type text at current cursor position.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_unwatch","description":"Stop a watcher by its ID.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_volume","description":"Get or set system volume (0-100).","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_watch_apps","description":"Start watching application lifecycle events (activated, deactivated, launched, terminated, hidden, unhidden). Events appear as updates to resource `watcher://apps`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_watch_battery","description":"Start watching battery status changes (charge level, power source). Events appear as updates to resource `watcher://battery`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_watch_clipboard","description":"Start watching pasteboard (clipboard) changes. Fires on every copy. Events appear as updates to resource `watcher://clipboard`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_watch_clipboard_history","description":"Start a clipboard history tracker. Maintains a ring buffer of recent clipboard entries (text, timestamp, source app). Events appear as updates to resource `watcher://clipboard_history`. Use `hs_get_clipboard_history` to read the full buffer.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_watch_paths","description":"Start watching filesystem paths for changes. Events appear as updates to resource `watcher://paths`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_watch_screens","description":"Start watching display configuration changes (monitors connected/disconnected/reconfigured). Events appear as updates to resource `watcher://screens`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_watch_sleep","description":"Start watching system sleep/wake/lock/unlock events. Events appear as updates to resource `watcher://sleep`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_watch_urls","description":"Start watching URL events. Captures: (1) hammerspoon://mcp/... custom scheme URLs opened from other apps, (2) HTTP callback URLs if Hammerspoon is set as default browser. Events appear as updates to resource `watcher://urls`. Use this to let external apps trigger your agent via URLs.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_watch_usb","description":"Start watching USB device connect/disconnect events. Events appear as updates to resource `watcher://usb`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_watch_wifi","description":"Start watching WiFi network changes. Events appear as updates to resource `watcher://wifi`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_wifi","description":"Get current WiFi info.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hs_window_layout","description":"Apply a window layout preset. Presets: • \"left-half\" / \"right-half\" / \"top-half\" / \"bottom-half\" — snap focused window • \"maximize\" — fill screen (not fullscreen mode) • \"center\" — center at 70% screen size • \"thirds-left\" / \"thirds-center\" / \"thirds-right\" — vertical thirds • \"quarters-tl\" / \"quarters-tr\" / \"quarters-bl\" / \"quarters-br\" — quadrants • \"cascade\" — cascade all visible windows • \"sid","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":62,"grade":"C","scanned_at":"2026-09-23T21:42:31.076Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-23T21:42:31.080Z","components":{"code":{"score":8,"max":25,"notes":["21 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":12,"max":15,"notes":["last push 47 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/audio-tools.js: …t per-device) return bridge.eval(` if _mcpAudioWatcher then _mcpA…"},{"id":"exec.shell-concat","severity":"high","component":"code","title":"Shell command built from a string (injection risk)","evidence":"dist/bridge.js: … try { const result = execSync(`${this.hsPath} -c '${escaped}'`, { timeout: t…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"hammerspoon-mcp","version":"0.1.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":1,"publishedAt":"2026-08-08T04:53:15.017Z","repositoryUrl":"git+https://github.com/mobabur94/hammerspoon-mcp.git","weeklyDownloads":22}],"repo":{"found":true,"owner":"mobabur94","repo":"hammerspoon-mcp","archived":false,"pushedAt":"2026-08-08T04:56:40Z","stars":1,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/816175?v=4","ownerCreatedAt":"2011-05-28T18:46:51Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/816175?v=4&s=128","source":"github"},"presence":{"stars":1,"forks":0,"downloadsWeek":22,"license":"MIT","lastPushAt":"2026-08-08T04:56:40.000Z","score":20}}}},"grade_history":[],"reviews":[]}