AI 集成 (MCP)

直接向 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。

🛠️

本地服务器与数据库端口暴露审计

Web 开发 / Docker

启动 Next.js、Vite、Python、Docker、Redis 等服务时,让 AI 审计是否存在意外绑定至 0.0.0.0 (全公开) 而暴露给局域网的危险端口。

💬 AI 提示词示例
请审计我 Mac 当前运行的本地开发服务器和容器的外部暴露端口。有没有绑定到 0.0.0.0 并暴露在局域网中的危险端口?
⚡ Tool: get_exposed_ports
检测到的端口审计结果:
• 🚨 端口 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

在咖啡厅或酒店连接公共 Wi-Fi 后,让 AI 进行全面的安全体检,确认防火墙、隐身模式和 ARP 防护是否已正常启用。

💬 AI 提示词示例
我刚连上了咖啡厅的公共 Wi-Fi。请进行全面的安全性诊断,评估在这里办公是否安全,并告知防火墙和 ARP 欺骗防护的状态。
⚡ Tools: get_security_report, get_guard_status
Mac 安全综合体检结果:
• 🛡️ 综合得分: 88 / 100 (Grade: A-)
• 📡 网络判定: 不信任网络(外出模式 / 数据包过滤已生效)
• ✅ 防火墙 / 隐身模式: 已开启(阻断外部探测数据包)
• ✅ ARP 欺骗自动隔离: 已开启(检测到流量劫持时自动隔离)
• ⚠️ 改进建议: FileVault 磁盘加密未启用,建议在“系统设置”中开启。
✉️

可疑邮件与聊天链接的安全性检测

防钓鱼欺诈 / URL 诊断

收到冒充合作方的可疑邮件或 Slack/Discord 私信中的 URL 时,完全在设备端进行本地解析(Zero Telemetry),不将链接泄露给外部服务器。

💬 AI 提示词示例
合作方发来的邮件里有一个链接“https://apple.com.login-auth-verify.xyz/account”。在我点击之前,请诊断其安全性。
⚡ Tool: audit_url_safety
URL 安全诊断报告 (完全本地解析):
• 🚨 风险判定: Dangerous (危险 / 安全得分: 8/100)
• ❌ 伪装知名品牌子域名: 伪装为 apple.com,实际主域名为 login-auth-verify.xyz
• ❌ 高危 TLD: .xyz 是钓鱼欺诈活动中高频使用的一次性域名后缀。
• 🔒 Zero Telemetry: 本地计算,未向外部服务器发送任何查询数据。
• 🛑 处置建议: 切勿点击该链接,请立即删除邮件并上报。
🤖

编码过程中的自主安全防护 (Safeguard)

AI Agent 协作

让 Claude Code 或 Antigravity 部署后端或运行测试套件时,自主调用 MCP 工具作为防护栏,确保未意外开放多余端口。

💬 AI 提示词示例
请构建项目的后端 API 和测试环境。完成后,使用 RoamSwitch MCP 确认没有意外暴露外部端口,再向我报告完成。
⚡ Tool: get_exposed_ports
AI Agent 自主执行摘要:
1. 已在 8080 端口启动 Fastify 后端服务。
2. 🔍 RoamSwitch MCP 验证: 执行 get_exposed_ports 确认服务严格绑定在 127.0.0.1:8080 (仅 localhost),无局域网暴露。
3. 环境安全已确认,正在继续执行集成测试。
📋

工作开始前检查与公司提交报告生成

定期合规审计 / 报告生成

为满足企业安全合规要求、向 IT 部门汇报或个人日常自检,一键生成结构清晰的 Markdown 格式 Mac 安全体检报告。

💬 AI 提示词示例
请输出一份 Markdown 格式的当前 Mac 安全状态摘要报告,方便我附在日报或提交给 IT 部门,并列出改进项清单。
⚡ Tools: get_security_report, get_guard_status
生成的 Markdown 报告示例:
## 🛡️ 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 切换等各项实时防线是否正常运行。

💬 AI 提示词示例
USB 存储防护、蓝牙监测、DNS 威胁防护、下载保护等各项防护功能是否都在正常运行?
⚡ Tool: get_guard_status
RoamSwitch 防护状态汇总:
• 🛡️ 当前保护级别: Balanced (标准防护模式)
• ✅ USB 存储防护: 运行中 (插入未登记 USB 时告警/阻断)
• ✅ 蓝牙防护: 运行中 (监视未配对设备的靠近)
• ✅ Web/邮件下载保护: 运行中 (自动使用 ClamAV 扫描带隔离属性的文件)
• ✅ DNS 威胁防护: 运行中 (自动拦截恶意 C2 与钓鱼域名)
💡

咨询软件用法、功能规范与通知处理建议

功能详解 / 警报处置

针对出现的通知警告或具体功能细节(包过滤、FSEvents、ClamAV、USB防护等),让AI基于内置官方知识库提供权威解答与处置步骤。

💬 模式A: 开发端口自动拦截与安全配置咨询(Web开发・Next.js)
RoamSwitch提示『🚪 未知监听端口(3000)已自动拦截』。这是我的Next.js开发服务器,如何安全地在本地运行?
⚡ Tool: get_app_help / Resource: roamswitch://docs/settings-guide
来自RoamSwitch官方知识库的解答:
• 🚪 拦截原因: 开发服务绑定了 0.0.0.0(全网公开),RoamSwitch已自动阻断外部局域网访问。
• ⚙️ 安全处置:
  1. 推荐(本地绑定): 使用 npm run dev -- -H 127.0.0.1 启动,仅限本机访问。
  2. 需局域网共享: 在RoamSwitch『端口审计』中放行3000端口。
💬 模式B: 紧急隔离后的安全确认与事件分析(切换至热点后)
咖啡厅内RoamSwitch因『🚨 检测到ARP欺骗』紧急切断了网络,我已切换到手机热点。刚才的Wi-Fi发生了什么,触发了什么防护,后续应如何处理?
⚡ Tool: get_app_help / Resource: roamswitch://docs/alerts-and-messages
来自RoamSwitch官方知识库的解答:
• 🔍 事件分析: 局域网内存在恶意设备伪造ARP数据包冒充路由器网关,企图窃听您的网络流量(中间人攻击 / MITM)。
• 🛡️ RoamSwitch自动防护: 触发ARP自动隔离,实施物理隔离(AirGap)以阻断数据嗅探。
• 🛑 后续建议: 切勿重新连接该公共Wi-Fi,请继续在手机热点下安全作业,建议在『日志审计』中查看详情。
💬 模式C: USB自动推出与安全白名单登记咨询
RoamSwitch提示『🔌 已推出未注册的USB存储』弹出了U盘。这是我自己的安全U盘,如何将其登记为只读模式并正常使用?
⚡ Tool: get_app_help / Resource: roamswitch://docs/settings-guide
来自RoamSwitch官方知识库的解答:
• 🔌 推出原因: 为防止未授权数据外泄及恶意BadUSB固件攻击,系统已自动将其卸载。
• ⚙️ 安全登记步骤: 1. 从菜单栏RoamSwitch图标打开『设置』 → 2. 选择『USB存储保护』标签页 → 3. 点击『从已连接设备添加』并选中该U盘 → 4. 将权限设为『只读(推荐)』并保存,下次连接即可安全挂载。
💬 模式D: 辅助程序未连接与后台守护进程恢复咨询
菜单栏显示『⚠️ 辅助程序未连接』,我该如何恢复?
⚡ Tool: get_app_help / Resource: roamswitch://docs/troubleshooting
来自RoamSwitch官方知识库的解答:
• ⚠️ 原因分析: 与负责数据包过滤(PF)控制的特权守护进程 RoamSwitchHelper 之间的XPC通信暂时中断。
• 🛠️ 恢复步骤:
  1. 打开终端并运行以下命令重启辅助程序:
    sudo killall RoamSwitchHelper
  2. 重启RoamSwitch应用程序。
  3. 在macOS『系统设置』>『通用』>『登录项与扩展』中确认已启用 RoamSwitchHelper
🧯

Air-Gap 触发后,使用本地 LLM + MCP 进行离线诊断

事件响应 / 本地 LLM 诊断

当检测到勒索软件等触发 Air-Gap(紧急网络隔离)时,Claude Desktop 等云端 AI 的通信也会同时被切断。但 RoamSwitch 的 MCP 服务器仅通过本地进程通信运行,只要搭配 Ollama 等本地 LLM,即便完全没有外部网络也能继续诊断。日志异常检测、篡改检测、已知 CVE 比对均完全在本地完成,因此恰恰是在网络无法使用的这一刻才真正发挥作用。

💬 AI 提示词示例
RoamSwitch 的勒索软件防护已触发,主机进入 Air-Gap(紧急网络隔离)状态。虽然无法使用网络,但请诊断当前状况:发生时间、涉及的进程和文件、系统文件是否被篡改、是否有相关可疑日志、是否有迹象表明利用了已知漏洞。
⚡ Tools: get_canary_status, get_port_anomaly_incidents, audit_security_logs, get_quarantine_status (Linux Server: get_ebpf_incidents / Mac: get_runtime_threat_status)
离线诊断结果(零网络活动):
• 🐛 诱饵文件触发: 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),请在切换至手机热点等安全网络后再进行查询。