Jamf Pro MCP Server
Interaja com o Jamf Pro para tarefas de gerenciamento de dispositivos Apple.
Documentação
Servidor MCP Jamf Pro v2.2
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 contextonode:vmem 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 —
ConcurrencyLimiterestilo semáforo (padrão 5, configurável viaJAMF_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
getPolicyDetailsagora 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 —
createStaticComputerGroupeupdateStaticComputerGroupagora usam XML adequado viaXmlBuilder(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,getSecurityPostureegetPolicyAnalysisque 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
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:
| Ferramenta | Propósito |
|---|---|
jamf_search | Descubra métodos de API — pesquise por palavra-chave, navegue por categoria, veja assinaturas e capacidades necessárias |
jamf_execute | Execute 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, depoismode: "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.
| Modo | Ferramentas | Tamanho da Def. (bytes) | Tokens Estimados |
|---|---|---|---|
| Clássico | 115 | 55.639 | 13.910 |
| Código | 2 | 1.963 | 491 |
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ário | Modo | Viagens do LLM | Tempo (ms) | Concluível |
|---|---|---|---|---|---|
| 1 | Consulta de dispositivo único | clássico | 1 | 308 | Sim |
| 1 | Consulta de dispositivo único | código | 1 | 241 | Sim |
| 2 | Perfil do dispositivo + logs de políticas | clássico | 1 | 276 | Sim |
| 2 | Perfil do dispositivo + logs de políticas | código | 1 | 228 | Sim |
| 3 | Auditoria de scripts órfãos | clássico | 2 | 131 | Sim |
| 3 | Auditoria de scripts órfãos | código | 1 | 172 | Sim |
| 4 | Políticas direcionadas a um grupo | clássico | 2 | 133 | Sim |
| 4 | Políticas direcionadas a um grupo | código | 1 | 2.611 | Sim |
| 5 | Versão do SO por departamento | clássico | N/A | N/A | Não |
| 5 | Versão do SO por departamento | código | 1 | 1.073 | Sim |
| 6 | Auditoria de segurança completa | clássico | 4 | 62.945 | Sim |
| 6 | Auditoria de segurança completa | código | 1 | 6.936 | Sim |
| 7 | Comparação de políticas | clássico | 2 | 221 | Sim |
| 7 | Comparação de políticas | código | 1 | 115 | Sim |
| 8 | Dispositivos obsoletos + detalhes (top 10) | clássico | 1 | 1.017 | Sim |
| 8 | Dispositivos obsoletos + detalhes (top 10) | código | 1 | 4 | Sim |
| 9 | Auditoria de dependência de pacotes | clássico | 1 | 15.639 | Sim |
| 9 | Auditoria de dependência de pacotes | código | 1 | 15.015 | Sim |
| 10 | Grupo + FileVault + filtro de SO | clássico | N/A | N/A | Não |
| 10 | Grupo + FileVault + filtro de SO | código | 1 | 187 | Sim |
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
getFleetOverviewpara um resumo em chamada única - "Fale sobre LAPTOP-001" — usa
getDeviceFullProfilepara resolver por nome, serial ou ID - "Qual é nossa postura de segurança?" — usa
getSecurityPosturepara análise de criptografia e conformidade - "Como está o desempenho da política Software Install?" — usa
getPolicyAnalysiscom 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 Recurso | Descrição |
|---|---|
jamf://inventory/computers | Inventário paginado de computadores |
jamf://inventory/mobile-devices | Inventário paginado de dispositivos móveis |
jamf://reports/compliance | Relatório de conformidade de segurança e patches |
jamf://reports/mobile-device-compliance | Status de conformidade e gerenciamento de dispositivos móveis |
jamf://reports/storage | Análises de uso de disco |
jamf://reports/os-versions | Distribuição de versões do SO |
jamf://reports/patch-compliance | Conformidade de patches em toda a frota por título de software |
jamf://reports/encryption-status | Conformidade de criptografia FileVault |
jamf://reports/extension-attributes | Resumo da coleção de Atributos de Extensão |
jamf://inventory/prestages | Visão geral das atribuições de inscrição PreStage |
jamf://reports/failed-mdm-commands | Dispositivos com comandos MDM travados ou com falha |
jamf://reports/laps-audit | Trilha de auditoria de acesso à senha LAPS |
Prompts (12 Modelos de Fluxo de Trabalho)
| Prompt | Descrição |
|---|---|
troubleshoot-device | Solução de problemas de dispositivos passo a passo |
deploy-software | Fluxo de trabalho de implantação de software |
compliance-check | Relatórios abrangentes de conformidade |
mass-update | Operações em lote de dispositivos |
storage-cleanup | Gerenciamento de espaço em disco |
security-audit | Auditoria completa de postura de segurança — criptografia, atualização do SO, conformidade, políticas com falha |
new-device-onboarding | Verificar nova inscrição de dispositivo — perfis, políticas, associações de grupo |
device-offboarding | Desligamento de dispositivo — remover escopo, apagar/bloquear, aposentar do inventário |
software-update-review | Revisão da distribuição de versões do SO e planejamento de atualização |
fleet-health-dashboard | Saúde abrangente da frota — dispositivos, conformidade, armazenamento, SO, móvel |
investigate-device-issue | Investigação aprofundada de dispositivo — perfis, políticas, grupos, scripts |
policy-rollout | Implantaçã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
- No Jamf Pro, vá para Configurações > Sistema > Funções e Clientes de API
- Crie uma nova Função de API com as permissões necessárias
- 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=truepara impedir qualquer modificação - Confirmação Necessária: Todas as operações destrutivas exigem
confirm: trueexplícito - Anotações de Ferramentas: Cada ferramenta declara
readOnlyHintedestructiveHintpara 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 arequire,import,fetch,fsouprocess - 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
getFleetOverviewfazem 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:
- Faça um fork do repositório
- Crie um branch de funcionalidade
- Adicione testes para novas funcionalidades
- Envie um pull request
Licença
MIT
Recursos
- Documentação do Model Context Protocol
- Documentação da API do Jamf Pro
- Conectores MCP do ChatGPT
- Servidores MCP do Claude Desktop
Suporte
Feito com ❤️ para as comunidades Jamf, Claude e ChatGPT