mcpField
I
Inforcer

Inforcer

ローカル
github.comセキュリティ1今日更新

Inforcer について

Inforcer は、Microsoft 365 のベースラインガバナンスを管理するチーム向けの MCP サーバーです。テナント、ベースライン、ポリシー、ID、監査データに構造化アクセスでき、大半は読み取り専用で、評価の開始とレポートのキュー登録にも対応します。

主な機能

  1. 01テナント、ベースライン、ポリシー、整合性データの読み取り
  2. 02Secure Score、ID、監査ログの照会
  3. 03複数形式のテナント識別子の解決
  4. 04評価の開始とレポートのキュー登録

活用シーン

  1. 01テナント間のベースライン逸脱の確認
  2. 02ID、ポリシー、監査記録の確認
  3. 03対象テナントの評価やレポートの開始

MCP 対応

MCP サーバーとして、Inforcer のガバナンス情報を照会するツールと、評価開始およびレポート登録の操作をクライアントに公開します。stdio と HTTP Streamable に対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"wyre-technology-inforcer": {
"command": "docker",
"args": [
"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.0"
],
"env": {
"INFORCER_REGION": "<INFORCER_REGION>",
"INFORCER_API_KEY": "<INFORCER_API_KEY>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>",
"AUTH_MODE": "<AUTH_MODE>",
"LOG_LEVEL": "<LOG_LEVEL>"
}
}
}
}
起動コマンド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.0
設定が必要な環境変数
INFORCER_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocighcr.io/wyre-technology/inforcer-mcp:v1.1.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Inforcer MCP サーバー

Build Status License Node.js

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_REGIONstdio および AUTH_MODE=env の場合Inforcer API のリージョンです。anz、eu、uk、us のいずれかを指定します。デフォルト値はありません。Compose ゲートウェイサービスでは、この変数は読み込まれません。
INFORCER_API_KEYstdio および 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_SECRETHTTP では必須サービス間シークレットです。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を除くすべてのツールは読み取り専用です。

ドメインツール読み取り専用
navigationinforcer_navigate、inforcer_status(ライブのbaselines.list()接続チェック)✅
tenantsinforcer_tenants_list、inforcer_tenants_get、inforcer_tenants_resolve✅
baselinesinforcer_baselines_list✅
alignmentinforcer_alignment_scores、inforcer_alignment_details(テナントごとのドリフト)✅
policiesinforcer_policies_list(テナント別)✅
secure-scoresinforcer_secure_scores_get(テナント別)✅
identityinforcer_users_list、inforcer_users_get、inforcer_groups_list、inforcer_groups_get、inforcer_roles_list✅
auditinforcer_audit_event_types、inforcer_audit_search✅
assessmentsinforcer_assessments_list(✅)、inforcer_assessments_run(⚠ 高い影響、読み取り専用ではありません)混在
reportsinforcer_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-S2SHTTP authenticationで説明されているHMAC証明。CONDUIT_S2S_SECRETが設定されている場合、すべての/mcpリクエストで必須です。
X-Inforcer-RegionINFORCER_REGION
X-Inforcer-API-KeyINFORCER_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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。