直接向 Claude 等 AI 查询您 Mac / Linux 的安全状态
RoamSwitch 内置了只读的 MCP(Model Context Protocol)服务器。只需连接到 MCP 客户端,用自然语言询问“我的 Mac / Linux 现在安全吗?”“有哪些端口对外暴露?”,即可获得基于 RoamSwitch 自身精确诊断结果的回答,而非 AI 的臆测。它无法切换锁定级别、隔离端口或执行任何其他操作,所有通信都完全通过设备内的 stdio 完成(Zero Telemetry 方针的延伸)。
🔒 为什么是安全的
- 只读:仅提供安全诊断、端口监控、防护设置查询功能。未实现切换锁定、隔离端口、弹出设备等任何操作型工具。
- 完全本地:通信仅通过标准输入输出(stdio)进行,完全在 AI 客户端(Claude Desktop/Code 等)与 Mac / Linux 上的 RoamSwitch 进程之间完成,绝不会发送到外部服务器。
- 防止误操作:由于不含任何操作型工具,因此不存在因提示注入等原因而误改防火墙或网络设置的风险。
两步完成设置
1二进制文件位置
已内置于 RoamSwitch.app 中,无需单独下载或安装。
/Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer
2a适用于 Claude Desktop
在 ~/Library/Application Support/Claude/claude_desktop_config.json 的 "mcpServers" 中添加以下内容,然后重新启动 Claude Desktop。
{
"mcpServers": {
"roamswitch": {
"command": "/Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer"
}
}
}
2b适用于 Claude Code
只需在终端中执行一次以下命令即可。
claude mcp add roamswitch /Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer
2c适用于 OpenAI 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
2d适用于 OpenCode
在项目根目录下的 opencode.json(或全局配置 ~/.config/opencode/opencode.json)中添加以下内容:
{
"mcp": {
"roamswitch": {
"type": "local",
"command": ["/Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer"]
}
}
}
💡 本地大模型支持: 搭配Ollama或LM Studio等本地模型时,即使RoamSwitch因检测到威胁而实施紧急断网,也能在完全离线状态下即时查询安全建议与事件分析。
2e适用于 Antigravity
请在 ~/.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 以禁用该 Hook。
1二进制文件位置
已内置于 apt / rpm / AUR 软件包中,安装时会自动部署为 /usr/bin/roamswitch-mcp,无需单独下载或编译(客户端版与 Server Edition 通用)。
/usr/bin/roamswitch-mcp
Server Edition(无头运行模式)也可直接使用相同的二进制文件和相同的配置方法。详情请参阅《Linux Server 运维手册》中的「AI 代理 / MCP 集成运维」章节。
2a适用于 Claude Desktop
Claude Desktop 官方并未提供 Linux 版本。如果您使用的是非官方构建版本(例如 claude-desktop-debian 等),请在 ~/.config/Claude/claude_desktop_config.json 的 "mcpServers" 中添加以下内容后重启。
{
"mcpServers": {
"roamswitch": {
"command": "/usr/bin/roamswitch-mcp"
}
}
}
2b适用于 Claude Code
只需在终端中执行一次以下命令即可。
claude mcp add roamswitch /usr/bin/roamswitch-mcp
2c适用于 OpenAI Codex CLI
请在 ~/.codex/config.toml 中添加以下内容,或在终端中执行以下命令。
[mcp_servers.roamswitch] command = "/usr/bin/roamswitch-mcp"
codex mcp add roamswitch -- /usr/bin/roamswitch-mcp
2d适用于 OpenCode
在项目根目录下的 opencode.json(或全局配置 ~/.config/opencode/opencode.json)中添加以下内容:
{
"mcp": {
"roamswitch": {
"type": "local",
"command": ["/usr/bin/roamswitch-mcp"]
}
}
}
💡 本地大模型支持: 搭配Ollama或LM Studio等本地模型时,即使RoamSwitch因检测到威胁而实施紧急断网,也能在完全离线状态下即时查询安全建议与事件分析。
2e适用于 Antigravity
请在 ~/.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 以禁用该 Hook。
只读工具(目前 Mac 17 种 / Linux 25 种,持续增加中)
get_security_report
在 Mac 上进行 18 项综合诊断(FileVault、SIP、Gatekeeper、防火墙、Wi-Fi 加密强度、ARP 欺骗、外部暴露端口等),在 Linux 上进行客户端 24 项 / 服务器 30 项诊断(内核加固、Docker 套接字与特权容器保护、容器运行时隔离、已知漏洞等),并返回评分与改进建议。
get_exposed_ports
列出当前所有正在监听的端口,对外部暴露的端口返回包含已知高危服务(Redis/MongoDB 等)判定的详细审计结果。
get_guard_status
返回未知端口拦截、ARP欺骗自动遏制、USB防护、蓝牙防护、网页/邮件下载保护、DNS威胁防护的开启状态及当前保护级别。
audit_url_safety
接收邮件链接或网页URL作为参数,完全在本地(Zero Telemetry)即时诊断钓鱼欺诈、Unicode同形异义伪装、仿冒子域名和高风险顶级域。
get_app_help
在本地即时检索涵盖RoamSwitch所有功能规范、底层机制、警报通知及故障排除的官方知识库,返回准确的技术说明与处置建议。
audit_security_logs
汇总近期安全日志(Mac:Sudo 认证失败、SSH 暴力破解尝试、Gatekeeper 拦截、XProtect 检测等 / Linux:Sudo 认证失败、SSH 暴力破解、防火墙拦截、AppArmor 拒绝、ClamAV 检测等),自动屏蔽 API 密钥、令牌等敏感信息,并返回基于日志模板化的新模式检测与频率异常(统计学突增)检测结果。
get_notification_history
返回 RoamSwitch 发送的通知(安全日志审计异常、ClickFix 检测等)历史记录,最近1周、最新在前。
roamswitch://docs/* (MCP Resources)
AI客户端可直接读取至上下文的官方文档资源(功能规范、警报处置指南、设置指南、故障排除)。
其他只读工具
| 工具 | 支持 | 概要 |
|---|---|---|
audit_secrets |
Mac / Linux | 从文本、文件或目录中检测泄露的 API Key 与私钥(检出值在输出时已脱敏)。 |
run_active_vuln_scan |
Mac / Linux | 仅限 127.0.0.1 的非破坏性实证漏洞验证。唯一会使用网络的工具,默认关闭,需在设置中主动启用。 |
run_package_cve_scan |
Mac / Linux | 将已安装的软件包(Mac:Homebrew / Linux:dpkg・dnf・zypper・pacman)与本地 CVE 映射进行比对。完全不产生任何网络通信。 |
run_package_cve_scan_languages |
Mac / Linux | 将 npm / PyPI / crates.io / RubyGems / Packagist / Go / Maven 等依赖锁定文件与同一本地 CVE 映射进行比对。完全不产生任何网络通信。 |
get_quarantine_status |
Mac / Linux | 返回恶意软件隔离 Vault 的内容(原始路径、检出的威胁名称、隔离时间与大小)。 |
get_canary_status |
Mac / Linux | 返回勒索软件诱饵文件(Canary)的部署状态,以及最近 50 条检测事件。 |
get_port_anomaly_incidents |
Mac / Linux | 返回端口异常防护的基线状态、当前自动阻断的端口,以及最近 50 条事件。响应中明确注明:当前自动阻断的端口是不带时间戳的当前状态快照,与带时间戳的事件历史是两回事。 |
get_runtime_threat_status |
Mac | 返回是否因 XProtect 检出恶意软件而进入 Air-Gap 隔离,以及触发该隔离的事件。排查 Air-Gap 原因时应最先查看此工具。 |
verify_fim |
Linux | 对约 150 处关键系统文件重新计算哈希,并与基线比对以验证是否被篡改。 |
get_file_scan_guard_status |
Linux (Server) | 返回文件扫描防护(ClamAV)的配置及其所用隔离 Vault 的状态。 |
get_ebpf_incidents |
Linux (Server) | 返回 eBPF 运行时防护的当前隔离状态,以及触发隔离的事件历史。 |
get_resource_guard_incidents |
Linux (Server) | 返回资源耗尽/进程异常检测防护的历史(内存泄漏、崩溃循环),并附置信等级。 |
get_incident_timeline |
Mac / Linux | 将各防护模块的检测结果合并为单一时间线返回(含进程谱系与 MITRE ATT&CK 标签,实验性)。 |
get_network_history |
Mac | 记录每个已记住的 Wi-Fi 网络曾应答过的网关设备数量及最后一次出现的时间,并检测名称高度相似的其他网络(Evil Twin 疑似克隆热点)。也可用于确认是否曾经连接过某个网络。 |
get_vpn_status |
Linux (Client) | 返回在不受信任网络下 VPN(WireGuard / Tailscale)的启用设置、隧道的实际连接状态,以及防泄漏切换开关(kill switch)的启用状态。 |
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 远程桌面 / VNC / xrdp)功能的设置,以及实际被停止与恢复的服务状态。 |
get_bluetooth_guard_status |
Linux (Client) | 返回在不受信任网络下强制关闭可被发现状态的蓝牙防护设置,以及控制器的实际状态(电源、可发现性、已连接设备)。 |
get_usb_guard_status |
Linux (Client) | 返回 USB 存储防护与 BadUSB 键盘防护(仅通过 evdev 抑制输入,绝不会在内核层面禁用设备)的设置,以及已连接设备与待批准设备列表。 |
上述工具中,仅读取本地状态的工具(隔离 Vault、诱饵文件、端口异常、运行时威胁、通知历史、事件时间线、网络历史、VPN / Link Guard / Air-Gap / 共享服务 / 蓝牙 / USB 防护状态等)即使在 RoamSwitch 因检测到威胁而紧急切断网络时也能继续工作。搭配本地 LLM,即可在断网期间当场排查原因。
日常办公与开发流程中的具体提问方式
涵盖本地开发端口审计、公共 Wi-Fi 安全检查、钓鱼 URL 诊断等真实场景的提示词与 AI 回复示例。可一键复制提示词直接发送给 AI。
本地服务器与数据库端口暴露审计
启动 Next.js、Vite、Python、Docker、Redis 等服务时,让 AI 审计是否存在意外绑定至 0.0.0.0 (全公开) 而暴露给局域网的危险端口。
• 🚨 端口 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 后,让 AI 进行全面的安全体检,确认防火墙、隐身模式和 ARP 防护是否已正常启用。
• 🛡️ 综合得分: 88 / 100 (Grade: A-)
• 📡 网络判定: 不信任网络(外出模式 / 数据包过滤已生效)
• ✅ 防火墙 / 隐身模式: 已开启(阻断外部探测数据包)
• ✅ ARP 欺骗自动隔离: 已开启(检测到流量劫持时自动隔离)
• ⚠️ 改进建议: FileVault 磁盘加密未启用,建议在“系统设置”中开启。
可疑邮件与聊天链接的安全性检测
收到冒充合作方的可疑邮件或 Slack/Discord 私信中的 URL 时,完全在设备端进行本地解析(Zero Telemetry),不将链接泄露给外部服务器。
• 🚨 风险判定: Dangerous (危险 / 安全得分: 8/100)
• ❌ 伪装知名品牌子域名: 伪装为
apple.com,实际主域名为 login-auth-verify.xyz。• ❌ 高危 TLD:
.xyz 是钓鱼欺诈活动中高频使用的一次性域名后缀。• 🔒 Zero Telemetry: 本地计算,未向外部服务器发送任何查询数据。
• 🛑 处置建议: 切勿点击该链接,请立即删除邮件并上报。
编码过程中的自主安全防护 (Safeguard)
让 Claude Code 或 Antigravity 部署后端或运行测试套件时,自主调用 MCP 工具作为防护栏,确保未意外开放多余端口。
1. 已在 8080 端口启动 Fastify 后端服务。
2. 🔍 RoamSwitch MCP 验证: 执行
get_exposed_ports 确认服务严格绑定在 127.0.0.1:8080 (仅 localhost),无局域网暴露。3. 环境安全已确认,正在继续执行集成测试。
工作开始前检查与公司提交报告生成
为满足企业安全合规要求、向 IT 部门汇报或个人日常自检,一键生成结构清晰的 Markdown 格式 Mac 安全体检报告。
## 🛡️ Mac Security Health Report (2026-08-28)
- 综合得分: 96 / 100 (Grade: A+)
- 核心防护状态:
• FileVault: ✅ 已开启 (APFS Encrypted)
• SIP (系统完整性保护): ✅ 已开启
• 防火墙 / 隐身模式: ✅ 已开启
• ARP 欺骗自动隔离: ✅ 已开启
• DNS 威胁防护: ✅ 已开启 (Quad9 Secure DNS)
- 待办建议: 无(系统处于极佳安全状态)USB、蓝牙与下载防护等各项 Guard 状态确认
确认未知 USB 存储接入防护、蓝牙设备监视、Web/邮件下载文件防护及安全 DNS 切换等各项实时防线是否正常运行。
• 🛡️ 当前保护级别: Balanced (标准防护模式)
• ✅ USB 存储防护: 运行中 (插入未登记 USB 时告警/阻断)
• ✅ 蓝牙防护: 运行中 (监视未配对设备的靠近)
• ✅ Web/邮件下载保护: 运行中 (自动使用 ClamAV 扫描带隔离属性的文件)
• ✅ DNS 威胁防护: 运行中 (自动拦截恶意 C2 与钓鱼域名)
咨询软件用法、功能规范与通知处理建议
针对出现的通知警告或具体功能细节(包过滤、FSEvents、ClamAV、USB防护等),让AI基于内置官方知识库提供权威解答与处置步骤。
• 🚪 拦截原因: 开发服务绑定了
0.0.0.0(全网公开),RoamSwitch已自动阻断外部局域网访问。• ⚙️ 安全处置:
1. 推荐(本地绑定): 使用
npm run dev -- -H 127.0.0.1 启动,仅限本机访问。2. 需局域网共享: 在RoamSwitch『端口审计』中放行3000端口。
• 🔍 事件分析: 局域网内存在恶意设备伪造ARP数据包冒充路由器网关,企图窃听您的网络流量(中间人攻击 / MITM)。
• 🛡️ RoamSwitch自动防护: 触发ARP自动隔离,实施物理隔离(AirGap)以阻断数据嗅探。
• 🛑 后续建议: 切勿重新连接该公共Wi-Fi,请继续在手机热点下安全作业,建议在『日志审计』中查看详情。
• 🔌 推出原因: 为防止未授权数据外泄及恶意BadUSB固件攻击,系统已自动将其卸载。
• ⚙️ 安全登记步骤: 1. 从菜单栏RoamSwitch图标打开『设置』 → 2. 选择『USB存储保护』标签页 → 3. 点击『从已连接设备添加』并选中该U盘 → 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,即便完全没有外部网络也能继续诊断。日志异常检测、篡改检测、已知 CVE 比对均完全在本地完成,因此恰恰是在网络无法使用的这一刻才真正发挥作用。
• 🐛 诱饵文件触发: 14:32:07 检测到
/var/www/decoy_invoice.pdf 被加密,进程 suspicious_enc(PID 8823)已立即冻结并隔离• 🔌 端口监控(Port Anomaly Guard): 近期事件记录中未发现新的自动阻断 — 入侵途径似乎仅为诱饵文件触发的这一起,未发现其他后门端口被开启
• 📜 日志关联(异常检测): 触发前12分钟起
sshd 认证失败激增(检测到频率激增,Z-score 5.2)——可能的入侵途径• 🔒 篡改检测(FIM): 约150处关键路径均未发现篡改——未确认入侵扩散至系统层
• 📦 已知漏洞比对: 已与本地 CVE 映射比对,相关软件包未发现严重已知漏洞
💡 建议操作: 入侵很可能仅限于 Web 根目录范围内。在从备份恢复之前,建议逐一检查该目录下的其他文件。
关于 MCP 集成
Q. 真的完全不与外部通信吗?
A. 是的。MCP 服务器是由 AI 客户端通过标准输入输出(stdio)直接启动的本地进程,完全不包含任何网络通信代码。诊断结果也是在这台 Mac / Linux 上即时计算得出的。
Q. 非 Pro 版也能使用吗?
A. 可以,免费版也能使用全部工具。不过各项自动防护的实际生效情况还取决于 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 Hook 阻止了工具执行。请打开 ~/.gemini/config/plugins/.../hooks.json 并将其设置为 "enabled": false。
Q. 网络被完全阻断时是否仍可进行AI查询?
A. 如果您通过OpenCode等工具搭配Ollama或LM Studio使用本地模型,所有处理均在 Mac / Linux 本地完成,因此即使在RoamSwitch实施网络紧急物理隔离期间,也能完全离线正常查询。若使用的是云端大模型(如Claude API),请在切换至手机热点等安全网络后再进行查询。