Skip to main content
Glama
WYRE-AI

Inforcer MCP Server

Official
by WYRE-AI

Inforcer MCP Server

Build Status License Node.js

A Model Context Protocol (MCP) server that gives AI assistants structured, mostly read-only access to Inforcer Microsoft 365 baseline-governance data — tenants, baselines, alignment/drift, policies, secure scores, identity, audit logs, and report generation — plus two write actions to trigger an assessment run or queue a report.

Note: This project is maintained by Wyre Technology.

⚠ Community-sourced API

Inforcer does not (at time of writing) publish an official REST API specification. This server wraps the @wyre-technology/node-inforcer SDK, whose API surface is community-sourced from royklo/InforcerCommunity. Endpoints, field shapes, and behavior may change without notice. Treat results accordingly and verify anything load-bearing against the Inforcer portal.

Related MCP server: LegacyMCP

Read-only scope

Every tool in this server is read-only EXCEPT two:

  • inforcer_assessments_run — triggers an assessment run for a tenant.

  • inforcer_reports_run — queues one or more report runs across one or more tenants.

Both are HIGH-IMPACT (not destructive): they kick off real work in Inforcer and are visible to operators. Both are annotated accordingly and ask for confirmation before running. Confirm with the user before invoking.

There are no create/update/delete tools for policies, tenants, or baselines — those operations are not exposed by the community API and are intentionally absent here.

Quick Start

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

See Installation for Docker and from-source methods.

Features

  • 🔌 MCP Protocol Compliance: Full support for MCP tools and prompts

  • 🛡️ Governance Coverage (read-only): Tenants, baselines, alignment/drift, policies, Microsoft Secure Score, Entra ID identity, and the audit log

  • 🔍 Decision-Tree Navigation: Start with inforcer_navigate to explore domains, then call domain-specific tools

  • 🧭 Flexible Tenant Resolution: Most tools accept a tenant as a numeric Client Tenant ID, a tenant DNS name, an Azure AD GUID, or a friendly name — resolved automatically

  • 🔒 Secure Authentication: Inf-Api-Key header auth, region-scoped

  • 🌐 Dual Transport: stdio (local) and HTTP Streamable (gateway/Docker)

  • 🐳 Docker Ready: Containerized deployment with HTTP transport and health checks

  • 📊 Structured Logging: Configurable levels, credentials never logged

Table of Contents

Installation

Option 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

Option 2: Docker

docker compose up

Or pull the pre-built image:

docker run -d \
  -e INFORCER_REGION=us \
  -e INFORCER_API_KEY=your-key \
  -p 8080:8080 \
  ghcr.io/wyre-ai/inforcer-mcp:latest

Option 3: From Source

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

Configuration

Variable

Description

Default

INFORCER_REGION

Required. Inforcer API region — one of anz, eu, uk, us. There is no default; the server errors clearly if it is missing.

INFORCER_API_KEY

Required. Inforcer API key, sent as the Inf-Api-Key header.

MCP_TRANSPORT

Transport mode (stdio or http)

stdio

MCP_HTTP_PORT

HTTP server port

8080

AUTH_MODE

Auth mode (env or gateway)

env

LOG_LEVEL

Log level (debug, info, warn, error)

info

Both INFORCER_REGION and INFORCER_API_KEY are required for any API call. Tool discovery (tools/list) works without them; the first real call will error if either is missing.

Tenant identifiers

Inforcer's tenant-scoped routes use an integer Client Tenant ID — which is NOT the same as the Azure AD tenant GUID (msTenantId). To make tools easy to use, the tenant argument accepts any of:

  • a numeric Client Tenant ID (e.g. 42),

  • a tenant DNS name (e.g. contoso.onmicrosoft.com),

  • an Azure AD tenant GUID (msTenantId), or

  • a friendly name (e.g. Contoso).

Names/DNS/GUIDs are resolved to the numeric Client Tenant ID via the SDK's resolveTenantId before each tenant-scoped call. If a name matches more than one tenant, the call fails with a clear "ambiguous" error — pass the numeric Client Tenant ID instead. Use inforcer_tenants_resolve to see exactly which Client Tenant ID an input maps to.

Domains and tools

The server uses decision-tree navigation. Start with inforcer_navigate to pick a domain, or call any tool directly. All tools are read-only except inforcer_assessments_run and inforcer_reports_run.

Domain

Tools

Read-only

navigation

inforcer_navigate, inforcer_status (live baselines.list() connectivity check)

tenants

inforcer_tenants_list, inforcer_tenants_get, inforcer_tenants_resolve

baselines

inforcer_baselines_list

alignment

inforcer_alignment_scores, inforcer_alignment_details (per-tenant drift)

policies

inforcer_policies_list (by tenant)

secure-scores

inforcer_secure_scores_get (by tenant)

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 (⚠ HIGH-IMPACT, not read-only)

mixed

reports

inforcer_reports_types_list, inforcer_reports_runs_list, inforcer_reports_run_status, inforcer_reports_download_output (✅), inforcer_reports_run (⚠ HIGH-IMPACT, not read-only)

mixed

inforcer_reports_run queues asynchronously — poll the run with inforcer_reports_run_status until isTerminal: true, then fetch each output with inforcer_reports_download_output (returns base64-encoded file content).

Gateway connection

When hosted behind the WYRE MCP Gateway, set AUTH_MODE=gateway and MCP_TRANSPORT=http. In this mode the server is stateless (a fresh MCP server + transport per request) and reads credentials from per-request HTTP headers injected by the gateway:

Header

Maps to

x-inforcer-region

INFORCER_REGION

x-inforcer-api-key

INFORCER_API_KEY

When both headers are present the server updates the environment and invalidates its cached client so the next call uses the freshly-injected credentials. tools/list still works without credentials, so discovery is never blocked. The container image defaults to MCP_TRANSPORT=http; /health reports ok when credentials are configured and degraded otherwise.

Docker Deployment

See docker-compose.yml for full configuration. Copy .env.example to .env and fill in your credentials:

cp .env.example .env
# Edit .env with INFORCER_REGION and INFORCER_API_KEY
docker compose up -d

Development

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/

Testing

npm test            # Run test suite
npm run test:watch  # Watch mode

Contributing

See CONTRIBUTING.md for guidelines.

License

Apache 2.0 — Copyright WYRE Technology

Available Tools

24 tools
inforcer_alignment_detailsA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenantYesTenant 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.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description consistently states 'Read-only.' It adds useful behavioral context beyond the annotations: the accepted tenant identifier forms (numeric ID, DNS name, AAD GUID, friendly name) and the fact that it resolves to the numeric Client Tenant ID before making the request.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the core action, and every sentence adds relevant information. It avoids redundant filler and is easy to process quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only tool with no output schema, the description covers the main necessary context: what it gets, what tenant identifier forms are accepted, and the resolution behavior. It does not enumerate what fields 'details' includes, but the tool name and sibling set make the scope reasonably clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the parameter description essentially repeats the tool description. The description does not add any new parameter-level meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get') and resource ('baseline-alignment drift') and qualifies it as 'detailed', which suggests a more granular result than the sibling inforcer_alignment_scores. However, it does not explicitly contrast it with that sibling, so differentiation relies mostly on the word 'detailed' and the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives such as inforcer_alignment_scores or inforcer_baselines_list. The description gives tenant-identifier format guidance, which is parameter-level usage, not tool-selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_alignment_scoresA
Read-only

List baseline alignment scores across tenants. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and openWorldHint=true, and the description's 'Read-only' reinforces the same information. It adds the cross-tenant scope, but provides no additional behavioral details such as output shape, pagination, or rate limits, so the value beyond annotations is modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of two short sentences, front-loading the primary action and scope, followed by a useful safety qualifier. Every word earns its place, with no unnecessary repetition or padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, read-only list tool, the description is complete: it states what is returned, the scope, and the safety profile. The empty schema and annotations cover the remaining invocation requirements, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

This tool has no parameters, and the input schema fully reflects this with an empty properties object. The description does not need to elaborate on parameter semantics, so the no-parameter baseline applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('baseline alignment scores') with a clear scope ('across tenants'), which clearly identifies the tool's purpose. It does not explicitly name sibling alternatives like inforcer_baselines_list or inforcer_alignment_details, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'across tenants' implies this tool is for retrieving cross-tenant baseline alignment scores, providing some usage context. However, it does not explicitly state when to prefer this over siblings such as inforcer_baselines_list or inforcer_alignment_details, nor does it mention any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_assessments_listA
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and openWorldHint=true, and the description's 'Read-only' simply reinforces that. The description adds a small behavioral/purpose hint ('available to run') but does not go beyond what annotations already establish.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, front-loaded with the action and resource, and includes a useful parenthetical purpose. The 'Read-only' sentence is somewhat redundant with the readOnlyHint annotation but harmless and reinforces the safety profile.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool, the description conveys what is listed, why to use it, and that it is safe. It does not describe the exact output format, but the mention of discovering assessment IDs gives the agent enough expectation for a simple listing call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters and schema coverage is 100%, so there is no parameter documentation gap for the description to fill. The description adds nothing about parameters, but none exists, so the baseline applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('assessments available to run'), and explicitly states the practical purpose: discovering assessment IDs. This clearly differentiates it from sibling tools like inforcer_assessments_run, which would execute rather than list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: before running assessments, to discover assessment IDs. It does not explicitly name alternatives or exclusion conditions, but for a zero-parameter list operation the intended placement in the workflow is evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_assessments_runA

⚠ 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenantYesTenant 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.
assessment_idYesThe assessment ID to run (discover IDs via inforcer_assessments_list)

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the annotations by adding critical behavioral context: the run is not destructive, but kicks off real work visible to operators. This is genuinely useful disclosure that complements the readOnlyHint=false and idempotentHint=false annotations, and it does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loads the most important information (HIGH-IMPACT) before the details. The tenant identifier sentence is somewhat redundant with the schema, but it keeps the description self-contained. Overall, each sentence serves a purpose without excessive length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-impact action tool with no output schema, the description covers the key operational context: impact level, visibility to operators, tenant resolution, and user confirmation. It does not describe return values or post-run status checking, but this is a minor gap given the action-oriented nature and the presence of sibling status tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description repeats the tenant identifier semantics verbatim rather than adding new meaning, and adds no additional context for assessment_id beyond what the schema already provides. This is an adequate but not value-adding redundancy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Triggers an assessment run') with a clear resource ('assessment run for a tenant'), and distinguishes itself from the sibling inforcer_assessments_list by indicating it initiates work rather than listing. The HIGH-IMPACT warning and tenant scope make the purpose immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs the agent to confirm with the user before invoking, which is essential usage guidance for a high-impact action. It also clarifies the tenant input forms and resolution behavior. It does not explicitly contrast against alternatives such as inforcer_reports_run, but the warning and 'confirm with user' guidance provide strong contextual direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_audit_event_typesA
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly says 'Read-only', which matches the readOnlyHint annotation. It also clarifies that the returned values are meant for filtering, adding context beyond the bare schema. No destructive or hidden behavior is implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and front-loaded with the action and purpose. The 'Read-only' sentence is slightly redundant with the annotations, but it is harmless and does not significantly bloat the description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple parameterless, read-only listing tool with annotations and no output schema, the description fully covers what the tool does, what it returns conceptually, and how it should be used. Nothing essential for invoking it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

This tool has zero parameters and 100% schema description coverage, so there are no parameter semantics to clarify. Per the baseline for parameterless tools, a score of 4 is appropriate since there is nothing the description needs to compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('audit event types') and explains their purpose ('available for filtering the activity log'). This clearly distinguishes it from related tools like inforcer_audit_search, which searches rather than lists filter options.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the tool's purpose in the context of filtering the activity log, making the use case clear. It does not explicitly name alternatives or exclusions, but the intended context is apparent from the wording and sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_baselines_listB
Read-only

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

ParametersJSON Schema
NameRequiredDescriptionDefault
baseline_tenant_idNoFilter baseline groups by baseline (owner) Client Tenant ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry readOnlyHint=true and openWorldHint=true; the description repeats read-only and adds that results include baseline groups and their members, which goes slightly beyond the schema. However, it does not disclose result structure, pagination, or open-world limitations, so the added behavioral context is modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and scope, and no filler besides a harmless 'Read-only' repetition. It is efficient, scannable, and appropriately sized for a simple list tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list with one optional parameter, the description gives enough context to understand the tool's purpose and primary filter. It does not detail result member shapes or pagination, but the low complexity and full schema coverage make this acceptable. The absence of sibling differentiation prevents a top score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents baseline_tenant_id as a filter by baseline (owner) Client Tenant ID. The description restates this filtering idea without adding format, boundaries, or behavioral details beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete operation and resource: 'List baseline groups and their members,' and mentions the tenant filter, making the tool's scope discernible at a glance. It doesn't explicitly contrast with sibling list tools like inforcer_groups_list, so it falls just short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given on when to use this tool versus alternatives such as inforcer_groups_list or inforcer_tenants_list. The only selection clue is the resource name 'baseline groups,' and there are no exclusions or alternative routing conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_groups_getA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenantYesTenant 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.
group_idYesThe group ID (Entra object ID)

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint and openWorldHint, and the description adds the read-only label as reinforcement. Beyond annotations, it discloses behavioral details: the tenant identifier is resolved to the numeric Client Tenant ID before the request, and the result includes members. This is useful contextual behavior not present in the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the core action. The tenant-resolution sentence is somewhat redundant with the schema, and 'Read-only' repeats an annotation, so it is not perfectly lean. Still, it is compact and readable with no wasteful filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with two fully documented parameters and no output schema, the description covers the essential purpose and output expectation (full detail, including members). It also explains tenant resolution behavior, which is an important operational nuance. It could additionally mention error or not-found behavior, but given the annotation coverage, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description repeats the tenant identifier semantics almost verbatim from the schema and does not add meaning for group_id beyond 'including members' as an outcome. It provides no new parameter-level insight, but the schema is already complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get full detail for a single group, including members.' This clearly distinguishes it from sibling tools like inforcer_groups_list by emphasizing 'single group' and the inclusion of members. The purpose is immediately recognizable and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied through 'single group' and 'including members,' suggesting this is for retrieving one group's full detail rather than listing groups. However, it never explicitly names alternatives like inforcer_groups_list or provides exclusion conditions, so the guidance is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_groups_listA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoFilter groups by search term
tenantYesTenant 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.
continuation_tokenNoPagination cursor from a prior page

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, and the description affirms read-only behavior. It also discloses useful behavioral traits beyond the annotations: the operation is paginated, and tenant identifiers are resolved to the numeric Client Tenant ID before the request. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the core purpose, followed by tenant identifier handling and read-only status. It avoids extraneous content, though the tenant sentence is redundant with the schema, which slightly limits efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers what the tool lists, pagination, and tenant resolution. There is no output schema, but 'group summaries' indicates the return nature. Parameters are fully documented in the schema, and annotations cover read-only and open-world behavior. Missing only explicit guidance on when to prefer this over groups_get or when to use the continuation_token.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters. The description repeats the tenant parameter explanation verbatim but adds no new semantics for search or continuation_token; however, the schema descriptions for those are sufficient, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb and object: 'List Entra ID group summaries for a tenant (paginated).' It clearly identifies the resource, scope, and pagination. This distinguishes it from sibling tools like inforcer_groups_get, which would retrieve a single group rather than summaries of all groups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys clear context for when this tool is appropriate: listing group summaries for a tenant, with pagination. It does not explicitly exclude alternatives or name sibling tools such as inforcer_groups_get for detailed group information, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_navigateA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesThe 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 - policies: list policies for a tenant - secure-scores: Microsoft Secure Score for a tenant - identity: Entra ID users, groups, and directory roles for a tenant - audit: audit event types and activity-log search - assessments: list assessments and trigger an assessment run (write) - reports: list report types and runs, queue a report run and poll it to completion, download a finished output (write)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the disclosure burden. It discloses that the tool returns tool names and descriptions, and clarifies it is non-essential and non-gating. This sufficiently signals a read-only discovery behavior, though it does not explicitly say 'read-only' or discuss error cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler: the purpose and return value are stated first, followed by a useful clarification about optionality. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, single-parameter discovery tool, the description is complete: it states what the tool returns, that results are scoped by domain, and that it is not a prerequisite. The rich enum schema provides detail on each domain, and no output schema is necessary given the description of the return payload.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the single 'domain' parameter is fully documented with an enum and detailed per-value descriptions. The tool description adds no parameter-specific information beyond referring to the 'selected domain', so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Discover available Inforcer tools by domain' and states the return value ('tool names and descriptions'). It clearly differentiates itself from the 23 specific sibling tools by positioning itself as a help/discovery aid rather than a domain operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear use case ('Discover available Inforcer tools by domain') and an important workflow rule: 'All tools are callable at any time — this is a help/discovery aid, not a prerequisite.' It does not explicitly name alternatives to skip it for, but the sibling tool list and the 'not a prerequisite' clause implicitly tell an agent when direct calls are appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_policies_listA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenantYesTenant 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.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true; the description adds 'Read-only' and the useful detail that tenant identifiers are resolved to a numeric Client Tenant ID before the request. It does not address pagination, result shape, or open-world behavior, but the read-only safety profile is already covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core action. Each sentence contributes either the purpose, accepted input forms, or the read-only nature. The 'Read-only' phrase slightly duplicates the annotation but is not excessive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter, read-only list operation, the description is largely complete: it states the action, the accepted tenant identifier formats, and resolution behavior. It does not describe the returned policy fields, but the low complexity and lack of an output schema make this a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully documents the single 'tenant' parameter with the same explanation of accepted formats. The description adds no new parameter-level meaning beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action and resource: 'List policies for a tenant.' It gives enough specificity to understand what the tool does, though it does not explicitly differentiate from sibling tools such as inforcer_baselines_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case: listing policies for a tenant, and clarifies acceptable tenant identifiers. However, it provides no explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_reports_download_outputA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYesThe run identifier the output belongs to.
output_idYesThe output's id, from inforcer_reports_run_status's outputs list.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces that with 'Read-only.' It goes beyond annotations by specifying the return behavior: base64-encoded file content, filename, and content type, plus the constraint that only finished report outputs are downloadable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The first sentence states the tool's purpose and discovery path; the second describes the response shape. It is efficiently front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter, read-only retrieval tool with no output schema, the description covers what is returned and how outputs are discovered. It is complete enough for an agent to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% parameter coverage, including output_id's provenance from inforcer_reports_run_status's outputs list. The description adds the 'finished' qualifier but does not contribute substantially new parameter-level detail beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('download') and a specific resource ('a single finished report output'), and further clarifies that outputs are discovered via inforcer_reports_run_status. This clearly separates it from report running, listing, and status-checking siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear workflow context: use this after discovering outputs through inforcer_reports_run_status. It does not explicitly state when not to use the tool or name alternative tools, but the discovery source provides enough routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_reports_runA

⚠ 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
reportsYesOne or more reports to queue. Discover valid type/output_format pairs via inforcer_reports_types_list.
tenantsYesTenant 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 the request.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by adding that this is high-impact, triggers real report-generation work, is asynchronous, and requires user confirmation before invocation. It also clarifies that it is 'not destructive' despite kicking off side effects, which is a useful nuance beyond destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the high-impact warning. Each sentence earns its place: what it does, side-effect nuance, async follow-up steps, and user confirmation requirement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-impact tool with two fully documented parameters and no output schema, the description covers the essential operational context: queuing behavior, async execution, how to retrieve results, and user confirmation. No critical guidance is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters and their sub-properties. The description adds no additional parameter-level detail beyond what the schema provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Queues one or more reports across one or more tenants') with a clear resource and scope. It also distinguishes itself from sibling tools by explaining the asynchronous workflow and pointing to inforcer_reports_run_status and inforcer_reports_download_output for follow-up.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear workflow guidance: poll with inforcer_reports_run_status, then fetch outputs with inforcer_reports_download_output, and confirm with the user before invoking. It does not explicitly contrast this tool with alternatives such as inforcer_assessments_run, so it falls short of full when/ when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_reports_runs_listA
Read-only

List queued and completed report runs. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description reinforces that with 'Read-only.' It adds a meaningful scope qualifier ('queued and completed') but does not describe output format, pagination, or any other behavioral detail. The description does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence that front-loads the core action and scope. Every word earns its place, and there is no repetition of schema content or irrelevant detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool with annotations covering the safety profile, the description provides sufficient context: what is listed and that it is read-only. No output schema exists, and no additional details are necessary for an agent to invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema coverage is 100%, so there is no parameter burden on the description. With no parameters to document, the baseline of 4 applies because the description cannot be expected to add parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') with a clear resource ('queued and completed report runs'), and the 'Read-only' qualifier distinguishes it from sibling tools like run, run_status, and download_output. Even though it doesn't name the siblings, the action and scope are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: to enumerate queued or completed report runs. It does not explicitly name alternatives or state when NOT to use it, but the simple list-oriented purpose and 'Read-only' hint make the primary usage context reasonably clear from the sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_reports_run_statusA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYesThe run identifier returned by inforcer_reports_run.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the readOnlyHint annotation by disclosing the exact behavioral contract: while the run is in progress, isTerminal is false and no outputs are returned; once finished, isTerminal is true with downloadable outputs. This tells the agent what to expect across repeated calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the action, and packs the essential state-related behavior into compact, unambiguous language. There is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter polling tool with no output schema, the description adequately covers the return behavior (isTerminal and outputs), the input source (run_id from inforcer_reports_run), and the read-only nature. Nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter run_id is fully described in the schema as the identifier returned by inforcer_reports_run. The description adds no additional parameter semantics beyond what the schema already provides, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb and resource: 'Poll a report run.' It also differentiates itself from siblings by describing the terminal-state behavior (isTerminal false vs true), which makes it clear this is the polling counterpart to inforcer_reports_run.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use the tool: after starting a report run, poll until isTerminal is true. The run_id is explicitly tied to inforcer_reports_run in the schema. It does not explicitly name alternatives or state when not to use it, but the polling semantics and read-only nature provide clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_reports_types_listA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavioral context beyond the annotations by explaining what the catalog contains and that the tool is a discovery prerequisite for inforcer_reports_run. It also reinforces the readOnlyHint with an explicit 'Read-only' statement, though openWorldHint is not further elaborated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The resource and purpose are front-loaded, and the specific return fields plus the usage directive are packed efficiently into the remaining text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, read-only catalog tool, the description fully covers what the agent needs: what the tool returns, why the agent should call it, and how it relates to the subsequent run tool. No output schema is present, but the description compensates by listing the returned fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and 100% schema description coverage, so the schema already captures everything an agent needs about parameters. The description adds no parameter-level detail, which is appropriate; per the baseline for zero-parameter tools, a score of 4 fits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('List') and resource ('catalog of available report types'), and enumerates the payload fields: key, output formats, collatable flag, and accepted parameters. It also distinguishes itself from inforcer_reports_run by framing itself as the discovery step for valid type/output_format pairs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: 'Use to discover valid (type, output_format) pairs before calling inforcer_reports_run.' This gives the agent a clear precondition and connects it directly to the relevant sibling tool, leaving no ambiguity about its role.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_roles_listA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenantYesTenant 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.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reinforces the readOnlyHint annotation without contradicting it, and adds a meaningful behavioral detail beyond the annotations: tenant identifiers are resolved to the numeric Client Tenant ID before the request. This is useful and non-obvious context for the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, front-loaded with the operation and then providing the input contract. There is no filler or redundant framing, and the tenant resolution note is compact and valuable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter list tool with annotations covering read-only behavior and a fully documented schema, the description provides sufficient calling context. It could be slightly stronger with an explicit alternative pointer or pagination/return detail, but nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% because the input schema already documents the accepted tenant identifier formats and the resolution behavior. The main description adds no new parameter-level meaning beyond what is already present in the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb and resource: 'List Entra ID directory role definitions for a tenant.' This clearly differentiates the tool from sibling list tools focused on users, groups, policies, baselines, and tenants, and the 'definitions' qualifier avoids ambiguity with role assignments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tool's tenant-scoped purpose and accepted identifier formats are clear, so when to use it is reasonably implied. However, it does not explicitly contrast this tool with alternatives or state when not to use it, leaving some routing judgment to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_secure_scores_getA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenantYesTenant 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.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark the tool as read-only and open-world, and the description reinforces this with 'Read-only.' More importantly, it adds useful behavioral context beyond the annotations: the tenant identifier accepts multiple formats and is resolved to the numeric Client Tenant ID before the request. No contradiction with annotations found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences with no filler. The core purpose is front-loaded, the tenant identifier formats are specified compactly, and the read-only nature is stated clearly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only tool with helpful annotations, the description covers what the tool does and exactly how to identify the tenant. No critical calling information is missing, and the lack of an output schema is acceptable given the simplicity and clarity of the operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, and the tenant parameter description repeats the tool-level description almost verbatim. Since the schema already fully documents the parameter meaning, the description adds no additional semantic value beyond the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get'), a clear resource ('Microsoft Secure Score data'), and a target ('a tenant'). It is immediately distinguishable from all listed sibling tools, none of which cover Secure Score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use case is implied: use this tool when you need Secure Score data for a tenant. However, the description gives no explicit when-to-use versus when-not-to-use guidance and does not reference any alternative sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_statusA

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states that the tool performs a live baselines.list() call as a read-only connectivity check, which is valuable transparency for a tool with zero annotations. It could mention failure/return behavior, but the key non-obvious traits are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states the core purpose first, then adds the implementation detail. Both sentences earn their place with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter connectivity check with no output schema, the description covers the essential purpose and read-only safety. It leaves the expected response format somewhat implicit, but the simplicity of the tool means an agent has enough context to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description accurately reflects this by not inventing parameter-related details, and there is nothing more the description needs to add for invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: checking Inforcer API connectivity and available domains. This is a distinct action/resource combination that separates it from the sibling tools, none of which are status checks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: when a read-only connectivity check against the Inforcer API is needed. It does not explicitly name alternatives or exclusions, but the use case is unambiguous enough for an agent to select it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_tenants_getA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenantYesTenant 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.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, which the description repeats, but the description adds meaningful behavioral detail beyond annotations: accepted identifier forms, normalization to numeric Client Tenant ID, and an error on ambiguous names. This gives the agent useful expectations about resolution and failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the primary action, and every sentence contributes useful information. The only minor redundancy is the 'Read-only' phrase, which duplicates the readOnlyHint annotation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only get operation, the description covers accepted inputs, normalization, and ambiguity errors, which is sufficient for correct invocation. It does not describe the return payload, but the absence of an output schema is less critical for a simple single-tenant fetch.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description's identifier explanation essentially mirrors the schema's parameter description. It adds no additional meaning beyond what the schema already provides, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence 'Get a single tenant' uses a specific verb and resource, clearly distinguishing this retrieval operation from sibling tools like inforcer_tenants_list and inforcer_tenants_resolve. The scope is unambiguous—one tenant, not a collection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The identifier formats imply this is the tool for fetching a tenant by any accepted identifier, but the description does not explicitly state when to choose it over inforcer_tenants_list or inforcer_tenants_resolve. Usage is implied rather than spelled out, with no exclusions or alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_tenants_listA
Read-only

List all managed tenants. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description repeats the readOnlyHint annotation by saying 'Read-only,' and no behavioral context beyond that is added (no return shape, pagination, or side effects). It is consistent with the annotation, so there is no contradiction, but the description contributes little extra transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is two short sentences with no filler. 'List all managed tenants' front-loads the core action, and 'Read-only' adds important safety information without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless list operation, the description conveys the essential purpose and safety profile. It does not describe the return format or address the openWorldHint annotation, but these are minor for a simple 'list all' tool with no input parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema is empty, so there is nothing for the description to add. This matches the baseline for no-parameter tools: the description cannot be expected to document parameters that do not exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('all managed tenants'), making the tool's scope immediate and unambiguous. The word 'all' differentiates it from sibling tools like inforcer_tenants_get and inforcer_tenants_resolve, which operate on individual tenants.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied: use this when you need the full collection of managed tenants rather than a single tenant or a resolution. However, no explicit when-to-use guidance or named alternatives are provided, leaving the agent to infer the distinction from the description and sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_tenants_resolveA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenantYesTenant 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.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as readOnlyHint and openWorldHint, and the description reinforces 'Read-only' while adding the important distinction that the output is not the Azure AD tenant GUID. This goes beyond just restating the annotation and helps an agent avoid a common mistake. It does not, however, go deeper into response shape or failure modes beyond what the schema already says.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-constructed sentence that front-loads the core action, lists the accepted input forms, defines the output, and ends with the key caveat. Every phrase earns its place with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only resolver with no output schema, the description together with the schema fully equips an agent to call it correctly: acceptable inputs, resolution behavior, output type, read-only nature, and the ambiguity error are all covered. No meaningful information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: the single 'tenant' parameter is fully described with accepted input formats, resolution behavior, and an explicit note about ambiguous names throwing an error. The tool description largely repeats this information, with the added caveat that the result is NOT the Azure AD tenant GUID. This is a useful reinforcement but not a substantial leap beyond the schema, hence baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Resolve') and a precise resource: tenant identifiers (name, DNS name, Azure AD GUID) mapped to the numeric Inforcer Client Tenant ID. It also adds a crucial distinguishing caveat that this ID is NOT the Azure AD tenant GUID, which sets it apart from mere lookup tools and prevents a common confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use this tool: whenever you need to convert a tenant name, DNS name, or Azure AD GUID into the numeric Inforcer Client Tenant ID. It does not explicitly name sibling alternatives like inforcer_tenants_list or inforcer_tenants_get or state when not to use it, but the specialized resolution purpose provides clear context and leaves little ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_users_getA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenantYesTenant 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_idYesThe user ID (Entra object ID)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the tenant parameter accepts multiple identifier formats and is resolved to the numeric Client Tenant ID before the request, which is useful behavioral context beyond the annotations. 'Read-only' is redundant with the readOnlyHint annotation but consistent. The tenant resolution behavior is the key added value here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, with the main purpose front-loaded in the first sentence and the tenant resolution detail in the second. Every word earns its place, with no filler or redundant phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read-only tool, the description supplies all necessary invocation context: what it does, which parameters are needed, and how the tenant identifier is resolved. There is no output schema to explain return values, but 'full detail' reasonably implies the return payload. Given the tool's simplicity and sibling context, nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The tool description largely repeats the tenant parameter explanation already present in the schema and adds no extra detail about user_id beyond 'The user ID (Entra object ID)' already in the schema. It does not meaningfully compensate beyond what the structured schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: 'Get full detail for a single user.' This clearly distinguishes it from sibling tools like inforcer_users_list, which presumably lists users rather than retrieving one user's full detail. The tenant resolution detail adds further specificity without confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving a single user's details, but it does not explicitly state when to use this tool over alternatives such as inforcer_users_list or inforcer_groups_get. There is no mention of exclusions or conditions that would route an agent to a different sibling. The guidance is clear enough but leaves the contrast implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inforcer_users_listA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoFilter users by search term
tenantYesTenant 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.
continuation_tokenNoPagination cursor from a prior page

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful context about pagination, tenant identifier resolution, and that only summaries are returned, but does not disclose page size, ordering, or search semantics. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences with the main purpose front-loaded and no filler. The tenant-resolution detail is relevant for correct invocation, and the read-only note is redundant but brief.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with all parameters documented in the schema, the description covers the key invocation details: what is listed, pagination, and tenant identifier accepted forms. The lack of an output schema makes 'user summaries' slightly vague, but it is sufficient for an agent to select and call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema documents all three parameters. The description adds no new parameter meaning beyond restating the tenant formats and the 'paginated' behavior already visible in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('List'), precise resource ('Entra ID user summaries for a tenant'), and signals pagination. This clearly differentiates it from sibling inforcer_users_get, which is the single-user counterpart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the scope of the tool clear, but does not explicitly advise when to use this tool versus inforcer_users_get or how search/pagination should be used. Usage context is implied by the verb 'List', but no exclusions or alternative routing are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 24 tool updatesv1.0.0
    • First observedinforcer_alignment_details
    • First observedinforcer_alignment_scores
    • First observedinforcer_assessments_list
    • First observedinforcer_assessments_run
    • First observedinforcer_audit_event_types
    • First observedinforcer_audit_search
    • First observedinforcer_baselines_list
    • First observedinforcer_groups_get
    • First observedinforcer_groups_list
    • First observedinforcer_navigate
    • First observedinforcer_policies_list
    • First observedinforcer_reports_download_output
    • First observedinforcer_reports_run
    • First observedinforcer_reports_run_status
    • First observedinforcer_reports_runs_list
    • First observedinforcer_reports_types_list
    • First observedinforcer_roles_list
    • First observedinforcer_secure_scores_get
    • First observedinforcer_status
    • First observedinforcer_tenants_get
    • First observedinforcer_tenants_list
    • First observedinforcer_tenants_resolve
    • First observedinforcer_users_get
    • First observedinforcer_users_list

TDQS

A3.9/5.0
Disambiguation5/5

Each tool targets a distinct resource/action: tenants, users, groups, roles, policies, baselines, alignment, audit, assessments, and reports. Even close pairs like alignment_scores vs alignment_details or assessments_run vs reports_run are clearly separated by noun and purpose. The discovery and status tools also serve clearly different roles.

Naming Consistency4/5

All tools share the inforcer_ prefix and mostly follow a resource_verb pattern like tenants_list, users_get, and groups_list. A few names omit the verb (inforcer_status, inforcer_alignment_scores, inforcer_audit_event_types) and report actions use compound names like reports_run_status and reports_download_output, but the overall convention remains readable and predictable.

Tool Count3/5

With 24 tools, this server sits at the high end of the reasonable range and feels heavy relative to a tightly scoped MCP server. The count is justified by the breadth of the domain — tenants, identity, alignment, audit, assessments, and reports — but it is more than an agent will typically need in one session.

Completeness4/5

The toolset covers the core workflows well: tenant resolution, identity object listing/detail, baseline alignment, secure scores, audit search, assessment discovery/run, and the full report queue/status/download lifecycle. Minor gaps remain, such as no policy detail view, no role detail view, and no assessment run status polling, but these are not blocking for the main Inforcer use cases.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server that enables AI-powered assessment of Active Directory on-premises environments by exposing AD data as queryable tools for LLMs like Claude.
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    An MCP server that connects AI assistants to Microsoft SQL Server databases, enabling schema exploration and read-only queries safely.
    49
    37
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for AI agent compliance that screens actions before execution and records decisions in an immutable, SIEM-ready audit trail.
    112
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/WYRE-AI/inforcer-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server