mcpField
V
VPS Guardian

VPS Guardian

本地服务
github.com/murzirius云与基础设施02 周前更新

关于 VPS Guardian

VPS Guardian 是供 AI Agent 管理 Linux VPS 的 MCP 服务,通过结构化且经过安全检查的操作取代通用 Shell。它支持有限范围的诊断、变更预览和受控修改,并提供基于 SSH 的访问及可选策略控制。

主要功能

  1. 01具名的结构化服务器操作
  2. 02有限范围的诊断与工作负载检查
  3. 03修改前预览变更
  4. 04修改时要求精确确认
  5. 05供 MCP 客户端使用的 SSH 标准输入输出启动器
  6. 06可选访问策略与 Gateway 账户

适用场景

  1. 01检查 Linux VPS 上的工作负载
  2. 02收集范围受限的服务器诊断信息
  3. 03预览并确认配置变更
  4. 04通过 SSH 向 Agent 提供受限项目访问

MCP 相关

Python MCP 服务运行在 VPS 上,向 AI 客户端提供结构化工具和只读资源。客户端电脑上的 npm 启动器通过 SSH 建立标准输入输出连接;项目不提供通用 Shell 工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"murzirius-vps-guardian": {
"command": "npx",
"args": [
"-y",
"@murzirius/vps-guardian-mcp"
]
}
}
}
启动命令npx -y @murzirius/vps-guardian-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@murzirius/vps-guardian-mcp0.37.0
pypivps-guardian-mcp0.37.0

工具

152

收录的工具列表 · 更新于 2 周前

此工具无需参数。

详细介绍

VPS Guardian MCP

CI npm PyPI License: MIT

VPS Guardian 是一款面向管理 Linux VPS 的 AI Agent 的安全 Model Context Protocol 服务。它通过具名、结构化且经过安全检查的操作,取代不受限制的“运行此命令并粘贴结果”循环。

Agent 可以检查工作负载、收集有限的诊断信息、预览变更的影响,并针对修改操作请求精确确认。该服务绝不会提供通用 Shell 工具。

探索项目:功能 · Agent 工作流 · 安全模型 · 工具目录 · 发行说明

快速开始

VPS Guardian 包含两部分:

  • Python MCP 服务运行在 VPS 上。
  • 小型 npm 启动器运行在安装了 Codex、Claude、Cursor 或其他 AI 客户端的计算机上。它会建立 SSH stdio 连接,且绝不会上传私钥。
所需条件
  • 一台可通过 SSH 访问的 Linux VPS。
  • 该 VPS 的 SSH 密钥。
  • VPS 上安装 Python 3.10+,AI 客户端所在计算机上安装 Node.js 16+。
  • 已验证的 SSH 主机密钥。启动器有意不支持基于密码的 SSH。
可选:本地 MCP 访问面板

英文界面面板运行在你的计算机上,而不是 VPS 或本项目的网站上。主界面用于管理 Agent 权限:暂停/恢复 MCP 调用、设置安全模式上限、允许单个工具以及设置项目根目录。折叠的服务概览提供可选的只读监控。npm 包仍是 MCP 启动器;面板随 Python 包提供。

在你的计算机上安装 uv 后:

uvx --from vps-guardian-mcp==0.37.0 vps-guardian-panel

如果没有 uv,请在本地虚拟环境中安装。Windows PowerShell:

py -m venv .guardian-panel
.\.guardian-panel\Scripts\python.exe -m pip install vps-guardian-mcp==0.37.0
.\.guardian-panel\Scripts\python.exe -m src.local_panel

Linux/macOS:

python3 -m venv .guardian-panel
.guardian-panel/bin/pip install vps-guardian-mcp==0.37.0
.guardian-panel/bin/vps-guardian-panel

浏览器会自动打开。输入 VPS 地址、SSH 用户名、端口和本地密钥的路径,而不是密钥内容。将密钥字段留空即可使用 ssh-agent;请预先将加密密钥加载到该 Agent 中。高级设置可填写 VPS 上的 Guardian 可执行文件路径,以及可选的本地 known_hosts 文件。访问管理要求 VPS 上的 Guardian 版本为 0.30.0+;Projects 和 Limits 要求 0.31.0+;Operations 要求 0.32.0+,并且需要同一安装中的相邻 vps-guardian-access 可执行文件。较旧但兼容的安装只能显示监控,并会提示升级。不会安装服务器端 Web 服务。

升级 VPS 上现有的 pip 安装:

/opt/vps-guardian-mcp/.venv/bin/pip install --upgrade vps-guardian-mcp==0.37.0

升级 Agent 使用的其他 Guardian 环境,然后重新连接所有 Agent 一次,以便它们启动支持策略的服务。之后,对权限的更改会影响这些会话中的新调用,无需重启。正在执行的操作不会取消,缓存的客户端工具列表可能仍会显示已禁用的工具;对这些工具的调用会被拒绝。

使用应用权限在 VPS 上保存共享的、按 SSH 用户划分的策略,路径为 ~/.local/share/vps-guardian-access/policy.json。连接设置仅保存在本地内存中,但访问策略会在面板/服务重启后继续保留。重新加载策略会获取当前服务器值;如果有并发编辑,系统会拒绝更改,而不会覆盖其他操作员的修改。没有策略时,现有启动设置继续生效。无效或不安全的已存储策略会默认拒绝并暂停正常的 MCP 访问;get_safety_status 仍可用于恢复。文件所有权、权限或符号链接不安全时,操作员必须手动修复。

  • **允许 Agent 访问:**暂停/恢复普通 MCP 工具和资源入口。独立的操作员辅助程序仍可通过 SSH 访问,以便恢复访问。
  • **最高安全模式:**实际生效的模式取 Agent 启动模式与此上限中更严格的一项。将模式设为 controlled,无法提升以 read-only 模式启动的客户端。确认令牌使用现有的同一调用方机制,并非独立的人工审批。
  • **允许的工具:**允许所有已安装/未来的工具;也可以取消勾选该选项并选择明确的允许列表。明确的允许列表默认拒绝新工具。get_safety_status 无法禁用。只读模式仍可创建记录;如果还需要阻止这些入口,请使用工具权限。
  • **项目根目录:**继承各进程的 VPS_GUARDIAN_PROJECT_ROOTS,或将其替换为最多 16 个 VPS 绝对目录路径,每行一个。自定义列表为空时会阻止项目工作区。文件系统根目录和符号链接根目录会被拒绝。此设置控制项目工具,不影响单独固定的配置文件目录白名单。

操作员辅助程序不会注册为普通 Agent 工具。服务器上的工具和三个只读资源会强制执行访问限制。策略适用于同一 SSH 用户下已升级的 Guardian 进程,不适用于经过单独身份验证的 Agent。拥有独立 root SSH 访问权限、同一账户 Shell 访问权限,或更改 Guardian 代码权限的 Agent,可以绕过此 MCP 边界。如需更强的隔离,请使用受限的专用 OS 账户;请勿将此面板视为沙箱或独立审批服务。

Agent Gateway(可选,Linux)

Gateway 部分会创建一个独立的、受密码锁定的 Unix 账户,并且只接受该 Agent 的 Ed25519 公钥。由 root 所有的 authorized_keys 文件会强制运行 vps-guardian-gateway serve <agent-id>,并为该密钥禁用 SSH 转发和 PTY 访问。Guardian 会在每次工具调用时检查 /etc/vps-guardian/gateway/ 下由 root 所有的策略,包括过期和撤销状态。面板仍像以前一样在本地运行;Gateway 不会在 VPS 上新增** Web 监听器或常驻守护进程**。

两台设备均需使用 Guardian 0.34.0+,并准备一个独立的管理员 SSH 账户,能够以 root 身份运行操作员辅助程序。VPS 软件包及其 Python 解释器必须由 root 所有,不能被组或其他用户写入,并且新账户可读取和执行。在 /root 下创建的 venv 无法使用:请采用受保护的安装路径,例如 /opt/vps-guardian-mcp/.venv。打开 Gateway,输入简短的 Agent 名称,粘贴其 .pub 密钥,选择现有项目目录、时长(1–168 小时)和以下三个预设之一:

  • **观察者:**只读诊断和项目读取。
  • **项目编辑者:**项目搜索,以及 controlled 模式下的暂存、检查和应用补丁工具。Agent 只能修改专用 Unix 账户有权限修改的文件。受控模式令牌会在同一 Agent 会话中生成;它们不等同于独立的人工审批。
  • **任务执行者:**只读生产环境访问权限和私有提案工作区。只有独立的 root 操作员可以审核、批准和应用快照。请参阅下文的 Mission Control。

创建后,使用返回的 vg_<name> SSH 用户名及其专用私钥,通过常规 npm 启动器配置该 Agent 的 MCP 客户端。客户端提供的远程命令和 --mode 无法覆盖 SSH 强制命令或由 root 所有的权限上限。不要让 Agent 的运行环境接触管理员密钥。项目根目录和工具允许列表会缩小 MCP 的操作范围,但 Linux 文件权限才是硬性边界:只授予专用账户所需的文件权限,绝不要授予 sudo、宽泛的特权组权限或 Docker 套接字访问权限。请确认所选目录确实允许该账户读取或写入;Gateway 不会更改项目所有权或 ACL。

例如,已注册的 deploy-bot 会使用 --user vg_deploy_bot --key <AGENT_PRIVATE_KEY>,并搭配常规的 --host 选项。连接时只会公布该预设对应的 6、14 或 13 个工具;这些工具的权限会实时重新检查。最多可注册 32 个账户,包括已过期或已撤销的记录;系统不会自动删除或重新激活账户。Gateway 账户与管理员账户的访问权限、限制、历史记录和状态彼此独立。root 用户的访问暂停、根目录和限制不会自动应用到这些账户;若要停用 Gateway Agent,请使用 Gateway 撤销功能。账户私有的本地审计文件不是防篡改的集中式审计日志。

**SSH 兼容性:**服务器必须允许锁定账户使用公钥登录(在 Debian/Ubuntu 上通常设置为 UsePAM yes),并使用账户的 .ssh/authorized_keys。自定义的 AllowUsers、DenyUsers、AuthorizedKeysCommand、受信任的 SSH CA 或 ForceCommand 设置可能会阻止或覆盖此配置;管理员必须检查这些设置。不要为这些账户添加其他不受限制的密钥或证书。Gateway 不会重写或重启 sshd。

原子化项目写入会保留原文件的所有者和组。仅有目录写入权限可能不足以修改属于其他所有者的现有文件:内核可能会拒绝保留其所有权。请为编辑者账户使用所有权合适的文件或单独的工作树;Guardian 不会悄悄取消文件所有权以强行写入。Gateway 是受限的 MCP 入口,不是容器,也不是文件系统沙箱。 撤销会立即阻止新的常规 MCP 调用,并移除该账户用于新 SSH 登录的密钥。它不会取消已在运行的操作,也不会删除 Unix 账户及其私有工作内容/历史记录;如有需要,请分别检查这些内容。过期同样会拒绝后续工具调用和未来的 Gateway 启动。get_safety_status 仍可用于获取恢复元数据。如果 Agent 还持有其他独立的 SSH 凭据,Gateway 无法限制该凭据。没有公开的 HTTP 端点或通用 Shell 工具。只有通过单独的 Mission worker 工作流,才能进行独立审批;这不会更改 Project 编辑器令牌。

Mission Control:分配的任务与独立证据

要求 VPS 和你的计算机上安装 Guardian 0.36.0+,使用 Linux、新注册的 Mission worker 身份,以及单独的 root 操作者连接。英文面板在本地运行。Guardian 不会启动大模型、向 AI 服务提供商分发提示词,也不会执行任意项目命令。你必须连接外部 Agent,并要求它检查自己的任务。升级绝不会悄然扩大现有 worker 的工具允许列表。

  1. 升级两个 Python 安装,在 Gateway 中登记一个新的 Mission 工作器,并将其限定在合适的 受 root 保护的项目中(要求如下)。只向 AI 客户端提供该工作器专用的 SSH 密钥。切勿共享运维人员密钥、工作器 Unix 组、sudo 或 Docker 访问权限。
  2. 打开 Mission Control → New mission。输入现有工作器名称、项目目录、目标和 1–8 条验收标准。选择固定的 Python/JSON/TOML 语法检查。两个安装均为 0.37.0+ 时,还可选择必需的 Python unittest、npm test 或 Node syntax 测试胶囊(设置如下)。选择静态检查只会影响匹配的文件;不支持的格式不在检查范围内。任务分配属于私有元数据,并不授予生产环境写入权限。
  3. 要求 Agent 使用 list_assigned_missions 和 get_mission_brief。它可以准备私有工作区并发送简短的进度报告。报告只允许使用 working、blocked 或 needs review;最后一个阶段要求为指定项目提交工作区。现有的受限 Agent Jobs 可以收集只读诊断信息;报告中的 Job ID 未经独立验证。
  4. 点击 Refresh tasks 以确认收到报告。Mission Control 显示期间,面板最多每 30 秒执行一次受限的元数据刷新。关闭运维面板后,报告不会被确认;没有特权后台代理。看板会区分 Queued、Working、Review 和 Results。Hand off 只会将尚未审核的任务重新分配给另一名活跃且范围匹配的工作器。不会转移私有源代码副本和审批,旧报告也会失效。如果要撤销旧身份的所有未来访问权限,需另行撤销该身份。
  5. 选择任务并点击 Import submitted workspace。root 运维人员会创建不可变快照。任务认领的工作区不能通过独立审核流程导入,以绕过任务检查。点击 Run next snapshot check,直到所有选定的匹配文件均通过检查。每个请求都会在全新的固定解析器进程中检查一个文件:使用 Python AST、严格的 JSON 或 TOML 解析,绝不执行或导入候选内容。解析器需要 Linux 和至少 192 MiB 可用内存;其地址空间上限为 128 MiB,CPU 时间上限为两秒,墙钟超时为三秒。TOML 解析要求服务器使用 Python 3.11+。不会回退到任意 shell 命令或主机执行。
  6. 如果选择了隔离测试,点击 Run tests,直到每项选定检查均通过。Not run、失败、中断的运行和过期证据都会阻止审批。点击 Open exact review,检查每个文件和差异,然后分别点击 Approve snapshot 和 Apply to production。这是两个独立操作。只有指定摘要的检查全部通过后,才能审批/应用;还会根据当前复制的输入和固定的本地镜像重新验证所选测试胶囊的证据。Return for revisions 会明确撤销尚未应用的已批准审核;Agent 必须创建新的工作区。Cancel mission 会阻止之后关联的审批/应用,但不会回滚操作,也不会取消正在进行的工作。已应用或状态不确定的工作无法通过这些操作重置或重放。
  7. 应用后,使用 Verify live files。Guardian 会根据绑定的快照检查每个预期文件的哈希值或删除状态。然后自行检查验收标准,并选择 Confirm acceptance and finish。完成操作会再次执行全新的哈希检查。Agent 无法将任务标记为已完成。哈希值和语法检查不能证明应用行为、测试、服务或支付处理正常。 **恢复与 Token 使用:**修订版本会拒绝过时的操作员请求;get_mission_brief(after_revision=...) 会返回简短的未变更答复,否则只返回当前目标/状态、关联 ID 和证据摘要,而不会返回完整时间线。被中断的生产写入仍处于不确定状态,绝不会自动重放。任务独立于 AI 的聊天记录;它们不会复制或发布该聊天记录。

**私有存储与限制:**根账本 /etc/vps-guardian/gateway/tasks/ 的权限为 0700,记录的权限为 0600;每个工作进程的分配目录由 root 所有,权限为 0750,其中的文件权限为 0640,仅该工作进程的私有 Unix 组和 root 可读。工作进程无法修改这些分配内容。它的不可信报告存放在其自己的私有目录 .local/share/vps-guardian-mission-progress/ 中。任务记录最多 64 条;每个身份最多有八项活动分配;每条元数据记录最多 96 KB;时间线最多包含 32 条简短记录。已完成的记录也计入固定容量;达到上限前,请通过管理员维护工作流在私有环境中归档。Guardian 永远不会删除任务,也不会悄悄扩充存储空间。有效期最长为七天,且绝不会超过分配身份的有效期。Root 操作会串行处理注册、撤销、任务状态转换和生产审核。分配导出失败后,可通过 Refresh 修复,无需重复生产工作。密钥脱敏只能尽力而为;切勿在目标或报告中放入密钥。

独立工作区仍可用于直接人工审核,不会执行按任务选择的解析器检查。只有关联任务才会增加这些关卡;这不会限制独立的 root SSH 或其他特权凭据。任务工作进程可以使用受限的只读 Agent Job 步骤,但无法通过该配置文件执行恢复重启。

隔离任务测试(0.37.0+)

**设置:**在你的计算机和 VPS 上升级 Guardian,重新连接本地面板,并使用单独的 root 操作员连接。现有的 0.36.0 任务工作进程无需安装其他工具:新的测试操作仅限操作员使用。在 VPS 上,必须已安装 Docker,并配置本地 Unix 守护进程。管理员必须明确预加载所需的可信镜像;Guardian 绝不会安装 Docker、拉取镜像、下载依赖项或授予工作进程 Docker/sudo 访问权限。使用默认设置时,仅预加载所需的运行时:

docker pull python:3.12-alpine  # Python unittest
docker pull node:20-alpine     # npm test / Node syntax

操作员辅助程序可在服务端启动环境中使用 VPS_GUARDIAN_CAPSULE_PYTHON_IMAGE / VPS_GUARDIAN_CAPSULE_NODE_IMAGE,指定已在本地构建且可信、并已安装项目依赖项的镜像。这些不是客户端 Agent 的环境设置。每次检查都会将镜像固定到其不可变的本地 ID;更改标签指向的镜像会使证据失效。默认镜像不包含你的第三方依赖项。缺少依赖项会导致失败,不会自动安装依赖项,也不会回退到宿主机执行。面板不会替你构建或配置自定义镜像。

使用:创建新任务时,选择所需的隔离检查。现有分配会保留其原始要求。导入提交的审核结果,并在每次运行测试请求中运行一项所选检查。Python 会发现 tests/ 下的 unittest 用例;发现的用例数为零或所有用例均被跳过时,测试不能通过。npm 会离线执行复制的 package.json 测试脚本;退出代码为零只能证明该脚本报告成功,并不能说明它运行了多少条断言。Node 会对已审核且未删除的 JavaScript 候选文件执行语法检查。通过退回修改和新工作区来修正未通过的提案。运行时不可用时,可修复并重试,无需更改已批准的字节内容。测试详情可按需展开;输出上限为 4 KiB,并尽力进行脱敏。Agent 分配信息流仅包含精简的证据状态,不包含操作员测试日志。 **隔离与限制:**每个 Guardian 状态/SSH 用户一次只能运行一个容器;容器超时为 30 秒;RAM 限制为 128 MiB,且不额外允许使用交换空间;CPU 限制为半个核心;最多 64 个 PID;文件系统为只读,并挂载源代码副本;无网络、无任何功能、禁止权限提升;UID/GID 为 65534,并提供 16 MiB 临时文件系统。不会挂载或传入生产目录树、Docker 套接字、生产环境、数据库或凭据。私有的 0700 主机父目录可保护临时副本,使其他本地非 root 账户无法访问。源输入必须是受 root 保护、仅有一个硬链接的常规 UTF-8 文件;符合条件的符号链接、可写输入、二进制输入以及识别出的内嵌密钥都会导致运行被拒绝。隐藏/敏感路径、.git、虚拟环境、node_modules、构建输出、日志和数据库会被排除,不会复制。检测仅尽力而为:只能使用不含密钥的源代码/测试目录和可信映像。容器是 Linux 隔离边界,无法防范内核/Docker 漏洞。

至少需要 384 MiB 可用 RAM、64 MiB 可用临时磁盘空间,并且必须启用操作员容器限制。复制上限为 250 个文件/8 MiB、500 个扫描目录/2,000 个条目,且每次扫描最多十秒。面板允许最多 90 秒用于设置、复制、运行一次测试和重新验证证据。如果辅助程序被中断,请先刷新再重试:记录为 运行中 的状态不代表通过,Guardian 也不会声称已清理被中断的容器。绝不要重试结果不明确的生产写入操作。

**证据:**哈希值会绑定根审查、所有符合条件的已复制基线/候选文件、固定版本的映像和隔离方案。成功运行后以及批准/应用前,输入都会再次检查;如果内容发生变化,旧的通过结果将失效,且操作会被阻止。这只涵盖经过筛选的测试目录,不包括已排除文件或生产集成。它无法证明线上服务/支付行为,也不提供自动部署、重启或回滚功能。先前已批准的独立审查和特权直接 SSH 操作不受这些任务限制约束。

私有工作区与操作员审批

扩展工作区工具要求 VPS 和你的计算机运行 Linux 和 Guardian 0.36.0+,使用专用的 Mission worker Gateway 账户,并为本地面板配备单独的管理员密钥。这是一个针对单个已连接 VPS的有界工作流,并非自主 AI,也不是完整的文件系统/容器沙箱。外部 Agent 负责准备更改;Guardian 不会启动大模型,也不会执行候选代码。

  1. 升级两个 Python 安装并重新连接。在 Gateway 中,使用 Mission worker 权限和范围严格限定的现有项目目录,登记一个新的 Agent。不要在其 MCP 客户端中重复使用管理员密钥。现有 Editor 账户的行为保持不变。此前登记的 Mission worker 保留其原有的精确允许列表;升级不会悄悄授予额外工具。要使用这些工具,请使用新的名称和密钥登记新 worker,并在旧身份完成工作后撤销它。
  2. 选择 worker 可以读取但不能写入的生产文件。每个目录层级都必须由 root 所有,且不能允许组或其他用户写入;现有文件也必须由 root 所有、不能允许组或其他用户写入,且必须是单链接普通文件,并且不能设置 setuid/setgid 位。Guardian 会在创建、导入、审批和应用时验证这些条件。它不会替你更改项目所有权、ACL 或服务配置。Agent 所有的部署和可写的项目上级目录都会被拒绝,不会被悄悄降低安全性;如有需要,请让管理员审核合适的 root 管理副本。切勿向 worker 授予 sudo、Docker 访问权限或其他特权凭据。
  3. 让 Agent 准备工作区,例如 create_mission_workspace(project_path="/srv/example-app", relative_paths=["main.py"], title="Improve application message")。只有选定的文件会复制到私有状态中;这不是完整检出,也不会递归扫描。草稿可以添加选定的现有文件,也可以使用 relative_paths=[],仅从新文件开始。读取会返回有长度限制的片段和 SHA-256 值。小幅编辑可以使用 stage_mission_line_edit 并传入候选文件当前的哈希值;哈希过期时会返回冲突,而不会覆盖另一项编辑。插入内容时,使用 end_line=start_line-1,包括在 EOF 之后一行追加内容。紧凑的行窗口读取只会返回该文件的哈希值,而不是完整清单。完整文件暂存也有大小限制。 新源文件必须有一个已存在且受 root 保护的父目录,且目标路径必须不存在;不会创建目录。删除操作是针对选定现有文件的哈希校验提案;删除新提议的文件只会取消其创建。空文件有效,即使没有差异行,也会明确显示 CREATE/DELETE 操作。在这些草稿操作中,生产文件都不会发生变化。
  4. Agent 提交其工作区。**生产环境仍未发生变化。**提交会冻结常规编辑。重新连接后,list_mission_workspaces 可以在不重新发送源文件的情况下恢复 ID/哈希值。使用 0.34.1+,以便在生产文件发生变化后仍能保留对已复制源文件的读取和列表功能:这些响应会明确说明并未验证实时基线。但这并不表示可以应用过期提案。
  5. 在你的电脑上打开 Mission Control,输入 worker 名称,点击 Find submissions,然后点击 Import for review。操作员会将经过验证的候选字节复制到 root 所有的私有存储中。此后,对 Agent 所有提案的更改无法影响这次审核;重复导入同一工作区会返回原始快照,而不是替换它。要修改已导入的提案,请创建新的工作区。
  6. 检查确切的差异、每个文件的 CREATE/UPDATE/DELETE/UNCHANGED 操作、身份、项目、有效期和快照哈希值。选择 Approve snapshot 或 Reject。仅审批不会写入任何生产文件。被截断的差异或超出审核工作预算的更改行区域无法获批:请将更改拆分为较小的审核。对大型文件末尾附近的小幅编辑仍会保留正确的差异行号。这是独立于 Agent 生成的受控令牌的操作员权限。
  7. 单独选择 Apply to production。Guardian 会重新检查已批准的哈希值、有效的 Agent 身份、有效期、根目录、文件系统保护和实时基线。源文件已更改、创建目标已被占用、访问权限已撤销或已过期时,都会拒绝执行。更新和删除的文件会生成私有且唯一的备份。新文件发布时不会覆盖其他文件,所有者为 root 操作员,权限为不可执行的 0644;不接受自定义权限或所有者。未更改的选定文件不会被重写。应用操作仅可执行一次,并会在写入前持久化声明;中断的工作会变为状态不确定,无法自动重放。准备下一次审核前,请检查实时文件和备份。删除操作的备份会保留文件字节,但不提供自动化的恢复流程来处理所有者、模式或服务。 **边界与存储:**最多 16 个 UTF-8 文件,每个文件 512,000 字节,原文和候选文本各 1,000,000 字节,每个文件最多 10,000 行。单独的 Mission 文件数和总量设置显示在 Limits 中;用户设置和主机保护措施可能会降低这些上限。可用内存少于 512 MiB 或只有一个逻辑 CPU 的受限主机,会将上限限制为 4 个文件 / 每个文件 128,000 字节 / 总计 256,000 字节;可用内存少于 256 MiB 时,上限为 2 个文件 / 64,000 字节 / 总计 128,000 字节。小型 VPS 请求为 2 个文件 / 64,000 字节 / 总计 128,000 字节。现有自定义设置会根据先前的补丁/读取预算迁移,而非使用扩展后的默认值。Operator 和 Gateway 账号仍有各自独立的设置;更改 root 的 Limits 不会配置 worker 的私有设置。

可用内存低于 96 MiB 时,不会启动任何工作区任务。字节读取默认上限为 12 KB,最高为 24 KB。行读取默认上限为 80 行,最高为 200 行 / 24 KB,并会返回一行续读内容;异常长的行需要使用字节读取。行编辑替换文本上限为 24 KB。审查输出上限为 48,000 个 UTF-8 字节,匹配时最多接收 2,000 行(去除相同的首尾部分后);超出任一预算都会阻止批准。每个 worker 最多 8 个私有工作区、32 条 root 审查记录,生命周期为自工作区创建起 24 小时。Root 操作会串行执行。不包含新建目录、二进制文件、命令执行、语法/测试执行、重启服务或自动部署。应用多个文件时,无法保证跨文件的原子性;发生部分应用或结果不确定时,绝不会声称已回滚。

Worker 负载存放在其 .local/share/vps-guardian-missions/ 下;快照存放在仅 root 可访问的 /etc/vps-guardian/gateway/reviews/ 中(目录权限为 0700,记录权限为 0600)。创建工作区时会清理过期的 worker 记录。Refresh reviews 会清理过期的 root 记录,但不清理结果不确定的记录以及关联到仍存续任务的审查;如果任务记录文件缺失或损坏,其快照也会保留,以便手动检查。保留记录不会延长批准/应用过期快照的权限。这样,仍存续的任务可以检查/验证已应用的审查,或撤回已过期但尚未应用的审查,然后再准备新的工作区。备份不会自动删除;适当时请另行归档。无需常驻运行的 worker,也无需增加端口。

隐藏/敏感路径、识别出的行内密钥、符号链接、硬链接、特殊文件、系统/账号路径以及 Guardian 的安装目录均不包含在内。密钥检测无法保证万无一失;仅对可能向 Agent 和操作员展示的源代码使用此工作流。面板仅通过经认证的环回连接显示源代码差异,并采用安全的文本渲染方式。请勿向 Agent 透露私有面板 URL 和管理员凭据。Root SSH、遭入侵的操作员设备、其他特权凭据或操作系统漏洞利用均不在此安全边界之内。

Projects 和实时 Limits

Access、Projects 和 Limits 部分要求在你的计算机上安装当前版本的 Python 包。Projects 和 Limits 还要求 VPS 上的 Guardian 版本为 0.31.0+。0.30.0 服务器仍可管理 Access,但无法执行这些新限制。请升级 Agent 使用的所有服务器环境并重新连接一次;之后更改已保存的限制无需再次重启。 在 Projects 中,单击 Find projects,即可在当前根目录内进行有界元数据扫描(最多 1,000 个条目、100 个目录、50 个项目,协作式截止时间为 2 秒)。选择一个项目,或输入 VPS 绝对路径,然后单击 Inspect metadata。面板会显示顶层文件/目录的元数据、操作系统可读性,以及常见项目工具的策略判定;不会读取源代码、调用 Git 或执行项目代码。链接和敏感/隐藏名称会被排除。找不到的项目可能位于根目录之外、缺少可识别的标记,或超出扫描预算。继承根目录时,辅助程序的启动默认值可能与 Agent 的环境不同;如需共享边界,请使用明确托管的根目录。

Use as the only project root 只会在 Access 中准备草稿。请检查并单击 Apply permissions,以该单个项目替换当前根目录。仅浏览绝不会授予或更改 Agent 访问权限。策略允许并不保证 Agent 的启动模式、根目录或操作系统权限允许某项操作。

在 Limits 中,选择 Auto、Small VPS、Standard 或 Custom,然后单击 Apply limits。这些值会保存在与 limits.json 相同的私有操作员目录中,并与 policy.json 分开存储。修订版本检查会拒绝并发编辑。Auto 和 Standard 目前请求相同的常规预算;两者都会保留自动主机保护机制。Small VPS 请求更小的读取/搜索预算、单文件补丁,且不启用 Test Capsules。Custom 仅接受显示的整数范围;不能关闭保护机制或超出硬性上限。Reload live limits 会获取新的服务器快照;若要丢弃本地草稿,它会先询问。

表格区分 Requested 值与 Effective on VPS 值。橙色的有效值表示已被主机保护机制调低。已应用的设置(而非未保存的草稿)决定有效限制。可用内存低于 512 MiB 或逻辑 CPU 少于 1 个时,多个预算会降低;低于 384 MiB 时会禁用 Capsule;低于 256 MiB 时会施加额外的关键负载限制。这些是协作式的单次操作预算,不是全局 CPU/RAM 配额或操作系统沙箱。它们不会取消已在运行的工作。同一 SSH 用户下的每个升级进程都会为后续操作读取共享设置。无效/不安全的限制会采用保守的 Small VPS 默认值,并显示错误;不安全的所有权/权限或链接可能需要手动修复。

可编辑的预算涵盖项目文件读取(在主机保护机制允许时,最多 300,000 字节)、MCP 工具/资源 JSON、HTTP 诊断正文、目录条目、日志行、代码搜索文件/输入预算、项目补丁文件/暂存文本预算、Mission 工作区文件数/总量预算、配置 ChangeSet 文件/文本预算、Agent Job 检查并发数(0 表示禁用检查),以及 Test Capsules(0 表示禁用,1 表示允许)。现有更严格的操作专用限制仍然适用。Capsule 的 RAM/CPU/超时/输出限制保持固定,不可编辑。资源响应限制适用于每份 JSON 文档;MCP 传输编码以及文本/结构化内容的重复会增加开销。较大的字段会被省略,并附上 response_truncated 和 omitted_fields,同时尽可能保留较小的状态/ID/令牌。**变更操作已经返回:不要仅为获取被省略的输出而重复操作。**请改为请求范围更窄的读取或状态信息。

缓存的项目补丁会在预览、暂存、测试和应用前重新检查当前根目录及资源限制。已撤销授权或超出预算的候选补丁必须替换为获准的更小补丁。配置 ChangeSet 也会在应用前重新检查实时限制。

共享操作与重新连接

操作要求 VPS 和你的电脑都运行 Guardian 0.32.1 或更高版本。英文面板显示最新的 25 个项目补丁/ChangeSet,以及最多 25 个 Agent Job,并提供搜索、状态筛选、文件指纹和有界事件时间线。点击记录可查看元数据。刷新为手动操作,或在标签页打开时每 30 秒自动刷新一次;刷新使用单独的短期运维助手,即使 Agent 访问已暂停也可使用。此视图不会执行、批准、取消或重试更改。VPS 上不会额外运行始终在线的工作进程。

Agent 使用 list_operations(limit=10) 和 get_operation(operation_id="...") 获取相同的元数据。next_before 是用于获取更早草稿/历史页面的不透明游标;将其作为 before 传回。Job 列表是单独限制数量的最新快照,不属于该游标。仍适用常规 MCP 工具权限;人工运维人员使用的助手是独立的。历史记录按 SSH 用户划分,而非按单个 Agent 或当前项目根目录划分:获准在该账户下使用这些历史工具的所有人都能查看操作元数据。

暂存的项目补丁和配置 ChangeSet 现在会持久化到私有 SQLite 存储中的 ~/.local/share/vps-guardian-access/operations/。草稿在 MCP/面板断开重连后仍会保留 24 小时,现有活动上限仍为 24 个补丁/32 个 ChangeSet。活动草稿不会被静默逐出;存储空间已满时,必须完成允许的草稿或等待其过期。每个负载上限为 9 MB,总计上限为 32 MB;SQLite 数据库上限为 48 MiB。已完成/过期的源负载会被删除,其元数据最多保留 30 天 / 200 条记录。保留策略在收到请求时执行,不通过后台清理守护进程执行。活动候选源文件/原始源文件可能包含机密:文件采用私有权限,但未加密,必须通过 SSH 账户和磁盘备份加以保护。面板/历史记录响应绝不包含源文件、原始命令输出或确认令牌。机密信息脱敏尽力而为;请勿在标题和路径中包含机密信息。

重连后,再次预览相同的暂存 ID,以获取新的会话级确认令牌,然后使用现有工具应用更改。系统会重新检查当前模式、根目录、预算和实时文件指纹;持久化不会授予访问权限,也不会批准写入。已认领的应用/检查操作具有 120 秒租约。若操作超过租约且未存储结果,历史记录会将其标记为状态不确定,丢弃候选内容且绝不重放。准备替代方案前,请检查实时文件/服务。此历史记录不是事务性文件系统日志,也不保证自动回滚。

新的 Agent Job 使用相同的固定私有操作目录,与 VPS_GUARDIAN_STATE_DIR 无关;其现有租约、Job TTL 和 100 条记录上限保持不变。其数据库上限为 8 MiB。**升级说明:**此前版本将 Job 保存在旧状态目录中,草稿则仅保存在 RAM 中。旧 Job 数据库保持原样,不会自动导入共享存储;升级前请完成重要的旧 Job。旧进程退出后,旧的内存草稿无法恢复。请升级 Agent 使用的所有服务端环境,并重新连接一次。

必须验证 SSH 主机密钥。请独立验证指纹,并先通过普通 SSH 连接一次,然后再使用面板。仪表板不接受未知密钥,也不使用自定义 SSH 配置/别名、ProxyCommand 或跳板主机:请输入可直接访问的 IP/主机名。主机密钥发生变化时,必须调查原因,不能绕过检查。

连接设置和快照保留在内存中;面板绝不会上传或读取私钥内容。一个 MCP 连接每 30 秒采集一次指标;手动刷新最多每 10 秒一次。无法获取的指标会显示为不可用,而不是 0。没有失败的 systemd 单元并不保证所有应用都运行正常。如果连接失败,保留的指标会标记为过期。 请妥善保管打印出的本地链接:其中的片段是每次启动都会生成的 操作者 访问令牌。令牌会保留在标签页内存中,并从地址栏中移除;重新加载后,请重新打开完整的打印链接。在启动终端中按 Ctrl+C 可停止面板及其连接。--no-browser 只会打印链接;--port 8765 用于选择环回端口。不要通过反向代理转发面板,也不要将其公开。环回地址/令牌检查无法防范以本地用户身份运行的恶意软件。

1. 在 VPS 上安装服务

在 VPS 上运行一次。此命令会安装已发布并固定版本的发行版:

sudo mkdir -p /opt/vps-guardian-mcp
sudo chown "$USER" /opt/vps-guardian-mcp
python3 -m venv /opt/vps-guardian-mcp/.venv
/opt/vps-guardian-mcp/.venv/bin/pip install --upgrade pip
/opt/vps-guardian-mcp/.venv/bin/pip install vps-guardian-mcp==0.37.0

如需从源代码进行开发,请改用:

git clone --branch v0.31.0 https://github.com/murzirius/VPS-Guardian-MCP.git /opt/vps-guardian-mcp
cd /opt/vps-guardian-mcp
python3 -m venv .venv
.venv/bin/pip install -e .

如果服务以非 root 用户身份运行,请仅授予所需的读取权限。缺少这些权限时,Docker 和 journal 功能会正常报告为不可用。

sudo usermod -aG docker <MCP_USER>
sudo usermod -aG systemd-journal <MCP_USER>

更改用户组后,请注销并重新登录。

2. 选择安全模式
模式适用场景结果
read-only检查或诊断默认模式。会阻止受保护的服务变更;记录管理工具仍可能保存记录。
controlled辅助管理推荐。每项具体变更都需要一个短时有效、仅可使用一次的确认令牌。
unrestricted受到单独保护的自动化环境变更会立即执行。请避免在通用 Agent 中使用。

先使用 read-only;确认连接正常后,再使用 controlled。

3. 通过 SSH 连接 AI 客户端

先独立验证 VPS 指纹,并正常建立一次 SSH 连接。这样会将主机密钥保存到 ~/.ssh/known_hosts(Windows 上为 %USERPROFILE%\.ssh\known_hosts)。启动器默认要求验证主机密钥。

JSON 格式的 MCP 客户端请使用此配置:

{
  "mcpServers": {
    "vps-guardian": {
      "command": "npx",
      "args": [
        "-y",
        "@murzirius/[email protected]",
        "--host", "<VPS_IP_OR_HOSTNAME>",
        "--user", "root",
        "--key", "~/.ssh/id_ed25519",
        "--mode", "controlled",
        "--tool-profile", "core"
      ]
    }
  }
}

args 中的每一项都是单独的参数。不要将 --host 与其值合并,也不要将整条命令粘贴到同一个表单字段中。

4. Codex / ChatGPT Desktop

打开 Settings → MCP servers → Add server,选择 STDIO,然后填写:

字段值
名称vps-guardian
命令npx
环境变量留空
工作目录留空/默认值

按顺序将以下参数分别添加为独立行:

-y
@murzirius/[email protected]
--host
<VPS_IP_OR_HOSTNAME>
--user
root
--key
C:\Users\<WindowsUser>\.ssh\id_ed25519
--mode
controlled
--tool-profile
core

保存并重启客户端,然后使用 /mcp 确认 vps-guardian 已连接。

5. 常见情况

Claude Code

claude mcp add vps-guardian -- npx -y @murzirius/[email protected] --host <VPS_IP_OR_HOSTNAME> --user root --key ~/.ssh/id_ed25519 --mode controlled --tool-profile core

使用非 root SSH 用户 — 替换 --user 后面的 root。不要仅为 MCP 添加免密码 sudo;只授予所需的最低限度用户组权限。

使用非标准端口 — 添加以下独立参数:

--port
2222

服务位于其他位置 — 添加:

--remote-path
/srv/vps-guardian/.venv/bin/vps-guardian-mcp

主机密钥验证失败 — 不要禁用验证。请通过可信渠道检查 VPS 指纹,并更正 known_hosts。如需使用专用文件,请使用 --known-hosts <path>。--accept-new-host-key 仅适用于有意进行的首次引导。

6. 验证并升级

向 Agent 询问:“检查我服务器的 CPU 和 RAM 负载。” 配置正确时,会返回结构化的 VPS 数据,而不是让你运行的 shell 命令。

如需升级 VPS 服务,请安装对应版本,然后重新建立客户端连接:

/opt/vps-guardian-mcp/.venv/bin/pip install --upgrade vps-guardian-mcp==X.Y.Z

然后在客户端配置中将 @0.25.1 替换为 @X.Y.Z。对于从源代码安装的情况,请获取该标签、检查本地变更、切换到该标签,然后使用 .venv/bin/pip install -e . 重新安装。

它能做什么

VPS Guardian 围绕几个工作流构建,而非提供一长串缺乏组织的命令:

  • **观察:**系统负载、进程、服务、Docker、数据库、端口、TLS、日志和更新。
  • **了解工作负载:**发现站点或 Compose 项目,梳理其依赖关系和运行状况,然后收集有针对性的诊断证据。
  • **协调 Agent:**会话、交接、租约式工作队列、持久化 Agent Jobs、运行手册、检查点、工作负载锁、维护窗口,以及可恢复的服务端事件监视。
  • **安全地进行更改:**预览影响、暂存配置更改、验证、备份、检查运行状况,并在部署失败时回滚。
  • **有计划地恢复:**创建基线、比较偏差、生成修复计划、验证隔离备份,并要求对更改进行精确确认。
  • **处理代码:**按行范围读取大型文件、查找 Python 符号、暂存行编辑、检查范围受限的 Git 差异,并在临时 Docker 容器中检查暂存的更改。
  • **了解环境:**检查项目 venv 元数据、比较直接依赖项和 npm 锁定版本,并识别正在运行的 systemd 服务的启动路径,而不执行项目代码。
  • **浏览 Python 代码:**映射本地导入、查找可能使用某符号的位置、检查可能受到的更改影响,并结合相关测试候选项收集简短任务上下文。

若要减少 Agent 上下文,使用 --tool-profile core 可启用日常工具(包括 Agent Jobs);省略此参数或选择 full 可使用完整目录。启动器会通过 SSH 将此配置传递给服务。两个配置都支持紧凑型 JSON 工具结果,而新的工作负载和日志摘要默认会返回简短答案。MCP 连接启动时,该配置即生效。

对于大型项目文件,请让 Agent 使用 get_project_symbols,然后围绕相关行调用 read_project_file_range。单次范围调用最多返回 100 KB,并附带 SHA-256 指纹。后续调用 stage_project_line_edit 时只会发送更改的行,并仍使用现有的预览、确认、冲突检查和备份流程。get_workload_brief、summarize_service_logs 和 get_server_event_delta 可提供精简的运维上下文,无需后台轮询。

**Agent Jobs:**创建一个作业,并添加 1–8 项允许执行的检查,例如针对目标 bot.service 执行 service_status 和 service_logs。每项检查调用一次 advance_agent_job。作业、范围受限的结果和进度会在 MCP 重新连接后保留;get_agent_job(after_revision=...) 仅返回新结果,另一个经过授权的 MCP 客户端也可以通过作业 ID 继续处理。在 Linux 上,advance_agent_job(background=true) 只会启动一项脱离终端的只读检查;该检查可在断开连接后完成,并且要求可用内存至少为 512 MB。确认具体服务后,Agent 可以提出一项 restart_service 恢复操作。execute_agent_job_recovery 使用现有的只读/受控/不受限制安全模式;在受控模式下,请先审核一次性确认,然后使用令牌再次调用。接着调用 verify_agent_job_recovery 并记录结论。断开连接后,绝不会自动重试可能已执行的重启。这些作业不会在 VPS 上运行 AI 模型、常驻工作进程、任意 Shell 命令,也不会自动回滚;服务重启无法撤销。现有的可逆更改工具仍遵循各自的备份和回滚规则。 测试舱: 调用 begin_project_patch 和 stage_project_line_edit(或 stage_project_file_change)后,先调用 get_test_capsule_status,再调用 test_project_patch(patch_id, check="auto")。在 controlled 模式下,需使用单独的一次性令牌确认此代码执行检查。auto 会对暂存的 Python 或 JavaScript 文件进行语法检查;python_unittest 和 npm_test 会明确运行项目测试。如果通过,调用 preview_project_patch 检查差异并获取单独的应用确认,然后使用该令牌调用 promote_tested_project_patch。此工具无法应用失败或已编辑的候选补丁。对于没有 Docker 的项目,仍可使用现有的 apply_project_patch,但它不会声称已通过测试舱测试。

测试舱需要本地 Linux Docker 守护程序、已下载的镜像(默认使用 python:3.12-alpine 或 node:20-alpine),以及至少 384 MiB 可用内存。操作员可以通过 VPS_GUARDIAN_CAPSULE_PYTHON_IMAGE 或 VPS_GUARDIAN_CAPSULE_NODE_IMAGE 选择已在本地、包含项目依赖的镜像。Guardian 不会拉取镜像或自动安装依赖。它最多复制 250 个文件 / 8 MiB,排除常见凭据文件和依赖目录,并且一次只允许运行一项检查,最长 30 秒。容器无法访问网络、主机环境或实时项目挂载;CPU、内存、进程数和临时存储均受到限制。需要网络、可写源文件或缺少依赖的测试会失败。源文件仍可能包含硬编码密钥,因此测试前请先移除这些密钥;Docker 隔离可以降低风险,但无法保证防范恶意代码或内核漏洞。

环境检查器: 让 Agent 调用 inspect_project_environment(project_path, service_name="bot.service"),然后调用 diagnose_project_dependencies 获取针对性的问题报告。它会读取 pyvenv.cfg、Python .dist-info/METADATA、静态的 pyproject.toml / requirements.txt 声明,以及与 v2/v3 package-lock.json 对照的直接 npm 依赖。如果 .venv 和 venv 同时存在,请提供明确授权的 environment_path。include_dev=true 会纳入 npm 开发依赖。复用 after_fingerprint,如果相关报告没有变化,就只会收到 unchanged 回复。依赖名称指发行包名称,不一定是其 Python 导入名称。

plan_environment_repair 会说明后续步骤,但不会安装软件包或重启任何内容。plan_capsule_environment 会为经过审查的本地测试舱镜像准备有界的直接依赖固定版本和运行时元数据;它不会构建或下载该镜像、验证镜像内容,也不会生成完整的传递依赖锁定文件。Python 版本来自虚拟环境元数据;运行中的服务证据仅限于 Linux systemd MainPID。已停止的单元、包装器、容器、未使用经授权虚拟环境的系统 Python、继承 / 旧版 / 可编辑安装的软件包、动态声明、requirements 指令、URL、额外依赖以及不受支持的 npm 锁文件可能需要单独审查。元数据不能证明导入可用,也不会探测 Node 运行时 / 引擎兼容性。每份报告的读取量上限为 2 MB、目录条目数上限为 1,000,每种生态的直接声明数上限为 100;扫描不完整时绝不会报告结果正常。不会启动项目解释器、安装器、npm 脚本、软件包索引或后台工作进程。 代码导航器: 从 get_project_import_map(project_path, relative_path="app/payments.py") 开始,或使用 get_project_task_context(project_path, relative_path="app/payments.py", symbol_name="charge"),在一个范围受限的答复中获取定义、简短的使用位置片段和相关测试候选项。find_project_references 会区分导入别名候选项和较弱的仅按名称匹配结果。assess_project_change 最多沿反向导入关系追踪 3 跳;测试文件依据导入关系和命名约定选取,并非根据实测覆盖率选取。对于类方法,请使用其精确限定名称,例如 Gateway.refund;get_project_symbols 可帮助选择名称。4 个工具都接受 after_fingerprint,用于返回紧凑的未更改答复;更改查询参数会改变指纹。扫描结果不会缓存,因此未更改的答复可以节省输出令牌,但仍需重新扫描。

除配置项目根目录外,无需其他设置。Navigator 支持 UTF-8 Python 源文件和长度受限的 ASCII 符号名称,包括相对导入和常见的 src/ 布局。代码片段最多一行;字面量(包括 f 字符串/模板字符串)和注释会被屏蔽。文件名、模块名和标识符名称仍会显示;要查看精确的源代码正文,请使用现有的范围读取功能。这不是运行时调用图、完整的依赖分析,也不能证明测试覆盖了某项更改:别名遮蔽、模块歧义、动态导入/反射、实例类型以及非 Python/生成的源文件仍存在不确定性。隐藏路径、敏感路径和依赖路径会被排除。无法读取的文件、不安全路径、语法错误和预算耗尽会作为部分扫描报告。

扫描按需执行,不使用后台索引器或磁盘缓存:最多扫描 150 个 Python 文件(资源受限的主机为 60 个)、每个文件 128 KB、总计 2 MB(资源受限时为 750 KB)、1,000 个目录项、8 层目录,以及 5 秒的协作式扫描时限。AST 节点和提取的事实均设有上限;导入别名超过 200 个的文件会被跳过。可用内存低于 96 MiB 时不会启动扫描。每个 MCP 进程一次只运行一个扫描。不同 MCP 进程之间不共享此锁。引用/导入报告最多返回 50 个条目;任务上下文默认最多 6,000 个字符,上限可设为 2,000 至 8,000 个字符。

原生 MCP 工具示例:

请求示例工具结果
“为什么 API 很慢?”diagnose_workload有界的健康状况、日志、OOM 和内核证据。
“重启会影响什么?”get_change_impact只读的依赖关系和影响报告。
“把此事件交接给另一位 Agent。”handoff_agent_session已移除密钥的上下文和结果跟踪。
“让多个 Agent 分担这次审计。”create_agent_task包含优先级、依赖关系和所有权过期时间的工作项。
“检查此服务,然后让另一位 Agent 继续。”create_agent_job持久化且有界的检查,提供差异结果和受控恢复。
“安全地部署此 Nginx 更改。”plan_config_deployment经过验证的差异、备份、确认和回滚路径。

请参阅项目网站上的完整功能指南和完整工具目录。

安全模型

  • 不提供可执行任意命令的 MCP 工具。
  • 服务端针对文件、路径、服务和变更类型设置允许列表。
  • controlled 模式使用绑定参数的一次性确认令牌。这不代表获得独立的人工审批:调用方会收到令牌,并可重复执行操作。要确保这一点,必须由客户端进行审批,或单独强制执行操作员策略。拥有不受限制的 SSH 访问权限的 Agent 可以绕过 MCP 限制。
  • 会对文件读取、会话、审计数据和诊断输出中的常见机密模式进行脱敏。这种脱敏尽力而为,无法保证涵盖每一个硬编码凭据或敏感标识符。
  • 读取、日志、目录扫描和存储状态均设有上限,以适应小型 VPS。

在 Linux 上,加固后的项目和配置读取会拒绝符号链接路径组件及特殊文件。原子写入会固定父目录,拒绝不安全的备份路径,使用私有且唯一的备份,并保留常规所有权和权限,但会移除 setuid/setgid 位。现有私有状态目录必须由服务用户拥有,权限为 0700;状态文件和审计文件的权限必须为 0600。对于不安全的路径,系统会安全失败,而不是静默地执行 chmod。每个审计文件(主文件/备用文件)的写入上限为 4 MiB,读取时最多检查末尾 256 KiB;操作员必须归档或重置完整日志。备用审计文件名限定于有效 UID。Python 语法检查使用有界的源代码快照和隔离的解释器,跳过过大的文件,且不会将不完整扫描报告为完全成功。这些保护措施并不能使 root 执行或共用 SSH 密钥成为隔离边界。

详情:安全模型 · Agent 操作指南

软件包与版本发布

开发

python -m unittest discover -s tests -v
npm test

请通过私下渠道报告安全问题,不要在公开议题中发布漏洞利用详情。

许可证

MIT © 2026 murzirius。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。