Claude等のAIから、直接Mac / Linuxのセキュリティ状況を確認
RoamSwitchには読み取り専用のMCP(Model Context Protocol)サーバーが同梱されています。Claude Desktop / Claude Codeに接続すれば、「今のMac / Linuxは安全?」「外部に公開されているポートは?」と自然文で聞くだけで、RoamSwitch自身が計算した正確な診断結果に基づく回答が返ります。ロックダウン切替やポート隔離などの操作は一切できず、AIクライアントとの通信は端末内のstdioのみで完結します(Zero Telemetryの延長)。
🔒 なぜ安全なのか
- 読み取り専用: セキュリティ診断・ポート監視・ガード設定の確認のみ。ロックダウン切替、ポート隔離、デバイス取り出しなどの操作系ツールは一切実装していません。
- 完全ローカル: AIクライアントとの通信は標準入出力(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の場合
ターミナルで以下のコマンドを1回実行するだけです。
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の場合
ターミナルで以下のコマンドを1回実行するだけです。
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ガード・Web/Mailダウンロード保護・DNS脅威保護の有効状態と、現在の保護レベルを返します。
audit_url_safety
メール本文やWeb上のURLを引数に取り、フィッシング詐欺・Unicodeホモグラフ偽装・有名ブランド偽装サブドメイン・高リスク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)、シェルやインタプリタの1行コマンドでの起動(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)、Web ページ・メール・チャット・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 に理由が入ります(完了できなかった結果は問題なしではありません)。 Linux の 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のマルウェア検知によるAir-Gap隔離の有無と、その発動元インシデントを返します。Air-Gapの理由を調べるなら最初に確認すべきツールです。 |
verify_fim |
Linux | 約150箇所のクリティカルなシステムファイルを再ハッシュし、ベースラインと比較して改ざんを検証します。root で実行したときは、結果に追加のフィールド recentIntrusionContext も含まれます。直近の変更ごとに、変更したプロセス(アカウント・実行ファイル・コマンド)と、そのプロセスが属する SSH ログイン(接続元・ログイン時刻・認証方法)、または調べられなかった理由が入ります。 |
get_file_scan_guard_status |
Linux (Server) | ファイルスキャンガード(ClamAV)の設定と、それが使う隔離Vaultの状態を返します。 |
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) | リソース枯渇・プロセス異常検知ガードの履歴(メモリリーク/クラッシュループ)を確度ティア付きで返します。 |
get_incident_timeline |
Mac / Linux | 各ガードの検知を1つの時系列に統合して返します(プロセス系譜・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ホスト検査による遮断)の有効設定・動作モード(オフ / 警告 / 遮断)・許可リストと直近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)完全端末内で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. 安全性が担保されたため、引き続き結合テストを実行します。
始業時チェック・社内提出用レポート作成
企業のセキュリティ規程遵守の確認や情シス提出用、あるいは個人のセルフチェック用に、現在のMacセキュリティ状態をMarkdown形式で一括出力させます。
## 🛡️ Mac Security Health Report (2026-08-28)
- 総合スコア: 96 / 100 (Grade: A+)
- 主要防御状況:
• FileVault: ✅ 有効 (APFS Encrypted)
• SIP (システム整合性保護): ✅ 有効
• ファイアウォール / ステルスモード: ✅ 有効
• ARPスプーフィング自動遮断: ✅ 有効
• DNS脅威保護: ✅ 有効 (Quad9 Secure DNS)
- 推奨アクション: 特になし(良好なセキュリティ状態です)
USB・Bluetooth・各種防護ガードの稼働確認
未知のUSBストレージ挿入時の保護やBluetooth監視、Web/Mailダウンロード保護、セキュアDNSの切り替えなど、RoamSwitchの各種プロテクションが有効か確認します。
• 🛡️ アクティブ保護レベル: Balanced (標準防護モード)
• ✅ USBストレージガード: 有効 (未登録USB接続時に警告・遮断)
• ✅ Bluetoothガード: 有効 (未ペアリング機器の接近を監視)
• ✅ Web・メールダウンロード保護: 有効 (検知ファイルをClamAVで自動検査)
• ✅ DNS脅威保護: 有効 (マルウェアC2・フィッシングDNSを自動遮断)
アプリの使い方・通知メッセージの意味と対処相談
画面に出た通知や警告(ポート遮断、緊急遮断後の安全確認、USB取り出し、ヘルパー未接続等)や細かい機能仕様について、AIに公式ナレッジベースから的確な解説と対処法を教えてもらいます。
• 🚪 通知の理由: Next.js等の開発サーバーが
0.0.0.0(全公開)で起動し、同一LAN内の他端末からアクセス可能な状態になっていたため、外部からの通信のみを安全に自動遮断しました。• ⚙️ 安全な対処法:
1. 推奨(ローカル限定起動):
npm run dev -- -H 127.0.0.1 で起動すると、外部にポートが晒されず遮断通知も出なくなります。2. 外部共有が必要な場合: メニューバーのRoamSwitchアイコン >「ポート診断」からポート3000の外部アクセスを許可できます。
• 🔍 発生していた事象: 同一Wi-Fi内の別の端末がルーターになりすましてARPパケットを偽造し、通信を盗聴・改ざんしようとする中間者攻撃(MITM)が発生していました。
• 🛡️ RoamSwitchの自動防護: ARPスプーフィング自動遮断が発動し、通信を即座にエアギャップ隔離してパケット傍受を防ぎました。
• 🛑 今後の推奨対応: 当該公衆Wi-Fiには再接続せず、現在のテザリング回線で作業を継続してください。パスワード変更等の確認も推奨します。
• 🔌 排出の理由: 未登録デバイスによる情報漏洩(データ持ち出し)や悪意あるBadUSB攻撃を防ぐため、自動排出(アンマウント)されました。
• ⚙️ 安全な登録手順: 1. メニューバーのRoamSwitchアイコンから「設定」を開く → 2.「USBストレージ保護」タブを選択 → 3.「接続中デバイスから追加」をクリックし当該デバイスを選択 → 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マップと突合、該当パッケージに重大な既知脆弱性なし
💡 推奨対応: 侵害はWebルート配下に限定されている可能性が高い。バックアップからの復元前に、該当ディレクトリの他ファイルも個別確認することを推奨します。
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端末内だけで完結するため、RoamSwitchによるネットワーク緊急遮断時でも完全オフラインでそのまま問い合わせが可能です。クラウド型LLM(Claude API等)をお使いの場合は、テザリングなどの安全な回線に切り替えてから問い合わせを行ってください。