
MacMonitor는 맥 하드웨어 상태를 실시간으로 보여주는 무료 오픈소스 앱이다. Claude와 Codex 같은 AI 도구도 MCP 서버를 통해 같은 데이터를 읽을 수 있다. 앱은 센서를 읽기만 하며 하드웨어를 변경하지 않고, 관리자 암호를 요구하지 않으며, 네트워크로 데이터를 보내지 않는다.
앱은 메뉴 막대에 상주하고 실시간 그래프가 있는 창을 열며, 기록을 저장하고 알림을 보낸다. 앱이 먼저 답하려는 질문은 “지금 왜 팬이 돌고 있지?”다.
지원 맥과 설치 조건
MacMonitor는 Apple Silicon(M 시리즈) 맥용으로 제작됐다. macOS 15 이상에서 빌드하고 실행할 수 있으며, 테스트를 거친 기기는 macOS 26을 실행하는 M4 Pro 탑재 MacBook Pro 한 대다. 다른 Apple Silicon 칩에서도 실행될 것으로 예상되지만, 일부 센서 이름과 칩 지도, 코어 배치는 M4 Pro에 맞춰져 있다. 찾지 못한 값은 잘못된 숫자 대신 “사용할 수 없음”으로 표시한다. Intel 맥은 지원하지 않는다.
앱에서 확인할 수 있는 정보
메뉴 막대에는 작은 CPU 그래프와 CPU 42% · 71° · 2.3k 형식의 정보가 표시된다. 이는 CPU 사용률, 가장 높은 온도, 팬 RPM을 뜻한다. 메뉴 막대 항목을 누르면 주요 수치와 팬 상태 설명, “MacMonitor 열기” 버튼을 볼 수 있다.
개요 화면에는 CPU, GPU, 최고 온도, 팬 정보와 움직이는 그래프가 나온다. 칩 부품별 전력, 시스템 및 벽면 전력, 열 압력, 에너지 사용량이 많은 앱도 확인할 수 있다. 칩 지도는 M4 Pro를 그림으로 보여준다. 각 블록은 실시간 온도에 따라 40°의 파란색에서 100°의 빨간색으로 표시된다. 코어별 막대에는 10개의 P 코어와 4개의 E 코어의 클럭과 전력이 나온다.
세부 화면에는 발열 및 팬, CPU, GPU, 메모리, 전력 및 배터리, 디스크, 네트워크, 앱 항목이 있다. 행을 누르면 15분, 1시간, 24시간 또는 30일 범위의 기록 그래프를 열 수 있다. 이벤트 기록에는 팬 속도 상승, 발열, 스로틀링 징후, 메모리, 스왑, 디스크, SSD, 배터리 플래그, 깨우기 이벤트가 포함된다.
설정에서는 알림 스위치와 임계값, 로그인 시 자동 실행, 샘플링 속도, 기록 보관량을 조정하고 기록을 지울 수 있다. ‘Connect AI’에는 Claude Code, Codex, Claude Desktop용 설정을 복사하는 기능이 있다. 앱이 설치된 위치에 맞는 MCP 서버 경로와 읽기 전용 도구 목록이 표시되며, 연결 테스트도 할 수 있다. 설정을 복사할 뿐 Claude나 Codex의 설정 파일을 직접 수정하지는 않는다.
확인되지 않은 센서 이름에는 추정치라는 표시가 붙는다. 값이 없는 경우 “사용할 수 없음” 또는 --로 표시하며, 가짜 0을 보여주지 않는다.
다운로드와 설치
최신 릴리스에서 MacMonitor-<version>.zip을 내려받는다. 이 파일은 macOS 15 이상을 실행하는 Apple Silicon 맥용이다. 압축 파일을 두 번 누른 뒤 MacMonitor.app을 Applications 폴더로 옮기고 앱을 연다.
처음 실행하면 macOS가 “Apple could not verify MacMonitor”라고 알릴 수 있다. 아직 유료 Apple Developer ID로 앱에 서명하지 않았기 때문이다. ‘완료’를 누른 뒤 다음 방법 중 하나로 앱을 연다.
- 시스템 설정의 ‘개인정보 보호 및 보안’에서 아래쪽으로 내려가 “MacMonitor was blocked” 항목의 ‘어쨌든 열기’를 누른 다음 암호나 Touch ID로 확인한다.
- 터미널에서 아래 명령을 한 번 실행한 뒤 앱을 다시 연다.
xattr -dr com.apple.quarantine /Applications/MacMonitor.app
이 절차는 한 번만 하면 된다. 먼저 코드를 확인하고 싶다면 소스에서 직접 빌드할 수 있다.
소스에서 빌드하고 설치하기
Apple의 Command Line Tools가 필요하며 Xcode는 필요하지 않다. 서드파티 패키지는 사용하지 않는다.
xcode-select --install # skip if the Command Line Tools are already installed
git clone https://github.com/primemindai/macmonitor.git MacMonitor
cd MacMonitor
컴파일 여부만 확인하려면 다음 명령을 실행한다.
swift build
앱을 빌드하고 설치한 뒤 열려면 다음을 실행한다.
scripts/bundle.sh --open
이 명령은 릴리스 빌드를 만들고 MacMonitor.app으로 묶어 임시 서명한 다음 ~/Applications/MacMonitor.app에 설치하고 앱을 연다. 첫 실행 때 알림 권한을 한 번 요청하고 ‘로그인 시 시작’을 켠다.
릴리스 페이지에 배포할 ZIP 파일을 만들려면 다음 명령을 사용한다. 이 작업은 앱을 설치하지 않는다.
scripts/release.sh 1.0.0
테스트를 실행할 때는 스크립트를 사용해야 한다. Command Line Tools에서 swift test를 그대로 실행하면 Testing 프레임워크를 찾지 못해 실패하거나 테스트를 하나도 실행하지 않을 수 있다.
scripts/test.sh
Claude와 Codex에서 MCP 연결하기
가장 간단한 방법은 MacMonitor를 열고 사이드바의 ‘Connect AI’를 누른 뒤 사용하는 도구 옆의 ‘복사’를 누르는 것이다. 앱 설치 위치에 맞는 경로를 채워 주며, ‘연결 테스트’로 서버가 응답하는지 확인할 수 있다.
직접 설정할 경우 MCP 서버는 앱 안에 별도 프로그램으로 들어 있다. 아래 명령은 소스 빌드 앱이 ~/Applications에 설치된 경우의 경로를 쓴다. 앱을 Applications 폴더에 내려받아 설치했다면 /Applications/MacMonitor.app/Contents/MacOS/macmonitor-mcp를 사용한다.
`~/Applications/MacMonitor.app/Contents/MacOS/macmonitor-mcp `
Claude Code에 등록한다.
claude mcp add -s user macmonitor -- ~/Applications/MacMonitor.app/Contents/MacOS/macmonitor-mcp
Codex에 등록한다.
codex mcp add macmonitor -- ~/Applications/MacMonitor.app/Contents/MacOS/macmonitor-mcp
표준 입출력(stdio) 방식의 MCP 서버이므로 다른 MCP 클라이언트에서도 같은 경로를 지정하면 된다. 제공 도구는 모두 읽기 전용이다.
| 도구 | 제공 정보 |
|---|---|
get_snapshot | 영역별로 묶은 현재 전체 정보 |
why_fan | 팬 상태 설명과 근거가 된 측정값 |
top_processes | CPU, 메모리, 에너지, GPU 또는 디스크 사용량이 많은 앱 |
get_history | 지정한 지표의 최근 N분 기록 |
list_metrics | get_history가 받는 지표 이름 |
get_events | 최근 N시간의 이벤트 기록 |
get_sensors | 모든 온도 센서와 데이터 출처, 센서 이름이 확인된 것인지 여부 |
get_hardware_health | SSD 상태, 세 가지 관점의 배터리 상태, 어댑터 및 디스플레이 정보 |
앱이 닫혀 있어도 MCP 서버는 작동하며, 그때는 새 실시간 샘플을 가져온다. 기록 조회 도구를 사용하려면 앱이 실행 중이었어야 한다.
수집하지 않는 정보와 개인정보
관리자 권한이 필요하거나 하드웨어를 변경할 수 있는 기능은 지원하지 않는다. 이에 따라 관리자 권한이 필요한 powermetrics, 모션 센서(가속도계), 팬 제어와 SMC 쓰기는 제외했다. root 또는 다른 사용자 소유 앱의 전력 사용량(와트)도 수집하지 않는다. 그런 앱은 대신 top에서 얻은 CPU 정보와 Apple의 에너지 영향 점수를 표시하며, “system”으로 표시한다.
앱과 MCP 서버는 일련번호를 표시하거나 반환하지 않는다. 네트워크를 사용하지 않고 어디에도 데이터를 보내지 않으며, 암호를 요청하거나 저장하지 않는다. Wi-Fi 네트워크 이름도 표시하지 않는다. macOS에서 이 이름을 읽으려면 위치 접근 권한이 필요한데, MacMonitor는 그 권한을 요청하지 않는다.
기록 보관과 삭제
기록은 ~/Library/Application Support/MacMonitor/history.sqlite에 저장된다. 초당 한 행의 전체 상세 기록은 24시간 보관하고, 분 단위 요약은 30일 보관한다. 제작자가 측정한 데이터베이스 크기는 150MB를 훨씬 밑돌며, 측정 수치는 docs/proof/db-size.txt에 있다.
기록을 지우려면 설정의 ‘History’에서 ‘Clear history’를 선택하거나 앱을 종료한 뒤 해당 폴더를 삭제한다.
자동 실행과 MCP 등록 해제
로그인 시 자동 실행을 끄려면 설정에서 ‘Start at login’을 끈다. LaunchAgent 대체 방식을 사용한 경우에는 다음 명령으로 서비스를 내리고 plist 파일을 삭제할 수 있다.
launchctl bootout gui/$(id -u)/com.macmonitor.app
rm ~/Library/LaunchAgents/com.macmonitor.app.plist
SMAppService를 사용했다면 시스템 설정의 ‘일반’에서 ‘로그인 항목’을 열어 제거할 수도 있다. Claude Code에서 MCP 등록을 해제하려면 다음을 실행한다.
claude mcp remove -s user macmonitor
CPU 사용량과 화면 캡처
MacMonitor는 감시 대상 맥을 뜨겁게 만들지 않도록 설계했다고 설명한다. 예산은 60초 평균 기준으로 코어 하나를 100%로 볼 때 메뉴 막대만 표시하면 3%, 창을 열면 15%다. ps, top 같은 하위 프로세스도 측정에 포함한다. 로그를 설정하고 메뉴 막대만 표시한 상태의 CPU 사용량을 60초간 측정하는 명령은 다음과 같다.
defaults write com.macmonitor.app cpuLogPath /tmp/macmonitor-cpu.txt # then restart the app
scripts/measure-cpu.sh "menu bar only" 60
움직이는 그래프 선, 바뀌는 숫자, 미끄러지는 막대, 회전하는 팬 애니메이션은 Core Animation에서 처리한다. 앱은 초당 한 프레임을 그리며 나머지 애니메이션은 시스템이 처리한다.
화면 기록 권한 없이 스크린샷을 만들려면 다음 명령을 쓴다.
~/Applications/MacMonitor.app/Contents/MacOS/MacMonitor --render-screenshots docs/screenshots --wait 130
이 명령은 --wait로 지정한 시간(초) 동안 실시간 데이터를 수집한 뒤 각 페이지를 다크 모드와 라이트 모드로 렌더링해 PNG로 저장한다. 기록은 읽지만 쓰지는 않는다.
구성과 라이선스
Sources/CSensors에는 SMC, IOReport, HID 센서, NVMe SMART 데이터를 읽는 작은 C 래퍼가 있다. Sources/MonitorCore에는 샘플러, 데이터 모델, 기록 데이터베이스, 팬 설명 기능과 MCP 서버 로직이 들어 있다. Sources/MacMonitor는 SwiftUI 메뉴 막대 앱과 창을 담당하고, Sources/macmonitor-mcp는 MCP 서버 프로그램이다. 원래 설계 사양은 docs/specs/에, 일반 사용자가 macOS에서 읽을 수 있는 데이터에 관한 조사 메모와 소규모 탐색 프로그램은 research/에 있다. 알려진 문제는 docs/FOLLOWUPS.md에 정리돼 있다.
MacMonitor는 MIT 라이선스로 배포된다. 자세한 내용은 LICENSE를 참조하면 된다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요