Token导航 LogoToken导航TokenDH.com
Jamf MCP Agent logo
安全风控stdio官方级别未说明来源级核验

Jamf MCP Agent

MCP Server

jamf-agent

AI驱动的Jamf Pro设备监控和修复代理,通过AWS Bedrock(Claude)进行合规性、安全性和设备健康检查,并生成结构化报告。

工具数

0

提示词数

0

GitHub Stars

0

资源数

0
TypeScriptClaude安全Claude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

dbankscard

提供方

dbankscard

最后核验

2026/5/17 20:21

运行时

Node.js

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

npx jamf-agent check compliance

详细介绍

Jamf MCP代理

![CI](https://github.com/dbankscard/jamf-mcp-agent/actions/workflows/ci.yml) ![License: MIT](LICENSE)

进行中 --该项目正在积极开发中。API、配置和行为可能会发生变化。

使用AI驱动的Jamf Pro车队监控和补救代理 模型上下文协议 AWS Bedrock(克劳德)。

对Jamf Pro环境运行合规性、安全性和车队健康检查,生成结构化JSON报告,将调查结果发布到Slack,并可以自动修复问题——所有这些都是按照cron计划或按需进行的。

建筑

                          ┌─────────────┐
                          │  Slack Bot   │
                          └──────▲───────┘
                                 │
┌──────────┐  tool calls  ┌─────┴───────┐  invoke   ┌──────────────┐
│ Jamf Pro │◄────────────►│  MCP Client │◄─────────►│  AWS Bedrock │
│  Server  │  (stdio/http)│             │  (Claude)  │              │
└──────────┘              └──┬──────┬───┘           └──────────────┘
                             │      │
                    ┌────────▼┐  ┌──▼──────────┐
                    │Scheduler│  │Health Server │
                    │ (cron)  │  │ :8080       │
                    └─────────┘  └─────────────┘

代理连接到 Jamf MCP服务器 通过stdio或HTTP,通过工具调用查询Jamf Pro环境,并使用Claude(通过AWS Bedrock)生成结构化的合规性、安全性和车队健康报告。报告可以发布到Slack并按照cron计划运行。

先决条件

  • Node.js 20+
  • Jamf Pro 带有API客户端的实例(客户端ID+机密)
  • AWS帐户 Claude型号已启用基岩访问功能
  • (可选) Slack机器人令牌,用于向渠道发布报告
  • (可选) Docker用于容器化部署

快速开始

# Clone
git clone https://github.com/dbankscard/jamf-mcp-agent.git
cd jamf-mcp-agent

# Install dependencies
npm install

# Configure
cp .env.example .env
# Edit .env with your Jamf, AWS, and Slack credentials

# Build
npm run build

# Run a one-off compliance check
npx jamf-agent check compliance

CLI命令

报告

# Run a report (compliance | security | fleet)
jamf-agent check compliance
jamf-agent check security --slack          # also post to Slack
jamf-agent check fleet --save report.json  # save JSON to file

特别问题

# Ask a read-only question about your fleet
jamf-agent ask "How many devices are running macOS 15?"

# Enable write tools for the question
jamf-agent ask "Deploy the latest OS update to the test group" --write

# Save the response
jamf-agent ask "List all unencrypted Macs" --save output.json

补救

# Analyze and remediate — interactive selection
jamf-agent remediate compliance

# Dry run — plan remediation without executing
jamf-agent remediate security --dry-run --auto-approve

# Auto-approve automatable findings at or above a severity threshold
jamf-agent remediate compliance --auto-approve --min-severity high

# Remediate from a previously saved report
jamf-agent remediate --file report.json --auto-approve

# Select specific findings by index
jamf-agent remediate security --finding 0,2 --slack --save remediation.json

补救工作流程:

  1. 分析 --运行报告(或从以下位置加载报告 --file)
  2. 选择 --交互式提示, --auto-approve,或 --finding 指数
  3. 补救 --通过编写工具执行修复(或使用 --dry-run)
  4. 报告 --输出结构化的补救报告

守护程序模式

# Start with scheduled reports, health server, and preflight validation
jamf-agent start

健康检查

# Check component health (MCP, Bedrock, Slack, Scheduler)
jamf-agent health

报告格式

所有报告都遵循结构化的JSON模式:

{
  "summary": "3 of 150 devices have critical compliance issues",
  "overallStatus": "warning",
  "findings": [
    {
      "title": "FileVault Not Enabled",
      "severity": "critical",
      "category": "security",
      "description": "3 devices do not have FileVault disk encryption enabled",
      "affectedDeviceCount": 3,
      "affectedDevices": [
        { "name": "LAPTOP-001", "id": "42", "detail": "FileVault disabled, last check 2025-01-15" }
      ],
      "remediation": {
        "title": "Enable FileVault via Configuration Profile",
        "steps": ["Deploy FileVault profile to affected devices", "Verify encryption status after 24h"],
        "effort": "low",
        "automatable": true
      }
    }
  ],
  "metrics": {
    "totalDevices": 150,
    "compliantDevices": 147
  }
}

状态级别: healthy | warning | critical 严重程度: critical | high | medium | low 类别: compliance | security | maintenance

配置参考

所有配置都是通过环境变量(或 .env 文件)。括号中显示的默认值。

MCP服务器

变量描述默认值
MCP_TRANSPORT运输方式: stdiohttpstdio
MCP_SERVER_PATHMCP服务器入口点的路径(stdio模式)--
JAMF_URLJamf Pro实例URL(stdio模式)--
JAMF_CLIENT_IDJamf API客户端ID(stdio模式)--
JAMF_CLIENT_SECRETJamf API客户端机密(stdio模式)--
MCP_SERVER_URLMCP服务器URL(http模式)--
MCP_CONNECT_TIMEOUT_MS连接超时30000
MCP_TOOL_TIMEOUT_MS每次工具调用超时120000
MCP_MAX_RECONNECT_ATTEMPTS最大重新连接尝试次数5
MCP_RECONNECT_BASE_MS指数退避的基本延迟1000

AWS基岩

变量描述默认值
AWS_REGIONAWS区域us-east-1
AWS_ACCESS_KEY_IDAWS访问密钥(可选--使用默认凭据链)--
AWS_SECRET_ACCESS_KEYAWS密钥--
BEDROCK_MODEL基岩模型IDus.anthropic.claude-sonnet-4-5-20250929-v1:0
BEDROCK_MAX_TOOL_ROUNDS每次运行的最大代理工具使用回合数15
BEDROCK_MAX_TOKENS每个Bedrock请求的最大输出令牌数8192
BEDROCK_REQUEST_TIMEOUT_MS基岩请求超时120000

Slack

变量描述默认值
SLACK_ENABLED启用Slack发布false
SLACK_BOT_TOKENSlack机器人OAuth令牌(xoxb-...)--
SLACK_CHANNEL_COMPLIANCE合规性报告的通道ID--
SLACK_CHANNEL_SECURITY安全报告的通道ID--
SLACK_CHANNEL_FLEET车队报告的通道ID--

调度器

变量描述默认值
SCHEDULER_ENABLED在守护进程模式下启用cron调度程序false
SCHEDULER_TIMEZONEcron表达式的时区America/New_York
CRON_COMPLIANCE合规报告cron0 8 * * 1-5
CRON_SECURITY安全报告cron0 9 * * 1-5
CRON_FLEET舰队健康报告0 10 * * 1
JOB_TIMEOUT_MS每个计划作业的最大持续时间600000

健康服务器

变量描述默认值
HEALTH_PORTHTTP端口 /health/ready 端点8080

守护程序模式

jamf-agent start 以守护进程模式启动。启动时,代理:

  1. 加载配置 重试(3次尝试,指数回退)
  2. 运行飞行前检查 --验证MCP连接、Slack身份验证和基岩模型访问
  3. 记录启动横幅 包括运输、型号、时间表和健康港口
  4. 启动调度程序 用于cron的合规性、安全性和舰队报告
  5. 启动HTTP运行状况服务器 在已配置的端口上
  6. 安装信号处理程序 用于优雅关机(SIGINT/SIGTERM)

代理防止作业运行重叠,应用每个作业超时,以指数回退重试失败的作业,并跟踪正在进行的操作以实现干净关闭。

Slack集成

  1. 使用创建Slack应用程序 chat:write 范围
  2. 将其安装到您的工作区并复制bot令牌
  3. SLACK_ENABLED=true,将机器人令牌和通道ID添加到 .env
  4. SCHEDULER_ENABLED=true 并根据需要调整cron表达式
  5. jamf-agent start

报告以丰富的Block Kit消息的形式发布。关键和高发现作为回复。中等和低调查结果总结在一个帖子回复中。

健康检查

守护进程公开了两个HTTP端点:

端点目的200时503时
GET /health活体探针healthydegradedunhealthy
GET /ready准备就绪探针MCP组件 healthyMCP不健康

响应正文是完整的健康状态JSON:

{
  "status": "healthy",
  "components": {
    "mcp": { "status": "healthy", "message": "Connected, 87 tools" },
    "bedrock": { "status": "healthy", "message": "Model: us.anthropic.claude-sonnet-4-5-20250929-v1:0" },
    "slack": { "status": "healthy", "message": "Slack disabled" },
    "scheduler": { "status": "healthy", "message": "Scheduler active, no jobs running" }
  },
  "timestamp": "2025-01-15T14:30:00.000Z"
}

码头工人

构建并运行

# Build the image
docker build -t jamf-agent .

# Run with your .env file
docker run --env-file .env -p 8080:8080 jamf-agent

# Check health
curl http://localhost:8080/health
curl http://localhost:8080/ready

Docker Compose

docker compose up -d

# View logs
docker compose logs -f

# Stop
docker compose down

Dockerfile使用多阶段构建(Alpine、非root用户、非root、非root), ~120MB 图像)。健康检查是通过以下方式内置的 HEALTHCHECK MCP连接和飞行前的60秒启动期指令。

MCP传输模式

标准 (默认)--代理将MCP服务器作为子进程生成,并通过stdin/stdout进行通信。最有利于当地发展。需要 MCP_SERVER_PATH 以及Jamf证书。

超文本传输协议 --代理通过HTTP/SSE连接到正在运行的MCP服务器。最适合MCP服务器作为单独服务运行的生产部署(例如AWS Lambda)。需要 MCP_SERVER_URL.

工具安全

默认情况下,代理在 只读模式 --只有 search*, list*, get*, check*,以及 read* 工具暴露在LLM中。这确保了计划报告和临时查询无法修改您的Jamf环境。

写入工具(策略执行、配置文件部署、MDM命令等)仅在明确启用时可用:

  • jamf-agent ask "..." --write --为单个问题启用书写工具
  • jamf-agent remediate ... --启用实时补救的写入工具(不 --dry-run)

生产

AWS Secrets Manager

将敏感值(API密钥、令牌)存储在AWS机密管理器中,而不是 .env:

# Create a secret with your credentials as JSON
aws secretsmanager create-secret \
  --name jamf-mcp-agent/production \
  --secret-string '{"JAMF_CLIENT_SECRET":"...","SLACK_BOT_TOKEN":"xoxb-..."}'

# Tell the agent to use it
export AWS_SECRET_NAME=jamf-mcp-agent/production

AWS Secrets Manager的秘密覆盖环境变量。

CloudWatch指标

代理通过以下方式发布CloudWatch指标 aws-embedded-metrics 在...之下 JamfMCPAgent 命名空间:

度量描述
mcp.connect.durationMCP连接时间
mcp.tool_call.duration每个工具调用延迟
mcp.tool_call.errors工具调用错误计数
agent.run.duration代理运行总持续时间
agent.run.tool_calls每次运行的工具调用
agent.run.rounds每次LLM轮次
agent.run.input_tokens每次运行输入令牌
agent.run.output_tokens每次运行输出令牌
scheduler.job.duration计划作业持续时间
scheduler.job.success成功作业计数
scheduler.job.error失败作业计数
scheduler.job.skipped跳过作业计数(重叠)
slack.post.duration延迟延迟
slack.post.errors松弛帖子错误计数
remediation.duration修复运行持续时间
remediation.findings_attempted尝试调查结果
remediation.findings_succeeded调查结果已纠正

发展

# Install dependencies
npm install

# Build
npm run build

# Run tests
npm test

# Run tests in watch mode
npm run test:watch

# Run tests with coverage
npm run test:coverage

# Type-check without emitting
npm run typecheck

# Dev mode (tsx, no build step)
npm run cli -- check compliance
npm run cli -- ask "How many Macs do we have?"
npm run cli -- start

项目结构

src/
  cli/index.ts          # CLI entry point (commander)
  claude/
    agent.ts            # Bedrock agent loop
    prompts.ts          # System prompts & report schema
    types.ts            # Report & finding types
  mcp/
    client.ts           # MCP client (stdio/http, reconnect)
    options.ts          # Config -> MCP options mapper
    tool-mapper.ts      # Tool filtering (read-only vs write)
  scheduler/index.ts    # Cron scheduler with retry
  slack/
    client.ts           # Slack posting (Block Kit)
    templates.ts        # Slack message templates
  config.ts             # Zod schema, env mapping, secrets
  errors.ts             # Error hierarchy (AppError -> typed subclasses)
  health.ts             # Health checker (component status)
  health-server.ts      # HTTP health endpoints
  index.ts              # Programmatic entry point
  logger.ts             # Lightweight JSON/TTY logger
  metrics.ts            # CloudWatch embedded metrics
  preflight.ts          # Startup validation & banner
  shutdown.ts           # Graceful shutdown manager
  context.ts            # AsyncLocalStorage request context
  secrets.ts            # AWS Secrets Manager loader
  utils.ts              # withTimeout utility

许可证

麻省理工学院

目录标签

目录标签

TypeScriptClaude安全AI监控本地部署设备管理合规检查自动化修复安全报告

支持客户端

Claude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

oauth

运行时(runtime,运行环境)

Node.js

来源包(packageName,安装包名)

jamf-agent

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiooauth部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP