Claude 등 AI에게 Mac / Linux 보안 상태를 직접 물어보세요
RoamSwitch에는 읽기 전용 MCP(Model Context Protocol) 서버가 포함되어 있습니다. MCP 클라이언트에 연결하면 "지금 제 Mac / Linux 기기는 안전한가요?", "외부에 노출된 포트가 있나요?"처럼 자연어로 질문하는 것만으로 RoamSwitch가 직접 계산한 정확한 진단 결과에 기반한 답변을 받을 수 있습니다. 잠금 전환이나 포트 격리 등의 조작은 전혀 할 수 없으며, AI 클라이언트와의 통신은 기기 내 stdio로만 이루어집니다(Zero Telemetry 방침의 연장).
🔒 왜 안전한가
- 읽기 전용: 보안 진단·포트 모니터링·가드 설정 확인만 가능합니다. 잠금 전환, 포트 격리, 기기 꺼내기 등의 조작 도구는 전혀 구현되어 있지 않습니다.
- 완전 로컬: AI 클라이언트(Claude Desktop/Code 등)와의 통신은 표준 입출력(stdio)만 사용하며, Mac / Linux의 RoamSwitch 프로세스와의 사이에서만 이루어집니다. 텔레메트리는 전혀 전송하지 않습니다. 네트워크를 사용하는 것은 기본값이 비활성인 옵트인 기능뿐입니다(자기 자신의 127.0.0.1만 점검하는 취약점 검증과, npm 레지스트리에 조회하는 npm 서명 검증).
- 오작동 방지: 조작 도구가 없기 때문에 프롬프트 인젝션 등으로 방화벽이나 네트워크 설정이 실수로 변경될 위험이 없습니다.
2단계로 설정 완료
1바이너리 위치
RoamSwitch.app에 포함되어 있습니다. 별도의 다운로드나 설치가 필요하지 않습니다.
/Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer
2aClaude Desktop의 경우
~/Library/Application Support/Claude/claude_desktop_config.json의 "mcpServers"에 아래 내용을 추가한 후 Claude Desktop을 재시작하세요.
{
"mcpServers": {
"roamswitch": {
"command": "/Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer"
}
}
}
2bClaude Code의 경우
터미널에서 아래 명령어를 한 번만 실행하면 됩니다.
claude mcp add roamswitch /Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer
2cOpenAI Codex CLI의 경우
~/.codex/config.toml에 아래 내용을 추가하거나, 터미널에서 아래 명령어를 실행하세요.
[mcp_servers.roamswitch] command = "/Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer"
codex mcp add roamswitch -- /Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer
2dOpenCode의 경우
프로젝트 루트의 opencode.json(또는 전역 설정 ~/.config/opencode/opencode.json)에 다음을 추가하세요.
{
"mcp": {
"roamswitch": {
"type": "local",
"command": ["/Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer"]
}
}
}
💡 로컬 LLM 지원: Ollama나 LM Studio 등 로컬 모델과 연동 시, RoamSwitch가 위협 감지로 네트워크를 비상 차단한 상태에서도 완전 오프라인으로 즉시 안전 확인 및 조언 문의가 가능합니다.
2eAntigravity의 경우
~/.gemini/config/mcp_config.json(또는 워크스페이스 루트의 .agents/mcp_config.json)에 아래 내용을 추가하세요.
{
"mcpServers": {
"roamswitch": {
"command": "/Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer"
}
}
}
* 참고: Antigravity CLI(agy) 등에서 도구 실행 시 Hook Failure 또는 텔레메트리 오류가 발생하는 경우, ~/.gemini/config/plugins/.../hooks.json 에서 "enabled": false 로 설정하여 훅을 비활성화하세요.
1바이너리 위치
apt / rpm / AUR 패키지에 포함되어 있으며, 설치 시 자동으로 /usr/bin/roamswitch-mcp 에 배치됩니다. 별도의 다운로드나 빌드가 필요 없습니다(클라이언트 버전·Server Edition 공통).
/usr/bin/roamswitch-mcp
Server Edition(헤드리스 운영)에서도 동일한 바이너리와 설정 방법을 그대로 사용할 수 있습니다. 자세한 내용은 「운용 매뉴얼 (Linux Server)」의 「AI 에이전트 / MCP 연동 운영」장을 참고하세요.
2aClaude Desktop의 경우
Claude Desktop은 공식 Linux 버전이 제공되지 않습니다. 비공식 빌드(예: claude-desktop-debian 등)를 사용하는 경우 ~/.config/Claude/claude_desktop_config.json 의 "mcpServers" 에 아래 내용을 추가한 뒤 재시작하세요.
{
"mcpServers": {
"roamswitch": {
"command": "/usr/bin/roamswitch-mcp"
}
}
}
2bClaude Code의 경우
터미널에서 아래 명령어를 한 번만 실행하면 됩니다.
claude mcp add roamswitch /usr/bin/roamswitch-mcp
2cOpenAI Codex CLI의 경우
~/.codex/config.toml에 아래 내용을 추가하거나, 터미널에서 아래 명령어를 실행하세요.
[mcp_servers.roamswitch] command = "/usr/bin/roamswitch-mcp"
codex mcp add roamswitch -- /usr/bin/roamswitch-mcp
2dOpenCode의 경우
프로젝트 루트의 opencode.json(또는 전역 설정 ~/.config/opencode/opencode.json)에 다음을 추가하세요.
{
"mcp": {
"roamswitch": {
"type": "local",
"command": ["/usr/bin/roamswitch-mcp"]
}
}
}
💡 로컬 LLM 지원: Ollama나 LM Studio 등 로컬 모델과 연동 시, RoamSwitch가 위협 감지로 네트워크를 비상 차단한 상태에서도 완전 오프라인으로 즉시 안전 확인 및 조언 문의가 가능합니다.
2eAntigravity의 경우
~/.gemini/config/mcp_config.json(또는 워크스페이스 루트의 .agents/mcp_config.json)에 아래 내용을 추가하세요.
{
"mcpServers": {
"roamswitch": {
"command": "/usr/bin/roamswitch-mcp"
}
}
}
* 참고: Antigravity CLI(agy) 등에서 도구 실행 시 Hook Failure 또는 텔레메트리 오류가 발생하는 경우, ~/.gemini/config/plugins/.../hooks.json 에서 "enabled": false 로 설정하여 훅을 비활성화하세요.
읽기 전용 도구 (현재 Mac 33종 / Linux 38종, 계속 추가 중)
get_security_report
Mac에서는 18개 항목(FileVault, SIP, Gatekeeper, 방화벽, Wi-Fi 암호화 강도, ARP 스푸핑, 외부 노출 포트 등), Linux에서는 클라이언트 27개 항목 / 서버 34개 항목(커널 강화, Docker 소켓 및 특권 컨테이너 보호, 컨테이너 런타임 격리, 알려진 취약점 등)을 종합 진단하여 점수와 개선 조언을 반환합니다.
get_exposed_ports
현재 리스닝 중인 모든 포트를 나열하고, 외부에 공개된 포트는 알려진 위험 서비스(Redis/MongoDB 등) 판정을 포함한 상세 감사 결과를 반환합니다. Mac에서는 노출된 포트마다 127.0.0.1로 HTTP GET을 1회 보내 헤더를 확인합니다.
get_guard_status
미확인 포트 차단, ARP 스푸핑 대응, USB 가드, Bluetooth 가드, 웹/메일 다운로드 보호, DNS 위협 차단의 활성화 상태와 보안 레벨을 반환합니다.
audit_url_safety
이메일 링크나 웹 URL을 인수로 받아 피싱 사기, 유니코드 호모그래프 위장, 브랜드 사칭 서브도메인, 고위험 TLD를 완전 로컬(Zero Telemetry)로 진단합니다.
get_app_help
RoamSwitch의 전체 기능 사양, 내부 동작, 모든 알림 메시지, 문제 해결을 망라한 공식 지식 베이스를 로컬에서 즉시 검색하여 정확한 설명과 권장 조치를 제공합니다.
audit_security_logs
최근 보안 로그(Mac: Sudo 인증 실패, SSH 무차별 대입 시도, Gatekeeper 차단, XProtect 탐지 등 / Linux: Sudo 인증 실패, SSH 무차별 대입, 방화벽 차단, AppArmor 거부, ClamAV 탐지 등)를 집계하고 API 키나 토큰 등 민감 정보를 자동으로 마스킹한 뒤, 로그 패턴을 템플릿화한 신규 패턴 탐지 및 빈도 이상(통계적 스파이크) 탐지 결과도 반환합니다. Linux에서는 journal을 읽지 못한 경우(시간 초과 등) 집계의 0건을 '아무 일도 없었다'로 보지 않고 journalReadComplete가 false가 되며 journalError에 사유가 담깁니다.
get_notification_history
RoamSwitch가 보낸 알림(보안 로그 감사 이상, ClickFix 탐지 등)의 기록을 최근 1주일간, 최신순으로 반환합니다.
roamswitch://docs/* (MCP Resources)
AI가 직접 컨텍스트로 참조할 수 있는 공식 문서 리소스(기능 사양・모든 알림 해설・설정 가이드・문제 해결).
기타 읽기 전용 도구
| 도구 | 지원 | 개요 |
|---|---|---|
audit_secrets |
Mac / Linux | 텍스트·파일·디렉터리에서 API 키와 개인 키 유출을 탐지합니다(탐지된 값은 마스킹되어 출력). |
run_active_vuln_scan |
Mac / Linux | 127.0.0.1 한정, 비파괴 방식의 실증형 취약점 검증입니다. 다른 호스트에는 연결하지 않지만 네트워크 요청을 보내는 도구이므로 기본값은 비활성이며 설정에서 옵트인해야 합니다. |
get_vulnerability_scan_history |
Mac / Linux | 실증형 취약점 진단(run_active_vuln_scan)이 기록한 각 항목의 최신 결과와 경과 일수(pass_age)를 반환합니다. |
verify_security_findings |
Mac / Linux | get_security_report의 항목(checkId)을 현재 상태로 다시 평가하여, 항목마다 stillPresent(아직 해당), resolved(해소 또는 설계상 해당 없음), inconclusive(판정 불가) 중 하나와 언어에 의존하지 않는 사유 코드를 반환합니다. 수정 후 실제로 해결되었는지 확인하기 위한 도구이며, 권한 부족, 특권 헬퍼 미연결, Docker에 접근할 수 없는 등의 이유로 측정하지 못한 항목은 안전하다고 보고하지 않고 inconclusive로 처리합니다. checkIds를 생략하면 모든 항목이 대상입니다(지정은 Mac 50개, Linux 64개까지이며, Linux는 isServer도 지정할 수 있습니다). Mac의 host_firewall, network_stealth_mode, gateway_arp_lock, malware_scanning, dns_threat_guard, usb_zero_trust는 RoamSwitch 앱 내 설정값으로 합격 여부가 정해지므로, 이 항목들은 앱 내 설정을 반영한 것이며 OS의 실제 상태를 다시 측정한 것이 아닙니다. 읽기 전용이며 외부 호스트에는 연결하지 않고 복구나 설정 변경도 하지 않습니다. Linux에서는 LAN에도 아무것도 보내지 않고 로컬 캐시에서 게이트웨이를 읽기만 합니다. Mac에서는 게이트웨이의 MAC 주소를 알아내기 위해 LAN 안의 게이트웨이에 ICMP ping을 보통 1회(MAC을 알아내지 못하면 몇 번까지) 보낼 수 있습니다. |
audit_mcp_configs |
Mac / Linux | AI 클라이언트의 MCP 설정 파일(Claude Desktop, Claude Code, Cursor, Windsurf, VS Code, Cline, Gemini CLI와 등록된 프로젝트 폴더의 .mcp.json 등)을 읽어 위험한 설정을 지적합니다. 호출마다 확인 없이 자동 승인되는 도구(auto_approve), loopback이 아닌 호스트의 평문 http:// 서버(url 필드뿐 아니라 --server http://… 처럼 시작 인수로 전달한 접속 대상도 포함. remote_plain_http), 셸이나 인터프리터 한 줄 명령으로의 실행(shell_wrapper), 버전을 고정하지 않은 패키지나 이미지를 가져오는 npx / uvx / docker run 등의 실행(unpinned_package_launcher), --privileged 또는 Docker 소켓·루트 파일 시스템을 마운트한 docker run(container_host_access), 시작할 때 추가 코드를 불러오게 하는 환경 변수(LD_PRELOAD, NODE_OPTIONS의 --require 등. 이름은 대소문자를 구분하지 않고 값은 반환하지 않음; code_loading_env), 인증 없는 공격 도구 백엔드인 HexStrike AI를 가리키는 설정(hexstrike), 그룹이나 다른 사용자가 쓸 수 있는 설정 파일(world_writable_config), Claude Code의 enableAllProjectMcpServers(auto_trust_project_servers), 웹 페이지·메일·채팅·Issue처럼 다른 사람이 쓴 글을 읽는 서버와 명령 실행·파일 변경이 가능한 서버가 한 설정 파일에 함께 있는 구성(간접 프롬프트 인젝션의 전제가 되는 조합. 잘 알려진 패키지 이름으로 판정하며 서버 도구의 내용은 보지 않음; injection_exposure)을 검출합니다. 인수가 없고 읽기 전용이며 네트워크에는 아무것도 보내지 않습니다. 환경 변수나 헤더 값, 인수, 비밀 정보는 반환하지 않고 서버 이름, 명령 이름, URL 호스트, (레지스트리 이름인 경우) 패키지·이미지 이름만 반환합니다. 해석하지 못한 파일은 unreadableFiles에 나열되며 감사하지 않았습니다. |
audit_agent_setup |
Mac / Linux | AI 에이전트에게 읽히는 지시 파일과 스킬(~/.claude의 CLAUDE.md·commands·agents·skills, ~/.codex, ~/.cursor/rules, ~/.gemini, ~/.agents, ~/.openclaw, 등록된 프로젝트 폴더의 CLAUDE.md·AGENTS.md·.cursorrules 등)과 OpenClaw의 openclaw.json을 읽어 위험한 내용과 설정을 지적합니다. 지시·스킬 파일에서는 보이지 않는 Unicode 태그 문자에 숨은 문장(hidden_tag_characters), 너비가 없는 문자나 글자 방향을 바꾸는 제어 문자(invisible_characters), 이전 지시를 무시하거나 사용자에게 숨기라는 표현(override_instruction), curl … | sh처럼 내려받아 그대로 실행하는 표현(remote_script_exec), 인코딩된 문자열을 풀어 실행하는 표현(encoded_payload_exec), 키와 자격 증명 저장소 참조(credential_access) 및 그 근처의 외부 전송·수신용 서비스 주소(credential_exfil_shape, exfil_endpoint), 재부팅 후에도 남는 장치 설정(persistence_instruction), 스킬에 들어 있는 컴파일된 코드(skill_precompiled_code), 다른 사용자가 쓸 수 있는 파일(agent_file_writable)을 검출합니다. HTML 주석 안의 내용은 렌더링하면 보이지 않으므로 더 높게 평가합니다. OpenClaw에서는 인증 꺼짐(openclaw_auth_disabled), 네트워크에서 닿는 대기 방식(openclaw_wide_bind), 24자 미만의 토큰(openclaw_weak_token), 모든 오리진 허용(openclaw_origin_wildcard), 켜진 dangerously… 스위치(openclaw_dangerous_flag), 모두를 신뢰하는 프록시 설정(openclaw_broad_trusted_proxy, openclaw_proxy_trust_loosened), 누구에게나 열린 DM·그룹 정책(openclaw_open_dm), mDNS의 full(openclaw_mdns_full), 숨겨진 자체 진단 결과(openclaw_audit_suppressed), 느슨한 권한(openclaw_loose_permissions)을 검출합니다. 모든 규칙은 결정적이며, 일치는 "사람이 읽어 볼 곳"일 뿐 악의를 단정하는 것이 아닙니다. 인수가 없고 읽기 전용이며 네트워크에는 아무것도 보내지 않습니다. 파일 본문이나 비밀 정보는 반환하지 않고(토큰은 길이만), 규칙 이름, 줄 번호, URL 호스트, 설정 키 경로만 반환합니다. 읽지 못한 파일은 unreadableFiles에 나열되며 감사하지 않았습니다. |
run_package_cve_scan |
Mac / Linux | 설치된 패키지(Mac: Homebrew / Linux: dpkg・dnf・zypper・pacman)를 로컬 CVE 맵과 대조합니다. 네트워크 통신은 전혀 하지 않습니다. Linux에서는 패키지 목록을 가져오지 못했거나 시간 초과가 발생하면 '해당 없음'으로 처리하지 않고 complete가 false가 되며 incompleteReason에 사유가 담깁니다(끝내지 못한 결과는 이상 없음이 아닙니다). Ubuntu(20.04·22.04·24.04·26.04)에서는 Ubuntu 전용 데이터로 소스 패키지 이름과 소스 버전을 사용해, Ubuntu가 수정 버전을 이미 공개한 CVSS 7.0 이상의 CVE만 대조하므로 '해당 없음'이 알려진 CVE가 없다는 뜻은 아닙니다. 결과에는 ecosystem과 release가 추가되고 검출마다 binary(설치된 바이너리 패키지 이름)가 담기며, Ubuntu Pro로만 고칠 수 있는 수정에는 proOnly가 붙습니다. Ubuntu 파생판(Linux Mint, Pop!_OS 등)과 지원하지 않는 버전은 complete가 false가 되고 incompleteReason에 사유가 담기며 Debian 데이터로 바꾸지 않습니다. |
run_package_cve_scan_languages |
Mac / Linux | npm / PyPI / crates.io / RubyGems / Packagist / Go / Maven 등의 의존성 락파일을 동일한 로컬 CVE 맵과 대조합니다. 네트워크 통신은 전혀 하지 않습니다. |
run_package_lifecycle_script_scan |
Mac / Linux | 프로젝트의 node_modules에 있는 package.json의 라이프사이클 스크립트(preinstall / install / postinstall / prepare)를 목록으로 보여 줍니다. 파일을 읽기만 하며 아무것도 실행하지 않고 통신도 하지 않습니다. 위험해 보이는 패턴(curl|sh 등)에 해당하는지 참고용 플래그도 붙지만, 이는 목록 정리일 뿐 위협 판정이 아닙니다. |
run_typosquat_scan |
Mac / Linux | 프로젝트의 package.json에 있는 의존성 패키지 이름이 유명한 npm 패키지와 1~2글자만 다른지(타이포스쿼팅 의심) 검사합니다. 로컬 파일만 읽으며 레지스트리에는 연결하지 않습니다. 참고용 간이 판정이므로 오탐이 있을 수 있습니다. |
run_npm_audit_signatures |
Mac / Linux | npm 레지스트리(registry.npmjs.org)에 조회하는 도구입니다. npm audit signatures를 실행해 설치된 패키지의 서명과 출처를 검증합니다. 기본값은 비활성이며, 설정에서 켜기 전까지는 실행을 거부합니다(Mac 버전은 Pro 전용). |
get_quarantine_status |
Mac / Linux | 악성코드 격리 Vault의 내용(원래 경로·탐지된 위협명·격리 일시·크기)을 반환합니다. |
get_canary_status |
Mac / Linux | 랜섬웨어 카나리아(미끼 파일) 배치 상태와 최근 50건까지의 탐지 인시던트를 반환합니다. |
get_ransomware_entropy_guard_status |
Mac | 범용 엔트로피 기반 랜섬웨어 탐지의 활성화 상태와 최근 엔트로피 버스트 탐지 인시던트를 반환합니다. |
get_honeytoken_status |
Mac | 자격 증명 허니토큰의 활성화 상태와 최근 접근 탐지 이벤트를 반환합니다. |
get_browser_credential_watch_status |
Mac | 브라우저 자격 증명 접근 감시의 활성화 상태와 최근 접근 탐지 이벤트를 반환합니다. |
get_forensic_evidence_bundles |
Mac | 긴급 Air-Gap 발동 시 저장된 포렌식 증거 번들(프로세스 목록・네트워크 연결・변경된 파일 등)의 목록을 반환합니다. |
get_ransomware_recovery_snapshots |
Mac | 랜섬웨어 복구용 APFS 스냅샷(사전·탐지 시·수동) 목록, 권장 복구 원본, 보존 모드 상태, 촬영 간격 설정을 반환합니다. 탐지 시 스냅샷에는 이미 암호화된 파일이 포함될 수 있습니다.Pro 전용입니다. |
search_exec_events |
Mac / Linux | 프로세스 실행 기록을 검색합니다. Mac에서는 eslogger 기록을, Linux에서는 실행 레코더 기록(변조를 감지할 수 있는 해시 체인 포함)을 경로·인자 등으로 좁혀 볼 수 있습니다. 기록 상태와 기록을 읽을 수 있는지도 함께 알려 줍니다. Mac 버전은 Pro 전용입니다. Linux의 기록은 root 전용이므로 root 권한으로 실행해야 합니다. |
get_process_tree |
Mac / Linux | 지정한 프로세스의 조상과 자손을 실행 기록에서 재구성해 반환합니다. 기록에 남아 있는 프로세스만 알 수 있습니다. Mac 버전은 Pro 전용입니다. |
get_port_anomaly_incidents |
Mac / Linux | 포트 이상 가드의 베이스라인 확보 상태, 현재 자동 차단 중인 포트, 최근 50건까지의 인시던트를 반환합니다. 현재 자동 차단 중인 포트는 타임스탬프가 없는 현재 상태의 스냅샷이며, 타임스탬프가 있는 인시던트 이력과는 다르다는 점을 응답 내 주석 필드로 명시하고 있습니다. |
get_ssh_guard_incidents |
Mac / Linux | SSH 무차별 대입 가드의 상태와 기록을 반환합니다. 차단까지 하는지 탐지만 하는지(다른 방어 도구가 sshd를 지키고 있을 때 등), 지금 차단 중인 접속 출처와 남은 시간, 최근 기록(차단함, 탐지만 함, 실패를 거듭한 접속 출처에서 로그인에 성공함 중 하나. 최대 200건)을 포함합니다. 시도된 사용자 이름 자체는 Linux에서는 저장하지 않고(개수만), Mac에서는 무해화하여 최대 5개까지 반환합니다. Mac은 최근 SSH 로그인(접속 출처·사용자·인증 방식·키 지문)도 반환합니다. 읽기 전용이며 차단을 해제하는 MCP 도구는 없습니다. Linux에서는 차단 목록을 root만 읽을 수 있으므로 일반 사용자로 실행하면 건수만 반환됩니다. Linux는 Server Edition과, sshd가 동작 중인 Client Edition에서 쓸 수 있습니다. Mac은 Pro 전용입니다. |
get_port_scan_incidents |
Linux | 이 기기를 대상으로 한 포트 스캔(정찰) 탐지 로그를 반환합니다. 짧은 시간에 많은 포트에 접근한 출발지 IP, 접근한 포트 수와 일부 포트, 자동 차단 여부(그 기간)가 포함됩니다. |
get_runtime_threat_status |
Mac | XProtect의 악성코드 탐지로 이 Mac이 Air-Gap 격리되었는지와 그 발동 인시던트를 반환합니다. Air-Gap 원인을 파악하려면 가장 먼저 확인하세요. |
verify_fim |
Linux | 약 150곳의 핵심 시스템 파일을 다시 해시하여 베이스라인과 비교해 변조를 검증합니다. root로 실행하면 결과에 추가 필드 recentIntrusionContext도 포함됩니다. 최근 변경마다 변경한 프로세스(계정·실행 파일·명령)와 그 프로세스가 속한 SSH 로그인(접속 출처·로그인 시각·인증 방식), 또는 확인하지 못한 이유가 들어갑니다. |
get_file_scan_guard_status |
Linux (Server) | 파일 스캔 가드(ClamAV)의 설정과 그것이 사용하는 격리 Vault의 상태를 반환합니다(Server Edition용 도구입니다. 클라이언트 버전의 멀웨어 가드 설정이 아닙니다). |
get_ebpf_incidents |
Linux (Server) | eBPF 런타임 가드의 현재 격리 상태와 발동 사유가 된 인시던트 이력을 반환합니다. Server Edition에서는 각 기록에 탐지부터 대응까지의 시간(밀리초. detect_to_receive_ms, receive_to_action_ms, detect_to_action_ms)이 더해지고, 결과에는 Falco 하트비트의 상태(heartbeat)도 포함됩니다. |
get_resource_guard_incidents |
Linux (Server) | 리소스 고갈·프로세스 이상 탐지 가드의 이력(메모리 누수/크래시 루프)을 신뢰도 등급과 함께 반환합니다(이 가드는 Server Edition의 것입니다. 클라이언트 버전에서는 동작하지 않으므로 결과는 항상 비어 있습니다). |
get_incident_timeline |
Mac / Linux | 각 가드의 탐지를 하나의 시계열로 통합해 반환합니다(프로세스 계보·MITRE ATT&CK 태그 포함, 실험적). |
get_network_history |
Mac | 기억된 각 Wi-Fi 네트워크에 응답한 게이트웨이 기기 수와 마지막 확인 시각을 기록하고, 이름이 매우 유사한 다른 네트워크(Evil Twin 후보)를 탐지합니다. 이전에 접속한 적이 있는 네트워크인지 확인하는 데도 사용할 수 있습니다. |
get_vpn_status |
Linux (Client) | 신뢰할 수 없는 네트워크에서의 VPN(WireGuard / Tailscale) 활성화 설정, 실제 터널 연결 상태, 킬 스위치 무장 상태를 반환합니다. |
get_link_guard_status |
Linux (Client) | Link Guard(DNS / TLS SNI / HTTP Host 검사를 통한 피싱・악성 사이트 차단)의 활성화 설정, 동작 모드(끄기 / 경고 / 차단), 허용 목록, 최근 7일간의 차단・경고 이벤트를 반환합니다. |
get_air_gap_status |
Linux (Client) | 긴급 Air-Gap 격리(모든 통신 차단)가 현재 발동 중인지, 발동 이유, 자동 해제까지 남은 시간, SIGSTOP으로 동결된 모든 프로세스를 반환합니다. |
get_sharing_services_status |
Linux (Client) | 신뢰할 수 없는 네트워크 연결 시 SSH・Samba・화면 공유(GNOME Remote Desktop / VNC / xrdp)를 자동으로 중지하는 기능의 설정과, 실제로 중지・복원 대상이 되는 서비스의 상태를 반환합니다. |
get_bluetooth_guard_status |
Linux (Client) | 신뢰할 수 없는 네트워크에서 검색 가능 상태를 강제로 끄는 Bluetooth 가드의 설정과, 컨트롤러의 실제 상태(전원, 검색 가능 여부, 연결된 기기)를 반환합니다. |
get_usb_guard_status |
Linux (Client) | USB 스토리지 가드 및 BadUSB 키보드 가드(evdev를 통한 입력 억제만 수행하며 커널 수준에서 기기를 비활성화하지 않음)의 설정과 연결된 기기・승인 대기 중인 기기 목록을 반환합니다. |
get_fleet_status |
Linux | Fleet(조직 단위 일괄 관리, RoamSwitch Business용으로 준비 중인 기능)의 이 기기 쪽 상태를 반환합니다. 등록 여부, 적용 중인 정책 버전, 체크인 상태 등을 알 수 있습니다. 등록 코드·토큰·키·라이선스 정보는 반환하지 않습니다. Fleet에는 원격 명령 채널이 없어, 관리자가 이 기기를 격리하거나 조작할 수 없습니다. |
get_sensor_audit_results |
Mac / Linux | 페어링된 RoamSwitch Sensor(같은 LAN에서 사용자 본인의 하드웨어로 동작하는 별도 제품)에 요청한 외부 능동 감사의 결과(대기 중·완료·실패)를 반환합니다. 기기 내부에서는 알 수 없는 「외부에서 도달할 수 있는지」라는 관점을 보완합니다. 감사 요청이나 페어링은 이 도구로는 할 수 없습니다. |
위 도구 중 로컬 상태만 읽는 도구(격리 Vault, 캐너리, 포트 이상, 런타임 위협, 알림 기록, 인시던트 타임라인, 네트워크 기록, VPN / Link Guard / Air-Gap / 공유 서비스 / Bluetooth / USB 가드 상태 등)는 RoamSwitch가 위협 탐지로 네트워크를 긴급 차단한 상태에서도 계속 동작합니다. 로컬 LLM과 함께 사용하면 차단 중에도 그 자리에서 원인을 조사할 수 있습니다.
verify_security_findings의 사유 코드입니다. 공통으로 failing(아직 해당), passing(문제 없음), not_applicable(이 환경에서는 설계상 해당 없음), not_verifiable(이 방법으로는 확인할 수 없음), unknown_check_id(지정한 checkId가 없음)가 있습니다. Mac에서만 helper_unavailable(특권 헬퍼 미연결), gateway_unknown(게이트웨이를 특정할 수 없음), no_baseline(등록된 신뢰 네트워크의 게이트웨이 MAC과 대조할 수 없음. 신뢰 네트워크가 등록되지 않았다면 MCP를 통한 ARP 감시는 항상 이 값), not_measured(포트 목록을 아직 한 번도 측정하지 않음. 앱 내 리포트에서만 나타나며 MCP에서는 보통 나오지 않음), location_unavailable(Wi-Fi 읽기에 위치 정보 권한이 필요함), tool_failed(OS 명령이 결과를 반환하지 않았거나, SIP가 enabled (Custom Configuration)로 출력된 것처럼 활성/비활성을 단정할 수 없는 출력이었음)를 반환합니다. Linux에서만 not_root(root가 아니어서 읽을 수 없음), daemon_unknown(데몬 상태를 가져올 수 없음), tool_missing(필요한 명령이 없음), tool_timeout(외부 명령이 제한 시간 안에 끝나지 않아 중단됨), docker_unreachable(Docker에 연결할 수 없음), unconfirmed(항목 자체가 결과를 미확인으로 표시함)를 반환합니다. inconclusive일 때는 수정이 효과가 있었다고도 없었다고도 말할 수 없으므로, 부족한 권한이나 연결을 갖춘 뒤 다시 호출하세요.
외부 호스트와 통신하는 도구는 옵트인(Mac에서는 Pro 전용)인 run_npm_audit_signatures(npm 레지스트리)뿐입니다. run_active_vuln_scan(기본값 비활성)은 127.0.0.1에 대한 프로브만 보내고, Mac의 get_exposed_ports는 노출된 포트마다 127.0.0.1로 HTTP GET을 1회 보내 헤더를 확인할 뿐입니다. 게이트웨이의 MAC 주소를 알아낼 때 Mac의 진단 계열 도구는 LAN 안의 게이트웨이에 ICMP ping을 보통 1회(MAC을 알아내지 못하면 몇 번까지) 보낼 수 있습니다. Linux의 get_security_report와 verify_security_findings는 LAN에 아무것도 보내지 않고 로컬 캐시에서 게이트웨이를 읽기만 합니다(get_guard_status처럼 게이트웨이의 MAC을 다시 알아내는 다른 도구는 ping을 1회 보낼 수 있습니다).
일상 업무 및 개발 워크플로에서의 구체적인 질문법
로컬 개발 중 포트 감사, 공용 Wi-Fi 보안 진단, 피싱 URL 검사 등 실제 상황에서 사용할 수 있는 프롬프트와 AI 응답 예시입니다. 복사하여 바로 AI에 전달할 수 있습니다.
로컬 서버·DB 포트 노출 감사
Next.js, Vite, Python, Docker, Redis 등을 실행했을 때 의도치 않게 0.0.0.0(전체 공개)으로 LAN에 노출되지 않았는지 AI에게 감사를 요청합니다.
• 🚨 포트 3000 (node / Next.js):
0.0.0.0:3000으로 외부 공개 중• 🚨 포트 6379 (redis-server):
0.0.0.0:6379으로 외부 공개 중 (인증 비활성화로 동일 Wi-Fi 내 다른 기기에서 직접 접근 가능)• ✅ 포트 5432 (postgres):
127.0.0.1:5432 (localhost 한정·안전)💡 권장 조치: Redis 설정에서
bind 127.0.0.1로 변경하고, Next.js는 npm run dev -- -H 127.0.0.1로 실행하세요.외출지 Wi-Fi 연결 시 안전 상태 점검
카페나 호텔의 무료 Wi-Fi에 연결한 직후, 작업을 시작해도 안전한지 방화벽 및 ARP 감시 등 필수 방어 설정이 활성화되어 있는지 AI에게 종합 진단을 요청합니다.
• 🛡️ 종합 점수: 88 / 100 (Grade: A-)
• 📡 네트워크 판정: 미신뢰 네트워크 (외출 모드·패킷 필터 작동 중)
• ✅ 방화벽 / 스텔스 모드: 활성 (외부 탐색 패킷 차단 중)
• ✅ ARP 스푸핑 자동 차단: 활성 (패킷 감청 감지 시 자동 격리)
• ⚠️ 개선 권장: FileVault 디스크 암호화가 비활성화 상태입니다. 시스템 설정에서 활성화를 권장합니다.
의심스러운 이메일·채팅 링크 안전성 검사
거래처를 사칭하는 의심스러운 이메일이나 Slack/Discord DM에 포함된 URL을 외부에 전송하지 않고(Zero Telemetry) Mac 기기 내에서 즉시 AI로 진단합니다.
• 🚨 위험도 판정: Dangerous (위험 / 안전 점수: 8/100)
• ❌ 브랜드 위장 서브도메인:
apple.com처럼 보이지만 실제 도메인은 login-auth-verify.xyz입니다.• ❌ 고위험 TLD:
.xyz는 일회용 피싱 사기에 자주 악용되는 고위험 도메인입니다.• 🔒 Zero Telemetry: 외부 전송 없이 Mac 기기 내에서 안전하게 검증 완료.
• 🛑 권장 조치: 링크를 절대 열지 말고 이메일을 삭제 및 신고하세요.
코딩 작업 중 자율 보안 세이프가드
Claude Code나 Antigravity에 서비스 구축 및 테스트를 맡길 때, MCP 도구를 세이프가드로 자율 실행시켜 의도치 않은 포트 노출이나 취약점을 방지합니다.
1. Fastify 백엔드 서버를 포트 8080에서 시작했습니다.
2. 🔍 RoamSwitch MCP 검증:
get_exposed_ports를 실행하여 127.0.0.1:8080(localhost 한정)에 바인딩되어 LAN 외부 노출이 없음을 확인했습니다.3. 보안 안전성이 확보되었으므로 통합 테스트를 진행합니다.
업무 시작 전 점검 및 사내 제출용 보고서 생성
사내 보안 규정 준수 확인 및 IT 부서 제출용, 또는 개인 셀프 점검용으로 현재 Mac 보안 상태를 Markdown 형식으로 한 번에 출력합니다.
## 🛡️ Mac Security Health Report (2026-08-28)
- 종합 점수: 96 / 100 (Grade: A+)
- 주요 방어 현황:
• FileVault: ✅ 활성 (APFS Encrypted)
• SIP (시스템 무결성 보호): ✅ 활성
• 방화벽 / 스텔스 모드: ✅ 활성
• ARP 스푸핑 자동 차단: ✅ 활성
• DNS 위협 보호: ✅ 활성 (Quad9 Secure DNS)
- 권장 조치: 없음 (매우 우수한 보안 상태입니다)USB·블루투스·다운로드 보호 가드 작동 확인
미확인 USB 저장장치 연결 보호, 블루투스 감시, 웹/메일 다운로드 보호, 보안 DNS 전환 등 RoamSwitch의 다양한 보호 기능이 정상 작동하는지 확인합니다.
• 🛡️ 활성 보호 레벨: Balanced (표준 보호 모드)
• ✅ USB 저장장치 가드: 활성 (미등록 USB 연결 시 경고 및 차단)
• ✅ 블루투스 가드: 활성 (페어링되지 않은 기기 접근 감시)
• ✅ 웹·메일 다운로드 보호: 활성 (격리 속성 파일을 ClamAV로 자동 검사)
• ✅ DNS 위협 보호: 활성 (악성 C2·피싱 도메인 자동 차단)
앱 사용법 및 알림 메시지 의미・대처 상담
화면에 표시된 알림이나 경고, 세부 기능 사양(패킷 필터, FSEvents, ClamAV, USB 보호 등)에 대해 AI가 공식 지식 베이스를 기반으로 정확한 설명과 대처법을 안내합니다.
• 🚪 알림 이유: 개발 서버가
0.0.0.0(전체 공개)으로 실행되어 외부 접근이 차단되었습니다.• ⚙️ 안전한 대처법:
1. 권장 (로컬 한정 실행):
npm run dev -- -H 127.0.0.1로 실행하면 외부에 노출되지 않습니다.2. 외부 공유 필요 시: RoamSwitch '포트 진단'에서 포트 3000의 외부 접근을 허용할 수 있습니다.
• 🔍 발생 사태: 공용 Wi-Fi 내의 다른 기기가 게이트웨이를 사칭하여 통신을 도청・변조하려는 중간자 공격(MITM)이 발생했습니다.
• 🛡️ RoamSwitch 자동 방어: ARP 스푸핑 자동 차단이 발동하여 네트워크를 즉시 에어갭 격리하고 패킷 감청을 차단했습니다.
• 🛑 권장 조치: 해당 Wi-Fi에는 다시 연결하지 마시고, 현재의 테더링 회선으로 작업을 계속하세요.
• 🔌 추출 이유: 미등록 기기를 통한 데이터 유출 및 악의적인 BadUSB 공격을 방지하기 위해 자동 언마운트되었습니다.
• ⚙️ 안전한 등록 절차: 1. 메뉴 바의 RoamSwitch 아이콘에서 '설정' 열기 → 2. 'USB 저장장치 보호' 탭 선택 → 3. '연결된 기기에서 추가'를 클릭하고 해당 USB 선택 → 4. 권한을 '읽기 전용(권장)'으로 지정하고 저장하면 다음 연결부터 안전하게 마운트됩니다.
• ⚠️ 원인: 패킷 필터(PF) 제어 및 특권 처리를 담당하는 데몬
RoamSwitchHelper와의 XPC 통신이 일시적으로 끊어졌습니다.• 🛠️ 복구 절차:
1. 터미널을 열고 다음 명령어로 헬퍼를 재시작하세요:
sudo killall RoamSwitchHelper2. RoamSwitch 앱을 재실행합니다.
3. macOS '시스템 설정' > '일반' > '로그인 항목 및 확장 프로그램'에서
RoamSwitchHelper가 허용되어 있는지 확인하세요.Air-Gap 발동 후 로컬 LLM + MCP를 이용한 오프라인 진단
랜섬웨어 탐지 등으로 Air-Gap(긴급 네트워크 차단)이 발동하면 Claude Desktop 같은 클라우드 AI와의 통신도 함께 차단됩니다. 하지만 RoamSwitch의 MCP 서버는 로컬 프로세스 통신만으로 동작하기 때문에, Ollama 등의 로컬 LLM과 함께 사용하면 외부 네트워크가 전혀 없는 상태에서도 진단을 계속할 수 있습니다. 로그 이상 탐지·변조 탐지·기존 취약점 대조는 모두 완전히 로컬에서 완결되므로, 바로 통신을 쓸 수 없는 이 순간에야말로 진가를 발휘합니다.
• 🐛 카나리아 발동: 14:32:07에
/var/www/decoy_invoice.pdf의 암호화를 감지, 프로세스 suspicious_enc(PID 8823)를 즉시 정지·격리함• 🔌 포트 모니터링(Port Anomaly Guard): 최근 인시던트 기록에 새로운 자동 차단 없음 — 침입 경로는 카나리아 탐지 1건뿐이며 추가 백도어 포트 개방은 확인되지 않음
• 📜 로그 상관(이상 탐지): 발동 12분 전부터
sshd 인증 실패가 급증(빈도 급증 탐지, Z-score 5.2) — 침입 경로일 가능성• 🔒 변조 탐지(FIM): 약 150개 크리티컬 패스에 변조 없음 — 시스템 영역까지 피해가 확산되지 않은 것으로 확인
• 📦 기존 취약점 대조: 로컬 CVE 맵과 대조, 해당 패키지에 심각한 기존 취약점 없음
💡 권장 대응: 침해는 웹 루트 하위로 국한되었을 가능성이 높습니다. 백업 복원 전에 해당 디렉터리의 다른 파일도 개별적으로 확인할 것을 권장합니다.
MCP 연동에 대해
Q. 정말로 외부와 통신하지 않나요?
A. 네. MCP 서버는 AI 클라이언트가 표준 입출력(stdio)을 통해 직접 실행하는 로컬 프로세스이며, 텔레메트리는 전혀 전송하지 않습니다. 진단 결과도 이 Mac / Linux 기기에서 즉시 계산됩니다. 외부 호스트와 통신하는 도구는 옵트인(Mac에서는 Pro 전용)인 run_npm_audit_signatures(npm 레지스트리)뿐입니다. run_active_vuln_scan(기본값 비활성)은 127.0.0.1에 대한 프로브만 보내고, Mac의 get_exposed_ports는 노출된 포트마다 127.0.0.1로 HTTP GET을 1회 보내 헤더를 확인할 뿐입니다. 게이트웨이의 MAC 주소를 알아낼 때 Mac의 진단 계열 도구는 LAN 안의 게이트웨이에 ICMP ping을 보통 1회(MAC을 알아내지 못하면 몇 번까지) 보낼 수 있습니다. Linux의 get_security_report와 verify_security_findings는 LAN에 아무것도 보내지 않고 로컬 캐시에서 게이트웨이를 읽기만 합니다(get_guard_status처럼 게이트웨이의 MAC을 다시 알아내는 다른 도구는 ping을 1회 보낼 수 있습니다).
Q. Pro 버전이 아니어도 사용할 수 있나요?
A. Linux 버전은 무료이며 모든 도구를 사용할 수 있습니다. Mac 버전의 무료 버전에서도 대부분의 도구를 사용할 수 있지만, get_ransomware_recovery_snapshots·search_exec_events·get_process_tree·run_npm_audit_signatures 4개는 Pro 전용이며 Pro가 활성화되어 있지 않으면 오류를 반환합니다. 또한 각 자동 가드의 실제 작동 여부는 Pro 라이선스 상태에도 좌우되므로, 도구에서는 설정의 토글 상태만 확인할 수 있습니다.
Q. 지원되는 AI 클라이언트는 무엇인가요?
A. MCP(Model Context Protocol)의 stdio 전송 방식을 지원하는 클라이언트라면 위에 나열된 것 외에도 기본적으로 사용할 수 있습니다. Claude Desktop·Claude Code·OpenAI Codex CLI·OpenCode·Antigravity에서 동작을 확인했습니다.
Q. Antigravity에서 "Hook Failure" 등의 오류가 발생하여 도구를 실행할 수 없습니다.
A. Antigravity에 설치된 외부 플러그인(Google Cloud 텔레메트리 등)의 PreToolUse 훅으로 인해 도구 실행이 차단될 수 있습니다. ~/.gemini/config/plugins/.../hooks.json 파일을 열고 "enabled": false 로 설정하여 비활성화하세요.
Q. 네트워크가 차단된 상태에서도 문의할 수 있나요?
A. Ollama나 LM Studio 등 로컬 LLM(OpenCode 등 로컬 모델 연동 환경)을 사용 중인 경우 모든 처리가 Mac / Linux 기기 내에서만 이루어지므로, RoamSwitch에 의한 네트워크 긴급 차단 중에도 완전 오프라인으로 즉시 문의가 가능합니다. 클라우드 기반 LLM(Claude API 등)을 사용 중이라면 핫스팟 등 안전한 회선으로 전환 후 문의해 주세요.