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
端末のリスク状態と上書き
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
APIロールを作る
必要な権限だけを選んで、専用のロールにします。
- 2
API Integrationを作る
名前を付け、作ったロールを割り当てて有効化します。
- 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
セットアップ状態を聞く
「What's the setup status?」と頼むと
jamf_get_setup_statusが呼ばれ、設定済みの製品が分かります。 - 2
端末を探す
「macOS 15の端末を探して」のように、対象を読み取りだけで絞り込みます。
- 3
グループの条件を先に出させる
作成前に、スマートグループの名前と条件をClaudeに文章で示させます。
- 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で止めておくのが無難です。