コンテンツにスキップ

keycloak-mcp

KeyCloak Admin REST API 用の MCP サーバーです。

2つの用途のために作りました。ブルートフォースの IP や API の不調を1コールで 洗い出す朝の daily_brief、そして brief(やアラート)が異常を示したときに、 ある1人のユーザー・1つの IP・1つのクライアントについて全体像をつかむための 調査ツール群です。

領域別ツール

領域 ツール
ユーザー count_userssearch_usersget_userget_user_sessionslogout_userset_user_enabled
パスワード reset_passwordreset_passwords_batch
MFA get_user_credentialsget_totp_users
グループ list_user_groupslist_users_by_group
セキュリティ get_brute_force_statusget_realm_security_defensesget_login_failures_by_ipget_ip_activitydetect_login_loops
イベント get_eventsget_login_statsget_login_stats_by_hourget_login_stats_by_clientget_password_update_events
管理イベント get_admin_eventsget_user_attribute_history
セッション・クライアント get_session_statsget_client_sessionslist_clientsget_realm_roles
朝の点検 health_checkdaily_brief

書き込みを行うのは4本だけです。 reset_passwordreset_passwords_batchlogout_userset_user_enabled。それ以外はすべて読み取り専用です。各書き込み ツールが実際に何をし、どんな場面で使うべきかは セキュリティ調査 を参照してください。

設計方針

サービスアカウント認証であること自体が設計の要です。 本サーバーは Client Credentials Grant で認証し、人間のパスワードや TOTP を使いません。ユーザー セッションを一切作らず、userinfo エンドポイントも呼びません。これは特に Infinispan(KeyCloak の分散セッションキャッシュ)がクラスタ構成でない環境で 効いてきます。そうした環境ではセッションベースの認証がノード間で不整合な状態を 生むことがあるからです。サービスアカウントのトークンしか要求しないサーバーは、 呼び出し側の注意深さではなく構造そのものによって、この種の問題を避けます。

取得を打ち切ったときは、打ち切ったことを明示します。 KEYCLOAK_DEADLINE が 重いイベント/TOTP ツールの実行時間を、KEYCLOAK_MAX_EVENTS が取得件数を制限します。 いずれかの上限で走査が早期に止まった場合、応答の先頭には明示的な ⚠️ PARTIAL RESULT の警告が付き、たまたま取得できた分をそのまま完全な結果として 返すことはありません。完全に見える部分的な結果は、遅い結果よりも、エラーよりも 悪いものです。

すべてが自分たちのサイトに解決されます。 get_eventsget_user_sessionsget_login_failures_by_ip は、INI ファイルで宣言したサイト名で IP アドレスに ラベルを付けます。調査結果は生の IP アドレスではなく、自分たちのトポロジーの 言葉で読めます。

次に読むもの

  • セットアップ — サービスアカウント・権限・環境変数・IP のサイトラベル付け
  • セキュリティ調査 — ブルートフォース/クレデンシャルスタッフィングの調査手順、書き込みツール、deadline と部分結果
  • リファレンス — 全ツール・health_check の契約・CLI・終了コード