{"slug": "show-hn-mcp-for-your-mac-hardware", "title": "Show HN: MCP for Your Mac Hardware", "summary": "MacMonitor, a free open-source Mac app from primemindai, exposes live Apple Silicon hardware sensor data to AI agents including Claude and Codex through an MCP server, answering the question of why a Mac's fan is running. The app reads sensors read-only, requires no admin password, sends nothing over the network, and is built for Apple Silicon Macs on macOS 15 or newer, tested only on a MacBook Pro with an M4 Pro chip running macOS 26; Intel Macs are not supported. Because the app is not signed with a paid Apple Developer ID, first launch shows an \"Apple could not verify MacMonitor\" warning that users clear via System Settings or an xattr command.", "body_md": "**MCP for your Mac hardware.** Works with Claude and Codex.\n\nMacMonitor is a free, open-source Mac app that shows what your Mac's hardware is doing, live.\nIt answers one question first: **why is my fan on right now?**\n\nIt lives in the menu bar, opens a window full of live graphs, keeps history, sends alerts, and lets AI agents like Claude and Codex read the same data through an MCP server.\n\nIt reads hardware sensors read only. It never writes to the hardware, never needs an admin password, and sends nothing over the network.\n\n- **Built for Apple Silicon Macs** (M-series chips).\n- **Tested on one Mac:** a MacBook Pro with an M4 Pro chip, on macOS 26.\n- **Needs macOS 15 or newer** to build and run.\n- On other Apple Silicon chips it should run, but some sensor names, the chip map drawing and the core layout are tuned for the M4 Pro. A reading it cannot find shows \"not available\" instead of a wrong number.\n- Intel Macs are not supported.\n\n- **Menu bar:** a tiny CPU graph plus`CPU 42% · 71° · 2.3k` (CPU, hottest temperature, fan RPM).\nClick it for key numbers, the fan headline and an \"Open MacMonitor\" button.\n- **Overview:** CPU, GPU, hottest temperature and fan tiles with moving graphs, power by chip part,\nsystem and wall power, thermal pressure, and the top apps by energy.\n- **Chip map:** a drawing of the M4 Pro chip. Each block glows blue (40°) to red (100°) with its live\ntemperature. One bar per core (10 P cores, 4 E cores), with clocks and watts.\n- **Detail pages:** Heat & fans, CPU, GPU, Memory, Power & battery, Disks, Network, Apps.\nClick a row to open its history chart (15 minutes, 1 hour, 24 hours or 30 days).\n- **Events:** fan ramps, heat, throttle signs, memory, swap, disk, SSD, battery flag and wake.\n- **Settings:** alert switches and thresholds, start at login, sample rate, history size and a clear button.\n- **Connect AI:** copy-paste setup for Claude Code, Codex and Claude Desktop, with this app's real MCP server path\nfilled in, a \"Test connection\" button, and the list of read-only tools. It only copies; it never edits your\nClaude or Codex config files.\n\nSensor names we have not proven carry a **best guess** tag. A reading that is missing shows\n\"not available\" or `--`, never a fake zero.\n\n1. Get `MacMonitor-<version>.zip` from the[latest release](https://github.com/primemindai/macmonitor/releases/latest) .\nIt is for Apple Silicon Macs on macOS 15 or newer.\n2. Double-click the zip, then drag `MacMonitor.app` into your Applications folder.\n3. Open it. The first time, macOS says **\"Apple could not verify MacMonitor\"** . This is because the app is\nnot signed with a paid Apple Developer ID yet. Click**Done** , then pick one fix:\n  - \n**System Settings:** open**Privacy & Security** , scroll down to \"MacMonitor was blocked\", click**Open Anyway** , and confirm with your password or Touch ID.\n  - \n**Terminal:** run this once, then open the app again.\n\n```\nxattr -dr com.apple.quarantine /Applications/MacMonitor.app\n```\n\n4. \n\nYou only do this once. Prefer to check the code first? Build it yourself (next section).\n\nYou need Apple's Command Line Tools (no Xcode needed). There are no third-party packages.\n\n```\nxcode-select --install                     # skip if the Command Line Tools are already installed\ngit clone https://github.com/primemindai/macmonitor.git MacMonitor\ncd MacMonitor\n```\n\nBuild only (to check it compiles):\n\n```\nswift build\n```\n\nBuild, install and open the app:\n\n```\nscripts/bundle.sh --open\n```\n\nThis builds a release copy, wraps it in `MacMonitor.app`, signs it ad hoc, installs it to\n`~/Applications/MacMonitor.app` and opens it. The first launch asks once for notification permission\nand turns on \"start at login\".\n\nMake a release zip (what the Releases page ships; it does not install anything):\n\n```\nscripts/release.sh 1.0.0\n```\n\nRun the tests. Use the script: plain `swift test` on Command Line Tools cannot find the Testing framework, so it fails or runs zero tests.\n\n```\nscripts/test.sh\n```\n\n**Easiest way:** open MacMonitor, click **Connect AI** in the sidebar, and click **Copy** next to the command for\nyour tool. The page fills in the right path for wherever the app is installed, and **Test connection** checks\nthat the server answers.\n\nTo do it by hand: the MCP server is a separate program inside the app. The commands below use the path from a source build\n(`~/Applications`). If you downloaded the app into your Applications folder, use\n`/Applications/MacMonitor.app/Contents/MacOS/macmonitor-mcp` instead.\n\n```\n~/Applications/MacMonitor.app/Contents/MacOS/macmonitor-mcp\n```\n\nRegister it with Claude Code:\n\n```\nclaude mcp add -s user macmonitor -- ~/Applications/MacMonitor.app/Contents/MacOS/macmonitor-mcp\n```\n\nRegister it with Codex:\n\n```\ncodex mcp add macmonitor -- ~/Applications/MacMonitor.app/Contents/MacOS/macmonitor-mcp\n```\n\nIt is a standard stdio MCP server, so any other MCP client works the same way: point it at that path.\n\nTools (all read only):\n\n| Tool | What it gives | \n|---|---|\n| `get_snapshot` | Everything right now, grouped by area | \n| `why_fan` | The fan headline and the readings behind it | \n| `top_processes` | Top apps by cpu, memory, energy, gpu or disk | \n| `get_history` | Points for one metric over the last N minutes | \n| `list_metrics` | The metric names `get_history` accepts | \n| `get_events` | The Events log for the last N hours | \n| `get_sensors` | Every temperature sensor, with source and whether its label is proven | \n| `get_hardware_health` | SSD health, battery health (three views), adapter and display | \n\nThe MCP server works even when the app is closed: it then takes a fresh live sample. History tools need the app to have been running.\n\nThese need root (an admin password) or would change hardware, so MacMonitor does not do them:\n\n- `powermetrics` (needs root).\n- Energy in watts for apps owned by root or other users. Those apps show CPU and Apple's\nenergy impact score from `top` instead, marked \"system\".\n- The motion sensor (accelerometer).\n- Fan control or any write to the SMC. MacMonitor only reads.\n\n- No serial numbers are shown in the app or returned by the MCP server.\n- No network use. MacMonitor sends nothing anywhere.\n- It never asks for or stores a password.\n- The Wi-Fi network name is not shown (macOS needs Location access for it, and we do not ask).\n\nHistory lives in `~/Library/Application Support/MacMonitor/history.sqlite`.\nIt keeps 24 hours at full detail (one row a second) and per-minute summaries for 30 days.\nIt stays well under 150 MB (measured numbers in `docs/proof/db-size.txt`).\n\nTo clear it, use **Settings, History, Clear history**, or quit the app and delete that folder.\n\nStop starting at login: turn off **Settings, Start at login**. Or, if it used the LaunchAgent fallback:\n\n```\nlaunchctl bootout gui/$(id -u)/com.macmonitor.app\nrm ~/Library/LaunchAgents/com.macmonitor.app.plist\n```\n\nIf it used SMAppService, you can also remove it in **System Settings, General, Login Items**.\n\nRemove the MCP entry from Claude Code:\n\n```\nclaude mcp remove -s user macmonitor\n```\n\nMacMonitor is built not to heat the Mac it watches. Budget (100% = one core, 60 second average,\nchild processes such as `ps` and `top` included): 3% with only the menu bar, 15% with the window open.\nMeasure it:\n\n```\ndefaults write com.macmonitor.app cpuLogPath /tmp/macmonitor-cpu.txt   # then restart the app\nscripts/measure-cpu.sh \"menu bar only\" 60\n```\n\nLive motion (moving graph lines, rolling numbers, sliding bars, the spinning fan) runs in Core Animation, so the app draws one frame a second and the system animates the rest.\n\n```\n~/Applications/MacMonitor.app/Contents/MacOS/MacMonitor --render-screenshots docs/screenshots --wait 130\n```\n\nThis samples live for `--wait` seconds, then renders every page in dark and light to PNG.\nIt reads history but never writes it.\n\n- `Sources/CSensors` : small C wrappers that read the SMC, IOReport, HID sensors and NVMe SMART data.\n- `Sources/MonitorCore` : the sampler, the data model, the history database, the fan explainer and the MCP server logic.\n- `Sources/MacMonitor` : the SwiftUI menu bar app and window.\n- `Sources/macmonitor-mcp` : the MCP server program.\n- `docs/specs/` : the original design spec.`research/` : notes and small probe programs on which macOS data a normal user can read.\n- `docs/FOLLOWUPS.md` : known issues.\n\nMIT. See [LICENSE](https://github.com/primemindai/macmonitor/blob/main/LICENSE).", "url": "https://wpnews.pro/news/show-hn-mcp-for-your-mac-hardware", "canonical_source": "https://github.com/primemindai/macmonitor", "published_at": "2026-10-30 18:09:34+00:00", "updated_at": "2026-10-30 18:47:09.083349+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "ai-tools", "developer-tools"], "entities": ["MacMonitor", "primemindai", "Claude", "Codex", "Claude Code", "Claude Desktop", "Apple", "M4 Pro"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-mcp-for-your-mac-hardware", "markdown": "https://wpnews.pro/news/show-hn-mcp-for-your-mac-hardware.md", "text": "https://wpnews.pro/news/show-hn-mcp-for-your-mac-hardware.txt", "jsonld": "https://wpnews.pro/news/show-hn-mcp-for-your-mac-hardware.jsonld"}}