trmm-exec-mcp
trmm-exec-mcp
Один MCP-сервер для Tactical RMM: доступ на чтение через Entra + read-only PowerShell runner. Подключаться могут только члены назначенной группы безопасности Entra. Он читает всё на платформе и запускает PowerShell для сбора информации на любом агенте — и отказывает всему, что меняет состояние. Построен на FastMCP 3.x с аутентификацией Microsoft Entra (тот же стек, что и odoo-ticket-mcp).
v2 (упрощённая). В более ранней версии был релей одобрения одноразовых токенов Roam для настоящих операций записи/выполнения. Это было больше, чем реальная потребность, поэтому в v2 убраны релей, хранилище предложений, список одобряющих и список разрешённых агентов. Безопасность теперь обеспечивается двумя вещами: группой Entra (кто может подключаться) и read-only защитой (что может делать скрипт). Старый процесс остался в истории git до ветки
simplify/readonly-entra.
Что обеспечивает режим только для чтения
Произвольный PowerShell нельзя доказательно считать read-only, поэтому guard.py — это строгий защитный барьер с глубиной защиты, который склонен отказывать. Два уровня:
Разрешающий список глаголов командлетов — командлеты PowerShell имеют форму
Verb-Noun; проходят только глаголы чтения (Get,Test,Measure,Select, …), поэтому любыеSet-*,New-*,Remove-*,Stop-*,Restart-*отклоняются по построению.Список запрещённых опасных токенов — ловит конструкции, меняющие состояние, которые не являются командлетами
Verb-Noun(нативныеdel/reg delete/schtasks, .NET::Delete, перенаправление на диск) и обфускацию, которая могла бы обойти уровень 1 (iex,-EncodedCommand, декодирование Base64,Invoke-Command).
Отказ называет нарушающий токен. Это не песочница — по-прежнему указывайте TRMM_API_KEY на аккаунт, чей радиус поражения вы принимаете.
Related MCP server: entraid-mcp
Аутентификация: Microsoft Entra (режим resource-server)
AzureJWTVerifier + RemoteAuthProvider от FastMCP: сервер проверяет токены Entra, привязанные к аудитории, и публикует метаданные защищённого ресурса; он никогда не выдаёт токены. claude.ai выполняет OAuth против Entra и подключается. nginx перед ним выполняет только TLS + список разрешённых IP Anthropic. Ограничьте доступ старшим инженерам через назначение группы в приложении Entra (Assignment required = Yes).
Инструменты
Инструмент | Тип | Назначение |
| read | Найти машины (фильтр по hostname/типу/платформе/статусу). |
| read | Полная информация об одном агенте (железо, ОС, IP, проверки, состояние перезагрузки). |
| read | Hostname → ID агента (ошибка при 0/>1). |
| read | Собственный журнал аудита TRMM (кто что делал в TRMM). |
| read | Запуск read-only PowerShell (журналы событий, службы, ПО, конфигурация). Изменяющие скрипты отклоняются. |
Конфигурация (только env)
Переменная | Обязательная | Описание |
| ✅ | Базовый URL API TRMM. |
| ✅ | Ключ аккаунта TRMM с правами чтения + запуска/отправки команд. |
| — |
|
| ✅† | Tenant + client id регистрации приложения API. |
| ✅† | Публичный корень (без |
| ✅† | Должен совпадать с App ID URI, заданным в Entra (например, URL |
| — | Конфигурация scope ( |
| — | Привязка контейнера (по умолчанию |
† требуется при MCP_AUTH_ENABLED=true.
Аккаунт TRMM
Использует пользователя TRMM claude, предоставленного с правами чтения + Send Command (SendCMDPerms). Поместите его ключ в TRMM_API_KEY (через переменные окружения стека Portainer, никогда в git). Read-only защита ограничивает, что может делать скрипт; держите аккаунт ограниченным тем, что нужно инструментам. Относитесь к DC как к особо чувствительным.
Запуск / развёртывание
python -m venv .venv && .venv\Scripts\activate
pip install -r requirements.txt
# local (auth off): set TRMM_API_URL, TRMM_API_KEY, MCP_AUTH_ENABLED=false, then:
python -m trmm_exec_mcpПродакшн: PORTAINER_DEPLOY.md (Git-стек + webhook, переменные Entra, порт хоста) + deploy/nginx-trmm-exec-mcp.conf.
Проверка
python -m py_compile trmm_exec_mcp/*.py — чисто. Read-only защита имеет набор тестов (read-скрипты разрешены; изменяющие/обфусцированные/нативно-деструктивные отклоняются). После развёртывания: /healthz ok, неаутентифицированный /mcp → 401, и discovery-документ объявляет scope https://…/mcp/access_as_user (не api://…).
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
Read-only CVE intelligence, remediation playbooks, and agent setup guides. Not a scanner.
Read-only IT Health Check, domain security, recommendations, pricing, and draft enquiries.
Read-only local AI advice, shared reports and website audits. No PC scan or local actions.
Related MCP Servers
- AlicenseBqualityCmaintenanceA read-only MCP server for Microsoft Intune and Entra ID that enables list, get, search, and reporting operations for tenant visibility, audits, troubleshooting, and health reporting without write actions. It includes authentication helpers, report exports, and metadata discovery tools.361MIT
- FlicenseNot gradedqualityCmaintenanceRead-only MCP server for Microsoft Entra ID (Azure AD) that enables querying user sign-in logs, group memberships, and assigned Microsoft 365 licenses via Microsoft Graph API. Provides security and audit visibility without any write operations.-
- AlicenseNot gradedqualityCmaintenanceEnables read-only MCP access to Tactical RMM, allowing agents to query devices, clients, sites, audit logs, software, and pending actions without any mutating capabilities.MIT
- AlicenseAqualityBmaintenanceEnables AI agents to read Microsoft 365 tenant data, such as users, license usage, and stale accounts, while enforcing least-privilege by refusing to run with excessive Azure permissions.4MIT