mcpField
I
Inforcer

Inforcer

本地服务
github.com安全1今天更新

关于 Inforcer

Inforcer MCP 服务面向管理 Microsoft 365 基线治理的团队,提供租户、基线、偏差、策略、身份和审计数据的结构化访问。工具大多只读,另可触发评估和排队生成报告。

主要功能

  1. 01读取租户、基线、策略和对齐状态
  2. 02查询 Secure Score、身份与审计日志
  3. 03支持多种租户标识自动解析
  4. 04触发评估并排队生成报告

适用场景

  1. 01检查租户的基线偏差
  2. 02查看身份、策略及审计记录
  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 Server

Build Status License Node.js

一个 Model Context Protocol (MCP) 服务,为 AI 助手提供对 Inforcer Microsoft 365 基线治理数据的结构化、基本只读访问,包括租户、基线、对齐/偏差、策略、安全评分、身份、审计日志和报告生成;此外,还提供两个写入操作,用于触发评估运行或排队生成报告。

注意: 本项目由 Wyre Technology 维护。

⚠ 社区整理的 API

截至撰写本文时,Inforcer 尚未发布官方 REST API 规范。本服务封装了 @wyre-technology/node-inforcer SDK,其 API 接口由社区根据 royklo/InforcerCommunity 整理。端点、字段结构和行为可能随时发生变化,恕不另行通知。请谨慎对待返回结果,并通过 Inforcer 门户核实任何关键内容。

只读范围

本服务中的所有工具均为只读,但以下两个工具除外:

  • inforcer_assessments_run — 为租户触发一次评估运行。
  • inforcer_reports_run — 为一个或多个租户排队生成一份或多份报告。

这两个操作均属高影响操作(但不具破坏性):它们会在 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 身份和审计日志
  • 🔍 决策树导航:从 inforcer_navigate 开始探索各个领域,然后调用相应领域的工具
  • 🧭 灵活的租户解析:大多数工具接受 tenant,其值可以是数字形式的 Client Tenant ID、租户 DNS 名称、Azure AD GUID 或易记名称;系统会自动解析
  • 🔒 安全认证:使用 Inf-Api-Key 请求头认证,并限定区域
  • 🌐 双传输方式: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,如果该值未设置,则拒绝启动。请勿在命令行中设置该变量:空的 shell 值会覆盖 .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否仅用于本地开发时,设为 1,即可在未设置 CONDUIT_S2S_SECRET 的情况下启动 HTTP。进程会记录警告,不会强制检查 X-Gateway-S2S,并会强制将监听地址设为 127.0.0.1,即使 MCP_HTTP_HOST 是更广泛的地址。已知的占位密钥仍会被拒绝。
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>,其中十六进制值是以 CONDUIT_S2S_SECRET 为密钥、对字面字符串 t=<unix seconds> 计算得出的 HMAC-SHA256(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)。

每次调用租户范围的接口前,SDK 都会通过 resolveTenantId 将名称、DNS 名称或 GUID 解析为数字形式的 Client Tenant ID。如果名称匹配多个租户,调用会失败并显示清晰的“ambiguous”(有歧义)错误;请改用数字形式的 Client Tenant ID。使用 inforcer_tenants_resolve 可查看输入具体对应哪个 Client Tenant ID。

域和工具

服务器使用决策树导航。使用 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 会异步排队执行 — 使用 inforcer_reports_run_status 轮询运行状态,直到 isTerminal: true,然后使用 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 — 版权所有 WYRE Technology

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。