Skip to main content
Glama
MSPbotsAIFramework

mspbots-fleet-mcp

Official

mspbots-fleet-mcp

Servidor MCP para la API de MSPbots Fleet Platform: una consola multiinquilino sobre fleetdm: inventario de hosts, scripts bajo demanda y consultas osquery guardadas, expuestos a clientes MCP.

Sigue el mismo diseño que el servicio hermano mspbots-agent-mcp: sin estado, sin credenciales almacenadas, autenticación por cabecera en cada petición a través del Model Context Protocol (transporte Streamable HTTP/SSE).

Cuándo usarías esto

Este MCP envuelve un producto interno de MSPbots (gestión de flotas de dispositivos), no una integración de terceros. Usos típicos:

  • "¿Qué hosts tiene este inquilino y cuáles están sin conexión?" → mspbotsfleet_list_hosts

  • "Etiqueta este portátil como Producción" → mspbotsfleet_set_host_labels

  • "Esta máquina parece desactualizada, fuerza una actualización" → mspbotsfleet_refetch_host

  • "Ejecuta nuestro script de recopilación de registros en ese servidor" → mspbotsfleet_run_script

  • "¿Cuál es el uso de disco en todos los hosts Windows ahora mismo?" → crea una consulta guardada con mspbotsfleet_create_query y luego mspbotsfleet_run_query

  • "Acaba de inscribirse un lote de portátiles nuevos, reclama los que declaramos" → mspbotsfleet_claim_hosts

  • "Vamos a dar de baja este dispositivo, deja de rastrearlo como nuestro (pero déjalo en Fleet)" → mspbotsfleet_release_host

Related MCP server: OpsLevel MCP

Herramientas

Todas las herramientas obtienen las credenciales de las cabeceras de la petición (X-MSP-Token / X-MSP-Tenant-Id / X-MSP-Host); no es necesario pasar el token en los parámetros de la herramienta.

Hosts

Los hosts no se pueden crear a través de la API: aparecen automáticamente cuando la máquina instala fleetd y se registra, y luego se reclama la propiedad según los identificadores declarados por el inquilino (nombre de host/número de serie/UUID); ver mspbotsfleet_claim_hosts.

Herramienta

Función

Parámetros

mspbotsfleet_list_hosts

Lista los hosts del inquilino actual (búsqueda difusa + filtro de estado + paginación)

search, status(online/offline/new/missing), page(por defecto 0), per_page(por defecto 25, máx. 200)

mspbotsfleet_get_host

Obtiene el detalle del host + etiquetas manuales

host_id(obligatorio)

mspbotsfleet_list_host_scripts

Lista los scripts ejecutables en ese host

host_id(obligatorio)

mspbotsfleet_set_host_labels

Reemplaza por completo las etiquetas manuales del host

host_id(obligatorio), labels(obligatorio, reemplazo completo)

mspbotsfleet_refetch_host

Solicita que el host actualice sus atributos en el próximo check-in (asíncrono)

host_id(obligatorio)

mspbotsfleet_delete_host

Elimina el host de Fleet y libera la propiedad (si fleetd no está desinstalado, se volverá a registrar)

host_id(obligatorio)

mspbotsfleet_claim_hosts

Declara identificadores y reclama los hosts sin propietario que coincidan (idempotente; se puede repetir para reintentar los no coincidentes)

identifiers(opcional, lista de nombres de host/números de serie/UUID, máx. 500; omitir/array vacío = solo reintentar los declarados previamente)

mspbotsfleet_release_host

Abandona la propiedad de un host por parte del inquilino actual, sin eliminar el host en sí (idempotente)

host_id(obligatorio)

La lista de hosts se obtiene completa y luego se filtra/ordena/ pagina en memoria; los datos de Fleet se cachean durante 15 segundos, la información de propiedad se consulta en la base de datos en tiempo real sin caché. claim_hosts devuelve {claimed, waiting, rejected}: waiting son los declarados pero que aún no aparecen en Fleet, rejected son los identificadores que ya han sido declarados por otro inquilino.

Scripts

Herramienta

Función

Parámetros

mspbotsfleet_list_scripts

Lista los scripts del inquilino actual

page, per_page

mspbotsfleet_get_script

Obtiene el detalle del script (incluido el contenido)

script_id(obligatorio)

mspbotsfleet_create_script

Crea un script (el nombre de archivo debe terminar en .sh/.ps1). No idempotente: llamadas repetidas crean varios scripts

name(obligatorio), contents(obligatorio, ≤500KB)

mspbotsfleet_update_script

Reemplaza el contenido del script (el nombre de archivo no se puede cambiar)

script_id(obligatorio), contents(obligatorio)

mspbotsfleet_delete_script

Elimina el script (afecta a todos los hosts)

script_id(obligatorio)

mspbotsfleet_run_script

Ejecuta el script en el host

script_id(obligatorio), host_id(obligatorio), sync(por defecto false; si es true, espera ≤60s y devuelve el resultado)

mspbotsfleet_get_script_result

Consulta el resultado de la ejecución (exit_code nulo significa que aún no se ha enviado)

execution_id(obligatorio)

create_script/update_script solo devuelven {id, name}; el resto de campos, como las marcas de tiempo, requieren consultar mspbotsfleet_get_script/mspbotsfleet_list_scripts.

Consultas guardadas

Herramienta

Función

Parámetros

mspbotsfleet_list_queries

Lista las consultas del inquilino actual

page, per_page

mspbotsfleet_get_query

Obtiene el detalle de la consulta (incluido el SQL)

query_id(obligatorio)

mspbotsfleet_create_query

Crea una consulta guardada (solo se permite un único SELECT / WITH…SELECT). No idempotente: llamadas repetidas crean varias consultas

name(obligatorio), sql(obligatorio), description, platform(darwin/windows/linux)

mspbotsfleet_update_query

Actualiza la consulta (parcial, solo envía los campos a modificar)

query_id(obligatorio), name, sql, description, platform

mspbotsfleet_delete_query

Elimina la consulta y sus datos de informes

query_id(obligatorio)

mspbotsfleet_run_query

Ejecuta la consulta en tiempo real en los hosts y espera el resultado (≤45s)

query_id(obligatorio), host_ids(opcional, ≤50 hosts; si se omite, se toman los primeros 50 del inquilino actual)

Reglas de validación de SQL: solo se permite un único SELECT o WITH … SELECT; se elimina automáticamente el punto y coma final; si aparece ; en el cuerpo, se rechaza directamente. Estas validaciones las realiza el backend; este servicio no las repite.

Inicio rápido

Docker (recomendado)

docker compose up --build

El servidor se inicia en http://localhost:8080.

Local (uv)

uv sync
python -m mspbots_fleet_mcp

Comprobación de estado

curl http://localhost:8080/health
# {"status": "ok"}

No se requieren credenciales para el endpoint de estado.

Parámetros de autorización (Autenticación)

Cada petición a /mcp debe incluir las siguientes cabeceras HTTP (proporcionadas por el llamante MCP, de forma coherente con mspbots-agent-mcp / ticketqa-mcp):

Cabecera

Tipo

¿Obligatoria?

Descripción del campo

Ejemplo

X-MSP-Token

string

Obligatoria

Credencial de acceso emitida por Fleet Platform (token de portador JWT). Este servicio la reenvía tal cual como Authorization: Bearer <token> en la petición descendente.

X-MSP-Token: <jwt-bearer-token>

X-MSP-Tenant-Id

string

Obligatoria

Identificador del inquilino. Al reenviarse a la API descendente se renombra a la cabecera X_Tenant_ID (el inquilino también está incrustado en el JWT).

X-MSP-Tenant-Id: <tenant-id>

X-MSP-Host

string

Obligatoria

Host donde se encuentra la API de Fleet.

X-MSP-Host: https://agent.mspbots.ai

Si falta cualquiera de las tres cabeceras, se devuelve 401 Unauthorized.

La API de Fleet descendente devuelve 403 para fallos de autenticación (token ausente/firma incorrecta/roles insuficientes), no 401; el 401 solo ocurre en esta capa de servicio (cabeceras de puerta de enlace ausentes).

Variables de entorno

Variable

Por defecto

Descripción

MCP_HTTP_PORT

8080

Puerto de escucha

MCP_HTTP_HOST

0.0.0.0

Host de escucha

Endpoint MCP

POST http://localhost:8080/mcp

Conecta tu cliente MCP con:

  • Transporte: http (Streamable HTTP / SSE)

  • Cabeceras: X-MSP-Token, X-MSP-Tenant-Id, X-MSP-Host (todas obligatorias)

Ejemplo de prueba

curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "X-MSP-Token: <token>" \
  -H "X-MSP-Tenant-Id: <tenant-id>" \
  -H "X-MSP-Host: https://agent.mspbots.ai" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": { "name": "mspbotsfleet_list_hosts", "arguments": { "status": "online", "per_page": 10 } }
  }'

⚠️ Este repositorio es público; no incluyas tokens reales, identificadores de inquilino ni otra información sensible en ningún archivo confirmado. Los <token> / <tenant-id> anteriores son solo marcadores de posición.

Related MCP Connectors

Related MCP Servers