Jamf Pro MCP Server

Interaja com o Jamf Pro para tarefas de gerenciamento de dispositivos Apple.

Documentação

Servidor MCP Jamf Pro v2.2

MIT License Node.js Version TypeScript MCP SDK Tools Resources Prompts

Um servidor MCP (Model Context Protocol) abrangente que permite que assistentes de IA interajam com o Jamf Pro para gerenciamento completo de dispositivos Apple. Funciona com Claude Desktop e ChatGPT (via MCP Connectors).

Dois modos: Modo Clássico (115 ferramentas individuais) ou Modo Código (2 ferramentas + SDK JavaScript em sandbox)

Novidades na v2.2

  • Modo Código — um novo modelo de execução que expõe apenas 2 ferramentas MCP (jamf_search + jamf_execute) em vez de 115 ferramentas individuais. O agente escreve JavaScript que roda em um contexto node:vm em sandbox com um cliente de API Jamf tipado, permitindo fluxos de trabalho complexos de múltiplas etapas em uma única chamada de ferramenta. Inclui controle de acesso baseado em capacidades, rastreamento de orçamento, fluxo de trabalho plano/aplicação e um portão de aprovação para comandos de alto impacto.
  • Limitação de concorrência — ConcurrencyLimiter estilo semáforo (padrão 5, configurável via JAMF_MAX_CONCURRENCY) previne erros de limite de taxa 429. Aplicado tanto ao cliente de API principal quanto ao sandbox do Modo Código.
  • Cache de políticas — resultados de getPolicyDetails agora são armazenados em cache para evitar chamadas de API redundantes, com invalidação automática em gravações de políticas.
  • Correção de XML de grupo estático de computadores — createStaticComputerGroup e updateStaticComputerGroup agora usam XML adequado via XmlBuilder (com escape) em vez de JSON quebrado ou literais de template brutos.

O que há na v2.1

  • 115 ferramentas (antes 56) — cobertura expandida em toda a API Jamf Pro e API Clássica
  • 12 recursos — todos retornando dados ao vivo, incluindo conformidade, armazenamento, versões de SO, criptografia e relatórios de patches
  • 12 prompts de fluxo de trabalho — modelos guiados para tarefas administrativas comuns, como integração, desligamento, auditorias de segurança e implantações em fases
  • Ferramentas compostas — operações de chamada única como getFleetOverview, getDeviceFullProfile, getSecurityPosture e getPolicyAnalysis que combinam múltiplas chamadas de API nos bastidores
  • Autenticação Bearer Token na API Clássica — suporte completo a OAuth2 Client Credentials sem necessidade de usuário/senha
  • Chamadas de API paralelas — operações em lote e ferramentas compostas executam requisições simultaneamente para resultados mais rápidos
  • Terminologia Jamf correta — toda a documentação e descrições de ferramentas estão alinhadas com a documentação oficial de desenvolvedores Jamf

Tests

Início Rápido

Para Usuários do Claude Desktop

git clone https://github.com/dbankscard/jamf-mcp-server.git
cd jamf-mcp-server
npm install
npm run build

Configure suas credenciais no Claude Desktop (veja Configuração abaixo).

Para Usuários do ChatGPT

git clone https://github.com/dbankscard/jamf-mcp-server.git
cd jamf-mcp-server
./chatgpt/start-chatgpt-poc.sh

Veja nosso Guia de Início Rápido para ChatGPT para configuração em 5 minutos.

Modo Código (Novo)

O Modo Código substitui 115 ferramentas MCP individuais por apenas 2:

FerramentaPropósito
jamf_searchDescubra métodos de API — pesquise por palavra-chave, navegue por categoria, veja assinaturas e capacidades necessárias
jamf_executeExecute JavaScript em uma VM em sandbox com acesso ao cliente de API Jamf completo

Por que o Modo Código? Esta implementação é inspirada no padrão de Modo Código da Cloudflare, que aborda uma tensão fundamental no MCP: agentes precisam de muitas ferramentas para fazer trabalho útil, mas cada definição de ferramenta consome tokens do contexto. A Cloudflare descobriu que expor sua API completa como ferramentas MCP individuais consumiria mais de 1 milhão de tokens — mais do que a janela de contexto inteira da maioria dos modelos. A solução deles: condensar tudo em um padrão search + execute onde agentes descobrem APIs sob demanda e escrevem código contra um SDK tipado, reduzindo o uso de tokens em até 99,9%.

Aplicamos o mesmo padrão ao Jamf Pro. Nossas 115 ferramentas do Modo Clássico consomem ~14.000 tokens de definições de ferramentas. O Modo Código reduz isso para ~500 tokens (2 definições de ferramentas) mantendo acesso à superfície completa da API. O agente usa jamf_search para descobrir métodos e depois escreve JavaScript que roda em um contexto node:vm em sandbox. Isso também permite fluxos de trabalho de múltiplas etapas em uma única chamada de ferramenta — encadeando chamadas de API, filtrando resultados e construindo relatórios sem idas e voltas do LLM entre cada etapa.

Recursos de segurança:

  • Fluxo de trabalho Plano/Aplicação — execute com mode: "plan" para pré-visualizar todas as gravações sem executar, depois mode: "apply" para confirmar
  • Acesso baseado em capacidades — declare apenas as permissões que seu código precisa (read:computers, write:policies, command:mdm, etc.)
  • Rastreamento de orçamento — limites automáticos de contagem de chamadas previnem loops descontrolados
  • Portão de aprovação — comandos de alto impacto (apagar, bloquear, excluir) exigem um token de aprovação explícito
  • Limitação de concorrência — chamadas de API são limitadas por taxa para prevenir erros 429

Configuração do Modo Código

Use dist/index-code.js como ponto de entrada em vez 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"
      }
    }
  }
}

Exemplo do 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 }));

Benchmark: Modo Código vs Modo Clássico

Números reais de uma instância Jamf Pro ao vivo (npm run benchmark):

Sobrecarga de Definição de Ferramentas

Toda conversa carrega todas as definições de ferramentas na janela de contexto do LLM. Menos ferramentas = mais espaço para trabalho real.

ModoFerramentasTamanho da Def. (bytes)Tokens Estimados
Clássico11555.63913.910
Código21.963491

O Modo Código usa 28x menos tokens apenas para definições de ferramentas.

Resultados dos Cenários

10 cenários cobrindo paridade de linha de base, junções entre domínios, auditorias de múltiplas fontes e fluxos de trabalho impossíveis no Modo Clássico:

#CenárioModoViagens do LLMTempo (ms)Concluível
1Consulta de dispositivo únicoclássico1308Sim
1Consulta de dispositivo únicocódigo1241Sim
2Perfil do dispositivo + logs de políticasclássico1276Sim
2Perfil do dispositivo + logs de políticascódigo1228Sim
3Auditoria de scripts órfãosclássico2131Sim
3Auditoria de scripts órfãoscódigo1172Sim
4Políticas direcionadas a um grupoclássico2133Sim
4Políticas direcionadas a um grupocódigo12.611Sim
5Versão do SO por departamentoclássicoN/AN/ANão
5Versão do SO por departamentocódigo11.073Sim
6Auditoria de segurança completaclássico462.945Sim
6Auditoria de segurança completacódigo16.936Sim
7Comparação de políticasclássico2221Sim
7Comparação de políticascódigo1115Sim
8Dispositivos obsoletos + detalhes (top 10)clássico11.017Sim
8Dispositivos obsoletos + detalhes (top 10)código14Sim
9Auditoria de dependência de pacotesclássico115.639Sim
9Auditoria de dependência de pacotescódigo115.015Sim
10Grupo + FileVault + filtro de SOclássicoN/AN/ANão
10Grupo + FileVault + filtro de SOcódigo1187Sim

Modo Código: 10/10 concluível. Modo Clássico: 8/10.

Principais conclusões:

  • Sobrecarga de definição de ferramentas: O Modo Clássico consome ~14K tokens da janela de contexto apenas para definições de ferramentas — antes de qualquer trabalho começar. O Modo Código usa ~500 tokens.
  • Fluxos de trabalho impossíveis: Os cenários 5 e 10 exigem junções entre recursos (versão do SO × departamento, membros de grupo × FileVault × filtro de SO) que o Modo Clássico simplesmente não consegue expressar em chamadas de ferramentas limitadas.
  • Fluxos de trabalho de múltiplas etapas: A auditoria de segurança (S6) cai de 4 viagens sequenciais de ida e volta do LLM para 1. A comparação de políticas (S7) cai de 2 para 1. Cada viagem economizada elimina segundos de latência de inferência do LLM.
  • Junções entre domínios: Scripts órfãos (S3), políticas com escopo de grupo (S4) e dependências de pacotes (S9) exigem buscar uma lista e depois buscar detalhes de N itens — um padrão que força o Modo Clássico a N chamadas sequenciais do LLM. O Modo Código faz isso em 1.
  • Consultas simples: Aproximadamente equivalentes. As ferramentas específicas do Clássico têm um pouco menos de sobrecarga para operações de chamada única.
  • Nota sobre escala: Estes resultados são de uma instância Jamf pequena. Em uma frota de produção com centenas de políticas e dispositivos, as contagens de viagens do Modo Clássico para S3/S4/S8/S9 chegariam a 10–20+, empurrando a redução média de viagens de ida e volta do LLM para bem acima de 80%.

Execute o benchmark você mesmo:

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ássico (115 Ferramentas)

O Que Você Pode Fazer

Faça perguntas em linguagem natural sobre sua frota Jamf:

  • "Como está minha frota?" — usa getFleetOverview para um resumo em chamada única
  • "Fale sobre LAPTOP-001" — usa getDeviceFullProfile para resolver por nome, serial ou ID
  • "Qual é nossa postura de segurança?" — usa getSecurityPosture para análise de criptografia e conformidade
  • "Como está o desempenho da política Software Install?" — usa getPolicyAnalysis com resolução automática por nome
  • "Encontre todos os dispositivos que não fizeram check-in há 30 dias"
  • "Implante atualizações de software para o time de marketing"
  • "Recupere a senha LAPS deste dispositivo"
  • "Mostre a conformidade de patches em toda a frota"

Ferramentas (115)

Ferramentas Compostas (Comece Aqui)

Estas combinam múltiplas chamadas de API em uma única operação:

  • getFleetOverview: Resumo abrangente da frota — contagens de inventário, taxas de conformidade e status de dispositivos móveis em uma chamada
  • getDeviceFullProfile: Perfil completo do dispositivo por nome, serial ou ID — resolve automaticamente e busca detalhes, logs de políticas e histórico em paralelo
  • getSecurityPosture: Análise de segurança da frota — taxas de criptografia FileVault, status de conformidade e atualidade das versões de SO
  • getPolicyAnalysis: Análise de políticas por ID ou nome — configuração, escopo, conformidade e desempenho

Gerenciamento de Dispositivos

  • searchDevices: Encontre dispositivos por nome, número de série, endereço IP ou nome de usuário
  • getDeviceDetails: Informações detalhadas do dispositivo por ID
  • checkDeviceCompliance: Encontre dispositivos que não reportaram em X dias
  • getDevicesBatch: Obtenha detalhes de múltiplos dispositivos em uma única requisição
  • updateInventory: Force a atualização de inventário em um dispositivo

Histórico de Computadores e Comandos MDM

  • getComputerHistory: Histórico completo do computador — logs de políticas, comandos MDM, eventos de auditoria, compartilhamento de tela, mudanças de usuário/localização
  • getComputerPolicyLogs: Logs de execução de políticas mostrando sucesso/falha por dispositivo
  • getComputerMDMCommandHistory: Histórico de comandos MDM com status e carimbos de data/hora
  • sendComputerMDMCommand: Envie comandos MDM para macOS — bloquear, apagar, reiniciar, desligar, área de trabalho remota (requer confirmação)
  • flushMDMCommands: Limpe comandos MDM pendentes/com falha para destravar dispositivos (requer confirmação)

Gerenciamento de Políticas

  • listPolicies: Liste todas as políticas com filtro opcional por categoria
  • getPolicyDetails: Informações detalhadas da política, incluindo escopo, scripts e pacotes
  • searchPolicies: Pesquise políticas por nome
  • executePolicy: Execute uma política em dispositivos específicos (requer confirmação)
  • createPolicy: Crie uma nova política com configuração completa (requer confirmação)
  • updatePolicy: Atualize uma política existente (requer confirmação)
  • clonePolicy: Clone uma política com um novo nome (requer confirmação)
  • setPolicyEnabled: Ative ou desative uma política (requer confirmação)
  • updatePolicyScope: Adicione/remova computadores e grupos do escopo da política (requer confirmação)
  • deletePolicy: Exclua uma política (requer confirmação)

Gerenciamento de Scripts

  • listScripts: Listar todos os scripts
  • searchScripts: Pesquisar scripts por nome
  • getScriptDetails: Conteúdo completo do script, parâmetros e metadados
  • deployScript: Executar um script em dispositivos (requer confirmação)
  • createScript: Criar um novo script (requer confirmação)
  • updateScript: Atualizar um script existente (requer confirmação)
  • deleteScript: Excluir um script (requer confirmação)

Gerenciamento de Perfis de Configuração

  • listConfigurationProfiles: Listar perfis (computador ou dispositivo móvel)
  • getConfigurationProfileDetails: Informações detalhadas do perfil
  • searchConfigurationProfiles: Pesquisar perfis por nome
  • deployConfigurationProfile: Implantar um perfil em dispositivos (requer confirmação)
  • removeConfigurationProfile: Remover um perfil dos dispositivos (requer confirmação)
  • deleteConfigurationProfile: Excluir um perfil de configuração (requer confirmação)

Gerenciamento de Pacotes

  • listPackages: Listar todos os pacotes
  • searchPackages: Pesquisar pacotes por nome
  • getPackageDetails: Informações detalhadas do pacote
  • getPackageDeploymentHistory: Histórico de implantação via análise de políticas
  • getPoliciesUsingPackage: Encontrar todas as políticas que usam um pacote específico
  • getPackageDeploymentStats: Estatísticas de implantação e análise de escopo

Gerenciamento de Grupos de Computadores

  • listComputerGroups: Listar grupos (inteligentes, estáticos ou todos)
  • getComputerGroupDetails: Detalhes do grupo, incluindo associação e critérios de grupo inteligente
  • searchComputerGroups: Pesquisar grupos por nome
  • getComputerGroupMembers: Listar todos os membros de um grupo
  • createStaticComputerGroup: Criar um grupo estático (requer confirmação)
  • updateStaticComputerGroup: Atualizar associação ao grupo (requer confirmação)
  • deleteComputerGroup: Excluir um grupo (requer confirmação)

Pesquisas Avançadas de Computadores

  • listAdvancedComputerSearches: Listar todas as pesquisas avançadas salvas
  • getAdvancedComputerSearchDetails: Obter configuração e resultados da pesquisa
  • createAdvancedComputerSearch: Criar uma nova pesquisa avançada (requer confirmação)
  • deleteAdvancedComputerSearch: Excluir uma pesquisa salva (requer confirmação)

Gerenciamento de Dispositivos Móveis

  • searchMobileDevices: Pesquisar dispositivos móveis por nome, serial ou UDID
  • getMobileDeviceDetails: Informações detalhadas do dispositivo móvel
  • listMobileDevices: Listar todos os dispositivos móveis
  • listMobileDeviceApplications: Listar aplicativos de dispositivos móveis configurados para entrega
  • getMobileDeviceApplicationDetails: Obter uma definição de aplicativo móvel entregue e detalhes de escopo
  • updateMobileDeviceInventory: Forçar atualização de inventário em um dispositivo móvel
  • sendMDMCommand: Enviar comandos MDM — bloqueio, apagamento, limpeza de senha, modo perdido, configurações (requer confirmação)
  • listMobileDeviceGroups: Listar grupos de dispositivos móveis
  • getMobileDeviceGroupDetails: Detalhes do grupo, incluindo associação

Relatórios e Análises

  • getInventorySummary: Resumo do inventário da frota — contagens de dispositivos, distribuição de SO, distribuição de modelos
  • getDeviceComplianceSummary: Resumo de conformidade — taxas de check-in, políticas com falha, software ausente
  • getPolicyComplianceReport: Conformidade de políticas — taxas de sucesso/falha, cobertura de escopo
  • getSoftwareVersionReport: Distribuição de versões de software entre dispositivos

Prédios, Departamentos e Categorias

  • listBuildings / getBuildingDetails: Prédios organizacionais para escopo multi-site
  • listDepartments / getDepartmentDetails: Departamentos para escopo e relatórios
  • listCategories / getCategoryDetails: Categorias para organizar políticas, scripts e perfis

Solução de Senha de Administrador Local (LAPS)

  • getLocalAdminPassword: Recuperar a senha LAPS atual de um dispositivo (requer confirmação)
  • getLocalAdminPasswordAudit: Trilha de auditoria de visualizações e rotações de senha
  • getLocalAdminPasswordAccounts: Listar contas gerenciadas por LAPS em um dispositivo

Gerenciamento de Patches

  • listPatchSoftwareTitles: Listar configurações de títulos de software de patch
  • getPatchSoftwareTitleDetails: Detalhes do título de patch com versões e definições
  • listPatchPolicies: Listar políticas de patch com status de implantação
  • getPatchPolicyDashboard: Painel de conformidade de patch — versão mais recente, pendente, com falha

Atributos de Extensão

  • listComputerExtensionAttributes: Listar todos os atributos de extensão personalizados
  • getComputerExtensionAttributeDetails: Detalhes completos do EA, incluindo conteúdo do script
  • createComputerExtensionAttribute: Criar um novo atributo de extensão (requer confirmação)
  • updateComputerExtensionAttribute: Atualizar um atributo de extensão (requer confirmação)
  • deleteComputerExtensionAttribute: Excluir um atributo de extensão (requer confirmação)

Atualizações de Software Gerenciadas

  • listSoftwareUpdatePlans: Listar planos de atualização de SO ativos e concluídos
  • createSoftwareUpdatePlan: Criar um plano de atualização de SO para dispositivos específicos (requer confirmação)
  • getSoftwareUpdatePlanDetails: Status do plano de atualização e progresso do dispositivo

Inscrições PreStage

  • listComputerPrestages / getComputerPrestageDetails / getComputerPrestageScope: Configuração de inscrição PreStage de computadores e atribuições de dispositivos
  • listMobilePrestages / getMobilePrestageDetails: Inscrições PreStage de dispositivos móveis

Segmentos de Rede

  • listNetworkSegments: Listar segmentos de rede para gerenciamento baseado em localização
  • getNetworkSegmentDetails: Detalhes do segmento, incluindo faixas de IP e atribuição de prédio

Contas e Usuários

  • listAccounts / getAccountDetails / getAccountGroupDetails: Contas de administrador do Jamf Pro e grupos com privilégios
  • listUsers / getUserDetails / searchUsers: Registros de usuários finais (não contas de administrador)

Instaladores de Aplicativos

  • listAppInstallers: Listar títulos do Catálogo de Aplicativos Jamf
  • getAppInstallerDetails: Informações detalhadas do instalador de aplicativo

Software Restrito

  • listRestrictedSoftware: Listar entradas de software restrito
  • getRestrictedSoftwareDetails: Detalhes da configuração de software restrito
  • createRestrictedSoftware: Criar uma nova entrada de software restrito (requer confirmação)
  • updateRestrictedSoftware: Atualizar uma entrada de software restrito existente (requer confirmação)
  • deleteRestrictedSoftware: Excluir uma entrada de software restrito (requer confirmação)

Webhooks

  • listWebhooks: Listar webhooks configurados
  • getWebhookDetails: Detalhes da configuração do webhook

Recursos (12)

URI do RecursoDescrição
jamf://inventory/computersInventário paginado de computadores
jamf://inventory/mobile-devicesInventário paginado de dispositivos móveis
jamf://reports/complianceRelatório de conformidade de segurança e patches
jamf://reports/mobile-device-complianceStatus de conformidade e gerenciamento de dispositivos móveis
jamf://reports/storageAnálises de uso de disco
jamf://reports/os-versionsDistribuição de versões do SO
jamf://reports/patch-complianceConformidade de patches em toda a frota por título de software
jamf://reports/encryption-statusConformidade de criptografia FileVault
jamf://reports/extension-attributesResumo da coleção de Atributos de Extensão
jamf://inventory/prestagesVisão geral das atribuições de inscrição PreStage
jamf://reports/failed-mdm-commandsDispositivos com comandos MDM travados ou com falha
jamf://reports/laps-auditTrilha de auditoria de acesso à senha LAPS

Prompts (12 Modelos de Fluxo de Trabalho)

PromptDescrição
troubleshoot-deviceSolução de problemas de dispositivos passo a passo
deploy-softwareFluxo de trabalho de implantação de software
compliance-checkRelatórios abrangentes de conformidade
mass-updateOperações em lote de dispositivos
storage-cleanupGerenciamento de espaço em disco
security-auditAuditoria completa de postura de segurança — criptografia, atualização do SO, conformidade, políticas com falha
new-device-onboardingVerificar nova inscrição de dispositivo — perfis, políticas, associações de grupo
device-offboardingDesligamento de dispositivo — remover escopo, apagar/bloquear, aposentar do inventário
software-update-reviewRevisão da distribuição de versões do SO e planejamento de atualização
fleet-health-dashboardSaúde abrangente da frota — dispositivos, conformidade, armazenamento, SO, móvel
investigate-device-issueInvestigação aprofundada de dispositivo — perfis, políticas, grupos, scripts
policy-rolloutImplantação de política em etapas — clonar, grupo de teste, verificar, expandir para produção

Habilidades (Integração ChatGPT)

Operações avançadas de múltiplas etapas para o conector ChatGPT:

  • skill_device_search: Pesquisa inteligente de dispositivos com processamento de linguagem natural
  • skill_find_outdated_devices: Identificar dispositivos que não estão fazendo check-in
  • skill_batch_inventory_update: Atualizar vários dispositivos de forma eficiente
  • skill_deploy_policy_by_criteria: Implantar políticas com base em critérios de dispositivo
  • skill_scheduled_compliance_check: Relatórios automatizados de conformidade

Configuração

Autenticação da API do Jamf Pro

  1. No Jamf Pro, vá para Configurações > Sistema > Funções e Clientes de API
  2. Crie uma nova Função de API com as permissões necessárias
  3. Crie um novo Cliente de API — anote o ID do Cliente e gere um Segredo do Cliente

Configuração do Claude Desktop

Adicione ao seu arquivo de configuração do 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"
      }
    }
  }
}

Configuração do ChatGPT

Consulte Configuração do Conector ChatGPT para instruções detalhadas.

Modo Aprimorado (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"
  }
}

Instalação

git clone https://github.com/dbankscard/jamf-mcp-server.git
cd jamf-mcp-server
npm install
npm run build

Desenvolvimento

npm run dev          # Run in development mode
npm run build:force  # Build without tests
npm test             # Run tests

Segurança

  • Modo Somente Leitura: Defina JAMF_READ_ONLY=true para impedir qualquer modificação
  • Confirmação Necessária: Todas as operações destrutivas exigem confirm: true explícito
  • Anotações de Ferramentas: Cada ferramenta declara readOnlyHint e destructiveHint para segurança no lado do cliente
  • Autenticação com Credenciais do Cliente: Suporta funções e clientes da API do Jamf Pro
  • Limitação de Concorrência: Evita erros de limite de taxa 429 (padrão de 5 concorrentes, configurável via JAMF_MAX_CONCURRENCY)
  • Sandbox do Modo de Código: Isolamento node:vm — sem acesso a require, import, fetch, fs ou process
  • Limitação de Taxa: Limitador de taxa integrado opcional
  • Disjuntor: Disjuntor opcional para proteção contra falhas

Permissões de API Recomendadas

Para funcionalidade completa:

  • Acesso de leitura a computadores, políticas, scripts, perfis de configuração, pacotes, dispositivos móveis, prédios, departamentos, categorias, Atributos de Extensão, Gerenciamento de Patches, Inscrições PreStage, segmentos de rede, contas, usuários, webhooks
  • Acesso à senha LAPS (para ferramentas LAPS)
  • Acesso de atualização para atualizações de inventário, políticas, scripts, atributos de extensão
  • Acesso de execução para políticas, scripts e comandos MDM

Para modo somente leitura:

  • Acesso de leitura a todos os recursos apenas

Arquitetura

                    ┌─ 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

O servidor usa um cliente de API híbrido que suporta tanto a API do Jamf Pro quanto a API Clássica, com fallback automático entre elas para máxima compatibilidade entre versões do Jamf Pro. Todas as chamadas de API passam por um limitador de concorrência para evitar erros de limite de taxa.

Solução de Problemas

Problemas de Autenticação

  • Verifique suas credenciais de API (ID do Cliente e Segredo)
  • Garanta que o cliente de API tenha as permissões necessárias
  • Para endpoints da API Clássica, o servidor usa automaticamente autenticação com Token Bearer

Erros 503 na API Clássica

  • Se estiver usando apenas Credenciais do Cliente (sem nome de usuário/senha), garanta que esteja executando a v2.1+ que suporta autenticação com Token Bearer em endpoints da API Clássica

Timeouts em Ferramentas Compostas

  • O timeout padrão de solicitação é de 30 segundos
  • Ferramentas compostas como getFleetOverview fazem chamadas de API em paralelo e podem precisar de mais tempo em instâncias mais lentas

Contribuindo

Contribuições são bem-vindas! Por favor:

  1. Faça um fork do repositório
  2. Crie um branch de funcionalidade
  3. Adicione testes para novas funcionalidades
  4. Envie um pull request

Licença

MIT

Recursos

Suporte


Feito com ❤️ para as comunidades Jamf, Claude e ChatGPT