Claude Media
Jamf MCPサーバーをClaudeに繋ぎ、Mac管理をスマートグループ作成まで会話で行う

Jamf MCPサーバーをClaudeに繋ぎ、Mac管理をスマートグループ作成まで会話で行う

JamfのMCPサーバーをClaude CodeとClaude Desktopに追加し、Jamf Proの端末検索とスマートグループ作成を会話で進める手順です。APIロールの絞り方と、書き込み系ツールの止め方も扱います。

JamfのMCPサーバー(Jamf-Concepts組織の mcp-hub)を使うと、Jamf Pro・Jamf Protect・Jamf Security Cloudの操作をClaudeの会話から呼べます。「macOS 15の端末を探して」「M3のMacBook用スマートグループを作って」といった依頼が、そのままAPI呼び出しになります。

ただしこのサーバーには、スマートグループだけでなくAPIロールやクライアント認証情報を作るツールまで含まれています。接続の手順より先に、どこまで任せるかを決めておくほうが安全です。この記事では接続、最初の依頼、権限の絞り方の順に進めます。

Jamf MCPサーバーでClaudeにできること

Jamf MCPサーバーは、Jamf Pro、Jamf Protect、Jamf Security Cloudを操作するMCPサーバーです。READMEの「Supported Products」とTOOLS.mdの一覧を合わせると、ツールは全部で50個あります。

数字

製品ごとのツール数

  • Setup

    2

    認証情報なしで常に使える

  • Jamf Pro

    40

    端末・グループ・ポリシー・アプリなど

  • Jamf Protect

    6

    アラート・端末・検知ルール

  • Security Cloud

    2

    端末のリスク状態と上書き

README の Supported Products 表と TOOLS.md の一覧から数えた値です

Jamf Proの40個は、TOOLS.mdでは6つの分類に分かれています。端末管理が6個、グループが4個、構成プロファイルとポリシーが4個、アプリ配布が9個、インベントリと組織が10個、API管理が7個です。

端末の検索と更新は jamf_get_computer(ID・シリアル番号・名前で取得)や jamf_update_computer が受けます。グループは jamf_get_smart_groups と jamf_create_smart_group の組です。後者は「条件つきのスマートグループを新規作成する」ツールとしてTOOLS.mdに載っています。

Jamf ProtectとSecurity Cloudは読み取り中心です。Protectはアラートの一覧と詳細、登録端末、検知ルール(analytics)を引けます。Security Cloudは端末のリスク状態を取得し、特定端末のリスクレベルを上書きできます。

なお、READMEの先頭にある例文は「Find all computers running macOS 15」です。TOOLS.mdの説明には、OSバージョンで横断検索するツールの名前が出てきません。検索に使われるのが jamf_get_computer なのか、スマートグループ経由なのかは、実際にClaudeが呼んだツール名を見て確かめるのが確実です。

接続前に用意するもの

必要なのは、Python 3.10以上とJamfの認証情報です。インストール手順では uv が推奨されていて、uv run で依存関係が自動で解決されます。

認証情報なしでも、サーバーはオンボーディングモードで起動します。jamf_get_setup_status と jamf_configure_help の2つだけは、設定が空でも呼べる仕組みです。接続が通るかを先に試すには都合のよい作りです。

製品ごとの環境変数は次のとおりです。使う製品の分だけ設定すれば足ります。

製品環境変数
Jamf Pro環境変数JAMF_PRO_URL / JAMF_PRO_CLIENT_ID / JAMF_PRO_CLIENT_SECRET
Jamf Protect環境変数JAMF_PROTECT_URL / JAMF_PROTECT_CLIENT_ID / JAMF_PROTECT_PASSWORD
Security Cloud環境変数JAMF_SECURITY_URL / JAMF_SECURITY_APP_ID / JAMF_SECURITY_APP_SECRET

Jamf ProtectのURLは https://yourorg.protect.jamfcloud.com/graphql のように、末尾が /graphql です。Jamf ProのURLと同じ感覚でホスト名だけにしないよう注意してください。

Jamf ProでAPIロールとクライアントを作る

Jamf Proの画面でSettings > System > API Roles and Clientsを開き、先にAPIロール、次にAPI Integrationを作ります。クライアントシークレットは生成時に一度しか表示されません。

手順

Jamf ProでMCP用の認証情報を作る流れ

  1. 1

    APIロールを作る

    必要な権限だけを選んで、専用のロールにします。

  2. 2

    API Integrationを作る

    名前を付け、作ったロールを割り当てて有効化します。

  3. 3

    クライアントIDとシークレットを控える

    シークレットは「Generate Client Secret」を押した直後にしかコピーできません。

READMEの手順書には、ツールが使う権限が一覧で載っています。冒頭の依頼(OSバージョンで探してスマートグループを作る)に絞ると、表の対応から次の3つが関係します。

権限表の用途欄
Read Computers表の用途欄Computer inventory lookup
Read Smart Computer Groups表の用途欄Computer smart group lookup
Create Smart Computer Groups表の用途欄Computer smart group creation

手順書は、全ツールを使う前提で多数の権限を並べています。そこまで要らない用途なら、上の3つから始めて、403が出た権限だけを足す運用が扱いやすいはずです。トラブルシューティング表でも、403 Forbidden の対処は「APIロールに必要な権限を足す」とされています。

Claude CodeとClaude Desktopに追加する

Claude Code

認証情報は、シェルの環境変数に置く方法がインストール手順に載っています。.zshrc などにexportしておけば、.mcp.json に値を書かずに済みます。

export JAMF_PRO_URL="https://yourcompany.jamfcloud.com"
export JAMF_PRO_CLIENT_ID="your-client-id"
export JAMF_PRO_CLIENT_SECRET="your-client-secret"

そのうえでサーバーを登録します。stdioサーバーの追加は claude mcp add の -- 以降にコマンドを置く形です。/path/to/mcp-hub は、リポジトリをクローンした場所に読み替えてください。

claude mcp add --transport stdio jamf \
  -- uv run --directory /path/to/mcp-hub jamf-mcp
claude mcp get jamf

チームで共有するなら、同じ内容を .mcp.json に書きます。値を環境変数から受けるので、ファイルに秘密情報が入りません。

{
  "mcpServers": {
    "jamf": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/mcp-hub", "jamf-mcp"]
    }
  }
}

接続状態は claude mcp get jamf か、セッション内の /mcp で見られます。設定の置き場所(local / project / user)はClaude Code MCP設定ガイドにまとめています。

Claude Desktop

macOSでは ~/Library/Application Support/Claude/claude_desktop_config.json に書きます。こちらはJSONの env に直接値を入れる形です。

{
  "mcpServers": {
    "jamf": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/mcp-hub", "jamf-mcp"],
      "env": {
        "JAMF_PRO_URL": "https://yourcompany.jamfcloud.com",
        "JAMF_PRO_CLIENT_ID": "your-client-id",
        "JAMF_PRO_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

設定ファイルを保存したらクライアントを再起動します。サーバーはクライアントが自動で起動するので、手動で jamf-mcp を走らせる必要はありません。

最初の依頼から、スマートグループ作成まで

まずは書き込みのない確認から入ります。

手順

読み取りから書き込みへ進める順番

  1. 1

    セットアップ状態を聞く

    「What's the setup status?」と頼むと jamf_get_setup_status が呼ばれ、設定済みの製品が分かります。

  2. 2

    端末を探す

    「macOS 15の端末を探して」のように、対象を読み取りだけで絞り込みます。

  3. 3

    グループの条件を先に出させる

    作成前に、スマートグループの名前と条件をClaudeに文章で示させます。

  4. 4

    承認して作成し、作成結果を読み直す

    承認後に jamf_create_smart_group が走ります。続けて jamf_get_smart_groups で条件が意図どおりかを見ます。

3つ目の「条件を先に出させる」が、この流れの要です。スマートグループは条件に合う端末が自動で入る仕組みなので、条件を誤ると、あとから対象のポリシーや構成プロファイルに影響が及びます。作る前に条件を文章で見ておけば、承認の判断がしやすくなります。

プロジェクトの CLAUDE.md に、次のような規約を置いておくと毎回の依頼で書かずに済みます。

## Jamf MCP の使い方
- 作成・更新・上書き系のツールを呼ぶ前に、対象と条件を一覧で示して承認を待つ
- スマートグループは作成後に jamf_get_smart_groups で条件を読み直して報告する
- APIロール・API Integration・クライアント認証情報の作成は依頼されても実行しない

READMEの例には「Create a smart group for M3 MacBooks」があり、TOOLS.mdには「Create a smart group for macOS 14+ devices」があります。条件を日本語で伝えても、Claudeが条件に変換して jamf_create_smart_group に渡す形になります。変換後の条件は、上の手順の3つ目で必ず目を通してください。

書き込み系ツールを止める

全ツールの一覧から数えると、作成・更新・上書きを行うツールは15個あります。

  • 更新系: jamf_update_computer / jamf_update_mobile_device / jamf_update_user / jamf_update_printer
  • 作成系: jamf_create_smart_group / jamf_create_static_group / jamf_create_app_installer_deployment / jamf_create_extension_attribute / jamf_create_category / jamf_create_printer
  • 認証系: jamf_create_api_role / jamf_create_api_integration / jamf_create_api_client_credentials / jamf_create_computer_update_api_client
  • 上書き: jamf_override_device_risk

認証系の4つは、Jamf Pro側にAPIロールとクライアントを作り、OAuth認証情報まで発行するツールです。MCP用に作った権限の範囲を超えて、理屈の上では、別の権限を持つクライアントをClaude自身が増やせます。スマートグループの用途では要らないので、止めておくのが無難です。

止め方は3段階あります。

絞り込み

止め方の選択肢

  • サーバー側で製品を絞る

    --products pro か JAMF_PRODUCTS=pro で、登録されるツールをJamf Proだけにできます。Setup系の2つは、どの絞り込みでも常に登録されます。

  • サーバー側でツール種別を絞る

    JAMF_TOOL_FILTER に api(Jamf Pro APIと1対1の基本操作だけ)か complex(複数のAPI呼び出しを組み合わせた処理だけ)を入れます。既定は all です。

  • Claude Code側でdenyルールを書く

    特定のツールを権限ルールで拒否します。ツール名の末尾に * を付ける指定にも対応しています。

サーバー側の絞り込みは、書き込みだけを外す指定ではありません。api と complex はAPIの粒度で分ける設定で、読み取りと書き込みの区別とは別の軸です。TOOLS.mdにも、読み取り専用で起動する設定は載っていません。書き込みを止めたいときは、Claude Code側のdenyルールが確実です。

Claude Codeの権限ルールでは、MCPツールを mcp__<サーバー名>__<ツール名> で指定します。denyルールはツール名の位置にglobを書けるので、claude mcp add で付けた名前が jamf なら、.claude/settings.json を次のようにできます。

{
  "permissions": {
    "deny": [
      "mcp__jamf__jamf_create_api_*",
      "mcp__jamf__jamf_create_computer_update_api_client",
      "mcp__jamf__jamf_override_device_risk",
      "mcp__jamf__jamf_update_*"
    ]
  }
}

この例では、認証系4つと上書き、更新系4つが止まります。スマートグループの作成は止まらないので、承認のたびに確認が入る運用と組み合わせられます。ルールの管理は/permissionsコマンドの記事が詳しく、本番の権限を最小に絞る考え方はKubernetes MCPの権限設計と同じ発想です。

つまずきやすい点

トラブルシューティング表の内容は次のとおりです。

症状原因対処
401 Unauthorized原因認証情報が違う対処JAMF_PRO_CLIENT_ID と JAMF_PRO_CLIENT_SECRET を見直す
403 Forbidden原因権限が足りない対処Jamf ProのAPIロールに必要な権限を足す
404 Not Found原因URLが違う対処JAMF_PRO_URL を見直す
JAMF_PRO_URL required原因環境変数が未設定対処環境変数が渡っているか確かめる
Protectのツールが失敗原因設定が足りない対処JAMF_PROTECT_* を設定する
リスク系のツールが失敗原因設定が足りない対処JAMF_SECURITY_* を設定する

次の2点は、手順書どうしの食い違いです。

  • ツール数: READMEとTOOLS.mdは「50」と書いています。Setup 2 + Jamf Pro 40 + Protect 6 + Security Cloud 2で、一覧の行数とも一致します。
  • Security CloudのURL: INSTALLATION.mdは https://radar.wandera.com を例にしていますが、.env.example の例は https://api.wandera.com です。Security Cloudを使うなら、自分のテナントで案内されたURLを使ってください。

シェルでexportしたのにサーバーが認証情報を拾わないときは、Claude Codeを起動したシェルでそのexportが効いているかを echo "$JAMF_PRO_URL" で確かめます。exportした後に別のターミナルからClaude Codeを開くと、値は引き継がれません。

READMEのライセンス節には、ソフトウェアを「現状のまま」提供し、保証しない旨が書かれています。本番のJamf Proに繋ぐ前に、検証用のテナントや権限を絞ったAPIロールで動作を見てください。端末管理の基盤全体を扱う背景は、macOSでClaude Desktopを一括配布するPKG導入の手順にもあります。

まとめ

Jamf MCPサーバーは、読み取りだけなら権限を3つに絞って始められます。スマートグループの作成は、条件を文章で確認してから承認する運用が向きます。認証系の4ツールは、用途がなければdenyで止めておくのが無難です。

この記事を共有:XはてブLinkedIn