Skip to main content
Glama
iffystrayer

Maester MCP Server

by iffystrayer

Maester MCP Server

CI

An MCP (Model Context Protocol) server that exposes Maester 2.2 — the Microsoft 365 / Entra / Defender / Active Directory / GitHub security test framework — as tools for AI agents.

Connect Claude, GitHub Copilot, or any MCP-compatible agent to your tenant's security posture and ask, for example:

"Run Maester, summarise the critical failures, and audit our Copilot Studio agents and MCP servers while you're at it."

Version note: aligned to Maester 2.2.0 (July 2026). Maester's test count has grown past 600 across Entra, Exchange, Teams, SharePoint, Purview, Defender, Intune, Global Secure Access, Active Directory, GitHub, and Azure DevOps. This server tracks the 2.2 cmdlet surface (Get-MtTestInventory, Merge-MtMaesterResult, Get-MtHtmlReport, -OutputMarkdownFile, -DriftRoot, the -Service connection model, and the AIAgent tag).


Where this fits alongside Maester Cloud

Maester now has a companion commercial product, Maester Cloud (private preview Aug 2026, GA targeted Sep 2026): a portal that keeps 5+ years of tenant history, highlights drift between runs, and alerts on change. It is the durable evidence layer.

This MCP server is a different, complementary layer:

Layer

What it is

Strength

Maester (open core)

The test framework

Runs the checks

Maester Cloud

Hosted/self-hosted portal

History, drift, alerting, evidence retention

This MCP server

Conversational/agentic interface

Real-time triage, reasoning over failures, reflexive AI-surface auditing, remediation guidance

Use them together: Maester Cloud remembers and alerts; the MCP server lets an agent investigate, explain, and act on any given run in natural language. They are not substitutes.


Related MCP server: m365-audit-mcp

Prerequisites

Requirement

Notes

Node.js 18+

For the MCP server

PowerShell 7+ (pwsh)

Install guide

Maester 2.2+

Install-Module Maester -Scope CurrentUser

Maester tests

md ~/maester-tests; cd ~/maester-tests; Install-MaesterTests

Entra ID app

New-MtMaesterApp (creates the app + permissions for you)

ADOPS module

Only for Azure DevOps tests: Install-Module ADOPS

PnP.PowerShell

Only for SharePoint tests


Auth setup

Fastest path — let Maester create the app

Connect-Maester -Service Azure
New-MtMaesterApp -GitHubActions -SetGitHubSecrets   # zero-config for GitHub Actions

Manual app registration — Graph permissions (application, admin-consented)

Permission

Used for

Policy.Read.All

Conditional access, auth methods

Directory.Read.All

Entra ID config

IdentityRiskyUser.Read.All

Risk-based CA tests

RoleManagement.Read.All

PIM / privileged role tests

AuditLog.Read.All

Sign-in and audit log checks

SecurityEvents.Read.All

Defender / ORCA checks

NetworkAccess.Read.All

New in 2.2 — Global Secure Access checks

Copilot Studio (audit_ai_agents) additionally needs the Dataverse service connection and access to the environment named in maester-config.json.

Managed Identity (Azure-hosted, no secrets)

Set AZURE_USE_MANAGED_IDENTITY=true. Grant the managed identity the same Graph permissions.


Installation

git clone https://github.com/iffystrayer/maester-mcp-server
cd maester-mcp-server
npm install

Configuration

Variable

Required

Description

AZURE_TENANT_ID

Yes*

Entra tenant ID

AZURE_CLIENT_ID

Yes*

App registration client ID

AZURE_CLIENT_SECRET

Yes*

App registration client secret

AZURE_USE_MANAGED_IDENTITY

No

true for Azure-hosted (no secret)

MAESTER_TESTS_PATH

No

Tests folder (default ~/maester-tests)

MAESTER_RESULTS_PATH

No

Where result JSON/MD/HTML files are written

MAESTER_DRIFT_ROOT

No

Baseline folder for -DriftRoot drift detection

MAESTER_PWSH

No

PowerShell executable (default pwsh)

* Not required when AZURE_USE_MANAGED_IDENTITY=true.


Claude Desktop config

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "maester": {
      "command": "node",
      "args": ["/absolute/path/to/maester-mcp-server/index.js"],
      "env": {
        "AZURE_TENANT_ID": "your-tenant-id",
        "AZURE_CLIENT_ID": "your-client-id",
        "AZURE_CLIENT_SECRET": "your-client-secret",
        "MAESTER_TESTS_PATH": "/Users/you/maester-tests",
        "MAESTER_DRIFT_ROOT": "/Users/you/maester-baseline"
      }
    }
  }
}

Restart Claude Desktop after saving.


Ready-to-use prompts

Copy-paste prompts for common scenarios — posture check, drift detection, AI agent audit, CA simulation — each mapped to the tools it fires. See prompts.md.


Available tools

Tool

What it does

run_maester_tests

Run tests (by tag/service), with optional markdown output and drift comparison. Returns summary + file paths.

audit_ai_agents

New. Run the AIAgent checks (MT.1113–MT.1122) — Copilot Studio agent risk, MCP server tools needing review, hard-coded creds, dormant/orphaned agents, high agent-risk sign-ins.

get_security_posture_summary

Overall pass rate, per-category breakdown, critical/high failures first.

get_failed_tests

All failures from a results file, filterable by category.

get_test_detail

Full description, remediation, help URL, severity for one test.

run_ca_whatif

Simulate a sign-in against Conditional Access policies.

merge_tenant_results

New. Merge many tenant result files into one multi-tenant HTML report (MSP use).

list_available_tags

Enumerate all tags via Get-MtTestInventory.

update_maester_tests

Update module + tests, report the new version.


The reflexive angle: agents auditing agents

The most valuable new capability in 2.2 for an agentic system is that Maester now audits AI agents and MCP servers as an attack surface. That means the very agent you connect this server to can police the rest of your org's agent sprawl:

You: We've had teams spinning up Copilot Studio agents and MCP servers all
     quarter. Which ones are risky?

Agent: [calls audit_ai_agents]
       → "8 agents checked. 3 findings: 'Sales Helper' is shared with the
          whole org and has no user authentication (MT.1113/MT.1114);
          'Invoice Bot' can send email with AI-controlled inputs — an
          exfiltration path (MT.1116); one connected MCP server exposes
          tools flagged for review (MT.1120). Want the remediation steps?"

This closes a real governance gap that most orgs don't have tooling for yet.


Operational runbook

1. Establish a baseline (once). Run a full pass and snapshot the JSON as your drift baseline:

run_maester_tests(services: ["Graph","Exchange","Teams"]) → save resultsFile into MAESTER_DRIFT_ROOT

2. Daily scheduled run (CI/CD). Keep this in GitHub Actions / Azure DevOps, not the MCP server — the MCP server is for interactive investigation. Use New-MtMaesterApp -GitHubActions -SetGitHubSecrets for a secretless OIDC setup. Emit markdown for the PR/summary and JSON for retention.

3. Interactive triage (MCP server). When the scheduled run flags something, or ad hoc, have the agent call run_maester_tests with useDrift: true, then get_security_posture_summary, then drill in with get_test_detail.

4. AI-surface review (monthly). audit_ai_agents on a schedule as Copilot Studio and MCP adoption grows.

5. Evidence retention. For history/drift/alerting across runs, feed results into Maester Cloud rather than reinventing storage here.


Security notes

  • Read-only by default. Maester tests only read Graph/Azure/AD data.

  • Least privilege. Grant only the scopes listed; don't run as Global Admin.

  • Secrets in env or a vault, never in code. Prefer Managed Identity where possible.

  • Result files can contain tenant configuration detail — store and retain them securely.

  • The run_ca_whatif and remediation-adjacent flows are advisory; keep a human in the loop before any tenant write.


Extending

Add an entry to TOOLS and a matching case in the request handler. Custom Maester tests in tests/Custom/ are picked up automatically by run_maester_tests — no server change needed.

Roadmap ideas

  • HTTP+SSE / Streamable HTTP transport for remote deployment

  • Streaming progress during long runs

  • Optional Graph write tools for one-click remediation (behind an explicit approval gate)

  • Auto-ticketing (Jira / Azure DevOps Boards / ServiceNow) on new failures

  • Native Maester Cloud push once its ingest cmdlet ships

Available Tools

9 tools
audit_ai_agentsA

Audit the organisation's AI attack surface using Maester's AIAgent checks (MT.1113–MT.1122): risky Copilot Studio agent sharing, missing agent authentication, risky HTTP config, AI-driven email exfiltration, MCP server tools that need review, hard-coded credentials in topics, dormant/orphaned agents, plus high agent-risk sign-ins. Requires the Dataverse service. Use this to let an AI agent police the org's other agents and MCP servers.

ParametersJSON Schema
NameRequiredDescriptionDefault
servicesNoDefaults to ['Graph','Dataverse']. Dataverse is required for Copilot Studio checks.

TDQS

A3.8/5.0
Behavior3/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 does disclose the scope of checks and the Dataverse dependency, but it does not explicitly state whether the audit is read-only, what permissions are needed, or whether any changes are made, leaving some safety-related behavior opaque.

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 two sentences long and front-loaded with the action verb. The first sentence is dense but information-rich, enumerating the specific checks concisely; the second gives a clear use case. No filler or unnecessary words.

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

Completeness3/5

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

The description covers the tool's check types and intended use, and the schema handles parameter details. However, there is no output schema and the description does not describe what the audit returns or how results are structured, which is a notable gap given the absence of an output schema.

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 has 100% description coverage, and the schema's parameter description already explains the default services and the Dataverse requirement. The tool description reinforces the Dataverse dependency but adds little beyond what the schema already 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 uses the specific verb 'Audit' and clearly identifies the resource as the organisation's AI attack surface using Maester's AIAgent checks (MT.1113–MT.1122). It lists concrete check categories, which distinguishes it from the more general sibling tool run_maester_tests.

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 states its intended use: 'Use this to let an AI agent police the org's *other* agents and MCP servers.' It also mentions the Dataverse service requirement. However, it does not explicitly say when not to use it or name alternative tools for general Maester tests.

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

get_failed_testsA

List all failed tests from a results file with descriptions and remediation, optionally filtered by category tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoOptional category filter (e.g. EIDSCA, CA, CISA, Defender, AIAgent).
resultsFileYesPath to the Maester JSON results file.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It conveys that the operation is a read-only 'list' and indicates the returned data structure (descriptions and remediation). However, it does not mention error handling, assumptions about the results file, or any side effects, though the verb implies safety.

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, front-loaded sentence that conveys all essential information without unnecessary words. Every phrase earns its place.

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 list tool with no output schema, the description adequately covers the purpose, the input file, and the optional filter, and hints at the output content. It could be slightly more explicit about the return format when no failures exist, but overall it is sufficient for this complexity level.

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 adds context by mentioning the optional category filter. It does not provide new syntax or format details beyond the schema, so it meets the baseline without adding significant parameter semantics.

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 ('failed tests from a results file') and clarifies that results include descriptions and remediation, optionally filtered by category. This clearly distinguishes it from sibling tools like get_test_detail, which focuses on a single test.

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: it is used to list failed tests from a results file, with an optional category filter. It does not explicitly name alternatives or exclusions, but the context is unambiguous enough for an agent to know when to invoke it.

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

get_security_posture_summaryA

Parse a results file into a structured summary: overall pass rate, per-category breakdown, critical/high failures sorted first, and top failures. Good first call after run_maester_tests.

ParametersJSON Schema
NameRequiredDescriptionDefault
resultsFileYesPath to the Maester JSON results file.

TDQS

A4.5/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. It clearly states the tool parses a file and produces a summary, implying a non-destructive read operation. It lacks explicit mention of error handling or file requirements, but for a simple parsing tool, the behavioral description is adequate and transparent.

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, information-packed sentence followed by a brief usage cue. It is front-loaded with the action and resource, lists key outputs efficiently, and contains no 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 parsing tool, the description is complete: it specifies the input file, the output structure, and its place in the workflow relative to siblings. No output schema exists, but the description enumerates the return components, so the agent knows what to expect.

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 input schema already covers the sole parameter (resultsFile) at 100%. The description adds value by linking the file to the output of run_maester_tests ('Maester results file') and framing it as the post-run summary step, which enriches the parameter's meaning beyond 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?

The description states a specific verb ('Parse') and resource ('a results file'), and enumerates the output components (overall pass rate, per-category breakdown, sorted critical/high failures, top failures). It clearly distinguishes itself from siblings like run_maester_tests (which runs tests) and get_failed_tests (which likely lists failures).

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 recommends when to use it: 'Good first call after run_maester_tests.' This provides clear context and a suggested workflow. However, it does not name alternatives or state when not to use it, so it falls short of the top score.

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

get_test_detailA

Get full details — description, result, remediation, help URL, severity — for one test by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
testIdYesTest ID or name (e.g. EIDSCA.AF01, MT.1116, Test-MtCaRequireMfa).
resultsFileYesPath to the Maester JSON results file.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses what data is returned (description, result, remediation, help URL, severity) but does not explicitly state that it is a read-only operation, error behavior, or that it reads from the given results file. For a simple getter this is adequate but not rich.

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-structured sentence that front-loads the action and includes the key fields returned. No wasted words.

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?

Given there is no output schema, the description appropriately lists the return fields in enough detail for a simple getter. It does not mention edge cases like not-found errors, but for a straightforward tool this is sufficient.

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 parameters are already well-documented. The description adds no extra meaning to the parameters beyond the schema, so baseline 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 uses a specific verb 'Get' and identifies the resource as 'test' with a clear identifier ('by ID'), plus enumerates the fields returned. This clearly distinguishes it from sibling tools like get_failed_tests (which lists tests) and run_maester_tests (which runs tests).

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 makes it clear this is for retrieving details of a single test by ID, which implies use when you need full information for a specific test. It does not explicitly mention alternatives or exclusions, but the context is clear enough.

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

list_available_tagsA

List every test tag available in the installed test suite via Get-MtTestInventory. Use these to scope run_maester_tests.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It mentions the underlying command (Get-MtTestInventory) but does not disclose whether the operation is a safe read, any prerequisites, or the return format. This is a notable gap for a tool with no annotation support.

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 only two sentences, with the first sentence front-loading the action and resource and the second providing actionable usage guidance. Every word earns its place, with no 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 list tool, the description covers what it lists and how to use the output. It does not describe the response structure or potential caveats, but given the tool's simplicity, it is adequately complete 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.

Parameters4/5

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

The input schema has zero parameters, and schema coverage is 100%, so the baseline is 4. The description adds meaningful context by specifying 'every test tag' and the tool's purpose, which is not captured 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?

The description clearly states the action ('List'), the resource ('test tags available in the installed test suite'), and the method ('via Get-MtTestInventory'). It also differentiates from sibling tools by noting the tags are used to scope run_maester_tests.

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 tells the agent to use these tags to scope run_maester_tests, providing clear context for when to use this tool. It does not explicitly mention when not to use it or name alternatives, but the guidance is sufficient for a simple listing tool.

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

merge_tenant_resultsA

Merge multiple per-tenant Maester result files into a single multi-tenant HTML report (for MSPs / multi-tenant orgs). Wraps Merge-MtMaesterResult + Get-MtHtmlReport.

ParametersJSON Schema
NameRequiredDescriptionDefault
outputHtmlNoOptional output path for the merged HTML report.
resultsFolderYesFolder containing multiple tenant result JSON files.

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It only states the merge action and the wrapped functions, without mentioning side effects (e.g., whether input files are modified), required permissions, or how the output file is handled. This is a significant gap for a tool that likely creates files.

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 concise sentences: the first clearly states the primary purpose, and the second provides implementation context. There is no filler, and the structure is front-loaded and easy to parse.

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 tool with full schema coverage and no output schema, the description is sufficient to convey the core workflow. However, it could be slightly more complete by noting prerequisites (e.g., the results folder must contain valid JSON files) or clarifying that the output HTML file may be overwritten if it already exists.

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 descriptions cover both parameters (resultsFolder and outputHtml) at 100%, so the baseline is 3. The tool description adds minimal extra meaning beyond the schema, though it does relate the parameters to the overall merge workflow. No additional format, default, or validation details are provided.

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 a specific action (merge), the input (per-tenant Maester result files), and the output (single multi-tenant HTML report), distinguishing it from sibling tools that run, update, or retrieve tests. The phrase 'for MSPs / multi-tenant orgs' adds context but is not necessary for purpose clarity.

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 mentions 'for MSPs / multi-tenant orgs' to signal the target audience, but it does not explicitly state when to use this tool versus alternatives or provide exclusions. The usage is implied rather than directly guided, leaving the agent to infer the intended scenario.

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

run_ca_whatifA

Simulate a user sign-in against all Conditional Access policies via the Graph evaluate API. Returns which policies apply, block, or grant.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNoApplication (client) ID to simulate sign-in to. Optional.
userIdYesUPN or object ID (e.g. alice@contoso.com).
ipAddressNoSource IP for the simulated sign-in. Optional.
devicePlatformNoDevice platform. Optional.
deviceCompliantNoWhether the simulated device is Intune-compliant. Optional.

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It states that it simulates a sign-in and returns policy application results, which implies a read-only operation. However, it does not explicitly mention the absence of side effects, required permissions, rate limits, or failure behavior. The description is adequate but not detailed.

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 concise sentences: the first states the action and method, the second states the output. Every sentence adds meaningful information with no redundancy or 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?

Given no annotations and no output schema, the description provides a clear high-level outcome ('Returns which policies apply, block, or grant'). It is sufficient for the tool's apparent simplicity, though it lacks explicit guarantees about non-mutation, auth requirements, or output structure. Overall, it is complete enough for most use cases.

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 adds no parameter-specific information beyond what the schema already provides. The parameters (userId, appId, ipAddress, devicePlatform, deviceCompliant) are self-explanatory and do not require additional narrative from the description.

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 specific action (simulate a user sign-in) and the resource (Conditional Access policies), along with the method (Graph evaluate API). It also distinguishes itself from sibling tools by being the only one focused on CA policy simulation rather than Maester tests or security posture.

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 usage is implied: you would use this tool to simulate a sign-in to evaluate Conditional Access policy outcomes. However, there is no explicit guidance on when to use this vs alternatives, nor any exclusions or prerequisites mentioned. It provides a clear functional purpose but lacks explicit usage context.

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

run_maester_testsA

Run Maester 2.2 security tests against your Microsoft 365 / Entra tenant. Returns a pass/fail summary and results file paths. Scope with tags and services. Takes 2–10 min depending on breadth.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoOnly run tests with these tags. Examples: EIDSCA, CISA, CIS, CA, MFA, Privileged, Defender, AIAgent, 'CIS GH', MT.1172.
servicesNoServices to connect. Default ['Graph']. Add Exchange, Teams, Dataverse (Copilot Studio), GitHub, SharePoint, Azure. 'ActiveDirectory' is on-prem opt-in and never part of 'All'.
useDriftNoCompare against the configured baseline (MAESTER_DRIFT_ROOT) to detect configuration drift.
excludeTagsNoExclude tests with these tags.
emitMarkdownNoAlso emit a markdown summary suitable for a PR comment or pipeline step.
includePreviewNoInclude preview tests (replaces the deprecated 'All' tag).
includeLongRunningNoInclude long-running tests (replaces the deprecated 'Full' tag).

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries full behavioral burden. It discloses the return format (pass/fail summary and file paths) and runtime (2–10 minutes), which is useful context. However, it does not mention potential side effects, permission requirements, or whether the tests are read-only, leaving some behavioral aspects opaque.

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 concise sentences that front-load the purpose, output, scoping mechanism, and runtime. Every clause adds distinct information with no redundancy or filler, making it easy to scan 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 tool with 7 parameters, no required fields, and no output schema, the description covers essential context: what it runs, what it returns, scoping options, and time expectations. It doesn't elaborate on all flags, but the schema covers those. Slightly more context on prerequisites or typical use cases would make it 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?

The input schema has 100% description coverage for all parameters, so the baseline is 3. The description only summarizes scoping ('Scope with tags and services') without adding meaning beyond what the schema already provides for each parameter like tags, services, useDrift, etc.

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 a specific action ('Run Maester 2.2 security tests') against a defined resource ('Microsoft 365 / Entra tenant'), and mentions the output (pass/fail summary) and execution scoping. It distinguishes itself from sibling tools like get_failed_tests or get_security_posture_summary by focusing on the execution rather than result retrieval.

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 this is the tool to execute tests and mentions scoping via tags/services, but it does not explicitly say when to use it over alternatives like run_ca_whatif or audit_ai_agents. There is no direct 'use this when' or 'use X instead' guidance, though the tool's action-oriented nature makes the intended context fairly clear.

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

update_maester_testsA

Update the Maester module and test files to the latest versions, and report the resulting module version.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries full burden for behavioral disclosure. It states that it updates files (implying a mutation) and reports a version, but does not disclose potential side effects (e.g., overwriting local changes), required permissions, network access, or reversibility. This is insufficient for a mutation tool with zero 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 a single, focused sentence that states the action and the result. There is no fluff or redundancy, making it appropriately sized and front-loaded.

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

Completeness3/5

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

The description covers the main operation and the reported output, but given the absence of annotations and output schema, it does not fully detail side effects, prerequisites, or what 'latest versions' entails. This is a minimal viable description but leaves gaps for a tool that performs a file-modifying update.

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 schema coverage is trivially 100%. According to the rubric, 0 parameters sets a baseline of 4. The description adds no parameter info because there are none to explain.

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 ('Update') with a clear resource ('the Maester module and test files') and states the output ('report the resulting module version'). This clearly distinguishes it from sibling tools like run_maester_tests, which runs tests, and audit_ai_agents, which audits agents.

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?

The description provides no guidance on when to use this tool vs. alternatives. It does not mention prerequisites, exclusions, or alternatives. The only implied usage is that you need to update the Maester module, but there is no explicit context or comparison with siblings.

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. 9 tool updatesv2.0.0
    • First observedaudit_ai_agents
    • First observedget_failed_tests
    • First observedget_security_posture_summary
    • First observedget_test_detail
    • First observedlist_available_tags
    • First observedmerge_tenant_results
    • First observedrun_ca_whatif
    • First observedrun_maester_tests
    • First observedupdate_maester_tests

TDQS

A4.1/5.0
Disambiguation5/5

Each tool serves a distinct purpose: running tests, auditing AI agents, analyzing results at different granularities, simulating CA, merging results, listing tags, and updating the module. Even overlapping functions like run_maester_tests and audit_ai_agents are clearly differentiated by scope and description.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: run_, audit_, get_, list_, merge_, update_. No mixed conventions or vague verbs.

Tool Count5/5

9 tools is well-scoped for a security testing and results analysis server. Each tool covers a necessary step in the workflow without redundancy, and the count is within the ideal 3–15 range.

Completeness5/5

The tool set covers the full lifecycle: installing/updating tests, listing available tags, running tests (including a specialized AI audit), simulating CA policies, parsing results, fetching failures and details, and merging multi-tenant outputs. No obvious gaps for the stated domain.

Maintenance

ActivitySlowing
ResponsivenessSyncing

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
    A
    quality
    C
    maintenance
    Enables AI agents to programmatically inspect, test, and validate other MCP servers by exposing MCP Workbench capabilities as structured tools. It supports automated test spec generation, execution, and detailed failure analysis to ensure server reliability.
    4
    19
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    Exposes Microsoft 365 privacy/compliance audit checks as MCP tools, enabling natural language queries about tenant configuration, orphaned documents, Conditional Access policies, DLP policies, and Copilot usage.
    5
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Exposes Microsoft's PyRIT AI red-teaming framework as structured tools for MCP-compatible agents, enabling authorized AI security assessments through engagements, targets, attacks, scoring, and reporting.
    22
    MIT

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/iffystrayer/maester-mcp-server'

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