Skip to main content
Glama
baoduy

EntraID MCP Server

by baoduy

EntraID MCP Server

An MCP server that lets an AI client such as Claude Desktop or Cursor read and manage your Microsoft Entra ID tenant — users, groups, MFA, devices, policies, logs and app registrations — through 48 Microsoft Graph tools.

📖 Overview

  • Users — search users, read a profile, list privileged users and a user's groups and roles (resources/users.py).

  • Groups — find, create, change and delete groups; add and remove members and owners (resources/groups.py).

  • Sign-in logs — a user's sign-ins over the last days (resources/signin_logs.py).

  • MFA — registered authentication methods for a user or every user in a group (resources/mfa.py).

  • Devices (Intune) — managed devices, detected apps, compliance and configuration, on the Graph beta endpoint (resources/managed_devices.py).

  • Conditional access — the tenant's policies as flat rows (resources/conditional_access.py).

  • Audit logs — the directory changes a user made (resources/audit_logs.py).

  • Password management — reset a password to a given or generated value; read password methods (resources/password_auth.py).

  • Permissions helper — suggest and search Microsoft Graph permissions (resources/permissions_helper.py).

  • Applications — list, read, create, change and delete app registrations (resources/applications.py).

  • Service principals — list, read, create, change and delete service principals (resources/service_principals.py).

Every tool carries an MCP mark, so a client can let lookups run and ask before a change: 34 tools are read-only; 5 change the tenant without destroying anything (the 3 creates, add member, add owner); 9 are destructive (the 3 deletes, remove member, remove owner, the password reset and the 3 updates).

The server publishes tools only — no MCP resources or prompts. It is started and called by an AI client on behalf of an Entra ID admin. It runs on the admin's machine, talks to the client over standard input and output, and signs in to Microsoft Graph as the admin (or as an app you configure).

Related MCP server: Microsoft Entra MCP Server

🏗️ Runtime architecture

An AI client sends tools/call over stdio to the FastMCP server, which dispatches to a tool function in server.py, then to a resource module, which uses GraphClient to call Microsoft Graph v1.0 (or beta for devices); on the first call GraphAuthManager gets a token from Microsoft Entra ID; main() starts the server after loading the first .env file found.

🌐 Downstream systems

System

What for

How

When it is down

Microsoft Graph v1.0

Every tool except the 9 device tools and the 2 permission-suggestion tools

HTTPS through msgraph-sdk

The tool call ends in an error result; the server sets no timeout or retry of its own

Microsoft Graph beta

The 9 device (Intune) tools

HTTPS through msgraph-beta-sdk

As above

Microsoft Entra ID

A token for Graph, on the first Graph call

The azure-identity credential the configuration selects

The tool call ends in an error result

The identity the server signs in as needs Graph permissions for the tools you use. Microsoft Graph checks them; the server checks none. This list is carried over from the previous README (application permissions):

Permission

For

User.Read.All

Users

Directory.Read.All

Directory data: users, groups, roles

RoleManagement.Read.Directory

Directory roles

Group.Read.All, GroupMember.Read.All

Reading groups and members

Group.ReadWrite.All

Creating, changing and deleting groups; adding and removing members and owners

AuditLog.Read.All

Sign-in logs and audit logs

UserAuthenticationMethod.Read.All

MFA and password methods

User-PasswordProfile.ReadWrite.All

Password reset (see ❓ Open questions)

Policy.Read.All, AuthenticationContext.Read.All

Conditional access policies

DeviceManagementManagedDevices.Read.All, DeviceManagementConfiguration.Read.All, DeviceManagementApps.Read.All

Device tools

Application.ReadWrite.All

Creating, changing and deleting applications and service principals

🚀 Quick Start

You need uv and Python 3.10 or later. The package pulls in fastmcp on its 4.x line (fastmcp>=4.1.3,<5), msgraph-sdk, msgraph-beta-sdk, msgraph-core, azure-identity, azure-core and python-dotenv, each pinned below its next major version in pyproject.toml.

  1. Sign in to Azure with an account that has the permissions above. The server uses this login by default:

    az login
  2. Add the server to the mcpServers object of your AI client's MCP settings — Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json:

    {
      "mcpServers": {
        "entraid": {
          "command": "uvx",
          "args": ["entraid-mcp-server"]
        }
      }
    }

    uvx downloads the latest release from PyPI and starts it; add @<version> to the package name to pin one.

  3. To sign in as an app instead of your Azure login (no interactive login available, for example), add an env block to the same entry. Never commit real values:

    "env": {
      "TENANT_ID": "<your-tenant-id>",
      "CLIENT_ID": "<your-client-id>",
      "CLIENT_SECRET": "<your-client-secret>"
    }

    Certificate sign-in, .env files and the order the server tries credentials in: configuration.

  4. Restart the client so it starts the server.

To run from a clone instead (from the repo root, with uv installed):

uv sync
uv run entraid-mcp-server          # or: uv run python -m msgraph_mcp_server

With the package installed in an environment (pip install entraid-mcp-server), the entraid-mcp-server command starts the same server.

✅ Verify it works

In your AI client, list the server's tools: you should see 48. Then call list_permission_categories_and_tasks — it needs no Graph access, so it works before any permission is granted. The result starts:

{"status": "success", "categories": {"users": {"tasks": [{"name": "read_user_profile", "description": "Read user profile information"}, ...

with the categories users, groups, mail, calendar, files, devices, audit_logs and directory. The server signs in only on the first tool that calls Microsoft Graph, so a sign-in problem shows up there, as the tool's error result.

The client also sees the server's name, EntraID MCP Server, and its version: the installed release number (from a clone, the version in pyproject.toml).

🛠️ Common commands

All from the repo root:

Command

What it does

uv sync --locked

Install the locked dependencies, dev tools included

uv build

Build the wheel and source archive into dist/

uv run pytest

Run the unit tests (an in-memory Microsoft Graph; no tenant needed)

uv run ruff check

Lint

uv run ruff format --check

Check formatting

uv run entraid-mcp-server

Start the server on stdio

Releases are automatic: there is no publish command to run. A pull request to dev, and a push to dev, run the check workflow (build, tests, lint, format). When dev is merged into main and the push touches src/msgraph_mcp_server/, pyproject.toml, README.md, LICENSE or the publish workflow, the publish workflow (which can also be started by hand on main) computes the next version from the git tags, builds the package, publishes it to PyPI and creates the GitHub release.

⚠️ Known limitations

  • The device tools use the Microsoft Graph beta endpoint, which Microsoft can change without notice.

  • The server sets no timeout or retry of its own; a slow or failing Graph call ends the tool call with an error result.

  • search_groups_by_name matches the start of the display name, not any part of it.

  • create_group is several Graph calls with no rollback: if an owner or member add fails, the group stays created.

  • reset_user_password_direct returns a generated password in its result, so it reaches the AI client's conversation.

  • Membership checks and searches read Graph with eventual consistency: a change made moments earlier may not be seen yet.

📚 Documentation

Page

Answers

Users

How to find users and read their groups and roles

Groups

How groups, members and owners are managed, and what each result means

Sign-in logs

How to read a user's sign-ins

MFA

How MFA status is worked out for a user or a group

Devices (Intune)

Which device, compliance and configuration data you can read

Conditional access

How policies are flattened into rows

Audit logs

How to read the changes a user made

Password management

How a reset works and how the password is protected

Permissions helper

How to find the Graph permissions a task needs

Applications

How app registrations are managed

Service principals

How service principals are managed

Configuration

Which settings choose how the server signs in, and where it reads them

LICENSE

MIT licence

❓ Open questions

Question

Why it matters

Checked

Who can answer

Is the permissions table above complete and least-privilege for the current 48 tools?

Admins grant exactly what this table says.

The code checks no permission; the table is carried over from the previous README. Only get_user_sign_ins names a permission in code (AuditLog.Read.All).

Maintainer (baoduy)

Does the password reset need User-PasswordProfile.ReadWrite.All (this table) or User.ReadWrite.All (the permissions helper's suggestion)?

A wrong grant makes the reset fail, or grants more than needed.

reset_user_password_direct sends PATCH /users/{id} with passwordProfile; COMMON_PERMISSION_MAPPINGS lists User.ReadWrite.All.

Maintainer (baoduy)

Where should users report problems or ask for support?

The README names no support route.

pyproject.toml lists the GitHub issues page as Issues; no support policy is in the repo.

Maintainer (baoduy)

Available Tools

48 tools
add_group_memberAdd Group MemberC

Add a member to a group.

NameRequiredDescriptionDefault
group_idYesID of the group
member_idYesID of the member (user, group, device, etc.) to add

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare this is a non-read-only, non-destructive mutation, so the safety profile is covered. The description adds nothing further: no statement about idempotency when the member already exists, required permissions, or side effects on existing membership.

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?

A single short sentence with no filler, front-loading the action and target. Its brevity is close to under-specification rather than verbosity, which is why it is not a 5.

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?

An output schema and full parameter coverage mean the agent knows the inputs and return shape. For a membership mutation, however, knowing whether re-adding an existing member errors or is a no-op is important and is not addressed anywhere in the definition.

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 both group_id and member_id are already documented, including the useful note that a member can be a user, group, or device. The description adds no meaning beyond the schema, so the baseline 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?

States a specific verb (add) and resource (member to a group), which is far better than a tautology. It does not distinguish itself from sibling mutations such as add_group_owner or remove_group_member, so an agent must infer the boundary.

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 on when to use this tool versus add_group_owner or any of the other group-mutation siblings, and no prerequisites or exclusions are stated. The one-sentence description leaves all routing to inference.

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

add_group_ownerAdd Group OwnerC

Add an owner to a group.

NameRequiredDescriptionDefault
group_idYesID of the group
owner_idYesID of the user to add as owner

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered structurally. The description adds nothing further — no mention of idempotency, what happens if the user is already an owner, what permissions are required, or that the operation is additive and reversible via remove_group_owner.

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?

A single short sentence with zero waste, front-loaded with the verb. It is efficient, though efficiency here comes at the cost of information rather than through disciplined editing.

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

Completeness2/5

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

An output schema exists, so return values needn't be explained, but for a mutation tool with no clarifying behavioral context the description should at least state permission requirements or the already-owner edge case. As written it is barely adequate for an agent to invoke it confidently.

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% with both parameters fully documented, so the schema does the heavy lifting. The description adds no semantics beyond what the schema fields already say, which is the baseline-3 case for high coverage.

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

Purpose2/5

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

The description 'Add an owner to a group' essentially restates the title 'Add Group Owner'; the only content added is the clarification that owner_id is a user, which the schema already states. It doesn't differentiate from siblings like add_group_member or remove_group_owner beyond the obvious verb.

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 guidance on when to use this versus add_group_member, remove_group_owner, or update_group. No prerequisites (e.g., required Graph permissions, whether the user must already be a member) are mentioned.

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

create_applicationCreate ApplicationC

Create a new application (app registration).

NameRequiredDescriptionDefault
app_dataYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so safety semantics are covered; the description adds nothing on top. It does not state what happens to an app with duplicate identifiers, whether the operation is idempotent or reversible, what permissions are needed, or what the response contains — all relevant for a creation tool taking an opaque payload.

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

Conciseness3/5

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

It is a single short sentence with the useful qualifier front-loaded, so there is no bloat — but brevity here comes from omission rather than efficiency. The one clause that earns its place is "(app registration)"; the rest merely echoes the title.

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

Completeness2/5

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

An output schema exists, so return values need not be explained, but the input side is a free-form nested object with no documentation anywhere. For a write tool against an identity platform, the description should at minimum sketch the payload shape or point to list_applications/get_application_by_id for the schema of an app object.

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

Parameters1/5

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

There is a single required parameter, app_data, defined as an untyped object with additionalProperties=true and 0% schema description coverage. The description offers zero guidance on which keys are required or permitted (displayName, signInAudience, requiredResourceAccess, etc.), so the agent has no way to construct a valid call from either the schema or the description.

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

Purpose3/5

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

The description is essentially a restatement of the name/title ("Create a new application"), with one genuinely useful gloss: "(app registration)", which tells the agent this is an Azure AD app registration rather than a service principal or group. That plus the specific verb makes the resource identifiable, but nothing is said about what an application contains or how it differs from the sibling create_service_principal beyond the parenthetical.

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 when-to-use guidance, no prerequisites (e.g. permission scopes), and no routing to alternatives such as create_service_principal or create_group, all of which are plausible near-misses for an agent asked to "register an app". The agent must infer the choice entirely from the tool name.

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

create_groupCreate GroupC

Create a new group in Microsoft Graph.

NameRequiredDescriptionDefault
group_dataYesDictionary containing group properties: - displayName: Display name of the group (required) - mailNickname: Mail alias for the group (required) - description: Description of the group (optional) - groupTypes: Array of group types e.g. ["Unified"] (optional) - mailEnabled: Whether the group is mail-enabled (optional) - securityEnabled: Whether the group is a security group (optional) - visibility: "Private" or "Public" for Microsoft 365 groups (optional) - owners: List of user IDs to add as owners (optional) - members: List of IDs to add as members (optional) - membershipRule: Rule for dynamic groups (required if DynamicMembership is in groupTypes) - membershipRuleProcessingState: "On" or "Paused" for dynamic groups (default: "On")

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation/safety profile is covered structurally. The description adds nothing beyond that: it doesn't say what happens on name collision, whether the caller becomes owner, what permissions are required, or whether the created object is returned.

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?

A single front-loaded sentence with zero filler. It is efficient, though the brevity leaves the gaps noted in other dimensions rather than being padded.

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?

An output schema and a fully documented nested parameter mean the description needn't explain return values or field syntax. However, for a Graph group-creation mutation, the absence of any note on permissions, idempotency, or dynamic-group constraints leaves the definition minimally adequate.

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 group_data property is documented in detail (displayName, mailNickname, groupTypes, membershipRule, owners, members), so the schema does the heavy lifting. The description adds no supplementary semantics such as format conventions or defaults beyond what the schema already states.

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?

States a specific verb and resource ('Create a new group') plus the target system (Microsoft Graph), which is unambiguous against siblings like update_group and delete_group. It does not explicitly differentiate from other create_* tools or clarify scope, but the name/description pair is clear enough for selection.

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 on when to use this versus update_group or the existing search_groups_by_name/get_group_by_id lookups, and no mention of prerequisites such as the permissions or consent needed to create groups in Graph. The agent must infer all of this.

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

create_service_principalCreate Service PrincipalC

Create a new service principal.

NameRequiredDescriptionDefault
sp_dataYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

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

Annotations already declare this is a non-readonly, non-destructive mutation, so safety basics are covered. The description adds nothing beyond that: it doesn't say what permissions are required, what happens on duplicate service principals, or what must be supplied in the creation payload.

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

Conciseness3/5

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

The single sentence is efficient with no waste, but at this length it reads as under-specification rather than deliberate brevity, and it is not front-loaded with anything beyond a restatement of the title.

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

Completeness2/5

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

An output schema exists, so return values need not be explained. But for a mutation tool whose only input is an opaque free-form object, the description leaves the agent without the field-level guidance needed to invoke it correctly.

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

Parameters1/5

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

Schema coverage is 0% and the single parameter sp_data is a free-form nested object with additionalProperties=true, meaning the agent has no documented fields to supply. The description does not compensate at all — it never mentions what sp_data should contain.

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

Purpose3/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 ('Create a new service principal'), so the basic operation is clear. However, it offers nothing to distinguish it from siblings like create_application or create_group, and gives no scope or prerequisite detail.

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 on when to use this tool versus create_application or other create siblings, nor any prerequisites. The agent must infer everything from the name alone.

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

delete_applicationDelete ApplicationA
Destructive

Delete an application (app registration) by its object ID.

NameRequiredDescriptionDefault
app_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the agent knows this is a destructive write operation. The description adds little beyond the resource type and that deletion targets an app registration by object ID; it does not discuss irreversibility, permissions, or side effects, but it does not contradict the annotations either.

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 with no filler. Every phrase contributes to identifying the operation and its target resource.

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?

For a simple one-parameter delete operation, the description identifies the action and target adequately, and an output schema exists so return values need not be explained. However, it lacks any destructive-operation context such as irreversibility or prerequisite checks, which would improve completeness for a high-impact tool.

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 0%, but the description clarifies that app_id is an object ID rather than another identifier such as a client ID. It does not explain the expected ID format or where to obtain it, so it only partially compensates for the schema gap.

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: 'Delete an application (app registration)'. It also specifies that deletion is by object ID, making the operation unambiguous and distinguishable from list/get/create/update application siblings.

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 gives no guidance on when to use this tool versus alternatives, nor any when-not conditions. It also omits prerequisites such as confirming the correct object ID or checking dependencies before deletion.

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

delete_groupDelete GroupC
Destructive

Delete a group from Microsoft Graph.

NameRequiredDescriptionDefault
group_idYesID of the group to delete

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds only the target system ('Microsoft Graph') and does not disclose irreversibility, permission requirements, or effects on group members/owners beyond what annotations provide.

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 a single front-loaded sentence with no wasted words. It is appropriately concise, though its terseness contributes to gaps in behavioral and usage context.

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?

Annotations cover the destructive nature and an output schema exists, so return values need not be explained. However, for a destructive operation, the description omits consequences such as whether deletion is permanent or what happens to related members, leaving clear gaps.

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 single parameter is fully documented as 'ID of the group to delete'. The description adds no further meaning, which is a baseline 3 when the schema does the heavy lifting.

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 and resource ('Delete a group'), making the operation immediately clear. It does not explicitly differentiate itself from the many sibling delete tools or group-management tools, but the core action is unambiguous.

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 on when to use this tool versus alternatives such as remove_group_member or update_group, nor any stated prerequisites, permissions, or warnings. The agent is left to infer usage entirely.

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

delete_service_principalDelete Service PrincipalC
Destructive

Delete a service principal by its object ID.

NameRequiredDescriptionDefault
sp_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered structurally. The description adds nothing beyond that: it doesn't say the deletion is irreversible, whether related role assignments/app credentials are cleaned up, or what permissions/consent are required. For a destructive operation this is a meaningful gap.

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?

A single front-loaded sentence with zero filler and the key identifier requirement stated immediately. It is efficient, though its brevity leans toward under-specification for a destructive tool.

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?

Output schema exists and annotations cover the safety flags, and the tool is low-complexity with a single required parameter. Still, for an irreversible destructive action the description should add at least a caution and any permission requirement, which are 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 0% and there is one parameter (sp_id) with no type details beyond string. The phrase 'by its object ID' usefully disambiguates that this expects the directory object ID rather than an appId/clientId, which is real added meaning, but format examples or validation expectations are absent.

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?

States a specific verb ('Delete') and resource ('service principal') plus the identifier used, which cleanly separates it from siblings like delete_group, delete_application, and update_service_principal. No explicit sibling contrast is offered, but the name-plus-resource pairing leaves no ambiguity about what it does.

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 offers no guidance on when to use this versus alternatives such as update_service_principal or list_service_principals to verify first, and no mention of prerequisites like confirming the object ID. Usage must be inferred from the tool name alone.

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

get_all_graph_permissionsGet All Graph PermissionsB
Read-only

Get all Microsoft Graph permissions directly from the Microsoft Graph API.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes the safety profile. The description adds that permissions are retrieved directly from the Graph API, implying a live, unfiltered fetch. It does not mention pagination, volume, or rate-limit considerations for retrieving all permissions.

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?

It is a single, front-loaded sentence with no wasted clauses. It is slightly redundant in saying "Microsoft Graph permissions directly from the Microsoft Graph API," but remains efficient.

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?

With an output schema present and no input parameters, the definition covers the basic call mechanics. It is missing sibling differentiation and any note about result size, pagination, or intended use, which would help an agent decide between this and other permission-related tools.

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 takes zero parameters, so the baseline is 4. There is no parameter behavior to explain, and the schema has no gaps to compensate for.

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 clear verb and resource ("Get all Microsoft Graph permissions") and specifies the source (Microsoft Graph API). However, it does not distinguish this tool from sibling permission tools like search_permissions or list_permission_categories_and_tasks.

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 on when to use this tool versus alternatives such as search_permissions or suggest_permissions_for_task. It only states what the tool does, not the conditions under which it should be chosen.

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

get_all_groupsGet All GroupsC
Read-only

Get all groups (up to the specified limit, with paging).

NameRequiredDescriptionDefault
limitNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description adds genuinely new context by disclosing paging and a limit-bounded result set, which the annotation does not express, but says nothing about pagination mechanics or rate limits.

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?

A single short sentence with no filler; the paging qualifier is placed inline where it matters. It is efficient, though its brevity comes at the cost of substance.

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?

An output schema exists, so return values need not be explained, and the tool has one optional parameter. Still, for a bulk-listing endpoint the description leaves paging semantics and sibling disambiguation unaddressed, which an agent may need to call it correctly.

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

Parameters2/5

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

Schema description coverage is 0% and the single 'limit' parameter has no documented semantics. The description mentions 'up to the specified limit, with paging' but does not clarify whether limit caps the total result count or the page size, nor what the default behavior is.

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

Purpose3/5

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

States a concrete verb and resource ('Get all groups'), so the basic operation is clear. But it does not distinguish itself from siblings like search_groups_by_name or get_group_by_id, leaving the agent to infer why an unfiltered listing exists alongside a name search.

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 guidance on when to use this bulk listing versus search_groups_by_name or get_group_by_id, and no mention of prerequisites or expected scale. The agent gets no routing signal from the description.

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

get_all_managed_devicesGet All Managed DevicesA
Read-only

Get all managed devices (optionally filter by OS).

NameRequiredDescriptionDefault
filter_osNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

The readOnlyHint annotation already declares this is a non-destructive read. The description adds only that filtering is optional; it says nothing about result size, pagination, required permissions, or throttling, which matter for a tenant-wide device listing.

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?

A single short sentence with the resource and the optional filter front-loaded; 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 simple read-only listing tool with an output schema, the description covers the essential behavior. The remaining gap is the meaning and accepted values of filter_os, plus how large result sets are handled.

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 0%, so the description must carry the parameter burden. It does convey that filter_os filters by operating system and is optional, but gives no accepted values, format, or matching behavior (exact vs partial), so the semantics remain thin.

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?

States a specific verb ('Get') and resource ('all managed devices') with an explicit scope ('all'), which distinguishes it from get_managed_devices_by_user and get_managed_device_by_id. It does not name those siblings explicitly, but the 'all' scope makes the distinction inferable.

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 parenthetical '(optionally filter by OS)' implies the usage pattern of listing everything or narrowing by OS, but there is no explicit guidance on when to prefer this over get_managed_devices_by_user, nor any exclusion or prerequisite information.

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

get_application_by_idGet Application By IdB
Read-only

Get a specific application by its object ID.

NameRequiredDescriptionDefault
app_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

readOnlyHint=true already covers the safety profile, and the description adds nothing on top of it — no statement about behavior when the ID does not exist, and no indication of what 'object ID' means in this API's terms. It restates the operation rather than disclosing traits.

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?

One short sentence with zero waste and the lookup key front-loaded. Appropriately sized for a trivial single-parameter read, though it leaves room without being padded.

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?

An output schema exists and annotations cover safety, so the remaining burden is small, but for a lookup tool the description says nothing about not-found behavior or where the object ID comes from (e.g., list_applications), leaving a modest 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?

Schema coverage is 0%, so the description carries the burden for the single parameter; it does clarify that app_id is an 'object ID' (not a display name or client ID), which is real added meaning, but it gives no format or sourcing guidance.

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?

States a specific verb and resource ('Get a specific application') plus the lookup key ('by its object ID'), which cleanly separates it from list_applications and the create/update/delete siblings. It never names an alternative explicitly, so it stops short of a 5.

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 is only implied: 'by its object ID' signals this is the tool for when you already hold an ID rather than searching, but there is no explicit when-to-use, prerequisite, or reference to list_applications for discovery.

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

get_conditional_access_policiesGet Conditional Access PoliciesB
Read-only

Get all conditional access policies.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, and the description is consistent with that. Beyond 'all' (i.e., unfiltered), it adds no behavioral context such as population size, pagination, or ordering, so there is little value beyond the structured fields.

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?

A single short, front-loaded sentence with no filler. It is efficient, though it borders on under-specification rather than optimal density.

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 read-only list tool with an output schema that documents return values, this minimal description is sufficient to call it correctly. Only the absence of any scope or result-size note keeps it below 5.

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 takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; the description correctly signals that no filtering inputs exist.

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?

A clear verb ('Get') plus resource ('conditional access policies'), and the word 'all' implicitly distinguishes it from the sibling get_conditional_access_policy_by_id. Sibling differentiation is present only by implication rather than by name, so it stops short of a 5.

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 gives no guidance on when to use this bulk fetch versus get_conditional_access_policy_by_id, and no preconditions or context (e.g., tenant-wide permissions) are mentioned. The agent must infer the routing logic from the sibling's name alone.

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

get_conditional_access_policy_by_idGet Conditional Access Policy By IdB
Read-only

Get a single conditional access policy by its ID with comprehensive details.

NameRequiredDescriptionDefault
policy_idYesThe unique identifier (ID) of the conditional access policy.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the bar is lower. The description adds only 'with comprehensive details', which hints at return richness but gives no information about failure behavior for an unknown ID or required permissions.

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?

One front-loaded sentence with no wasted words. It is efficient, though the trailing 'with comprehensive details' is close to filler.

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?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. For a single-parameter read, the definition is adequate but thin – nothing on error behavior or the relationship to the list tool.

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?

Single parameter with 100% schema description coverage, so the schema fully documents policy_id as the unique identifier. The description adds nothing beyond that; baseline 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?

States a specific verb and resource: 'Get a single conditional access policy by its ID'. The word 'single' contrasts implicitly with the sibling list tool get_conditional_access_policies, but that sibling is never named, so differentiation is left to inference.

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 is only implied by 'by its ID' – an agent can infer this is the follow-up call after listing policies, but there is no explicit when-to-use, prerequisite, or reference to get_conditional_access_policies as the alternative.

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

get_detected_apps_for_deviceGet Detected Apps For DeviceA
Read-only

Get applications detected on a specific Intune managed device (beta endpoint).

NameRequiredDescriptionDefault
device_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

readOnlyHint=true already declares the safety profile, so the description's main added value is the '(beta endpoint)' note, which warns of API instability. It says nothing about permissions, pagination, or whether results reflect last check-in versus real-time inventory.

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?

One front-loaded sentence with no filler; the resource, scope, and beta caveat all appear before any trailing detail.

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?

An output schema covers return values and readOnlyHint covers safety, so the description only needed the scope and beta caveat it provides. Minor gaps remain around ID sourcing and result freshness.

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 0% for the single device_id parameter, so the description must compensate. It narrows the meaning to an Intune managed device identifier rather than a generic or Entra object ID, which is genuinely useful, but it gives no format or sourcing guidance.

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?

Names a specific verb and resource ('applications detected on a specific Intune managed device'), which cleanly separates it from list_applications on the sibling list. The device-level scoping is explicit, though no sibling is named directly.

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 is only implied: the 'specific Intune managed device' phrasing signals when it applies, but there is no statement of when to prefer this over list_applications or get_managed_device_by_id, and no prerequisites or exclusions.

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

get_device_categoriesGet Device CategoriesA
Read-only

List all Intune device categories (beta endpoint).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

readOnlyHint=true already declares the safety profile, so the description's main added value is the '(beta endpoint)' note, which usefully signals API instability and possible differing permission/behavior surface. Beyond that it does not mention permissions required, pagination, or result volume.

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?

A single short sentence with the verb and scope front-loaded and the beta caveat appended. 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?

With an output schema present, a zero-parameter input, and readOnlyHint annotations, the description needs only to identify the resource and any quirks. It does that, and the beta note covers the main caveat; only return-shape or pagination hints are absent, which the output schema likely covers.

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 takes zero parameters, so there is nothing to document and the schema is trivially complete; the description correctly implies a no-argument 'list everything' call. Baseline 4 applies for a parameterless tool.

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?

States a specific verb and resource ('List all Intune device categories'), which is unambiguous and clearly distinct from device-level siblings like get_all_managed_devices or get_device_compliance_policies. It does not explicitly contrast with any sibling, but the resource noun alone disambiguates well.

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 phrase 'List all' implies an unfiltered enumeration, but there is no statement of when to use this versus other device-metadata tools, no prerequisites, and no exclusions. An agent must infer usage entirely.

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

get_device_compliance_policiesGet Device Compliance PoliciesA
Read-only

List all Intune device compliance policies (beta endpoint).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the description only needs to add context. It does add one meaningful detail — that the call targets the beta Graph endpoint, which implies possible instability or schema drift. It does not mention result volume or that no filtering or pagination is available, which matters for an unfiltered list-all tool.

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?

A single sentence with the verb and resource front-loaded and no filler. The parenthetical beta note is compact and carries real information.

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?

With zero parameters, an output schema present, and annotations covering the safety profile, the description covers nearly everything needed. The only gap is that it does not warn the agent that an unfiltered list-all on a tenant could return a large, unpaginated result set.

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 takes zero parameters and schema coverage is 100%, so there is nothing for the description to document. Baseline of 4 applies because no parameter semantics are needed.

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?

States a specific verb (List) and resource (Intune device compliance policies), which is unambiguous on its own. It does not explicitly distinguish itself from the close sibling get_device_compliance_policy_states, so an agent must infer that this returns policy definitions rather than per-device status.

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 gives no when-to-use guidance, no prerequisites, and never names an alternative such as get_device_compliance_policy_states or get_managed_device_by_id. The agent has to infer applicability purely from the resource name.

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

get_device_compliance_policy_statesGet Device Compliance Policy StatesB
Read-only

Get compliance-policy states for a specific Intune managed device (beta endpoint).

NameRequiredDescriptionDefault
device_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read. The description adds one genuinely useful behavioral detail: it targets the beta endpoint, signaling possible instability. It does not mention permission requirements or behavior for unknown/non-compliant device IDs.

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?

A single front-loaded sentence with zero filler, and the beta-endpoint caveat is tucked into a parenthetical where it doesn't distract. Slightly terse for the amount of information an agent needs, but nothing is wasted.

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?

An output schema exists, so return values need no explanation, and with one required parameter the surface is small. What's missing is minor: how to source the device_id and any note on beta-endpoint reliability or empty results.

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 0% and the single device_id property has no description, so the description must compensate. Saying 'for a specific Intune managed device' clarifies that device_id is an Intune managed-device identifier, but it gives no format hint or pointer to get_managed_device_by_id for obtaining one.

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?

States a specific verb and resource ('Get compliance-policy states') scoped to an Intune managed device. It implicitly distinguishes itself from the nearby 'get_device_compliance_policies' by returning per-device states rather than policy definitions, but it never names that sibling to make the distinction explicit.

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 when-to-use guidance, no exclusions, and no mention of the closely related siblings (get_device_compliance_policies, get_device_configuration_states). The agent must infer the use case from the name alone.

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

get_device_configurationsGet Device ConfigurationsA
Read-only

List all Intune device configuration profiles (beta endpoint).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

The readOnlyHint=true annotation already declares the safety profile, so the description's burden is lighter. It adds one genuinely useful behavioral detail — that this hits the beta endpoint — but says nothing about pagination, result volume, or whether only unassigned/all profiles are returned, which matters for an unfiltered 'list all' tool.

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?

A single front-loaded sentence with no filler. The beta-endpoint caveat is placed inline where it is immediately useful.

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?

An output schema exists, so return-value explanation is unnecessary, and with no parameters the only real gap is pagination/result-size behavior. The beta-endpoint disclosure covers the main behavioral caveat for a simple read-only list tool.

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 takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; the description correctly does not invent parameter semantics.

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?

States a specific verb (List) and resource (Intune device configuration profiles), which distinguishes it from nearby siblings like get_device_configuration_states and get_device_compliance_policies that operate on different artifacts. It stops short of explaining the scope (e.g., all profiles vs. assigned profiles) but the resource identification is solid.

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 guidance on when to use this versus get_device_configuration_states or get_device_compliance_policies, which an agent could easily confuse given the shared 'device configuration' wording. Usage is only implied by the name.

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

get_device_configuration_statesGet Device Configuration StatesB
Read-only

Get configuration-profile states for a specific Intune managed device (beta endpoint).

NameRequiredDescriptionDefault
device_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the description's main added value is the '(beta endpoint)' caveat, which usefully signals possible instability or differing behavior. It says nothing about pagination, response shape constraints, or permissions required to read Intune device state.

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?

One front-loaded sentence with zero filler; the scope and beta caveat are stated immediately. It is perhaps too terse for the information it needs to carry, but nothing is wasted or buried.

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?

An output schema exists, so return values need not be explained, and the operation is a simple single-parameter read with readOnly annotation coverage. The remaining gaps are the ambiguity with sibling state/config tools and the undefined device_id, which are exactly what the description should have closed.

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

Parameters2/5

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

Schema description coverage is 0% and the single parameter device_id is undocumented in the schema, so the description must compensate. It only implies that device_id refers to an Intune managed device (as opposed to an Entra device) and gives no format or source for that ID, e.g. whether it comes from get_all_managed_devices.

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?

States a specific verb ('Get') and resource ('configuration-profile states') scoped to 'a specific Intune managed device', which is clearer than a bare restatement of the title. It does not differentiate from nearby siblings such as get_device_configurations or get_device_compliance_policy_states, leaving the agent to infer the distinction.

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 guidance on when to use this instead of get_device_configurations or get_device_compliance_policy_states, which are the most likely confusions. No prerequisites or exclusions are given, only the implicit 'you need a device'.

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

get_group_by_idGet Group By IdC
Read-only

Get a specific group by its ID.

NameRequiredDescriptionDefault
group_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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

readOnlyHint=true already tells the agent this is a safe read, and an output schema exists, so the description's burden is lower. Still, it adds nothing beyond the annotation: no note on behavior when the ID does not exist, no permission prerequisites, no insight into the returned group object.

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?

One short sentence with no filler and the key concept front-loaded. It is concise to a fault, but nothing is bloated or buried.

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 tool is simple: one string parameter, a read-only annotation, and an output schema, so heavy explanation is not required. However, the undefined parameter format and unstated not-found behavior leave small but real gaps for a lookup tool.

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 0% for the single group_id string, so the schema alone gives no semantics. The description adds only that the parameter is the group's ID, which is the minimum needed and nothing more (no format, source, or example).

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

Purpose2/5

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

The description restates the tool name and title almost verbatim ("Get a specific group by its ID" for get_group_by_id / Get Group By Id). It identifies the resource but gives no distinguishing detail versus siblings such as get_all_groups or search_groups_by_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 explicit when-to-use guidance or named alternative. The phrase "by its ID" weakly implies this is for exact-ID lookup rather than listing or searching, but that inference is left entirely to the agent.

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

get_group_membersGet Group MembersB
Read-only

Get members of a group by group ID (up to the specified limit, with paging).

NameRequiredDescriptionDefault
limitNo
group_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description adds genuine context the annotations don't: results are capped by a limit and support paging. It omits any permission/consent scope requirement and any indication of what a member record contains (though an output schema exists, so return shape is covered elsewhere).

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?

One sentence, front-loaded with the resource and the deciding key, and the parenthetical adds scoping facts rather than filler. Nothing to cut.

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?

Annotations cover the read-only profile and an output schema covers the return shape, so the description need not explain results. It is still incomplete in a way that matters: it says 'with paging' but the schema exposes no offset/token parameter, leaving the agent unclear on how to page at all, and it says nothing about the default or ceiling of limit.

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 0%, so the description must carry the parameter burden. It does partially: group_id is the target group and limit is a page size with paging. But it never states the default (100), the maximum allowed limit, or the expected group_id format (GUID vs. name), which is the main failure mode for this call.

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?

Specific verb + resource + filter: 'Get members of a group by group ID'. Clearly distinguishes the direction of the relationship from siblings like get_user_groups (user→groups), add_group_member, and remove_group_member. It stops short of naming a sibling to route away from, so it is not a 5.

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 explicit when-to-use statement and no named alternative. An agent must infer from the name that this is the way to enumerate a group's membership versus add_group_member/remove_group_member or search_users. Usage is only implicit.

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

get_group_mfa_statusGet Group Mfa StatusB
Read-only

Get MFA status for all members of a group.

NameRequiredDescriptionDefault
group_idYesThe unique identifier of the group.

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes this is a safe read, so the description's burden is lighter. It adds nothing further — no note about result volume for large groups, pagination, or whether it requires directory-read permissions.

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?

A single front-loaded sentence with zero waste. Its terseness is efficient, though it leaves no room for the routing or scale caveats that would help an agent.

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?

An output schema exists, so return-value explanation isn't required, and the one-parameter read shape is simple. Still, for a tool that enumerates MFA status across an entire group, the absence of any note on result size or behavior with very large groups leaves a 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?

Schema description coverage is 100% with a single required group_id, and the description adds no syntax or format details beyond the schema. Baseline 3 is appropriate when the schema fully carries parameter documentation.

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?

States a specific verb and resource ('Get MFA status') plus the scope ('all members of a group'), which is clear on its own. It stops short of explicitly naming get_user_mfa_status as the per-user counterpart, so sibling differentiation is left implicit.

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 'all members of a group' implies bulk/group-level usage versus the single-user sibling get_user_mfa_status, but no explicit when-to-use or when-not-to-use guidance is given. An agent must infer the choice from the wording.

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

get_managed_device_by_idGet Managed Device By IdB
Read-only

Get full details of a single Intune managed device (beta endpoint).

NameRequiredDescriptionDefault
device_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/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 that this uses the beta endpoint, which signals possible API instability, but it does not describe permission requirements, beta limitations, or other behavioral traits.

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 with no wasted words. It states the core purpose and the beta-endpoint caveat directly.

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?

An output schema exists, so return-value details need not be in the description, and the readOnlyHint covers safety. However, for a lookup tool with an undocumented required identifier parameter, the description should say more about what the device_id represents and whether the beta endpoint imposes constraints.

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

Parameters2/5

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

The only parameter, device_id, has 0% schema description coverage, and the description does not explain its format or source (for example, whether it is an Intune device ID or an Entra object ID). The description's 'by id' phrasing only restates the parameter name without compensating for the schema gap.

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 a specific verb and resource: 'Get full details of a single Intune managed device.' It distinguishes the single-device scope from list-oriented siblings such as get_all_managed_devices and get_managed_devices_by_user, though it does not name those siblings explicitly.

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 'single Intune managed device' implies this is for fetching one device by identifier rather than listing devices, but there are no explicit when-to-use or when-not-to-use guidelines, and no sibling tool is named as an alternative.

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

get_managed_devices_by_userGet Managed Devices By UserC
Read-only

Get all managed devices for a specific userId.

NameRequiredDescriptionDefault
user_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

readOnlyHint=true already establishes this is a safe read, and an output schema exists to describe returns, so the description's burden is light. However, it adds nothing beyond that: no pagination behavior, no mention of what happens if the user has no devices or does not exist, and no volume expectations for a device-list endpoint.

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?

One sentence, front-loaded with the verb and resource, and nothing redundant. It is efficient but borders on under-specified rather than tight.

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?

Annotations cover the safety profile and an output schema covers return shape, so the essentials are present. Still missing for a filtered-list tool: identifier format for user_id and whether results are paginated or empty-list on no matches.

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

Parameters2/5

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

Schema coverage is 0% for the single required user_id parameter, so the description must carry the semantics. It only restates the parameter name as 'specific userId' and gives no format (GUID vs UPN vs object ID) or validation rule, leaving the agent to guess the identifier type.

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?

States a specific verb and resource ('Get all managed devices') plus the scoping dimension ('for a specific userId'), which distinguishes it from get_all_managed_devices and get_managed_device_by_id. It doesn't name those siblings explicitly, so differentiation is inferable rather than stated.

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 guidance on when to use this versus get_all_managed_devices (all devices) or get_managed_device_by_id (single device). The agent must infer the selection rule from the name alone.

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

get_privileged_usersGet Privileged UsersA
Read-only

Get all users who are members of privileged directory roles.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the description only needs to add context. It confirms the tool enumerates role-member users, but says nothing about pagination, result size, or which roles count as 'privileged' — useful additions that are missing.

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?

A single front-loaded sentence with no filler. For a parameterless read tool, this is exactly the right length and puts the resource scope first.

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?

An output schema exists, so return values are covered elsewhere, and with no parameters the surface area is small. The remaining gap is the undefined term 'privileged directory roles' — an agent cannot tell whether that means Global Admins only or all admin role assignments.

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 takes zero parameters and the description introduces no spurious inputs, so there is no parameter ambiguity. Baseline 4 applies since there is nothing for the description to clarify.

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?

States a specific verb and resource ('Get all users who are members of privileged directory roles'), which an agent can distinguish from search_users and get_user_by_id. It does not explicitly contrast with get_user_roles, so the boundary between the two is left to inference, but the scope is concrete.

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 'privileged directory roles' implies an access-review/audit use case, but the description never states when to prefer this over get_user_roles or search_users, nor any prerequisites such as required permissions. Usage is implied rather than directed.

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

get_service_principal_by_idGet Service Principal By IdB
Read-only

Get a specific service principal by its object ID.

NameRequiredDescriptionDefault
sp_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

readOnlyHint=true already declares the safety profile, and the presence of an output schema means return values need no explanation. The description adds nothing beyond the name itself — no note on behavior for an unknown or malformed ID, and no confirmation that this is a direct single-object lookup rather than a search.

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?

A single front-loaded sentence with zero filler. Nothing is repeated from the title and every word carries meaning.

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?

For a simple one-parameter read with an output schema and readOnlyHint, the definition is minimally sufficient. The main missing piece is how an agent should obtain sp_id, which matters because the only discovery path is the sibling list_service_principals.

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 0%, so the schema does not document sp_id at all. The description partially compensates by identifying it as the service principal's object ID, but does not clarify the expected format (GUID) or distinguish objectId from appId, which is a common confusion for service principals.

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?

States a specific verb and resource ("Get a specific service principal") plus the lookup key (object ID), so the agent knows exactly what it retrieves. It does not differentiate from siblings like list_service_principals or get_application_by_id, leaving the single-vs-list distinction implicit.

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 "by its object ID" implies the tool requires a known identifier and is therefore the follow-up to a listing call, but the description never names list_service_principals as the way to obtain one, nor states any exclusions. Usage is inferable rather than stated.

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

get_user_audit_logsGet User Audit LogsB
Read-only

Get all relevant directory audit logs for a user by user_id within the last N days (default 30).

NameRequiredDescriptionDefault
daysNo
user_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

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

The readOnlyHint annotation already tells the agent this is a safe read. The description does add useful scope detail beyond annotations, namely the default 30-day window, but it leaves 'all relevant' undefined — no indication whether logs are filtered, truncated, paginated, or capped by volume.

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?

One front-loaded sentence with no filler; the time-window qualifier is attached directly to the resource. It is efficient, though slightly under-specified rather than over-long.

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?

An output schema exists and the readOnlyHint covers safety, so the description needn't explain return shape. Still, for an audit-log tool whose result volume matters, the undefined 'relevant' filtering and missing user_id format leave real gaps for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the load. It explains the days parameter's default (30 days) but not user_id's expected format (object ID vs UPN/email), leaving a required parameter's semantics to guesswork.

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?

States a specific verb and resource (get directory audit logs) scoped to a user via user_id and a time window. It is clear what it fetches, but unlike a top-tier definition it does not distinguish itself from close siblings such as get_user_sign_ins, and 'all relevant' leaves the resource meaning slightly fuzzy.

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 on when to choose this over get_user_sign_ins, get_user_mfa_status, or other user-activity siblings, and no exclusions or prerequisites are stated. Usage is only implicitly inferable from the one-sentence purpose.

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

get_user_by_idGet User By IdC
Read-only

Get a specific user by their ID.

NameRequiredDescriptionDefault
user_idYesThe unique identifier (ID) of the user.

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description adds nothing beyond that: it does not mention behavior when the ID is unknown (empty result vs. error), required permissions, or any tenant scoping, which are the kinds of details that would add 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.

Conciseness4/5

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

A single short sentence with no filler, and the resource and key are front-loaded. It is efficient but so terse that it borders on under-specification rather than crispness.

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?

An output schema exists, so return values need not be explained, and the tool is simple (one required param). Still, with many sibling lookup tools, the description leaves an agent without routing guidance or edge-case behavior, so it is only minimally 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%, and the single user_id parameter is documented as 'The unique identifier (ID) of the user.' The description adds no format hints (GUID vs. UPN) or examples, so the schema does all the work — baseline 3 is appropriate.

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

Purpose3/5

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

The description names a verb and resource ('get a specific user') and echoes the ID lookup, but it is essentially a restatement of the tool name and title with no distinguishing detail. It does not differentiate itself from the sibling search_users, which an agent could easily confuse with a single-user lookup.

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 on when to use this tool versus search_users or other user-related siblings like get_user_sign_ins. Usage is only implied by the name; nothing tells the agent the precondition that it already has a user ID.

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

get_user_groupsGet User GroupsA
Read-only

Get all groups (including transitive memberships) for a user by user ID.

NameRequiredDescriptionDefault
user_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

readOnlyHint already declares the safety profile, so the description's value-add is the disclosure that transitive memberships are expanded — that signals a potentially larger/recursive result set than a direct-membership call. It doesn't cover behavior on unknown user IDs or any result-size/pagination limits.

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?

A single sentence with zero filler, front-loading the resource scope and then the transitive qualifier. Nothing to trim.

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?

An output schema exists, so return shape needn't be explained, and the call surface is a single required ID. The description is adequate for calling it, though it omits whether the ID must be an object ID/UPN and what happens for an unknown user.

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 0%, but there is only one parameter and the description's phrase 'by user ID' identifies it as a user identifier, matching the schema's user_id. It adds no format, source, or example beyond the name itself.

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?

States a specific verb (get), resource (groups), scoping key (by user ID), and a meaningful qualifier (transitive memberships), so it is distinguishable from get_all_groups and get_group_members. It does not explicitly contrast with the closest sibling, get_user_roles.

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 'for a user by user ID' framing implies the usage context, but there is no explicit when-to-use/when-not guidance and no named alternative (e.g., get_all_groups for tenant-wide listings, get_user_roles for role assignments). Routing 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.

get_user_mfa_statusGet User Mfa StatusA
Read-only

Get MFA status and methods for a specific user.

NameRequiredDescriptionDefault
user_idYesThe unique identifier of the user.

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, and an output schema covers the return shape. The description adds nothing beyond that – no note on permissions required, what 'methods' include, or behavior for users without MFA enrolled.

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?

A single front-loaded sentence with zero padding. It is efficient, though its brevity comes at the cost of the sibling differentiation noted elsewhere.

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 one-parameter read tool with readOnlyHint and a full output schema, this is close to complete. The only meaningful omission is routing guidance relative to get_group_mfa_status and related MFA/password-method siblings.

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?

Only one parameter with 100% schema description coverage; the schema already defines user_id as 'the unique identifier of the user'. The description adds no format or sourcing guidance (e.g., object ID vs UPN), so baseline 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?

States a specific verb+resource ('Get MFA status and methods') scoped to 'a specific user', which implicitly separates it from get_group_mfa_status. However, it never names the sibling or states the distinction, so differentiation rests on the reader noticing 'user' vs 'group'.

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 is only implied by the tool name and the word 'specific user'. There is no explicit when-to-use, when-not, or pointer to the sibling get_group_mfa_status for group-level MFA.

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

get_user_password_methodGet User Password MethodC
Read-only

Get a specific password authentication method for a user.

NameRequiredDescriptionDefault
user_idYes
method_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

readOnlyHint=true already establishes this as a safe read, and the description adds nothing beyond that – no indication of required permissions, whether credential-sensitive fields are returned, or error behavior when the method does not exist. For a tool touching password methods, the silence on sensitive-data handling is a real gap.

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?

A single, front-loaded sentence with no filler. It is efficient, though its brevity contributes to the missing guidance elsewhere.

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

Completeness2/5

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

An output schema exists, so return values needn't be explained, but with 0% schema coverage the description should at least describe identifier formats and any access requirements. It leaves the agent guessing on both.

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

Parameters2/5

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

Schema description coverage is 0%, so neither parameter is documented anywhere, yet the description only implies them via 'for a user' and 'specific ... method'. Crucially, it doesn't say whether user_id accepts a UPN/email or an object ID, or what form method_id takes.

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?

States a specific verb and resource (get a password authentication method) scoped to a user, which cleanly separates it from list_user_password_methods. It never names that sibling, though, so the differentiation is inferred rather than explicit.

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 guidance on when to use a single-item get versus the sibling list_user_password_methods, and no mention of the related mutation tool reset_user_password_direct. The agent must infer the retrieval workflow entirely from the name.

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

get_user_rolesGet User RolesA
Read-only

Get all directory roles assigned to a user by user ID.

NameRequiredDescriptionDefault
user_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes that this is a safe read operation. The description adds useful scope by saying it returns all directory roles assigned to the user, but it does not disclose pagination, permission requirements, or empty-result behavior.

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 with no redundant or unnecessary text. It communicates the operation and scope efficiently.

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 read-only lookup with a single parameter and an output schema, the description is mostly complete. It tells the agent what the tool returns and what input is required, though it could mention permission requirements or result limitations.

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 0%, so the description must carry the parameter meaning. It does identify that the single parameter is a user ID, but it does not add format details such as whether it expects a GUID, UPN, or another identifier form.

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: 'Get all directory roles assigned to a user.' It clearly distinguishes this from the nearest sibling, get_user_groups, by specifying directory roles rather than groups.

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 is implied by the description: retrieve a user's directory role assignments by user ID. There is no explicit guidance about when to use this versus alternatives such as get_user_groups, get_privileged_users, or search_users.

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

get_user_sign_insGet User Sign InsA
Read-only

Get sign-in logs for a specific user within the last N days.

Requires AuditLog.Read.All permission.

NameRequiredDescriptionDefault
daysNoThe number of past days to retrieve logs for (default: 7).
user_idYesThe unique identifier (ID) of the user.

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true, so the safety profile is known. The description adds a genuinely useful behavioral fact not in structured data: it requires the AuditLog.Read.All permission, telling the agent an auth precondition exists. It stops short of mentioning result caps, pagination, or throttling for large day ranges.

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, zero waste, with the core operation front-loaded and the permission prerequisite as a separate, clearly scannable statement.

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?

An output schema exists so return values need no explanation, parameters are fully documented, and the auth requirement is disclosed. The only meaningful gap is lack of sibling disambiguation against get_user_audit_logs.

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 both parameters are already documented. The description's 'last N days' phrasing corroborates the days parameter but adds no format or constraint details (e.g., maximum allowed days) beyond the schema.

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?

States a specific verb and resource ('Get sign-in logs') with a clear scope of 'for a specific user within the last N days.' It is distinguishable from most siblings, though it does not explicitly contrast with the closely related get_user_audit_logs.

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 (fetching one user's sign-in history over a time window) but gives no explicit when-to-use or when-not-to-use guidance. It never names or excludes alternatives such as get_user_audit_logs, which an agent must disambiguate on its own.

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

list_applicationsList ApplicationsB
Read-only

List all applications (app registrations) in the tenant, with paging.

NameRequiredDescriptionDefault
limitNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the description's added burden is low. It contributes one behavioral fact ('with paging'), however it never explains how paging actually works — there is no page/cursor/skip parameter in the schema, so an agent cannot tell whether it must loop, vary limit, or follow a token from the output. That's a meaningful disclosure gap.

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?

A single tight sentence with the resource and scope front-loaded; nothing is wasted. The trailing 'with paging' is the one clause that promises more than it delivers.

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?

An output schema exists, so return-shape explanation is not required, and readOnlyHint covers the safety profile. The only substantive hole is pagination mechanics — with just a 'limit' parameter and no cursor, the description should clarify how to retrieve subsequent pages, which it does not.

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

Parameters2/5

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

Schema description coverage is 0% for the single parameter 'limit' (integer, default 100), and the description adds nothing about it — no maximum, no interaction with paging, no note that it caps results per page. The word 'paging' gestures at the parameter without explaining it, so the description does not compensate for the coverage gap.

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?

Specific verb+resource ('List all applications') with a clarifying gloss '(app registrations)' that disambiguates from service principals, a real sibling concern. It doesn't explicitly contrast with get_application_by_id, but 'list all' versus 'get ... by_id' makes the distinction inferable from the names.

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?

'List all ... in the tenant' implies the bulk-enumeration use case and implicitly routes single-record lookups to get_application_by_id, but no alternative is named and no when-not guidance (e.g., use search/filter tools for large tenants) is given.

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

list_permission_categories_and_tasksList Permission Categories And TasksA
Read-only

List all available categories and tasks for permission suggestions.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the description owes less here. 'All available' usefully signals no filtering or pagination, but nothing is said about result size, ordering, or whether the returned task names are directly consumable by suggest_permissions_for_task, which is the main behavioral question for a lookup tool.

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?

A single sentence with no wasted words, front-loaded with the verb and scope. Nothing could be trimmed without losing meaning.

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?

Annotations cover the read-only profile and an output schema documents the return shape, so the description needn't explain results. However, it leaves the consumption path implicit — an agent cannot tell from the description that the returned category/task values feed suggest_permissions_for_task — which is the one thing that would make this tool actionable.

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 takes zero parameters, which is the baseline-4 case; there is nothing for the description to disambiguate. The description correctly signals that the call is unfiltered ('all available'), consistent with an empty object schema.

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?

States a specific verb ('List') and resource ('categories and tasks for permission suggestions'), so the agent understands this enumerates the lookup values used by permission suggestion. It does not distinguish itself from siblings such as suggest_permissions_for_task, get_all_graph_permissions, or search_permissions, and 'tasks' is left as an undefined term.

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 'for permission suggestions' implies this is a discovery/prerequisite call, but the description never says to call it before suggest_permissions_for_task, nor does it state exclusions against get_all_graph_permissions or search_permissions. Usage is inferable but not stated.

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

list_service_principalsList Service PrincipalsA
Read-only

List all service principals in the tenant, with paging.

NameRequiredDescriptionDefault
limitNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes that this is a safe read operation. The description adds useful context that results are tenant-wide and paged, but it does not explain pagination behavior, limits, or authorization requirements in more detail.

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 short sentence with the core scope front-loaded. It contains no redundant or filler text.

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 read-only list tool with an output schema and readOnlyHint, the description covers the essential scope and paging behavior. The remaining gap is the precise meaning and limits of the limit parameter, which is minor here.

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 0%, and the only parameter is an optional integer named limit with a default of 100. The phrase 'with paging' hints that limit controls page size, but the description never names or explains the parameter explicitly.

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 gives a specific verb and resource: list all service principals in the tenant. The word 'all' implicitly distinguishes it from get_service_principal_by_id, though no sibling is named explicitly.

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 scope 'all service principals in the tenant' implies this is the tool for enumerating principals rather than fetching one by ID. However, it does not explicitly state when to use this versus get_service_principal_by_id or any other alternative.

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

list_user_password_methodsList User Password MethodsC
Read-only

List a user's password authentication methods.

NameRequiredDescriptionDefault
user_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, so safety is covered; the description adds nothing about what is returned (types of methods, ordering, empties) or about permissions required to read another user's auth methods. For a security-sensitive read, that is a notable gap beyond the annotation baseline.

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

Conciseness3/5

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

A single short sentence with no filler is well front-loaded, but its brevity here reflects under-specification rather than efficiency; the one sentence adds nothing the title did not already say.

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

Completeness2/5

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

An output schema exists, so return values needn't be explained, but the definition still leaves the required user_id format undocumented and gives no route to the near-identical sibling. For a one-parameter read tool this is close to the minimum viable bar, but not above it.

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

Parameters2/5

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

Schema description coverage is 0% and the single parameter 'user_id' has no documented format in either the schema or the description. The description does not say whether this accepts an object ID/GUID, a UPN, or an email, which is the key ambiguity for this call.

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

Purpose3/5

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

The description names a verb ('List') and resource ('a user's password authentication methods'), so the basic operation is clear. However, it is essentially a restatement of the tool title and does nothing to distinguish it from the sibling 'get_user_password_method', which appears to fetch a single method.

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 on when to use this tool versus 'get_user_password_method' or 'get_user_mfa_status'. The agent is left to infer the plural-list-vs-single-record distinction from the tool names alone.

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

remove_group_memberRemove Group MemberC
Destructive

Remove a member from a group.

NameRequiredDescriptionDefault
group_idYesID of the group
member_idYesID of the member to remove

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered structurally. The description adds nothing beyond that — no note on irreversibility, effect on the member's other memberships, permission requirements, or error behavior if the member is not in the group. It is consistent with annotations, just not additive.

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

Conciseness3/5

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

One short sentence with zero waste and the action front-loaded, but the brevity comes at the cost of substance rather than from efficient editing of rich content.

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

Completeness2/5

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

This is a destructive mutation with an output schema available, so return values need not be explained. However, the description says nothing about side effects, preconditions, or failure modes, leaving a destructive operation under-described relative to its risk.

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% with only two required string parameters, so the schema fully documents group_id and member_id. The description adds no format, sourcing, or lookup guidance beyond the schema, which is the expected baseline of 3.

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

Purpose3/5

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

The description states a verb and resource (remove a member from a group), which is understandable, but it nearly restates the tool name 'remove_group_member' and offers no differentiation from close siblings such as add_group_member, remove_group_owner, or delete_group.

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 on when to use this tool versus alternatives, nor any preconditions (e.g., member must currently belong to the group). The agent must infer everything from the name and schema.

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

remove_group_ownerRemove Group OwnerC
Destructive

Remove an owner from a group.

NameRequiredDescriptionDefault
group_idYesID of the group
owner_idYesID of the owner to remove

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds no behavioral context beyond that: it does not say whether the owner role is fully revoked, what happens to the last remaining owner, whether permissions are required, or whether the operation is reversible.

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

Conciseness3/5

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

A single front-loaded sentence with zero waste, but for a destructive mutation it is arguably undersized rather than appropriately sized. Efficiency is high but the brevity comes at the cost of information.

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

Completeness2/5

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

Given a destructive mutation with no output-schema explanation needed, the description still omits permission requirements, effects on existing owner state, and failure cases such as removing the last owner. An agent could call it, but cannot anticipate consequences.

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 both group_id and owner_id are documented in the schema itself. The description adds no extra meaning about formats or constraints, 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?

States a specific verb (Remove) and resource (an owner from a group), which clearly separates it from add_group_owner in the sibling list. It does not explicitly name the counterpart tool, but the operation is unambiguous.

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 on when to use this versus add_group_owner or other group mutation tools, and no prerequisites. The agent must infer everything about the appropriate context from the name alone.

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

reset_user_password_directReset User Password DirectC
Destructive

Reset a user's password with a specific password value.

NameRequiredDescriptionDefault
user_idYesThe unique identifier of the user
passwordNoThe new password to set for the user (if None and generate_password is True, a random password will be generated)
password_lengthNoLength of the generated password if generate_password is True (default: 12)
generate_passwordNoWhether to generate a random secure password (default: False)
require_change_on_next_sign_inNoWhether to require the user to change password on next sign-in (default: True)

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is known. The description adds nothing about consequences of a reset, session revocation, whether an existing password is overwritten, or how generate_password interacts with password. Beyond annotations, it offers no behavioral context.

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

Conciseness3/5

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

The single sentence is front-loaded and free of filler. However, it is too sparse for a tool with two distinct operating modes and a password-change requirement, so the brevity reflects under-specification rather than crisp structure.

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

Completeness2/5

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

This is a destructive mutation with five parameters, an output schema, and multiple modes, yet the description omits the generate-password path, the password_length behavior, and the require_change_on_next_sign_in default. For a security-sensitive reset operation, an agent needs more than one sentence to call 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?

Schema description coverage is 100%, so the schema already documents all five parameters, including the generate_password fallback and require_change_on_next_sign_in default. The description only mirrors the idea of supplying a specific password and adds no syntax, exclusivity rules, or interaction details beyond the schema.

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 and resource: reset a user's password with a specific value. This clearly separates it from read-only password-method siblings, though the word 'direct' in the name is not explained and the generate-password mode in the schema is not acknowledged.

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 on when to use this versus listing password methods or any other approach, and no prerequisites such as required permissions or whether the caller must have admin rights. The sentence gives no conditions for choosing this tool over alternatives.

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

search_groups_by_nameSearch Groups By NameA
Read-only

Search for groups whose display name starts with the given text (case-insensitive, with paging).

NameRequiredDescriptionDefault
nameYes
limitNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare this as a read-only operation, and the description adds meaningful behavioral detail about case-insensitive prefix matching and paging. It stops short of describing return ordering or page-token behavior, but output schema coverage reduces the need for return details.

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 definition is a single front-loaded sentence with no wasted wording. It packs the operation, matching rule, and paging behavior into a compact statement.

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 read-only search tool with an output schema and annotations, the description is nearly complete. The only remaining gap is that it does not explain how paging should be used or whether there is a next-page mechanism beyond limit.

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 0%, so the description must carry parameter meaning. It does well for name by specifying case-insensitive prefix matching, but limit is only indirectly covered by 'with paging' and its default of 50 is left solely to 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 (search) and resource (groups), and narrows the operation to display names beginning with a given text. It also specifies case-insensitive matching and paging, which clearly distinguishes it from broader group-listing tools like get_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 Guidelines3/5

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

The prefix-search condition implies when the tool is useful, but the description does not explicitly say when to use it instead of get_all_groups, get_group_by_id, or search_users. It gives enough context to infer basic use but no exclusion or alternative guidance.

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

search_permissionsSearch PermissionsC
Read-only

Search for Microsoft Graph permissions by keyword.

NameRequiredDescriptionDefault
search_termYes
permission_typeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

The readOnlyHint annotation already establishes that this is a safe read operation, and the description is consistent with that. However, beyond restating that it is a search, it adds no behavioral context such as matching behavior, rate limits, result ordering, or auth requirements.

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?

It is a single, front-loaded sentence with no wasted words. The brevity is appropriate; the missing details are a completeness issue rather than a conciseness problem.

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

Completeness2/5

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

Although an output schema exists and need not be explained, the input schema has two fields at 0% description coverage. The description omits the 'permission_type' filter and gives no selection guidance against the many related permission tools, so it is not complete enough for confident invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for both parameters. It only hints at 'search_term' through the phrase 'by keyword' and says nothing about 'permission_type', leaving the optional type filter entirely undocumented.

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 clear verb ('Search') and resource ('Microsoft Graph permissions') with the keyword-based mechanism, so an agent knows exactly what the tool does. It does not explicitly differentiate itself from siblings such as get_all_graph_permissions or suggest_permissions_for_task, but the keyword-search framing implies the distinction reasonably well.

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 gives no when-to-use guidance, no exclusions, and no named alternatives. It does not explain whether to use this instead of get_all_graph_permissions, suggest_permissions_for_task, or list_permission_categories_and_tasks, leaving the agent to infer selection criteria.

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

search_usersSearch UsersB
Read-only

Search for users by name or email.

NameRequiredDescriptionDefault
limitNoMaximum number of results to return (default: 10)
queryYesSearch query (name or email)

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

readOnlyHint=true already tells the agent this is a safe read, and the description adds nothing further. It does not disclose matching semantics (substring vs exact, case sensitivity), how the default limit of 10 behaves, or whether results are truncated — the traits that actually matter for a search tool.

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?

A single tight sentence with the resource and match scope front-loaded. Nothing is wasted, though the brevity comes at the cost of under-specification rather than efficient density.

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?

An output schema exists, so return values need no explanation, and the two parameters are fully documented in-schema. The gap is match semantics and result-limit behavior, which an agent needs to call a search tool correctly and which nothing in the structured fields supplies.

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 both parameters are documented in the schema. The description's 'by name or email' restates the schema's 'Search query (name or email)' rather than adding format or matching detail, so baseline 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?

Names a specific verb and resource ('Search for users') and scopes the match fields to name or email, which implicitly separates it from get_user_by_id. It never names a sibling outright, so an agent must infer the boundary with search_groups_by_name or get_privileged_users.

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 is implied rather than stated: searching by name/email suggests using this when you lack a user ID, but the description never says so or points at alternatives like get_user_by_id. No exclusions or preconditions are given.

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

suggest_permissions_for_taskSuggest Permissions For TaskC
Read-only

Suggest Microsoft Graph permissions for a specific task based on common mappings.

NameRequiredDescriptionDefault
task_nameYes
task_categoryYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The phrase 'based on common mappings' usefully signals that results are heuristic suggestions rather than authoritative OAuth validation, but the description does not elaborate on completeness, confidence, or how mappings are sourced.

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?

A single front-loaded sentence with no filler. It is efficient, though its brevity contributes to the parameter and usage gaps noted elsewhere.

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

Completeness2/5

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

The output schema covers return values and annotations cover safety, but with 0% parameter schema coverage the description should explain what task_name and task_category mean. It also omits that task_category likely derives from list_permission_categories_and_tasks, leaving a key input undefined.

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

Parameters2/5

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

Schema description coverage is 0% and both required parameters lack descriptions. The description mentions 'a specific task,' which loosely maps to task_name, but task_category is never explained, nor are acceptable values or the relationship between the two parameters.

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?

States a specific verb ('Suggest') and resource ('Microsoft Graph permissions') scoped to 'a specific task based on common mappings.' This is clearly distinct from sibling tools like search_permissions or get_all_graph_permissions, though the description does not explicitly name those alternatives.

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 guidance on when to use this versus search_permissions, get_all_graph_permissions, or list_permission_categories_and_tasks. It also gives no exclusions or prerequisites, leaving the agent to infer the workflow context entirely.

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

update_applicationUpdate ApplicationC
Destructive

Update an existing application (app registration).

NameRequiredDescriptionDefault
app_idYes
app_dataYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already flag readOnlyHint=false and destructiveHint=true, so the safety profile is carried structurally, but the description adds nothing about what is destructively changed — e.g., whether app_data replaces or merges into existing registration fields, or whether credentials/secrets are affected. For a destructive mutation this leaves a real gap.

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

Conciseness3/5

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

A single front-loaded sentence with zero waste, but it is under-specified rather than economical — it omits information an agent needs rather than trimming unused detail.

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

Completeness2/5

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

Output schema exists, so return values need not be explained, but for a destructive update with two undocumented parameters (including a free-form object) and no behavioral notes, the definition is not complete enough to call safely.

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

Parameters1/5

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

Schema description coverage is 0%, and the description never mentions app_id or the open-ended app_data object. The nested app_data (additionalProperties: true) is entirely undefined, leaving the merge/replace semantics and acceptable keys completely unknown — the description does not compensate for the coverage gap at all.

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?

States a specific verb (update) and resource (existing application/app registration), which is clear enough to distinguish it from list/get/create/delete_application siblings by intent. However, it offers no explicit differentiation from update_service_principal or update_group, and 'app registration' parenthetical is the only disambiguation hint.

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 guidance on when to use this versus update_service_principal or create_application. Only 'existing' implies a pre-existing app must be identified, with no stated prerequisites, permissions, or exclusions.

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

update_groupUpdate GroupC
Destructive

Update an existing group in Microsoft Graph.

NameRequiredDescriptionDefault
group_idYesID of the group to update
group_dataYesDictionary containing group properties to update: - displayName: Display name of the group (optional) - mailNickname: Mail alias for the group (optional) - description: Description of the group (optional) - visibility: "Private" or "Public" for Microsoft 365 groups (optional)

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is externally visible. However, the description adds no behavioral context beyond that: it does not explain partial versus full updates, whether omitted fields are preserved, permission requirements, or irreversibility.

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 a single front-loaded sentence with no wasted words. It is concise, though its brevity contributes to under-specification elsewhere rather than over-verbosity here.

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

Completeness2/5

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

For a destructive mutation tool with a nested update object, the description is too thin. Although an output schema exists, the description should still clarify update semantics and potential side effects that the schema and annotations do not cover.

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 nested group_data schema already documents displayName, mailNickname, description, and visibility. The description adds no parameter meaning beyond the schema, so the 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 states a specific verb and resource: updating an existing group in Microsoft Graph. This clearly distinguishes it from create_group and delete_group by action, though it does not explicitly differentiate it from other update_* tools beyond the resource 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 on when to use this tool versus alternatives, no prerequisites, and no exclusions. An agent must infer usage entirely from the tool name and schema.

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

update_service_principalUpdate Service PrincipalC
Destructive

Update an existing service principal.

NameRequiredDescriptionDefault
sp_idYes
sp_dataYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already flag destructiveHint=true, so the description is not required to establish that this mutates state, but it adds nothing beyond the title. It does not say whether sp_data replaces the whole object or patches selected fields, which is a critical distinction for a destructive update, and it does not mention reversibility or permission requirements.

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

Conciseness3/5

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

One sentence, front-loaded with the verb and resource, so there is no filler. The brevity here is under-specification rather than efficiency, since removing it all leaves the agent without the payload guidance it needs.

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

Completeness2/5

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

For a destructive mutation taking an opaque nested object, the description should identify at least the common updatable fields. An output schema exists, so return values need not be explained, but the input side remains a black box, leaving the definition incomplete for correct invocation.

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

Parameters1/5

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

Schema description coverage is 0%, and the sp_data parameter is an untyped object with additionalProperties=true, meaning the schema gives the agent no key names at all. The description does not list or hint at any updatable fields, so the caller has no way to construct a valid payload without guessing.

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?

States a specific verb (Update) and resource (service principal), which is enough to separate it from create_service_principal, delete_service_principal, and get_service_principal_by_id in the sibling list. It stops short of naming which parts of a service principal are updatable.

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 indication of when to use this versus create_service_principal or delete_service_principal, and no prerequisites such as required permissions or the need for an existing sp_id. The agent is left to infer usage entirely from the name.

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.

  1. 1 tool updatev0.3.1
    • Changedsearch_users1 field changed
      • changedOutput schema / properties / result / items / additionalProperties
        Previous value: -{
        -  "type": "string"
        -}New value: +true
  2. 48 tool updatesv0.2.0
    • First observedadd_group_member
    • First observedadd_group_owner
    • First observedcreate_application
    • First observedcreate_group
    • First observedcreate_service_principal
    • First observeddelete_application
    • First observeddelete_group
    • First observeddelete_service_principal
    • First observedget_all_graph_permissions
    • First observedget_all_groups
    • First observedget_all_managed_devices
    • First observedget_application_by_id
    • First observedget_conditional_access_policies
    • First observedget_conditional_access_policy_by_id
    • First observedget_detected_apps_for_device
    • First observedget_device_categories
    • First observedget_device_compliance_policies
    • First observedget_device_compliance_policy_states
    • First observedget_device_configuration_states
    • First observedget_device_configurations
    • First observedget_group_by_id
    • First observedget_group_members
    • First observedget_group_mfa_status
    • First observedget_managed_device_by_id
    • First observedget_managed_devices_by_user
    • First observedget_privileged_users
    • First observedget_service_principal_by_id
    • First observedget_user_audit_logs
    • First observedget_user_by_id
    • First observedget_user_groups
    • First observedget_user_mfa_status
    • First observedget_user_password_method
    • First observedget_user_roles
    • First observedget_user_sign_ins
    • First observedlist_applications
    • First observedlist_permission_categories_and_tasks
    • First observedlist_service_principals
    • First observedlist_user_password_methods
    • First observedremove_group_member
    • First observedremove_group_owner
    • First observedreset_user_password_direct
    • First observedsearch_groups_by_name
    • First observedsearch_permissions
    • First observedsearch_users
    • First observedsuggest_permissions_for_task
    • First observedupdate_application
    • First observedupdate_group
    • First observedupdate_service_principal

TDQS

C2.9/5.0

Scored across 48 tools

Disambiguation4/5

Most tools target clearly distinct resource+action pairs, and related tools like get_user_mfa_status versus get_group_mfa_status or get_device_compliance_policies versus get_device_compliance_policy_states are distinguishable from their descriptions. Some clusters, especially the permissions and device-state tools, are close enough that an agent could occasionally hesitate.

Naming Consistency4/5

The set largely follows a predictable verb_noun convention: search_users, get_group_by_id, create_application, delete_service_principal, and similar. Minor inconsistencies appear in collection-listing verbs such as get_all_groups versus list_applications, plus a few suffixes like _direct, but the pattern remains easy to infer.

Tool Count2/5

With 48 tools, the surface is far above the typical 3–15 range and is heavy for an agent to navigate. The EntraID domain is broad, but the tool count still feels excessive and likely includes specialized operations that could be scoped or grouped more tightly.

Completeness3/5

Coverage is strong for read operations across users, groups, devices, MFA, conditional access, audit logs, and permissions, and there is full CRUD for groups, applications, and service principals. However, notable gaps remain, including user create/update/delete operations, group owner listing, and write operations for conditional access and managed devices.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    Not graded
    maintenance
    An MCP server that enables interaction with Microsoft 365 services like Outlook, OneDrive, Teams, and SharePoint via the Microsoft Graph API. It supports comprehensive operations including email management, file access, and organizational collaboration for personal and work accounts.
    78
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    A FastMCP server that provides AI assistants with access to Microsoft Entra (Azure AD) directory services. It enables LLMs to search for users, groups, and check memberships using the Microsoft Graph API.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A Model Context Protocol server for Microsoft 365 administration using Graph API application permissions, enabling security monitoring, identity audits, incident response, and service health management.
    88 npm
    18
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Remote MCP server for Microsoft Graph with delegated OAuth support, enabling interaction with Microsoft 365 services like mail, calendar, OneDrive, SharePoint, Teams, and more via natural language.
    MIT