mcpField
T
TacticalRMM

TacticalRMM

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

关于 TacticalRMM

TacticalRMM MCP 服务让 AI 助手查询 TacticalRMM 管理的设备、告警、检查和诊断信息,并可按模式执行操作。适用于管理设备群的运维人员;启用 elevate 模式时,每项执行都须经人工批准。

主要功能

  1. 01读取设备、告警及检查数据
  2. 02查询进程、服务和事件日志
  3. 03运行命令及管理设备操作
  4. 04逐项人工批准执行请求
  5. 05记录请求、结果及审批审计日志

适用场景

  1. 01汇总离线设备和失败检查
  2. 02排查设备内存或服务问题
  3. 03按设备群查看补丁与软件状态
  4. 04在批准后重启设备或运行命令

MCP 相关

该 MCP 服务向客户端提供 TacticalRMM 设备群的只读查询工具,以及依模式开放的命令和设备执行工具。elevate 模式下,每次执行须在浏览器或服务器 shell 中单独批准。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"shin2344234-trmm": {
"command": "uvx",
"args": [
"trmm-mcp"
],
"env": {
"TRMM_API_URL": "<TRMM_API_URL>",
"TRMM_READONLY_API_KEY": "<TRMM_READONLY_API_KEY>",
"TRMM_COMMAND_API_KEY": "<TRMM_COMMAND_API_KEY>",
"TRMM_MCP_MODE": "<TRMM_MCP_MODE>"
}
}
}
}
启动命令uvx trmm-mcp
需要配置的环境变量
TRMM_API_URLBase URL of your TacticalRMM backend, e.g. https://api.example.com
TRMM_READONLY_API_KEY密钥TacticalRMM API key bound to a read-only role. Used for all reads.
TRMM_COMMAND_API_KEY密钥TacticalRMM API key permitted to execute. Only needed for elevate or command mode, and only used after an approval is granted.
TRMM_MCP_MODEreadonly (default, 20 read tools), elevate (adds 8 execution tools, each requiring out-of-band human approval), or command (execution with no gate).

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

安装包
pypitrmm-mcp1.1.0

工具

20

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

此工具无需参数。

详细介绍

TacticalRMM MCP 服务

让 AI 助手读取 TacticalRMM 安装中的所有数据;在你明确启用后,还能在受管机器上运行命令。

询问“哪些机器处于离线状态,原因是什么”“前台电脑上是什么进程占用了大量内存”“本周有哪些检查失败”,即可获取实时设备群组数据并得到答案。开启 elevate 模式后,助手还可以修复问题,但每项操作都必须由你亲自批准。

我为什么构建它

我为许多客户管理机器,而 TacticalRMM 收集的有关每台机器的数据,远超任何人有时间逐一查看的范围。我想真正用好这些数据:运行比仪表板展示得更深入的诊断,为每位客户生成涵盖所有设备的报告,并在有人打电话报告问题之前找出值得修复的隐患。

这确实会带来可计费的工作,而只要工作是真正有价值的,我认为这没问题。磁盘出现早期 SMART 错误、服务器在不知不觉中被占满、补丁停止应用三个月却没人发现——及时发现这些问题值得付费。为了制造忙碌而收费则不行。我用来衡量这一点的标准是:报告中的每一项,在向客户解释清楚后,客户都能理解为什么值得修复。

你将获得什么

28 个工具。 其中 20 个只读工具,涵盖 Agent、检查、警报、服务、进程、事件日志、软件清单、补丁、脚本和审计历史;另外 8 个执行工具,可用于运行命令和脚本、重启、控制服务、终止进程以及唤醒机器。

完整记录所有操作的审计跟踪。 每个入站请求、每次包含参数的工具调用、每个结果、每次 TRMM API 调用、每项批准决定和每次拒绝都会写入结构化 JSONL 日志,并进行凭据脱敏和日志轮转。对于一个能在整个设备群组中以 SYSTEM 身份运行命令的桥接服务,准确记录谁在何时请求了什么并非可选项——因此审计日志默认启用,且无法被悄悄跳过。详见审计日志。

模型无法绕过的审批关卡。 在 elevate 模式下,执行操作必须先由你在浏览器中(密码 + TOTP)或在服务器上的 shell 中批准这一次调用,否则就会被拒绝。批准与参数指纹绑定,只能使用一次,并且会过期。没有任何工具可以授予提权。

真正有效的只读模式。 通过三个独立层保障:执行工具从不注册、HTTP 客户端拒绝非读取请求,API 密钥本身也绑定到没有执行权限的 TRMM 角色。

为真实设备群组打造。 TRMM 不支持分页,会返回整张表——这里测得的一次 Agent 详情调用就有 192 KB。响应会经过筛选、设定上限并截断,同时明确提示,因此单次调用不会吞掉模型的上下文。

支持带有承载令牌身份验证的 HTTPS、包含 IP SAN 的自签名证书,以及经过加固的 systemd 单元。客户端信任该证书,而不是跳过验证。

可在 macOS、Windows 和 Linux 上与 Claude Code、Claude Desktop 和 LM Studio 配合使用。基于 TRMM 1.5.1 构建并完成验证。TRMM API 本身的文档见 docs/trmm-api.md。


三种模式

readonly(默认)elevatecommand
暴露的工具20 个读取工具28 个28 个
读取是是是
执行绝不执行仅执行你批准的操作,每次一项始终执行
用于读取的 TRMM 密钥mcp-readonlymcp-readonlymcp-command
用于执行的 TRMM 密钥—mcp-command,仅在批准后使用mcp-command
适用场景纯问答日常对话无人值守自动化

交互式工作应使用 elevate:Claude 可以查看任何内容,但一旦想要执行操作,就会停下来等待你的批准。

安全

简而言之:

  • 审批关卡在带外进行。 在 elevate 模式下,执行会被拒绝,直到你在浏览器中(使用密码 + TOTP)或在服务器的 Shell 中批准该特定调用。审批与参数指纹绑定,只能使用一次,并且会过期。没有任何工具可以授予提权,因此模型无法自行获得审批。
  • 只读权限由三个相互独立的层保障。 执行工具永远不会被注册,HTTP 客户端会拒绝非读取请求,并且 API 密钥本身绑定到没有执行权限的 TRMM 角色。
  • 在 command 模式下,客户端会拒绝危险操作模式,例如 rm -rf /、mkfs、dd of=/dev/*、format c: 等;还可以选择使用 Agent 允许列表,严格限定允许操作的对象。
  • 使用带有 Bearer 身份验证的 HTTPS、包含 IP SAN 的自签名证书,以及强化的 systemd 单元。客户端信任该证书,而不是跳过验证。

关于第三层只读保护,有一点需要如实说明:TRMM 没有针对服务、进程或 Windows 更新的只读权限。这个限制、审批页面自身的密码 + TOTP 关卡,以及不使用 MCP elicitation 作为审批渠道的原因,都写在 docs/security.md 中。

设置

此设备上已完成以下设置:

  • venv/ 中的虚拟环境,包含 mcp 2.0 和 httpx
  • TRMM 角色 MCP Read Only 和 MCP Command,以及用户 mcp-readonly 和 mcp-command(这两个用户都被禁止登录 UI,且密码不可用)
  • 已将 API 密钥写入 .env(权限模式为 600)

要重新配置或轮换密钥:

/rmm/api/env/bin/python /opt/trmm-mcp/provision_trmm_accounts.py --rotate

运行服务

要从其他机器访问,首先指定服务监听的地址。这些配置应放在 .env 中,而不是单元文件中——单元文件位于 git 中,如果将地址写入其中,每次复制它时都会带上该地址,导致服务在错误的机器上运行:

cat >> /opt/trmm-mcp/.env <<'EOF'
TRMM_MCP_HTTP_HOST=10.0.0.5
TRMM_MCP_PUBLIC_URL=https://10.0.0.5:8770
EOF

替换为你自己的地址。TRMM_MCP_PUBLIC_URL 是助手在需要审批时提示你打开的地址,因此必须是浏览器能够实际访问的 URL。跳过此步骤,服务就会绑定到 127.0.0.1;如果客户端运行在同一台设备上,这样也没问题。

然后安装单元并启动服务:

sudo cp /opt/trmm-mcp/trmm-mcp.service /etc/systemd/system/ && sudo systemctl daemon-reload && sudo systemctl enable --now trmm-mcp

检查服务启动时使用的配置——启动日志会显示地址、模式,以及是否启用了 TLS:

journalctl -u trmm-mcp -n 5 --no-pager | grep listening

默认情况下,服务通过 8770 端口提供 HTTPS,并要求提供 .env 中的 Bearer 令牌。要在前台运行以便快速测试:

/opt/trmm-mcp/run.sh readonly http

监听器以无状态模式运行(默认值为 TRMM_MCP_STATELESS_HTTP=true)。这很重要:使用有状态的可流式 HTTP 时,服务会分配一个会随进程终止而失效的会话 ID,因此重启服务后,已连接的客户端会重放服务已忘记的会话。通过 mcp-remote 使用时,这会表现为工具调用挂起数分钟后失败,而 tools/list 仍能正常响应,并且 logs/server.log 中会出现 Rejected request with unknown or expired session ID。无状态模式消除了这一故障情况;我们不会发起任何由服务端发起的请求,因此不会有任何代价。restart_test.py 验证了这两种行为。

Bearer 令牌是该端口唯一的身份验证方式,因此任何能够访问该端口的对象都会继承此服务的 TRMM 权限。请将服务限制在局域网内或置于隧道后方,而不要绑定到公共网络接口。

连接客户端

你需要从服务端获取两项内容:.env 中的 Bearer 令牌,以及一份 certs/cert.pem 副本,以便客户端验证 TLS 证书。

Claude Code 可直接通过 HTTP 通信,无需桥接:

claude mcp add --transport http trmm https://192.0.2.10:8770/mcp \
  --header "Authorization: Bearer <TRMM_MCP_AUTH_TOKEN>" --scope user

在服务器本机上,你可以跳过网络,直接通过 stdio 运行:

claude mcp add trmm -- /opt/trmm-mcp/run.sh readonly

将 readonly 替换为 elevate 即可启用审批关卡,或将其替换为 command 以执行无人值守操作。

Claude Desktop 需要 mcp-remote 桥接,LM Studio 原生支持远程 HTTP;也可以通过 SSH 运行它们,无需在网络上监听。macOS、Windows 和 Linux 上这三种方式的可用配置,以及如何将证书安装到系统信任存储中,详见 docs/clients.md。

工具

28 个工具:20 个只读工具,8 个执行工具。 任何接受 Agent 参数的工具,都可以传入 主机名或 agent_id——系统会自动解析主机名;如果主机名对应多个对象,则会拒绝操作,而不会猜测。

  • 从这里开始 — trmm_fleet_overview:统计信息,以及离线、需要重启、检查失败和待处理补丁列表。
  • 设备群组 — Agent 状态及筛选、客户端和站点、警报、待处理操作、服务器信息和当前模式。
  • 诊断 — 服务、进程、事件日志、已配置的检查、已安装软件、补丁状态、自动化任务,以及过往命令和脚本运行记录 及其输出。
  • 审计和脚本 — TRMM 审计日志、服务器调试日志、脚本库和完整脚本源代码。
  • 备用入口 — trmm_api_get:对任意 API 路径执行原始 GET 请求。
  • 执行操作(仅限 elevate 和 command)— 运行命令、运行已保存的脚本、重启、启动/停止/重启服务、终止进程、网络唤醒、强制运行检查、运行自动化任务。

我们刻意不开放面向整个设备群组的批量执行、服务器端脚本以及所有配置修改。完整的 28 行表格、不开放这些功能的原因、MCP 安全注释和上下文大小处理方式,详见 docs/tools.md。

文档

安全审批关卡、三个只读层、TLS 以及需要坦诚说明的注意事项
安装pip 与克隆方式的区别、文件存放位置、重建 venv
连接客户端Claude Code、Claude Desktop、LM Studio、SSH 和证书
工具全部 28 个工具、未开放的功能、注释、上下文大小处理
运维审计日志、浏览器日志页面、备份、测试、故障排查
配置所有环境变量,以及仓库中每个文件的用途
TRMM APITacticalRMM API 本身的独立文档

更新日志

请参阅 CHANGELOG.md。

许可证

AGPL-3.0-or-later(LICENSE),并在每个文件中包含 SPDX 标头。Copyleft 条款意味着,任何人以网络服务形式运行修改后的副本,都必须公开其修改内容——这是有意为之,旨在确保具备执行能力的分支保持开源。

请我喝杯咖啡

如果你愿意,可以前往 buymeacoffee.com/sethwalker234。

评论

支持 Markdown

第一次接触 MCP?

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

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