Skip to main content
Glama

trmm-mcp

Сервер MCP только для чтенияMCP, который предоставляет инстанс Tactical RMM как инструменты агента, чтобы LLM могла получать данные об устройствах, клиентах и аудите — без возможности что-либо изменить.

  • Только чтение: заложено в архитектуру. Не реализованы инструменты run-script, run-command, reboot, install, edit, create или delete. Даже если API-ключ поддерживает запись, радиус поражения нулевой. Всё равно используйте его с сервисным пользователем только для чтения (защита в глубину).

  • Python + FastMCP. Два транспорта из одной кодовой базы: stdio для локального использования в вашем MCP-клиенте и Streamable HTTP (с общей аутентификацией через bearer-токен) для общего удалённого сервера, к которому подключается вся команда — см. Удалённое развёртывание.

  • Конфигурация — только через переменные окружения — никаких секретов в коде. При запуске быстро завершается с ошибкой, если обязательные переменные отсутстствуют.

Tools

Все инструменты имеют readOnlyHint: true, DestructiveHint: false, Id empotentHint: true, openWorldHint: true, возвращают структурированный контент со схемой вывода и поддерживают пагинацию там, где применимо.

Инструмент

Что делает

trmm_list_clients

Все клиенты/тенанты (с опционально встроенными сводками по сайтам).

trmm_list_sites

Сайты, фильтруемые по клиенту.

trmm_list_agents

Агенты/устройства со сводными полями; фильтр по client/site/type/platform/status/hostname.

trmm_get_agent

Полная информация по одному агенту (OS, hardware, status, сводка проверок); verbose добавляет сырые службы + WMI.

trmm_get_agent_checks

Результаты проверок (cpu/mem/disk/ping/service/script/event) со статусом прошел/не прошел.

trmm_list_agent_history

История выполнения команд/скриптов/задач для агента (сначала новые).

trmm_search_audit_log

Поиск по журналу аудита по агенту/клиенту/пользователю/действию/типу объекта/диапазону времени.

trmm_list_pending_actions

Очередь перезагрузок/обновлений/скриптов для одного или всех агентов.

trmm_get_agent_software

Инвентаризация установленного ПО для агента.

trmm_get_agent_winupdates

Записи Windows Update, известные для агента.

trmm_server_status

Состояние сервера/версия/количество (требуется TRMM_MON_TOKEN).

Точные эндпоинты и payload журнала аудита: docs/API_CONTRACT.md.

Related MCP server: KVMFleet MCP Server

Configuration

Переменная

Обязательно

По умолчанию

Описание

TRMM_API_URL

Базовый URL API: поддомен api., со схемой, без завершающего слэша (например, https://api.exap.com).

TRMM_API_KEY

Ключ X-API-KEY, using for owner.

TRMM_MON_TOKEN

(не задан)

Monitoring token for trmsm_server_status only. Separate from the API key.

TRMM_TIMEOUT

30

Таймаут запроса (в секундах).

TRMM_VERIFY_SSL

true

Устанавливайте false только для самописцых сертификатов.

TRMM_MAX_RETRIES

2

Повторы при временном безразличном 5xx / сетевых ошибках.

Получите API-ключ в TRMM: Settings → Global Settings → API Keys (выберите своего сервисного пользователя только для чтения). Ключ обходит 2FA и наследует права роли этого пользователя.

Install

Требуется Python 3.10+.

cd tactical-rmm-mcp
python -m venv .venv
# Windows:  .venv\Scripts\activate
# macOS/Linux: source .venv/bin/activate
pip install -r requirements.txt

(Или pip install -e . для консольной команды trmm-mcp.)

Run

Сервер общается через MCP по stdio, поэтому обычно его запускает ваш MCP-клиент. Чтобы запустить вручную (будет ждать MCP-клиент на stdin):

# set env first, then:
python -m trmm_mcp
# or
python server.py

Если TRMM_API_URL/TRMM_API_KEY отсутствуют, выезжает ясное сообщение об ошибке в stderr и завершается с ненулевым кодом.

Register with an MCP client (stdio)

Claude Code — project .mcjson.json

Создайте .mcp.json в своём проекте (используйте абсолютный путь к server.py и Python вашего виртуального окружения для подстановки зависимостей):

{
  "mcpServers": {
    "trmm": {
      "command": "C:\\Users\\admin\\your-workspace\\tactical-rmm-mcp\\.venv\\Scripts\\python.exe",
      "args": ["C:\\Users\\admin\\your-workspace\\tactical-rmm-mcp\\server.py"],
      "env": {
        "TRMM_API_URL": "https://api.yourdomain.com",
        "TRMM_API_KEY": "your-readonly-key",
        "TRMM_MON_TOKEN": "optional-mon-token"
      }
    }
  }
}

Claude Desktop — claude_desktop_config.json

Та же форма, но в корневом разделе "mcpServers":

{
  "mcpServers": {
    "trmm": {
      "command": "/abs/path/tactical-rmm-mcp/.venv/bin/python",
      "args": ["/abs/path/tactical-rmm-mcp/server.py"],
      "env": {
        "TRMM_API_URL": "https://api.yourdomain.com",
        "TRMM_API_KEY": "your-readonly-key"
      }
    }
  }
}

На macOS этот файл находится в ~/Library/Application Support/Claude/claude_desktop_config.json; в Windows — в %APPDATA%\Claude\claude_desktop_config.json. После редактирования перезапустите приложение.

Remote deployment (доступ всей команды)

Запустите trmm-mcp как общий HTTPS-сервер, чтобы инженеры/поддержка использовали его как Claude connector вместо установки локально. Ключ API TRMM остаётся на стороне сервера; клиенты аутентифицируются через общий bearer-токен.

1. Generate bearer token and configure

python -c "import secrets; print(secrets.token_urlsafe(32))"

В .env (или в конфигурации вашего стека Portainer):

TRMM_API_URL=https://api.yourdomain.com
TRMM_API_KEY=<read-only service-user key>
TRMM_MCP_TRANSPORT=http
TRMM_MCP_AUTH_TOKEN=<the token you just generated>

Сервер откажется запуститься в http-режиме без TRMM_MCP_AUTH_TOKEN.

2. Deploy to Docker / Portainer

docker compose up -d --build
curl http://localhost:8080/healthz        # -> {"status":"ok",...}

В Portainer разверните стек из этого репозитория и задайте переменные окружения в стеке — он подходит под ваш существующий процесс build → push → повторного развертывания через webhook Portainer. Образ работает в непривеличенном пользователе (non-root) и включает Docker HEALTHCHECK для /healthz.

3. Поместите за HTTPS и сетевой шлюз

Terminate TLS and шлюзируйте доступ перед контейнером через reverse proxy (Caddy/Nginx/Traefik) на клике https://trmm-mcp.example.com, за VPN или Cloudflare Access. Bearer-токен это не единственный слой, а просто extra. **Никогда не выставляйте порт 8080 в интернет без аутентификации.

4. Connect Claude (Claude Code / Desktop)

Remote .mcp.json — на машине коллеги не нужны Python, репозиторий или ключ TRMM:

{
  "mcpServers": {
    "trmm": {
      "type": "http",
      "url": "https://trmm-mcp.example.com/mcp",
      "headers": { "Authorization": "Bearer <shared-token>" }
    }
  }
}

claude.ai web и мобильные

Web/mobile ствой for custom connector uses OAuth, а не статический заголовок — таким образом, bearer-настройка выше охватывает Claude Code + Desktop. Для web и мобильных поставьте перед сервером Cloudflare Tunnel + MCP Server Portal: он выполняет OAuth/SSO (Entra) flow для Claude и впрыскивает bearer-токен upstream, поэтому достаточно кода сервера не требуется. Полное руководство: docs/REMOTE_OAUTH_CLOUDFLARE.md. Используются docker-compose.cloudflare.yml (sidecar для туннеля, порты не публикуются).

Endpoints

Path

Auth

Purpose

POST /mcp (configurable)

Bearer

Client MCP endpoint connecting clients

GET /healthz

none

Health probe for Docker/orchestrators

Test with MCP Inspector

npx @modelcontextprotocol/inspector \
  -e TRMM_API_URL=https://api.yourdomain.com \
  -e TRMM_API_KEY=your-readonly-key \
  -- python server.py

Then in Inspector UI: list tools, call trmm_list_clients, and try trmm_search_audit_log with within_days: 7 to verify pagination and audit-log filters work against live data.

Evaluation

evaluation.xml contains 10 read-only questions for MSP with verified answers. Run them with the harness from the mcp-builder skill:

python scripts/evaluation.py \
  -t stdio -c python -a server.py \
  -e TRMM_API_URL=https://api.yourdomain.com \
  -e TRMM_API_KEY=your-readonly-key \
  -o evaluation_report.md \
  evaluation.xml

Ответы in evaluation.xml are specific to the instance they were verified against; regenerated for the different dataset.

Security notes

  • Secrets только из окружения; на stdout ничего не выводится (stdio-серверы должны держать stdout чистым — диагностика только в stderr).

  • Ошибки переводятся в выполняемое действие и разделяют auth (401), perms (403), not-found (404), network/timeout, не раскрывая internals.

  • Этodтер server никогда не вызывает мутирующих endpoint. A future explicitly-gated action server would be a separate project.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables read-only access to SentinelOne's platform through MCP, allowing security investigations, threat hunting, and asset inventory queries via natural language.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Read-only MCP server that allows AI assistants to query and monitor KVM Fleet devices, audit logs, and console sessions through the official REST API.
    5
    14
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables read-only interaction with App Store Connect via MCP tools, including listing apps, versions, builds, and review submissions, with compliance boundaries and no write operations by default.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Read-only MCP server for the Action1 RMM REST API, enabling access to endpoints, missing updates, vulnerabilities, installed software, policies, automations, and reports.
    21
    Apache 2.0

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JohnGilligan2/tactical-rmm-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server