Jamf Pro MCP Server
Interactúa con Jamf Pro para tareas de gestión de dispositivos Apple.
Documentación
Jamf Pro MCP Server v2.2
Un servidor MCP (Model Context Protocol) integral que permite a los asistentes de IA interactuar con Jamf Pro para la gestión completa de dispositivos Apple. Funciona con Claude Desktop y ChatGPT (a través de MCP Connectors).
Dos modos: Modo Clásico (115 herramientas individuales) o Modo Código (2 herramientas + SDK de JavaScript en sandbox)
Novedades en v2.2
- Modo Código — un nuevo modelo de ejecución que expone solo 2 herramientas MCP (
jamf_search+jamf_execute) en lugar de 115 herramientas individuales. El agente escribe JavaScript que se ejecuta en un contextonode:vmen sandbox con un cliente de API de Jamf tipado, lo que permite flujos de trabajo complejos de varios pasos en una sola llamada de herramienta. Incluye control de acceso basado en capacidades, seguimiento de presupuesto, flujo de trabajo plan/aplicar y una puerta de aprobación para comandos de alto impacto. - Limitación de concurrencia —
ConcurrencyLimiterestilo semáforo (predeterminado 5, configurable medianteJAMF_MAX_CONCURRENCY) evita errores de límite de tasa 429. Se aplica tanto al cliente de API principal como al sandbox del Modo Código. - Caché de políticas — los resultados de
getPolicyDetailsahora se almacenan en caché para evitar llamadas API redundantes, con invalidación automática al escribir políticas. - Corrección de XML de grupos de computadoras estáticos —
createStaticComputerGroupyupdateStaticComputerGroupahora usan XML adecuado medianteXmlBuilder(con escape) en lugar de JSON roto o literales de plantilla sin procesar.
Qué incluye v2.1
- 115 herramientas (antes 56) — cobertura ampliada en toda la API de Jamf Pro y la API Clásica
- 12 recursos — todos devuelven datos en vivo, incluidos informes de cumplimiento, almacenamiento, versiones de SO, cifrado y parches
- 12 indicaciones de flujo de trabajo — plantillas guiadas para tareas administrativas comunes como incorporación, baja, auditorías de seguridad e implementaciones por fases
- Herramientas compuestas — operaciones de una sola llamada como
getFleetOverview,getDeviceFullProfile,getSecurityPostureygetPolicyAnalysisque combinan múltiples llamadas API en segundo plano - Autenticación con Bearer Token en la API Clásica — soporte completo de OAuth2 Client Credentials sin necesidad de usuario/contraseña
- Llamadas API en paralelo — las operaciones por lotes y las herramientas compuestas ejecutan solicitudes de forma concurrente para obtener resultados más rápidos
- Terminología correcta de Jamf — toda la documentación y las descripciones de herramientas se alinean con la documentación oficial para desarrolladores de Jamf
Inicio rápido
Para usuarios de Claude Desktop
git clone https://github.com/dbankscard/jamf-mcp-server.git
cd jamf-mcp-server
npm install
npm run build
Configure sus credenciales en Claude Desktop (consulte Configuración a continuación).
Para usuarios de ChatGPT
git clone https://github.com/dbankscard/jamf-mcp-server.git
cd jamf-mcp-server
./chatgpt/start-chatgpt-poc.sh
Consulte nuestra Guía de inicio rápido para ChatGPT para una configuración de 5 minutos.
Modo Código (Nuevo)
El Modo Código reemplaza 115 herramientas MCP individuales con solo 2:
| Herramienta | Propósito |
|---|---|
jamf_search | Descubrir métodos de API: buscar por palabra clave, explorar por categoría, ver firmas y capacidades requeridas |
jamf_execute | Ejecutar JavaScript en una VM en sandbox con acceso al cliente completo de la API de Jamf |
¿Por qué el Modo Código? Esta implementación está inspirada en el patrón de Modo Código de Cloudflare, que aborda una tensión fundamental en MCP: los agentes necesitan muchas herramientas para hacer trabajo útil, pero cada definición de herramienta consume tokens de la ventana de contexto. Cloudflare descubrió que exponer su API completa como herramientas MCP individuales consumiría más de 1 millón de tokens, más que toda la ventana de contexto de la mayoría de los modelos. Su solución: colapsar todo en un patrón search + execute donde los agentes descubren APIs bajo demanda y escriben código contra un SDK tipado, reduciendo el uso de tokens hasta en un 99,9%.
Aplicamos el mismo patrón a Jamf Pro. Nuestras 115 herramientas del Modo Clásico consumen ~14.000 tokens de definiciones de herramientas. El Modo Código lo reduce a ~500 tokens (2 definiciones de herramientas) manteniendo el acceso a toda la superficie de la API. El agente usa jamf_search para descubrir métodos y luego escribe JavaScript que se ejecuta en un contexto node:vm en sandbox. Esto también permite flujos de trabajo de varios pasos en una sola llamada de herramienta: encadenar llamadas API, filtrar resultados y crear informes sin viajes de ida y vuelta del LLM entre cada paso.
Características de seguridad:
- Flujo de trabajo Plan/Aplicar — ejecute con
mode: "plan"para previsualizar todas las escrituras sin ejecutarlas, luegomode: "apply"para confirmar - Acceso basado en capacidades — declare solo los permisos que su código necesita (
read:computers,write:policies,command:mdm, etc.) - Seguimiento de presupuesto — los límites automáticos de conteo de llamadas evitan bucles descontrolados
- Puerta de aprobación — los comandos de alto impacto (borrado, bloqueo, eliminación) requieren un token de aprobación explícito
- Limitación de concurrencia — las llamadas API tienen límite de tasa para evitar errores 429
Configuración del Modo Código
Use dist/index-code.js como punto de entrada en lugar de dist/index-main.js:
{
"mcpServers": {
"jamf-code": {
"command": "node",
"args": ["/absolute/path/to/jamf-mcp-server/dist/index-code.js"],
"env": {
"JAMF_URL": "https://your-instance.jamfcloud.com",
"JAMF_CLIENT_ID": "your-api-client-id",
"JAMF_CLIENT_SECRET": "your-api-client-secret"
}
}
}
}
Ejemplo del Modo Código
// Find all computers not checked in for 30 days
const computers = await jamf.getAllComputers(200);
const stale = computers.filter(c => helpers.daysSince(c.lastContactTime) > 30);
log(`Found ${stale.length} stale computers`);
return stale.map(c => ({ id: c.id, name: c.name, lastContact: c.lastContactTime }));
Comparativa del Modo Código vs Modo Clásico
Números reales de una instancia de Jamf Pro en vivo (npm run benchmark):
Sobrecarga de definiciones de herramientas
Cada conversación carga todas las definiciones de herramientas en la ventana de contexto del LLM. Menos herramientas = más espacio para trabajo real.
| Modo | Herramientas | Tamaño def. (bytes) | Tokens est. |
|---|---|---|---|
| Clásico | 115 | 55,639 | 13,910 |
| Código | 2 | 1,963 | 491 |
El Modo Código usa 28 veces menos tokens solo para definiciones de herramientas.
Resultados de escenarios
10 escenarios que cubren paridad de referencia, uniones entre dominios, auditorías de múltiples fuentes y flujos de trabajo imposibles en el Modo Clásico:
| # | Escenario | Modo | Viajes LLM | Tiempo (ms) | Completables |
|---|---|---|---|---|---|
| 1 | Búsqueda de un solo dispositivo | clásico | 1 | 308 | Sí |
| 1 | Búsqueda de un solo dispositivo | código | 1 | 241 | Sí |
| 2 | Perfil de dispositivo + registros de políticas | clásico | 1 | 276 | Sí |
| 2 | Perfil de dispositivo + registros de políticas | código | 1 | 228 | Sí |
| 3 | Auditoría de scripts huérfanos | clásico | 2 | 131 | Sí |
| 3 | Auditoría de scripts huérfanos | código | 1 | 172 | Sí |
| 4 | Políticas dirigidas a un grupo | clásico | 2 | 133 | Sí |
| 4 | Políticas dirigidas a un grupo | código | 1 | 2,611 | Sí |
| 5 | Versión de SO por departamento | clásico | N/A | N/A | No |
| 5 | Versión de SO por departamento | código | 1 | 1,073 | Sí |
| 6 | Auditoría de seguridad completa | clásico | 4 | 62,945 | Sí |
| 6 | Auditoría de seguridad completa | código | 1 | 6,936 | Sí |
| 7 | Comparación de políticas | clásico | 2 | 221 | Sí |
| 7 | Comparación de políticas | código | 1 | 115 | Sí |
| 8 | Dispositivos obsoletos + detalles (top 10) | clásico | 1 | 1,017 | Sí |
| 8 | Dispositivos obsoletos + detalles (top 10) | código | 1 | 4 | Sí |
| 9 | Auditoría de dependencias de paquetes | clásico | 1 | 15,639 | Sí |
| 9 | Auditoría de dependencias de paquetes | código | 1 | 15,015 | Sí |
| 10 | Grupo + FileVault + filtro de SO | clásico | N/A | N/A | No |
| 10 | Grupo + FileVault + filtro de SO | código | 1 | 187 | Sí |
Modo Código: 10/10 completables. Modo Clásico: 8/10.
Conclusiones clave:
- Sobrecarga de definiciones de herramientas: el Modo Clásico consume ~14K tokens de la ventana de contexto solo para definiciones de herramientas, antes de comenzar cualquier trabajo. El Modo Código usa ~500 tokens.
- Flujos de trabajo imposibles: los escenarios 5 y 10 requieren uniones entre recursos (versión de SO × departamento, miembros de grupo × FileVault × filtro de SO) que el Modo Clásico simplemente no puede expresar en llamadas de herramientas acotadas.
- Flujos de trabajo de varios pasos: la auditoría de seguridad (S6) pasa de 4 viajes secuenciales del LLM a 1. La comparación de políticas (S7) pasa de 2 a 1. Cada viaje ahorrado elimina segundos de latencia de inferencia del LLM.
- Uniones entre dominios: los scripts huérfanos (S3), las políticas con alcance de grupo (S4) y las dependencias de paquetes (S9) requieren obtener una lista y luego recuperar los detalles de N elementos, un patrón que obliga al Modo Clásico a realizar N llamadas secuenciales al LLM. El Modo Código lo hace en 1.
- Búsquedas simples: aproximadamente equivalentes. Las herramientas especializadas del Modo Clásico tienen ligeramente menos sobrecarga para operaciones de una sola llamada.
- Nota de escalado: estos resultados provienen de una instancia pequeña de Jamf. En un parque de producción con cientos de políticas y dispositivos, los conteos de viajes del Modo Clásico para S3/S4/S8/S9 alcanzarían 10–20+, elevando la reducción promedio de viajes del LLM muy por encima del 80%.
Ejecute la comparativa usted mismo:
npm run benchmark # all 10 scenarios
npm run benchmark -- --scenarios 1,5,10 # run a subset
# requires JAMF_URL, JAMF_CLIENT_ID, JAMF_CLIENT_SECRET
Modo Clásico (115 herramientas)
Qué puede hacer
Haga preguntas en lenguaje natural sobre su parque de dispositivos Jamf:
- "¿Cómo está mi parque de dispositivos?" — usa
getFleetOverviewpara un resumen de una sola llamada - "Cuéntame sobre LAPTOP-001" — usa
getDeviceFullProfilepara resolver por nombre, número de serie o ID - "¿Cuál es nuestra postura de seguridad?" — usa
getSecurityPosturepara análisis de cifrado y cumplimiento - "¿Cómo está funcionando la política de instalación de software?" — usa
getPolicyAnalysiscon resolución automática por nombre - "Encuentra todos los dispositivos que no han reportado en 30 días"
- "Implementa actualizaciones de software para el equipo de marketing"
- "Recupera la contraseña LAPS de este dispositivo"
- "Muéstrame el cumplimiento de parches en todo el parque de dispositivos"
Herramientas (115)
Herramientas compuestas (comience aquí)
Estas combinan múltiples llamadas API en una sola operación:
- getFleetOverview: resumen integral del parque de dispositivos: conteos de inventario, tasas de cumplimiento y estado de dispositivos móviles en una sola llamada
- getDeviceFullProfile: perfil completo del dispositivo por nombre, número de serie o ID: resuelve automáticamente y obtiene detalles, registros de políticas e historial en paralelo
- getSecurityPosture: análisis de seguridad del parque de dispositivos: tasas de cifrado FileVault, estado de cumplimiento y actualidad de versiones de SO
- getPolicyAnalysis: análisis de políticas por ID o nombre: configuración, alcance, cumplimiento y rendimiento
Gestión de dispositivos
- searchDevices: encuentra dispositivos por nombre, número de serie, dirección IP o nombre de usuario
- getDeviceDetails: información detallada del dispositivo por ID
- checkDeviceCompliance: encuentra dispositivos que no han reportado en X días
- getDevicesBatch: obtiene detalles de múltiples dispositivos en una sola solicitud
- updateInventory: fuerza una actualización de inventario en un dispositivo
Historial de computadoras y comandos MDM
- getComputerHistory: historial completo de la computadora: registros de políticas, comandos MDM, eventos de auditoría, uso compartido de pantalla, cambios de usuario/ubicación
- getComputerPolicyLogs: registros de ejecución de políticas que muestran éxito/fallo por dispositivo
- getComputerMDMCommandHistory: historial de comandos MDM con estado y marcas de tiempo
- sendComputerMDMCommand: envía comandos MDM a macOS: bloqueo, borrado, reinicio, apagado, escritorio remoto (requiere confirmación)
- flushMDMCommands: limpia comandos MDM pendientes/fallidos para desbloquear dispositivos (requiere confirmación)
Gestión de políticas
- listPolicies: lista todas las políticas con filtro de categoría opcional
- getPolicyDetails: información detallada de la política, incluidos alcance, scripts y paquetes
- searchPolicies: busca políticas por nombre
- executePolicy: ejecuta una política en dispositivos específicos (requiere confirmación)
- createPolicy: crea una nueva política con configuración completa (requiere confirmación)
- updatePolicy: actualiza una política existente (requiere confirmación)
- clonePolicy: clona una política con un nuevo nombre (requiere confirmación)
- setPolicyEnabled: habilita o deshabilita una política (requiere confirmación)
- updatePolicyScope: agrega/elimina computadoras y grupos del alcance de la política (requiere confirmación)
- deletePolicy: elimina una política (requiere confirmación)
Gestión de Scripts
- listScripts: Listar todos los scripts
- searchScripts: Buscar scripts por nombre
- getScriptDetails: Contenido completo del script, parámetros y metadatos
- deployScript: Ejecutar un script en dispositivos (requiere confirmación)
- createScript: Crear un nuevo script (requiere confirmación)
- updateScript: Actualizar un script existente (requiere confirmación)
- deleteScript: Eliminar un script (requiere confirmación)
Gestión de Perfiles de Configuración
- listConfigurationProfiles: Listar perfiles (computadora o dispositivo móvil)
- getConfigurationProfileDetails: Información detallada del perfil
- searchConfigurationProfiles: Buscar perfiles por nombre
- deployConfigurationProfile: Implementar un perfil en dispositivos (requiere confirmación)
- removeConfigurationProfile: Eliminar un perfil de los dispositivos (requiere confirmación)
- deleteConfigurationProfile: Eliminar un perfil de configuración (requiere confirmación)
Gestión de Paquetes
- listPackages: Listar todos los paquetes
- searchPackages: Buscar paquetes por nombre
- getPackageDetails: Información detallada del paquete
- getPackageDeploymentHistory: Historial de implementación mediante análisis de políticas
- getPoliciesUsingPackage: Encontrar todas las políticas que utilizan un paquete específico
- getPackageDeploymentStats: Estadísticas de implementación y análisis de alcance
Gestión de Grupos de Computadoras
- listComputerGroups: Listar grupos (inteligentes, estáticos o todos)
- getComputerGroupDetails: Detalles del grupo, incluida la membresía y los criterios de grupos inteligentes
- searchComputerGroups: Buscar grupos por nombre
- getComputerGroupMembers: Listar todos los miembros de un grupo
- createStaticComputerGroup: Crear un grupo estático (requiere confirmación)
- updateStaticComputerGroup: Actualizar la membresía del grupo (requiere confirmación)
- deleteComputerGroup: Eliminar un grupo (requiere confirmación)
Búsquedas Avanzadas de Computadoras
- listAdvancedComputerSearches: Listar todas las búsquedas avanzadas guardadas
- getAdvancedComputerSearchDetails: Obtener la configuración y los resultados de la búsqueda
- createAdvancedComputerSearch: Crear una nueva búsqueda avanzada (requiere confirmación)
- deleteAdvancedComputerSearch: Eliminar una búsqueda guardada (requiere confirmación)
Gestión de Dispositivos Móviles
- searchMobileDevices: Buscar dispositivos móviles por nombre, número de serie o UDID
- getMobileDeviceDetails: Información detallada del dispositivo móvil
- listMobileDevices: Listar todos los dispositivos móviles
- listMobileDeviceApplications: Listar aplicaciones de dispositivos móviles configuradas para entrega
- getMobileDeviceApplicationDetails: Obtener una definición de aplicación móvil entregada y detalles de alcance
- updateMobileDeviceInventory: Forzar la actualización de inventario en un dispositivo móvil
- sendMDMCommand: Enviar comandos MDM — bloqueo, borrado, borrar código de acceso, modo perdido, configuración (requiere confirmación)
- listMobileDeviceGroups: Listar grupos de dispositivos móviles
- getMobileDeviceGroupDetails: Detalles del grupo, incluida la membresía
Informes y Analítica
- getInventorySummary: Resumen de inventario de la flota — recuentos de dispositivos, distribución de SO, distribución de modelos
- getDeviceComplianceSummary: Resumen de cumplimiento — tasas de registro, políticas fallidas, software faltante
- getPolicyComplianceReport: Cumplimiento de políticas — tasas de éxito/fallo, cobertura de alcance
- getSoftwareVersionReport: Distribución de versiones de software en los dispositivos
Edificios, Departamentos y Categorías
- listBuildings / getBuildingDetails: Edificios organizativos para alcance multisitio
- listDepartments / getDepartmentDetails: Departamentos para alcance e informes
- listCategories / getCategoryDetails: Categorías para organizar políticas, scripts y perfiles
Solución de Contraseña de Administrador Local (LAPS)
- getLocalAdminPassword: Recuperar la contraseña LAPS actual de un dispositivo (requiere confirmación)
- getLocalAdminPasswordAudit: Registro de auditoría de vistas y rotaciones de contraseñas
- getLocalAdminPasswordAccounts: Listar cuentas gestionadas por LAPS en un dispositivo
Gestión de Parches
- listPatchSoftwareTitles: Listar configuraciones de títulos de software de parches
- getPatchSoftwareTitleDetails: Detalles del título de parche con versiones y definiciones
- listPatchPolicies: Listar políticas de parches con estado de implementación
- getPatchPolicyDashboard: Panel de cumplimiento de parches — última versión, pendientes, fallidos
Atributos Extendidos
- listComputerExtensionAttributes: Listar todos los atributos extendidos personalizados
- getComputerExtensionAttributeDetails: Detalles completos del EA, incluido el contenido del script
- createComputerExtensionAttribute: Crear un nuevo atributo extendido (requiere confirmación)
- updateComputerExtensionAttribute: Actualizar un atributo extendido (requiere confirmación)
- deleteComputerExtensionAttribute: Eliminar un atributo extendido (requiere confirmación)
Actualizaciones de Software Gestionadas
- listSoftwareUpdatePlans: Listar planes de actualización de SO activos y completados
- createSoftwareUpdatePlan: Crear un plan de actualización de SO para dispositivos específicos (requiere confirmación)
- getSoftwareUpdatePlanDetails: Estado del plan de actualización y progreso del dispositivo
Inscripciones PreStage
- listComputerPrestages / getComputerPrestageDetails / getComputerPrestageScope: Configuración de inscripción PreStage de computadoras y asignaciones de dispositivos
- listMobilePrestages / getMobilePrestageDetails: Inscripciones PreStage de dispositivos móviles
Segmentos de Red
- listNetworkSegments: Listar segmentos de red para gestión basada en ubicación
- getNetworkSegmentDetails: Detalles del segmento, incluidos rangos de IP y asignación de edificio
Cuentas y Usuarios
- listAccounts / getAccountDetails / getAccountGroupDetails: Cuentas de administrador de Jamf Pro y grupos con privilegios
- listUsers / getUserDetails / searchUsers: Registros de usuarios finales (no cuentas de administrador)
Instaladores de Aplicaciones
- listAppInstallers: Listar títulos del Catálogo de Aplicaciones de Jamf
- getAppInstallerDetails: Información detallada del instalador de aplicaciones
Software Restringido
- listRestrictedSoftware: Listar entradas de software restringido
- getRestrictedSoftwareDetails: Detalles de configuración de software restringido
- createRestrictedSoftware: Crear una nueva entrada de software restringido (requiere confirmación)
- updateRestrictedSoftware: Actualizar una entrada de software restringido existente (requiere confirmación)
- deleteRestrictedSoftware: Eliminar una entrada de software restringido (requiere confirmación)
Webhooks
- listWebhooks: Listar webhooks configurados
- getWebhookDetails: Detalles de configuración del webhook
Recursos (12)
| URI del Recurso | Descripción |
|---|---|
jamf://inventory/computers | Inventario de computadoras paginado |
jamf://inventory/mobile-devices | Inventario de dispositivos móviles paginado |
jamf://reports/compliance | Informe de cumplimiento de seguridad y parches |
jamf://reports/mobile-device-compliance | Cumplimiento de dispositivos móviles y estado de gestión |
jamf://reports/storage | Analítica de uso de disco |
jamf://reports/os-versions | Desglose de versiones de SO |
jamf://reports/patch-compliance | Cumplimiento de parches en toda la flota por título de software |
jamf://reports/encryption-status | Cumplimiento de cifrado FileVault |
jamf://reports/extension-attributes | Resumen de la colección de Atributos Extendidos |
jamf://inventory/prestages | Resumen de asignaciones de inscripción PreStage |
jamf://reports/failed-mdm-commands | Dispositivos con comandos MDM atascados o fallidos |
jamf://reports/laps-audit | Registro de auditoría de acceso a contraseñas LAPS |
Prompts (12 Plantillas de Flujo de Trabajo)
| Prompt | Descripción |
|---|---|
troubleshoot-device | Solución de problemas de dispositivos paso a paso |
deploy-software | Flujo de trabajo de implementación de software |
compliance-check | Informes de cumplimiento integrales |
mass-update | Operaciones masivas de dispositivos |
storage-cleanup | Gestión de espacio en disco |
security-audit | Auditoría completa de postura de seguridad — cifrado, actualidad del SO, cumplimiento, políticas fallidas |
new-device-onboarding | Verificar nueva inscripción de dispositivos — perfiles, políticas, membresías de grupos |
device-offboarding | Retiro de dispositivos — excluir del alcance, borrar/bloquear, retirar del inventario |
software-update-review | Revisión de distribución de versiones de SO y planificación de actualizaciones |
fleet-health-dashboard | Salud integral de la flota — dispositivos, cumplimiento, almacenamiento, SO, móviles |
investigate-device-issue | Investigación profunda de dispositivos — perfiles, políticas, grupos, scripts |
policy-rollout | Implementación de políticas por fases — clonar, grupo de prueba, verificar, expandir a producción |
Habilidades (Integración con ChatGPT)
Operaciones avanzadas de múltiples pasos para el conector de ChatGPT:
- skill_device_search: Búsqueda inteligente de dispositivos con procesamiento de lenguaje natural
- skill_find_outdated_devices: Identificar dispositivos que no se registran
- skill_batch_inventory_update: Actualizar múltiples dispositivos de manera eficiente
- skill_deploy_policy_by_criteria: Implementar políticas según criterios de dispositivos
- skill_scheduled_compliance_check: Informes de cumplimiento automatizados
Configuración
Autenticación de la API de Jamf Pro
- En Jamf Pro, vaya a Configuración > Sistema > Roles y Clientes de API
- Cree un nuevo Rol de API con los permisos necesarios
- Cree un nuevo Cliente de API — anote el ID del Cliente y genere un Secreto del Cliente
Configuración de Claude Desktop
Agregue a su archivo de configuración de Claude Desktop:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"jamf-pro": {
"command": "node",
"args": ["/absolute/path/to/jamf-mcp-server/dist/index-main.js"],
"env": {
"JAMF_URL": "https://your-instance.jamfcloud.com",
"JAMF_CLIENT_ID": "your-api-client-id",
"JAMF_CLIENT_SECRET": "your-api-client-secret"
}
}
}
}
Configuración de ChatGPT
Consulte Configuración del Conector de ChatGPT para obtener instrucciones detalladas.
Modo Mejorado (Opcional)
{
"env": {
"JAMF_USE_ENHANCED_MODE": "true",
"JAMF_MAX_CONCURRENCY": "5",
"JAMF_MAX_RETRIES": "3",
"JAMF_RETRY_DELAY": "1000",
"JAMF_RETRY_MAX_DELAY": "10000",
"JAMF_DEBUG_MODE": "false",
"JAMF_ENABLE_RETRY": "true",
"JAMF_ENABLE_RATE_LIMITING": "false",
"JAMF_ENABLE_CIRCUIT_BREAKER": "false",
"JAMF_READ_ONLY": "false"
}
}
Instalación
git clone https://github.com/dbankscard/jamf-mcp-server.git
cd jamf-mcp-server
npm install
npm run build
Desarrollo
npm run dev # Run in development mode
npm run build:force # Build without tests
npm test # Run tests
Seguridad
- Modo de Solo Lectura: Establezca
JAMF_READ_ONLY=truepara evitar cualquier modificación - Confirmación Requerida: Todas las operaciones destructivas requieren
confirm: trueexplícito - Anotaciones de Herramientas: Cada herramienta declara
readOnlyHintydestructiveHintpara seguridad del lado del cliente - Autenticación con Credenciales de Cliente: Admite roles y clientes de la API de Jamf Pro
- Limitación de Concurrencia: Previene errores de límite de velocidad 429 (5 concurrentes por defecto, configurable mediante
JAMF_MAX_CONCURRENCY) - Entorno Aislado de Modo Código: Aislamiento de
node:vm— sin acceso arequire,import,fetch,fsoprocess - Limitación de Velocidad: Limitador de velocidad integrado opcional
- Disyuntor: Disyuntor opcional para protección contra fallos
Permisos de API Recomendados
Para funcionalidad completa:
- Acceso de lectura a computadoras, políticas, scripts, perfiles de configuración, paquetes, dispositivos móviles, edificios, departamentos, categorías, Atributos Extendidos, Gestión de Parches, Inscripciones PreStage, segmentos de red, cuentas, usuarios, webhooks
- Acceso a contraseñas LAPS (para herramientas LAPS)
- Acceso de actualización para actualizaciones de inventario, políticas, scripts, atributos extendidos
- Acceso de ejecución para políticas, scripts y comandos MDM
Para modo de solo lectura:
- Solo acceso de lectura a todos los recursos
Arquitectura
┌─ Classic Mode (110 tools) ──┐
Claude Desktop ──> │ MCP Server (stdio) │──> Jamf Pro API
├─ Code Mode (2 tools) ────────┤
│ jamf_search + jamf_execute │──> (sandboxed VM) ──> Jamf Pro API
└──────────────────────────────┘
ChatGPT ──> Tunnel (Cloudflare) ──> MCP Server (HTTP) ──> Jamf Pro API
El servidor utiliza un cliente API híbrido que admite tanto la API de Jamf Pro como la API Clásica, con respaldo automático entre ambas para máxima compatibilidad entre versiones de Jamf Pro. Todas las llamadas API pasan por un limitador de concurrencia para prevenir errores de límite de velocidad.
Solución de Problemas
Problemas de Autenticación
- Verifique sus credenciales de API (ID del Cliente y Secreto)
- Asegúrese de que el cliente de API tenga los permisos requeridos
- Para endpoints de la API Clásica, el servidor utiliza automáticamente autenticación con Token Bearer
Errores 503 en la API Clásica
- Si utiliza solo Credenciales de Cliente (sin nombre de usuario/contraseña), asegúrese de estar ejecutando v2.1+ que admite autenticación con Token Bearer en endpoints de la API Clásica
Tiempos de Espera en Herramientas Compuestas
- El tiempo de espera de solicitud predeterminado es de 30 segundos
- Herramientas compuestas como
getFleetOverviewrealizan llamadas API en paralelo y pueden necesitar más tiempo en instancias más lentas
Contribuciones
¡Las contribuciones son bienvenidas! Por favor:
- Haga un fork del repositorio
- Cree una rama de funcionalidad
- Agregue pruebas para la nueva funcionalidad
- Envíe una solicitud de extracción
Licencia
MIT
Recursos
- Documentación del Protocolo de Contexto de Modelo
- Documentación de la API de Jamf Pro
- Conectores MCP de ChatGPT
- Servidores MCP de Claude Desktop
Soporte
Hecho con ❤️ para las comunidades de Jamf, Claude y ChatGPT