Inforcer について
Inforcer は、Microsoft 365 のベースラインガバナンスを管理するチーム向けの MCP サーバーです。テナント、ベースライン、ポリシー、ID、監査データに構造化アクセスでき、大半は読み取り専用で、評価の開始とレポートのキュー登録にも対応します。
主な機能
- 01テナント、ベースライン、ポリシー、整合性データの読み取り
- 02Secure Score、ID、監査ログの照会
- 03複数形式のテナント識別子の解決
- 04評価の開始とレポートのキュー登録
活用シーン
- 01テナント間のベースライン逸脱の確認
- 02ID、ポリシー、監査記録の確認
- 03対象テナントの評価やレポートの開始
MCP 対応
MCP サーバーとして、Inforcer のガバナンス情報を照会するツールと、評価開始およびレポート登録の操作をクライアントに公開します。stdio と HTTP Streamable に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e INFORCER_REGION -e INFORCER_API_KEY -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-technology/inforcer-mcp:v1.1.0INFORCER_REGIONInforcer API region. One of: anz, eu, uk, us. Required.INFORCER_API_KEYシークレットInforcer API key (sent as the Inf-Api-Key header). Required.MCP_TRANSPORTTransport mode for the server. Set to 'stdio' for local CLI use; the image defaults to 'http' for gateway hosting.AUTH_MODEシークレットCredential source: 'env' reads vars locally, 'gateway' expects header injection from the WYRE MCP Gateway.LOG_LEVELLog verbosity: debug, info, warn, errorローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/wyre-technology/inforcer-mcp:v1.1.0stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Inforcer MCP サーバー
Model Context Protocol(MCP) サーバーです。AI アシスタントに、Inforcer の Microsoft 365 ベースラインガバナンスデータ(テナント、ベースライン、整合性/ドリフト、ポリシー、セキュアスコア、ID、監査ログ、レポート生成)への構造化されたほぼ読み取り専用のアクセスを提供します。また、評価の実行を開始するアクションと、レポートをキューに登録するアクションの2つの書き込み操作も備えています。
注記: このプロジェクトは Wyre Technology がメンテナンスしています。
⚠ コミュニティ提供の API
執筆時点では、Inforcer は公式の REST API 仕様を公開していません。このサーバーは @wyre-technology/node-inforcer SDK をラップしています。この SDK の API サーフェスは、royklo/InforcerCommunity からコミュニティによって提供されたものです。エンドポイント、フィールドの形式、動作は予告なく変更される可能性があります。結果はその点を踏まえて扱い、重要な情報は Inforcer ポータルで確認してください。
読み取り専用の範囲
このサーバーのすべてのツールは、次の2つを除き、読み取り専用です。
inforcer_assessments_run— テナントの評価実行を開始します。inforcer_reports_run— 1つ以上のテナントで、1つ以上のレポート実行をキューに登録します。
どちらも影響度の高い操作(破壊的操作ではありません)です。Inforcer で実際の処理を開始し、オペレーターにも表示されます。どちらもその旨が注記されており、実行前に確認を求めます。呼び出す前にユーザーの確認を得てください。
ポリシー、テナント、ベースラインを作成・更新・削除するツールはありません。これらの操作はコミュニティ API では公開されていないため、意図的に含めていません。
クイックスタート
Claude Code(CLI):
claude mcp add inforcer-mcp \
-e INFORCER_REGION=us \
-e INFORCER_API_KEY=your-api-key \
-- npx -y github:WYRE-AI/inforcer-mcp
Docker およびソースからのインストール方法については、インストールを参照してください。
機能
- 🔌 MCP プロトコルへの準拠:MCP ツールとプロンプトを完全にサポート
- 🛡️ ガバナンス範囲(読み取り専用):テナント、ベースライン、整合性/ドリフト、ポリシー、Microsoft Secure Score、Entra ID の ID、監査ログ
- 🔍 決定木ナビゲーション:まず
inforcer_navigateでドメインを確認し、その後、ドメイン固有のツールを呼び出します - 🧭 柔軟なテナント解決:ほとんどのツールでは、数値の Client Tenant ID、テナントの DNS 名、Azure AD GUID、またはわかりやすい名前を
tenantとして指定できます。自動的に解決されます - 🔒 セキュアな認証:
Inf-Api-Keyヘッダー認証(リージョン単位) - 🌐 2種類のトランスポート:stdio(ローカル)と HTTP Streamable(ゲートウェイ/Docker)
- 🐳 Docker 対応:HTTP トランスポートとヘルスチェックを備えたコンテナ化デプロイ
- 📊 構造化ログ:ログレベルを設定可能。認証情報は記録されません
目次
インストール
オプション 1:Claude Code(CLI)
claude mcp add inforcer-mcp \
-e INFORCER_REGION=us \
-e INFORCER_API_KEY=your-api-key \
-- npx -y github:WYRE-AI/inforcer-mcp
オプション 2:Docker
コンテナ内では 0.0.0.0 でリッスンし、デフォルトで AUTH_MODE=gateway を使用します。ポートをループバックで公開し、実際の S2S シークレットを渡してください。ゲートウェイモードでは、Inforcer のリージョンと API キーは各リクエストのヘッダーで渡され、環境変数からは読み込まれません。
docker build -t inforcer-mcp .
docker run \
-e CONDUIT_S2S_SECRET \
-p 127.0.0.1:8080:8080 \
inforcer-mcp
または、ビルド済みのイメージを取得します。
docker run -d \
-e CONDUIT_S2S_SECRET \
-p 127.0.0.1:8080:8080 \
ghcr.io/wyre-ai/inforcer-mcp:latest
Compose はプロジェクトの .env から CONDUIT_S2S_SECRET を読み込み、この値が未設定の場合は起動を拒否します。コマンドラインでこの変数を割り当てないでください。空のシェル値が .env の値を上書きします。
docker compose up
オプション 3:ソースから
git clone https://github.com/WYRE-AI/inforcer-mcp.git
cd inforcer-mcp
export NODE_AUTH_TOKEN=$(gh auth token) # to install @wyre-ai/* from GitHub Packages
npm ci
npm run build
設定
| 変数 | 必須 | 説明 |
|---|---|---|
INFORCER_REGION | stdio および AUTH_MODE=env の場合 | Inforcer API のリージョンです。anz、eu、uk、us のいずれかを指定します。デフォルト値はありません。Compose ゲートウェイサービスでは、この変数は読み込まれません。 |
INFORCER_API_KEY | stdio および AUTH_MODE=env の場合 | Inforcer API キーです。Inf-Api-Key ヘッダーとして送信されます。Compose ゲートウェイサービスでは、この変数は読み込まれません。 |
MCP_TRANSPORT | いいえ | stdio(デフォルト)または http |
AUTH_MODE | いいえ | gateway(Docker イメージと Compose のデフォルト)または env。ゲートウェイモードでは、各 /mcp リクエストに X-Inforcer-Region と X-Inforcer-API-Key が必要です。INFORCER_* へのフォールバックは行われません。env では、S2S 認証の成功後にのみこれらの変数が使用されます。 |
CONDUIT_S2S_SECRET | HTTP では必須 | サービス間シークレットです。openssl rand -hex 32 で生成してください。空の場合、または既知のプレースホルダー(changeme、your-s2s-secret、secret、placeholder などの公開サンプル)の場合、HTTP サーバーはエラーをログに記録して、ゼロ以外のステータスで終了します。Compose はこの値がないと起動しません。実際の値をコミットしないでください。この値がログに記録されることはありません。 |
MCP_ALLOW_INSECURE_DEV | いいえ | CONDUIT_S2S_SECRET がなくても HTTP を起動できるよう、ローカル開発時に限り、値を正確に 1 に設定します。プロセスは警告をログに記録し、X-Gateway-S2S を検証せず、MCP_HTTP_HOST がより広いアドレスに設定されていても、リスナーを 127.0.0.1 に強制します。既知のプレースホルダーシークレットは引き続き拒否されます。 |
MCP_HTTP_HOST | いいえ | MCP_TRANSPORT=http の場合のバインドアドレスです。未設定の場合は 127.0.0.1 がデフォルトです。CONDUIT_S2S_SECRET が設定されている場合は、この値が適用されます。コンテナーイメージでは 0.0.0.0 が設定されます。 |
MCP_HTTP_PORT | いいえ | HTTP ポートです。デフォルトは 8080 です。 |
LOG_LEVEL | いいえ | ログレベル(debug、info、warn、error)です。デフォルトは info です。 |
/health は認証なしで利用でき、認証情報を読み取りません。stdio トランスポートでは CONDUIT_S2S_SECRET を使用しません。
stdio および AUTH_MODE=env では、API 呼び出しに INFORCER_REGION と INFORCER_API_KEY の両方が必要です。ツールの検出(tools/list)はこれらがなくても機能しますが、最初の実際の呼び出しでは、どちらかが未設定の場合にエラーになります。
HTTP 認証
MCP_TRANSPORT=http で CONDUIT_S2S_SECRET が設定されている場合、すべての /mcp リクエストに X-Gateway-S2S を含める必要があります。検証処理は src/s2s-verify.ts の verifyS2sHeader にあります。ヘッダーの値は t=<unix seconds>,v1=<hex> です。hex は、CONDUIT_S2S_SECRET をキーとして、リテラル文字列 t=<unix seconds> に対して計算した HMAC-SHA256(小文字の 16 進数 64 文字)です。タイムスタンプはサーバーの時計との誤差が 300 秒以内でなければなりません。ヘッダーがない場合や無効な場合は、ベンダーの認証情報を読み取る前に HTTP 401 が返されます。
CONDUIT_S2S_SECRET は、あらかじめ環境に設定しておく必要があります。サンプルではプロセス内でこの変数を読み取ります。コマンド引数としてシークレットを渡すことはありません。
TS=$(date +%s)
SIG=$(printf 't=%s' "$TS" | node -e 'const {createHmac}=require("node:crypto"); const chunks=[]; process.stdin.on("data",(c)=>chunks.push(c)); process.stdin.on("end",()=>{ const secret=process.env.CONDUIT_S2S_SECRET; if(!secret){ console.error("CONDUIT_S2S_SECRET is not set"); process.exit(1); } process.stdout.write(createHmac("sha256", secret).update(Buffer.concat(chunks)).digest("hex")); });')
curl -sS http://127.0.0.1:8080/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H "X-Gateway-S2S: t=${TS},v1=${SIG}" \
-H 'X-Inforcer-Region: us' \
-H "X-Inforcer-API-Key: $INFORCER_API_KEY" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
AUTH_MODE=gateway の場合、/mcp には X-Inforcer-Region と X-Inforcer-API-Key も必要です。リクエストの認証情報は、これらのヘッダーのみを参照します。AUTH_MODE=env の場合、署名付きリクエストでは環境変数の INFORCER_REGION と INFORCER_API_KEY が使用されます。
テナント識別子
Inforcer のテナントスコープのルートでは、整数の Client Tenant ID を使用します。これは Azure AD テナント GUID(msTenantId)とは異なります。ツールを使いやすくするため、tenant 引数では次のいずれかを指定できます。
- 数値の Client Tenant ID(例:
42)、 - テナントの DNS 名(例:
contoso.onmicrosoft.com)、 - Azure AD テナント GUID(
msTenantId)、または - わかりやすい名前(例:
Contoso)。
名前、DNS 名、GUID は、テナントスコープの各呼び出しの前に、SDK の resolveTenantId によって数値の Client Tenant ID に解決されます。名前が複数のテナントに一致する場合、呼び出しは明確な「ambiguous」エラーで失敗します。その場合は、数値の Client Tenant ID を指定してください。入力がどの Client Tenant ID に対応するかを正確に確認するには、inforcer_tenants_resolve を使用してください。
ドメインとツール
サーバーは決定木によるナビゲーションを使用します。inforcer_navigateでドメインを選択するか、任意のツールを直接呼び出してください。inforcer_assessments_runとinforcer_reports_runを除くすべてのツールは読み取り専用です。
| ドメイン | ツール | 読み取り専用 |
|---|---|---|
| navigation | inforcer_navigate、inforcer_status(ライブのbaselines.list()接続チェック) | ✅ |
| tenants | inforcer_tenants_list、inforcer_tenants_get、inforcer_tenants_resolve | ✅ |
| baselines | inforcer_baselines_list | ✅ |
| alignment | inforcer_alignment_scores、inforcer_alignment_details(テナントごとのドリフト) | ✅ |
| policies | inforcer_policies_list(テナント別) | ✅ |
| secure-scores | inforcer_secure_scores_get(テナント別) | ✅ |
| identity | inforcer_users_list、inforcer_users_get、inforcer_groups_list、inforcer_groups_get、inforcer_roles_list | ✅ |
| audit | inforcer_audit_event_types、inforcer_audit_search | ✅ |
| assessments | inforcer_assessments_list(✅)、inforcer_assessments_run(⚠ 高い影響、読み取り専用ではありません) | 混在 |
| reports | inforcer_reports_types_list、inforcer_reports_runs_list、inforcer_reports_run_status、inforcer_reports_download_output(✅)、inforcer_reports_run(⚠ 高い影響、読み取り専用ではありません) | 混在 |
inforcer_reports_runは非同期でキューに登録されます。isTerminal: trueになるまでinforcer_reports_run_statusで実行状況をポーリングし、その後、各出力をinforcer_reports_download_outputで取得してください(ファイル内容はBase64エンコードで返されます)。
ゲートウェイ接続
WYRE MCP Gatewayの背後でホストする場合は、AUTH_MODE=gatewayとMCP_TRANSPORT=httpを設定してください。このモードではサーバーはステートレスで(リクエストごとに新しいMCPサーバーとトランスポートを使用し)、ゲートウェイが挿入するリクエストごとのHTTPヘッダーから認証情報を読み取ります。いずれかのヘッダーがないリクエストにはHTTP 401を返し、INFORCER_REGIONやINFORCER_API_KEYへのフォールバックは行いません。
| ヘッダー | 対応先 |
|---|---|
X-Gateway-S2S | HTTP authenticationで説明されているHMAC証明。CONDUIT_S2S_SECRETが設定されている場合、すべての/mcpリクエストで必須です。 |
X-Inforcer-Region | INFORCER_REGION |
X-Inforcer-API-Key | INFORCER_API_KEY |
コンテナーイメージのデフォルトはMCP_TRANSPORT=httpとAUTH_MODE=gatewayです。/healthは常に200を返し、認証を必要とせず、ベンダーの認証情報も読み取りません。
Dockerのデプロイ
docker-compose.ymlを参照してください。リポジトリに含まれるComposeサービスはゲートウェイモードです。127.0.0.1:8080:8080を公開し、CONDUIT_S2S_SECRETを必須とし、INFORCER_REGION、INFORCER_API_KEY、env_fileは設定しません。
cp .env.example .env
# Set CONDUIT_S2S_SECRET in .env (openssl rand -hex 32). Leave INFORCER_* empty
# for the gateway service; those credentials arrive as request headers.
# Compose loads .env itself. Do not prefix the command with a shell assignment.
docker compose up -d
単一テナントのHTTP(AUTH_MODE=env)でもS2Sシークレットが必要で、その後INFORCER_REGIONとINFORCER_API_KEYを使用します。これはゲートウェイComposeサービスとは別です。
docker run \
-e CONDUIT_S2S_SECRET \
-e AUTH_MODE=env \
-e INFORCER_REGION=us \
-e INFORCER_API_KEY=your-key \
-p 127.0.0.1:8080:8080 \
inforcer-mcp
シークレットを使わないローカルHTTPは開発専用です。127.0.0.1のみにバインドし、警告をログに記録します。ループバック以外のMCP_HTTP_HOSTは無視され、その上書きはログに記録されます。
MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 npm run start:http
開発
export NODE_AUTH_TOKEN=$(gh auth token)
npm ci
npm run build # Build the project
npm run dev # Watch mode
npm run test # Run tests
npm run lint # Type-check
npm run clean # Remove dist/
# HTTP refuses to start until CONDUIT_S2S_SECRET is a real secret
CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" npm run start:http
# Local HTTP only, without a service-to-service secret (always binds 127.0.0.1)
MCP_ALLOW_INSECURE_DEV=1 npm run start:http
テスト
npm test # Run test suite
npm run test:watch # Watch mode
貢献
ガイドラインについてはCONTRIBUTING.mdを参照してください。
ライセンス
Apache 2.0 — Copyright WYRE Technology
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。