# Inforcer (oci · ghcr.io/wyre-technology/inforcer-mcp:v1.1.0)

Read-only MCP server for Inforcer M365 baseline governance, plus assessment and report runs.

- Trust score: 39/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-22

## Components

- oci · `ghcr.io/wyre-technology/inforcer-mcp:v1.1.0`: 39/100 (this document), [markdown](https://verifymcp.io/servers/wyre-technology-inforcer-mcp/ghcr-io-wyre-technology-inforcer-mcp-v1-1-0.md), [page](https://verifymcp.io/servers/wyre-technology-inforcer-mcp/ghcr-io-wyre-technology-inforcer-mcp-v1-1-0)

## Channel facts

- Registry: `oci`
- Package: `ghcr.io/wyre-technology/inforcer-mcp:v1.1.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-22.

- **Supply Chain Security**: 0/100
  - Malware scan not yet available for this package.
  - Known CVEs could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.
  - Install-script risk not yet assessed.
  - Dependency health could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.
- **Provenance & Transparency**: 32/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: the license (NOASSERTION) isn't a recognized OSI-approved license.
  - Actively maintained (last published 2 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 89/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 2187 tokens (~91/item across 24 items; 24 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 2 categories.** Categories scored 0 because we could not verify them: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add wyre-technology-inforcer-mcp -- docker run --rm -i ghcr.io/wyre-technology/inforcer-mcp:v1.1.0
```

### Codex

```bash
codex mcp add wyre-technology-inforcer-mcp -- docker run --rm -i ghcr.io/wyre-technology/inforcer-mcp:v1.1.0
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "wyre-technology-inforcer-mcp": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "--rm",
        "-i",
        "ghcr.io/wyre-technology/inforcer-mcp:v1.1.0"
      ],
      "enabled": true
    }
  }
}
```

### Hermes

```yaml
mcp_servers:
  wyre-technology-inforcer-mcp:
    command: "docker"
    args: ["run", "--rm", "-i", "ghcr.io/wyre-technology/inforcer-mcp:v1.1.0"]
```

### Other

```json
{
  "mcpServers": {
    "wyre-technology-inforcer-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/wyre-technology/inforcer-mcp:v1.1.0"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-19 (score 39)

First indexed and scored.

## MCP tools (24)

### `inforcer_navigate` (~187 tokens)

Discover available Inforcer tools by domain. Returns tool names and descriptions for the selected domain. All tools are callable at any time — this is a help/discovery aid, not a prerequisite.

Input parameters:

- `domain` (string, required): The domain to explore: - tenants: list/get tenants, resolve a name/DNS/GUID to a Client Tenant ID - baselines: list baseline groups - alignment: alignment scores and per-tenant drift details - polici…

### `inforcer_status` (~33 tokens)

Check Inforcer API connectivity and available domains. Performs a live baselines.list() call as a read-only connectivity check.

### `inforcer_tenants_list` (~19 tokens)

List all managed tenants. Read-only.

### `inforcer_tenants_get` (~117 tokens)

Get a single tenant. Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request. Ambiguous names throw a clear error. Read-only.

Input parameters:

- `tenant` (string, required): Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request. Ambiguous names th…

### `inforcer_tenants_resolve` (~97 tokens)

Resolve a tenant name, DNS name, or Azure AD GUID to its numeric Inforcer Client Tenant ID (which is NOT the Azure AD tenant GUID). Read-only.

Input parameters:

- `tenant` (string, required): Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request. Ambiguous names th…

### `inforcer_baselines_list` (~54 tokens)

List baseline groups and their members. Optionally filter by the baseline (owner) tenant ID. Read-only.

Input parameters:

- `baseline_tenant_id` (number): Filter baseline groups by baseline (owner) Client Tenant ID

### `inforcer_alignment_scores` (~20 tokens)

List baseline alignment scores across tenants. Read-only.

### `inforcer_alignment_details` (~105 tokens)

Get detailed baseline-alignment drift for a tenant. Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request. Read-only.

Input parameters:

- `tenant` (string, required): Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request.

### `inforcer_policies_list` (~102 tokens)

List policies for a tenant. Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request. Read-only.

Input parameters:

- `tenant` (string, required): Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request.

### `inforcer_secure_scores_get` (~106 tokens)

Get the Microsoft Secure Score data for a tenant. Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request. Read-only.

Input parameters:

- `tenant` (string, required): Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request.

### `inforcer_users_list` (~134 tokens)

List Entra ID user summaries for a tenant (paginated). Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request. Read-only.

Input parameters:

- `continuation_token` (string): Pagination cursor from a prior page
- `search` (string): Filter users by search term
- `tenant` (string, required): Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request.

### `inforcer_users_get` (~119 tokens)

Get full detail for a single user. Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request. Read-only.

Input parameters:

- `tenant` (string, required): Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request.
- `user_id` (string, required): The user ID (Entra object ID)

### `inforcer_groups_list` (~134 tokens)

List Entra ID group summaries for a tenant (paginated). Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request. Read-only.

Input parameters:

- `continuation_token` (string): Pagination cursor from a prior page
- `search` (string): Filter groups by search term
- `tenant` (string, required): Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request.

### `inforcer_groups_get` (~122 tokens)

Get full detail for a single group, including members. Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request. Read-only.

Input parameters:

- `group_id` (string, required): The group ID (Entra object ID)
- `tenant` (string, required): Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request.

### `inforcer_roles_list` (~106 tokens)

List Entra ID directory role definitions for a tenant. Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request. Read-only.

Input parameters:

- `tenant` (string, required): Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request.

### `inforcer_audit_event_types` (~27 tokens)

List the audit event types available for filtering the activity log. Read-only.

### `inforcer_audit_search` (~123 tokens)

Search the Inforcer activity (audit) log. All filters are optional; returns a page of events plus a continuation token for paging. Read-only.

Input parameters:

- `continuation_token` (string): Pagination cursor from a prior page
- `date_from` (string): ISO-8601 start of the date range
- `date_to` (string): ISO-8601 end of the date range
- `event_types` (array): Filter to these audit event types (see inforcer_audit_event_types)
- `page_size` (number): Max events per page

### `inforcer_assessments_list` (~28 tokens)

List the assessments available to run (use to discover assessment IDs). Read-only.

### `inforcer_assessments_run` (~160 tokens)

⚠ HIGH-IMPACT. Triggers an assessment run for a tenant. This is not destructive, but it kicks off real work in Inforcer and is visible to operators. Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request. Confirm with the user before invoking.

Input parameters:

- `assessment_id` (string, required): The assessment ID to run (discover IDs via inforcer_assessments_list)
- `tenant` (string, required): Tenant identifier — accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to the numeric Client Tenant ID before the request.

### `inforcer_reports_types_list` (~63 tokens)

List the catalog of available report types — key, supported output formats, whether the type is collatable (single cross-tenant output), and accepted parameters. Use to discover valid (type, output_format) pairs before calling inforcer_reports_run. Read-only.

### `inforcer_reports_runs_list` (~21 tokens)

List queued and completed report runs. Read-only.

### `inforcer_reports_run` (~162 tokens)

⚠ HIGH-IMPACT. Queues one or more reports across one or more tenants. This is not destructive, but it kicks off real report-generation work in Inforcer. Reports run asynchronously — use inforcer_reports_run_status to poll the returned run(s) to completion, then inforcer_reports_download_output to fetch each finished output. Confirm with the user before invoking.

Input parameters:

- `reports` (array, required): One or more reports to queue. Discover valid type/output_format pairs via inforcer_reports_types_list.
- `tenants` (array, required): Tenant identifiers to run the report(s) against — each accepts a numeric Client Tenant ID, a tenant DNS name, an Azure AD tenant GUID, or a friendly name. Resolved to numeric Client Tenant IDs before…

### `inforcer_reports_run_status` (~65 tokens)

Poll a report run. Returns isTerminal:false with no outputs while the run is still in progress, or isTerminal:true with the list of downloadable outputs once it finishes. Read-only.

Input parameters:

- `run_id` (string, required): The run identifier returned by inforcer_reports_run.

### `inforcer_reports_download_output` (~83 tokens)

Download a single finished report output (discovered via inforcer_reports_run_status). Returns the file content base64-encoded along with its filename and content type. Read-only.

Input parameters:

- `output_id` (string, required): The output's id, from inforcer_reports_run_status's outputs list.
- `run_id` (string, required): The run identifier the output belongs to.

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/wyre-technology-inforcer-mcp/ghcr-io-wyre-technology-inforcer-mcp-v1-1-0#diagnostics

## Score history

- 2026-08-22: 39
- 2026-08-21: 39
- 2026-08-20: 39
- 2026-08-19: 39

## Links

- Repository: https://github.com/wyre-technology/inforcer-mcp
- Changelog RSS feed: https://verifymcp.io/servers/wyre-technology-inforcer-mcp/ghcr-io-wyre-technology-inforcer-mcp-v1-1-0.xml
- Changelog JSON feed: https://verifymcp.io/servers/wyre-technology-inforcer-mcp/ghcr-io-wyre-technology-inforcer-mcp-v1-1-0.json
- HTML version of this page: https://verifymcp.io/servers/wyre-technology-inforcer-mcp/ghcr-io-wyre-technology-inforcer-mcp-v1-1-0
