Skip to main content
Glama

trmm-mcp

Un servidor MCP de solo lectura que expone una instancia de Tactical RMM como herramientas de agente, para que un LLM pueda recopilar datos de dispositivos, clientes y auditoría, sin ninguna capacidad de modificar nada.

  • Solo lectura por diseño. No se implementan herramientas de ejecutar script, ejecutar comando, reiniciar, instalar, editar, crear o eliminar. Incluso si la clave de API tuviera permisos de escritura, el radio de impacto es cero. Acompáñalo de todos modos con un usuario de servicio de solo lectura (defensa en profundidad).

  • Python + FastMCP. Dos transportes desde un mismo código: stdio para uso local bajo tu cliente MCP, y HTTP Streamable (con autenticación compartida por token Bearer) para un servidor remoto compartido al que se conecta todo el equipo; consulta Despliegue remoto.

  • La configuración es solo mediante variables de entorno — sin secretos en el código. Falla rápidamente al inicio si faltan variables obligatorias.

Herramientas

Todas las herramientas tienen readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true, devuelven contenido estructurado con un esquema de salida y admiten paginación cuando corresponde.

Herramienta

Qué hace

trmm_list_clients

Todos los clientes/tenants (con resúmenes de sitios incrustados opcionales).

trmm_list_sites

Sitios, filtrables por cliente.

trmm_list_agents

Agentes/dispositivos con campos de resumen; filtrar por cliente/sitio/tipo/plataforma/estado/hostname.

trmm_get_agent

Detalle completo de un agente (SO, hardware, estado, recuento de comprobaciones); verbose añade servicios sin procesar + WMI.

trmm_get_agent_checks

Resultados de comprobaciones (cpu/mem/disk/ping/service/script/event) con estado aprobado/fallido.

trmm_list_agent_history

Historial de ejecución de comandos/scripts/tareas de un agente (más reciente primero).

trmm_search_audit_log

Consultar el registro de auditoría por agente/cliente/usuario/acción/tipo de objeto/rango de tiempo.

trmm_list_pending_actions

Reinicios/actualizaciones/scripts en cola para uno o todos los agentes.

trmm_get_agent_software

Inventario de software instalado de un agente.

trmm_get_agent_winupdates

Entradas de Windows Update conocidas para un agente.

trmm_server_status

Salud/versión/recuentos del servidor (requiere TRMM_MON_TOKEN).

Consulta docs/API_CONTRACT.md para conocer los endpoints exactos y la carga útil del registro de auditoría.

Related MCP server: KVMFleet MCP Server

Configuración

Variable

Obligatoria

Por defecto

Descripción

TRMM_API_URL

URL base de la API, el subdominio api., con esquema incluido, sin barra final (p. ej. https://api.example.com).

TRMM_API_KEY

Valor de X-API-KEY, vinculado a un usuario de solo lectura.

TRMM_MON_TOKEN

(sin definir)

Token de monitoreo solo para trmm_server_status. Separado de la clave de API.

TRMM_TIMEOUT

30

Tiempo de espera por solicitud (segundos).

TRMM_VERIFY_SSL

true

Establecer false solo para certificados autofirmados.

TRMM_MAX_RETRIES

2

Reintentos ante errores transitorios 5xx / de red.

Obtén una clave de API en TRMM: Configuración → Configuración global → Claves de API (elige tu usuario de servicio de solo lectura). La clave omite la 2FA y hereda los permisos de rol de ese usuario.

Instalación

Requiere 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

(O pip install -e . para obtener el script de consola trmm-mcp.)

Ejecución

El servidor habla MCP a través de stdio, por lo que normalmente lo inicia tu cliente MCP. Para ejecutarlo manualmente (esperará a un cliente MCP en stdin):

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

Si faltan TRMM_API_URL/TRMM_API_KEY, imprime un error claro en stderr y sale con código distinto de cero.

Registrar con un cliente MCP (stdio)

Claude Code — .mcp.json del proyecto

Crea .mcp.json en tu proyecto (usa la ruta absoluta a server.py y el Python de tu venv para que las dependencias se resuelvan):

{
  "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

Misma forma, bajo la clave de nivel superior "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"
      }
    }
  }
}

En macOS este archivo se encuentra en ~/Library/Application Support/Claude/claude_desktop_config.json; en Windows en %APPDATA%\Claude\claude_desktop_config.json. Reinicia la aplicación después de editarlo.

Despliegue remoto (acceso para el equipo)

Ejecuta trmm-mcp como un servidor HTTPS compartido para que los ingenieros/mesa de ayuda lo usen como conector de Claude en lugar de instalarlo localmente cada uno. La clave de API de TRMM permanece en el servidor; los clientes se autentican con un token Bearer compartido.

1. Genera un token Bearer y configura

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

En .env (o en las variables de entorno de tu stack de 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>

El servidor se niega a iniciar en modo http sin TRMM_MCP_AUTH_TOKEN.

2. Despliega con Docker / Portainer

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

En Portainer, despliega un stack desde este repositorio y establece las variables de entorno en el stack; se ajusta a tu flujo existente de compilar → publicar → redesplegar mediante webhook de Portainer. La imagen se ejecuta como usuario no root e incluye un HEALTHCHECK de Docker contra /healthz.

3. Ponlo detrás de HTTPS + una puerta de red

Termina TLS y controla el acceso delante del contenedor: un proxy inverso (Caddy/Nginx/Traefik) que sirva, por ejemplo, https://trmm-mcp.example.com, detrás de tu VPN o Cloudflare Access. El token Bearer es defensa en profundidad, no la única capa. Nunca expongas el puerto 8080 a internet sin autenticación.

4. Conecta Claude (Claude Code / Desktop)

.mcp.json remoto — sin Python, repositorio ni clave de TRMM en la máquina del compañero:

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

claude.ai web y móvil

La interfaz de conector personalizado web/móvil autentica mediante OAuth, no con una cabecera estática — por lo que la configuración Bearer anterior cubre Claude Code + Desktop. Para web y móvil, coloca delante del servidor Cloudflare Tunnel + un Portal de servidores MCP: ejecuta el flujo OAuth/SSO (Entra) hacia Claude e inyecta el token Bearer aguas arriba, por lo que no se necesita código adicional en el servidor. Guía completa: docs/REMOTE_OAUTH_CLOUDFLARE.md. Usa docker-compose.cloudflare.yml (sidecar de túnel, sin puertos publicados).

Endpoints

Ruta

Autenticación

Propósito

POST /mcp (configurable)

Bearer

El endpoint MCP al que se conectan los clientes

GET /healthz

ninguna

Sonda de salud para Docker/orquestadores

Probar con MCP Inspector

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

Luego, en la interfaz del Inspector: lista las herramientas, llama a trmm_list_clients y prueba trmm_search_audit_log con within_days: 7 para confirmar que la paginación y los filtros del registro de auditoría funcionan con datos reales.

Evaluación

evaluation.xml contiene 10 preguntas de MSP de solo lectura con respuestas verificadas. Ejecútalas con el arnés incluido en la habilidad mcp-builder:

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

Las respuestas en evaluation.xml son específicas de la instancia contra la que se verificaron; regenéralas para un conjunto de datos diferente.

Notas de seguridad

  • Los secretos provienen solo del entorno; nada se registra en stdout (los servidores stdio deben mantener stdout limpio — los diagnósticos van a stderr).

  • Los errores se traducen a mensajes accionables que distinguen autenticación (401) vs. permisos (403) vs. no encontrado (404) vs. red/tiempo de espera, sin filtrar detalles internos.

  • Este servidor nunca llama a un endpoint de mutación. Un futuro servidor de acciones, explícitamente restringido, sería un proyecto separado.

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