Maester MCP Server
Run Maester security tests targeting GitHub repositories, settings, and actions.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Maester MCP ServerRun all Maester tests and report critical failures."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Maester MCP Server
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-Serviceconnection model, and theAIAgenttag).
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+ ( | |
Maester 2.2+ |
|
Maester tests |
|
Entra ID app |
|
ADOPS module | Only for Azure DevOps tests: |
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 ActionsManual app registration — Graph permissions (application, admin-consented)
Permission | Used for |
| Conditional access, auth methods |
| Entra ID config |
| Risk-based CA tests |
| PIM / privileged role tests |
| Sign-in and audit log checks |
| Defender / ORCA checks |
| 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 installConfiguration
Variable | Required | Description |
| Yes* | Entra tenant ID |
| Yes* | App registration client ID |
| Yes* | App registration client secret |
| No |
|
| No | Tests folder (default |
| No | Where result JSON/MD/HTML files are written |
| No | Baseline folder for |
| No | PowerShell executable (default |
* 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 tests (by tag/service), with optional markdown output and drift comparison. Returns summary + file paths. |
| New. Run the |
| Overall pass rate, per-category breakdown, critical/high failures first. |
| All failures from a results file, filterable by category. |
| Full description, remediation, help URL, severity for one test. |
| Simulate a sign-in against Conditional Access policies. |
| New. Merge many tenant result files into one multi-tenant HTML report (MSP use). |
| Enumerate all tags via |
| 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_ROOT2. 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_whatifand 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 toolsaudit_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.
| Name | Required | Description | Default |
|---|---|---|---|
| services | No | Defaults to ['Graph','Dataverse']. Dataverse is required for Copilot Studio checks. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional category filter (e.g. EIDSCA, CA, CISA, Defender, AIAgent). | |
| resultsFile | Yes | Path to the Maester JSON results file. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| resultsFile | Yes | Path to the Maester JSON results file. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| testId | Yes | Test ID or name (e.g. EIDSCA.AF01, MT.1116, Test-MtCaRequireMfa). | |
| resultsFile | Yes | Path to the Maester JSON results file. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| outputHtml | No | Optional output path for the merged HTML report. | |
| resultsFolder | Yes | Folder containing multiple tenant result JSON files. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| appId | No | Application (client) ID to simulate sign-in to. Optional. | |
| userId | Yes | UPN or object ID (e.g. alice@contoso.com). | |
| ipAddress | No | Source IP for the simulated sign-in. Optional. | |
| devicePlatform | No | Device platform. Optional. | |
| deviceCompliant | No | Whether the simulated device is Intune-compliant. Optional. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Only run tests with these tags. Examples: EIDSCA, CISA, CIS, CA, MFA, Privileged, Defender, AIAgent, 'CIS GH', MT.1172. | |
| services | No | Services to connect. Default ['Graph']. Add Exchange, Teams, Dataverse (Copilot Studio), GitHub, SharePoint, Azure. 'ActiveDirectory' is on-prem opt-in and never part of 'All'. | |
| useDrift | No | Compare against the configured baseline (MAESTER_DRIFT_ROOT) to detect configuration drift. | |
| excludeTags | No | Exclude tests with these tags. | |
| emitMarkdown | No | Also emit a markdown summary suitable for a PR comment or pipeline step. | |
| includePreview | No | Include preview tests (replaces the deprecated 'All' tag). | |
| includeLongRunning | No | Include long-running tests (replaces the deprecated 'Full' tag). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
v2.0.0- First observed
audit_ai_agents - First observed
get_failed_tests - First observed
get_security_posture_summary - First observed
get_test_detail - First observed
list_available_tags - First observed
merge_tenant_results - First observed
run_ca_whatif - First observed
run_maester_tests - First observed
update_maester_tests
TDQS
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.
All tool names follow a consistent verb_noun pattern: run_, audit_, get_, list_, merge_, update_. No mixed conventions or vague verbs.
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.
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
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
Security tools for AI agents: scan MCP servers, validate HDP delegation chains, audit releases.
MCP server exposing the Backtest360 engine API as tools for AI agents.
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables 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.419Apache 2.0
- AlicenseAqualityAmaintenanceExposes 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.5MIT
- AlicenseAqualityCmaintenanceExposes 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.22MIT
- FlicenseNot gradedqualityCmaintenanceExposes all PHANTOM security testing capabilities as MCP tools, enabling reconnaissance, vulnerability scanning, red teaming, and report generation through natural language interactions.2-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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