azure-mcp-pilot
This server is a read-only MCP identity and access intelligence tool that answers natural-language questions about Microsoft Entra ID, Azure RBAC, PIM, authentication, licensing, and identity risk — with audit-grade provenance and no write operations.
Provides environment overviews: subscriptions, resource groups, management groups, and resource listings.
Lists users, Entra users, disabled users, direct permissions, and Azure role assignments.
Detects privileged roles, orphan assignments, deny assignments, and effective Azure access.
Analyzes PIM role states, privilege timelines, and privilege changes over time.
Runs identity assessments: blast radius, toxic combinations, separation-of-duties, and top risk rankings.
Investigates application provenance, ownerless objects, expiring secrets, and critical Graph permissions.
Audits authentication: MFA status, weak methods, passkeys, authentication strength, and privileged MFA gaps.
Correlates tenant licenses with actual security feature usage (e.g., Entra ID P2 vs. PIM adoption).
Supports natural-language queries for IAM, PIM, agent identities, and privilege timeline questions.
Offers capability discovery, validated Graph queries, relationship lookups, and read-only Azure Resource Graph queries.
Includes an agent-identity inventory with owners, blueprints, permissions, and risk relationships.
Returns official Microsoft Learn guidance references for Azure/identity topics.
Is deliberately read-only: mutating operations are blocked before routing, and missing permissions are reported as not evaluated, never as false zeros.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@azure-mcp-pilotWho has Global Administrator in Entra ID?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
IdenGraph
Identity & Access intelligence powered by Microsoft Graph and MCP.
A read-only MCP server that turns natural-language questions into audited answers about Microsoft Entra ID and Azure RBAC — answered by your own Copilot, inside VS Code.
It never writes. Every create, update, delete, grant, or privilege-activation operation is blocked before routing.
What you can ask
Who has Owner on Azure? And who holds Global Administrator in Entra?
Which applications were created in my tenant, and which are Microsoft first-party?
Which users have no MFA, or rely on weak methods?
Which application secrets expire in the next 30 days?
Which objects have no owner assigned?
What is the blast radius of a given identity?
Are we paying for security features we don't use?
66 tools across users, groups, applications, service principals, managed identities, PIM, RBAC, authentication, conditional access, ownership, privilege timeline, licensing posture, and toxic combinations (SoD).
Related MCP server: Microsoft MCP Server for Enterprise
Design principles
These three rules define the behavior, and they matter more than the feature list.
Source separation
Microsoft Graph answers for identity and directory. Azure APIs answer for RBAC and resources. Graph is never treated as a source of truth for Azure RBAC.
No false zero
If a permission is missing, the answer is PERMISSION_DENIED with NOT_EVALUATED coverage — never 0.
"I could not evaluate this" and "this does not exist" are different answers. Conflating them in an audit is worse than not answering at all, because a false zero looks like a clean result.
This applies to licensing too: zero conditional access policies means something entirely different when the feature isn't licensed versus when it's licensed and unused.
Read-only by construction
Only GET, LIST, QUERY, ASSESS, and CORRELATE. The graph_query tool can receive read-only KQL generated from a user request, but it does not accept arbitrary endpoints: the capability registry selects the data source, and the executor blocks mutation operators and external-access constructs before sending the query.
Architecture
flowchart TB
User(["You"]) -->|natural language| Copilot["Copilot Chat<br/><i>your own model</i>"]
Copilot <-->|MCP / stdio| Server
subgraph Server["IdenGraph MCP Server · 66 read-only tools"]
direction TB
Router["Capability router<br/><i>intent → capability</i>"]
Guard{{"Write guard<br/><i>blocks mutations</i>"}}
Registry[("Capability registry<br/>43 capabilities · 29 domains")]
Executor["Read-only executor<br/><i>allowlist + validation</i>"]
Router --> Guard --> Registry --> Executor
end
Executor -->|identity & directory| Graph["Microsoft Graph"]
Executor -->|RBAC & resources| Azure["Azure Management<br/>+ Resource Graph"]
Graph --> Normalizer["Normalizer & correlation<br/><i>preserves evidence and coverage</i>"]
Azure --> Normalizer
Normalizer -->|answer + provenance| Copilot
style Guard fill:#c62828,color:#fff
style Server fill:#0B1F3A,color:#fff
style Normalizer fill:#1565c0,color:#fffTwo details worth highlighting:
The write guard sits before routing, not after. A mutation request is rejected before it can be interpreted as a query.
The normalizer preserves coverage, not just data. Every answer carries where it came from and whether the source could actually be evaluated — which is what makes the no-false-zero rule enforceable rather than aspirational.
How the pieces are distributed
Layer | Artifact | Role |
Discovery | One-click install, prerequisite checks, settings UI | |
Engine | The MCP server itself | |
Model | Your Copilot subscription | No LLM cost to this project or to you |
The extension does not replace the Python package — it registers it. The engine runs the same way whether launched by the extension or configured by hand.
Install
Recommended: VS Code extension
Install IdenGraph from the Marketplace, then sign in to Azure:
az loginOpen Copilot Chat in agent mode and ask. The extension verifies prerequisites and guides you if anything is missing.
Alternative: manual MCP configuration
Create .vscode/mcp.json:
{
"servers": {
"idengraph": {
"type": "stdio",
"command": "uvx",
"args": ["idengraph"],
"env": { "MOCK_MODE": "false" }
}
}
}Prerequisites
Authentication uses DefaultAzureCredential, which reuses your Azure CLI session. There is no API key to manage, and no credential is stored by this project.
Configuration
Setting | Env var | Default | Purpose |
|
|
| Query fictional data instead of your tenant |
|
|
| Mask resource names, subscription IDs, and IPs before they reach the model |
|
| all accessible | Restrict queries to specific subscriptions |
The Python package defaults to MOCK_MODE=true so that nothing touches a real tenant without explicit intent. The extension sets it to false, since installing it is already that intent.
Permissions
On Azure: Reader on the subscriptions you want to audit.
On Microsoft Graph, delegated permissions vary by question:
Area | Permission |
Users, groups, applications, service principals |
|
Directory roles and directory PIM |
|
Authentication methods and MFA |
|
Conditional access |
|
License posture |
|
Missing a permission only marks the matching area as not evaluated. Everything else keeps working — and the affected area reports why it could not be evaluated.
Privacy
Queried data belongs to your tenant and travels between your machine, Microsoft APIs, and the Copilot model you already use. This project sends nothing to third-party servers and collects no telemetry.
By default, SANITIZE_FOR_LLM=true masks resource names, resource groups, subscription IDs, and IP addresses before content reaches the model.
Development
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # Linux/macOS
pip install -r requirements.txt
cp .env.example .env
python test_smoke.pyThe smoke test runs in mock mode and never touches a tenant.
Repository layout
mcp_server.py MCP server and tool registration
services/azure_auth.py credentials, tokens, caching
services/graph_capabilities.py capability registry
services/capability_router.py natural language → capability
services/capability_executor.py validated read-only execution
services/azure_role_definitions.py authoritative Azure role name resolution
services/azure_pim.py resource PIM with confirmed coverage
services/entra_licenses.py tenant licensing and feature availability
services/data/ mock data used when MOCK_MODE=true
extension/ VS Code extension (TypeScript)The repository also contains a Streamlit portal (app.py + agent.py) used for development and demos. It is not part of the published package, whose surface is the MCP server only:
streamlit run app.pyKnown limitations
Agent Identity detection is heuristic where the directory exposes no dedicated type. Results are labeled as such, never presented as fact.
Public IPindicates a public address, which does not prove workload exposure.Without
RoleManagement.Read.All, directory PIM reports as not evaluated rather than empty.License posture currently cross-references PIM and Conditional Access. Capabilities still marked
not_integratedin the registry are not probed, and deliberately return no verdict.
License
MIT — see LICENSE.
Available Tools
66 toolsagent_natural_language_queryCRead-onlyIdempotent
Interpreta perguntas sobre Agent Identities em linguagem natural.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| question | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds no behavioral detail beyond restating that the tool interprets questions, so it provides no additional transparency about result format, limits, or querying behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It is concise, though it is also somewhat under-specified given the number of sibling tools and lack of behavioral context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a natural-language tool with no output schema and no routing guidance, the description is too minimal to fully equip an agent. The large sibling list contains many overlapping tools, but the description offers no context to help an agent decide when this tool is the right choice.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only loosely reinforces the 'question' parameter through the word 'perguntas.' The 'limit' parameter is not described at all, so the description does not compensate for the missing parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: it interprets natural-language questions about Agent Identities. This distinguishes it from other natural-language query siblings by domain, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a user has a natural-language question about Agent Identities, but it gives no explicit guidance on when to use this tool versus list_agent_identities, get_agent_relationships, run_agent_assessment, or other NL query tools. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assess_privileged_mfaARead-onlyIdempotent
Assessment de MFA para usuários privilegiados (sem MFA ou métodos fracos).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds the assessment criteria (no MFA or weak methods), but it does not reveal additional behavioral details such as whether it returns a list, a summary, or a generated report. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words. It conveys the target audience, the subject, and the inclusion criteria compactly. It is an efficient one-line definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only assessment tool, the description covers the essential scope: privileged users, MFA status, and weak-method consideration. The lack of output-schema means the return format is unspecified, but the low complexity and strong annotations keep this gap minor. It is almost complete for its simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the description has no parameter burden. The tool requires no arguments and the description's scope statement is sufficient. A 4 is appropriate given the zero-parameter baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('assess') and resource ('privileged users' MFA') and clarifies the focus to users without MFA or with weak methods. It is clear and specific, but it does not explicitly distinguish itself from siblings like list_users_without_mfa or list_users_with_weak_authentication, so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for evaluating MFA readiness among privileged users, but it gives no explicit when-to-use or when-not-to-use guidance and does not mention alternatives. The context is inferable from the target population, but the tool's relationship to sibling MFA/list tools is not addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compute_identity_blast_radiusBRead-onlyIdempotent
Estima o blast radius (alcance) de uma identidade (subscriptions, management groups, capacidade de conceder acesso).
| Name | Required | Description | Default |
|---|---|---|---|
| identity_identifier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, openWorldHint, and idempotentHint, covering the main behavioral expectations. The description adds no further behavioral detail (e.g., required permissions, absence of side effects) beyond what annotations provide, which is acceptable but not enhanced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, succinct sentence that conveys the essential purpose without unnecessary words. It is well-structured and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one input and no output schema, the description adequately explains what the tool does and what it considers (subscriptions, management groups, grant access). It lacks information about the output shape or units, but that is not critical given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, identity_identifier, is a generic string with no format specification (e.g., UPN, object ID, display name) or clarification of what types of identities are supported (user, group, service principal). The schema provides no description, and the tool description does not elaborate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to estimate the blast radius of an identity, explicitly mentioning subscriptions, management groups, and the ability to grant access. This distinguishes it from sibling tools like list_top_blast_radius or get_role_risk_score, which focus on different outputs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as list_top_blast_radius, detect_toxic_combinations, or get_role_risk_score. The description offers no conditional advice or context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_toxic_combinationsARead-onlyIdempotent
Detecta toxic combinations / violações de Separation of Duties com evidência.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld behavior, so the description only needs to add non-obvious context. 'com evidência' usefully indicates the output includes supporting evidence, but the description doesn't explain how evidence is presented, whether results are capped by the limit, or what constitutes a toxic combination. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core purpose and the key output quality ('com evidência'). No filler or redundant wording; every word contributes to the tool's meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool, the basic use case is clear and annotations cover safety. However, without an output schema, the description should clarify the expected output and the role of the limit. The current text is minimally viable but leaves important return-value and behavioral details implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never mentions the optional 'limit' parameter. The schema provides only the type and default value, not the meaning or behavior of the limit. For a single optional integer this is not critical, but the description does not compensate for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Detecta') and a concrete resource ('toxic combinations / violações de Separation of Duties'), and adds that results include evidence. This makes the tool's purpose clear and distinguishable from sibling tools that focus on listings, timelines, or assessments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: it should be used when toxic combinations or Separation of Duties violations need to be found. However, the description gives no explicit guidance about when not to use it, prerequisites, or how it compares to related tools such as get_role_risk_score or run_iam_assessment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_privilege_timeline_reportCRead-onlyIdempotent
Gera relatório de timeline com top grants/revokes por identidade, role e escopo.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and idempotentHint=true, so the core safety profile is clear. The description adds no behavioral context beyond the report content (e.g., no output format, pagination, or limits). With annotations covering safety, the description's lack of extra behavioral detail is acceptable but 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no redundant words. It is front-loaded with the main action and resource. However, it is slightly too terse, sacrificing semantic detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, 0% paramerner description coverage, and a large set of sibling tools, the description is incomplete. It does not clarify expected return values, paramether meanings, or how this report differs from similar timeline tools, leaving gaps an agent must discover at invocation time.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explicitly explain the 'top' or 'days' parameters. The phrase 'top grants/revokes' hints at the 'top' parameter and 'timeline' hints at 'days', but these connections are implicit and insufficient for an agent to know how the parameters control the report.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Gera'), a resource ('relatório de timeline'), and the report's focus ('top grants/revokes por identidade, role e escopo'). This clearly identifies what the tool does, though it does not explicitly differentiate it from sibling timeline tools such as summarize_privilege_timeline or list_privilege_timeline_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus the many timeline-related siblings. It does not mention preferred scenarios, exclusions, or alternatives, leaving the agent to infer usage 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_agent_relationshipsBRead-onlyIdempotent
Resolve Agent → Owners → Identity → Blueprint → Graph Permissions → Azure RBAC.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_identifier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint, idempotentHint, openWorldHint), so the bar is lower. The description adds value by disclosing the resolution chain that the tool traverses, which is behavioral context beyond the annotations. However, it does not describe output shape, failure behavior, or what happens at each hop, so it only partially enriches the annotation-covered picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact chain with zero wasted words; the core meaning is front-loaded in the first token. The arrow-chain notation is efficient but borders on cryptic, and adding one clarifying sentence could improve structure without bloating it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return values, and it only implies them via the chain. Key terms like 'Blueprint' are undefined, and the multi-hop semantics (what each arrow resolves into, what the final output looks like) are underspecified. Adequate for a one-parameter read tool with strong annotations, but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate. It does anchor agent_identifier as the starting point of the resolution chain ('Agent →'), adding mild meaning beyond the schema title 'Agent Identifier'. But it does not clarify the identifier's format (name, ID, GUID) or how the agent is matched, leaving a partial gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Resolve') with a distinctive resource: a chain from Agent → Owners → Identity → Blueprint → Graph Permissions → Azure RBAC. This conveys a trace/expansion operation that is distinct from the reverse-direction sibling get_agents_by_owner. However, it does not explicitly name or disambiguate from siblings, and the arrow-chain format is somewhat cryptic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: the chain itself suggests this tool is for tracing an agent's full permission path to Azure RBAC. But there is no explicit when-to-use guidance, no mention of alternatives (e.g., get_agents_by_owner for the reverse direction, list_agent_identities for just identities), and no exclusions. An agent must infer the intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_agents_by_ownerBRead-onlyIdempotent
Lista Agents sob responsabilidade de um owner (UPN, nome ou objectId).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| owner_identifier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose read-only, idempotent, and open-world behavior, so the description does not need to restate those. It adds scoping detail for owner_identifier, but does not describe pagination, matching behavior, or response contents; there is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire definition is one front-loaded sentence: the verb and resource appear immediately, and the following clause adds the key scoping detail. No filler or repeated schema information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, two-parameter listing tool the definition is close to adequate, but it leaves small gaps: the behavior of limit, the matching semantics of owner_identifier, and what fields are returned are not explained. The low complexity and annotations keep this from being worse.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter semantics. It does clarify that owner_identifier may be a UPN, name, or objectId, but it gives no meaning for the optional limit parameter. Compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lista') and names the target resource ('Agents') while narrowing scope to an owner and listing accepted identifier formats. It is clear, though it does not explicitly position itself against sibling tools such as get_owned_objects or list_objects_without_owner.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to choose this tool over alternatives, when not to use it, or what prerequisites apply. An agent can only infer from the tool name and one-line purpose, so this dimension is under-specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_authentication_methods_summaryBRead-onlyIdempotent
Resumo de registro de MFA e capacidade passwordless do tenant.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate read-only, open-world, and idempotent behavior, so the description does not need to repeat those. It adds some context by indicating this is a tenant-level summary of MFA registration and passwordless capability, but it does not disclose more specific behavioral traits such as aggregation approach, data freshness, or what exactly is counted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no unnecessary words. It front-loads the core purpose and avoids redundancy with the schema or annotations, making it an efficiently structured definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no parameters and benefits from strong annotations, but there is no output schema and the description does not detail what the summary contains. Terms like 'capacidade passwordless' are somewhat vague, so an agent may not know exactly what fields or metrics the response will include without further inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the input schema already fully covers parameter semantics. With no parameters, the description does not need to compensate for parameter documentation, making the baseline 4 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Resumo') and resource ('registro de MFA e capacidade passwordless do tenant'), indicating a tenant-level summary. It differentiates from sibling tools like get_user_authentication_methods by focusing on tenant-wide MFA registration and passwordless capability, though it does not explicitly name any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention preferred scenarios, exclusions, or which sibling tools cover other aspects of MFA or authentication data. The agent must infer usage from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_authentication_strength_summaryARead-onlyIdempotent
Resumo enterprise de força de autenticação (forte/misto/fraco) e adoção de passkey/FIDO2.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering side effects and safety. The description adds what the summary contains (strength categories and passkey/FIDO2 adoption), but does not disclose output format, aggregation level beyond 'enterprise', or any 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence in Portuguese with no filler. It front-loads the core purpose and includes the key categorical outputs, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter summary tool, the description adequately conveys what the tool returns and the enterprise scope. It lacks explicit detail about the response format, but for a summary tool with no input schema and no output schema, the description is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so there is no parameter documentation burden. The description does not need to explain parameters and correctly focuses on the output semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns an enterprise-level summary of authentication strength (strong/mixed/weak) and passkey/FIDO2 adoption. This distinguishes it from sibling tools that list individual users or methods, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool instead of related tools like get_authentication_methods_summary, list_users_without_mfa, or list_users_with_passkey. The context implies a high-level summary use case, but the description does not state it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_environment_summaryARead-onlyIdempotent
Get a read-only high-level snapshot of the accessible Azure environment.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds the 'high-level snapshot' and 'accessible' scoping, but it does not disclose output details, pagination, or any other behavior beyond what the annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no filler. It front-loads the key verb and resource and communicates the read-only nature immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only, idempotent tool, the description is reasonably complete: it states what the tool produces (a high-level snapshot) and its scope (accessible Azure environment). The lack of an output schema is mitigated by the word 'snapshot' and the tool name, though the exact contents of the summary remain unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to document. The description appropriately avoids inventing parameter-related details; with no parameters, a baseline of 4 is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the operation as 'Get a read-only high-level snapshot' with a clear resource: 'the accessible Azure environment.' It is specific enough to distinguish from granular list tools, though it does not explicitly name a sibling or contrast itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'high-level snapshot' implies this tool is for a broad environment overview rather than deep investigation, but there is no explicit guidance on when to choose it over alternatives such as get_identity_access_summary or list_resources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_identity_access_summaryARead-onlyIdempotent
Retorna resumo de identidade e RBAC:
total de usuários
usuários habilitados/desabilitados
usuários com permissões diretas
usuários desabilitados com roles ativas
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so safety is established. The description adds meaningful behavioral context by enumerating the exact categories returned (user totals, enabled/disabled, direct permissions, disabled users with active roles), which goes 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, then uses a short bullet list for the returned categories. Every line adds information and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (no parameters, no output schema), and the description explains what the caller will receive. It is complete enough for an agent to understand the result shape, though it does not explicitly state tenant-wide scope or mention any other RBAC metrics that might be omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description cannot add parameter detail. The input schema is trivially complete at 100% coverage, and no parameter semantics are needed. The baseline for zero-parameter tools is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retorna') and names the resource ('resumo de identidade e RBAC'), followed by concrete bullet items. It is clearly a summary tool, though it does not explicitly name sibling tools or explain how it differs from list-oriented tools like list_users or get_pim_state_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given about when to use this tool versus alternatives such as get_pim_state_summary, get_environment_summary, or list_users_with_direct_permissions. The context implies it is a high-level summary, but the description does not provide selection criteria, exclusions, or references to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_identity_privilege_timelineARead-onlyIdempotent
Retorna timeline de privilégios para uma identidade específica (UPN, nome ou objectId).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| identity_identifier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate that this is read-only, idempotent, and open-world, so the safety profile is covered. The description adds that it returns a timeline and which identifier formats are accepted, but it does not disclose how days/limit affect results, what the timeline contains, or whether direct/inherited privileges are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. The essential verb, object, scope, and identifier formats are all present, and every part of the sentence contributes to understanding the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimally sufficient to invoke the tool with identity_identifier, and the annotations reduce the need for safety disclaimers. However, there is no output schema, and the description does not clarify the shape of the returned timeline or how it differs from the closely related privilege-timeline siblings, leaving meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the tool description compensates for identity_identifier by specifying UPN, name, or objectId as valid formats. The days and limit parameters are left only with their titles and defaults, so their semantics are inferred rather than documented. This is partial compensation for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retorna') and a clear object ('timeline de privilégios') with an explicit scope ('para uma identidade específica'). The parenthetical listing UPN, nome, or objectId makes the target unambiguous and helps distinguish this from sibling timeline tools that operate broadly or summarize/export data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'para uma identidade específica' implies this is the appropriate choice when the agent has a single identity in mind, and that it is not an aggregate, summarize, or export tool. However, it never explicitly names an alternative or states when to prefer another sibling such as list_privilege_timeline_events or summarize_privilege_timeline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_license_postureARead-onlyIdempotent
Cruza as licenças assinadas do tenant com o uso real dos recursos de segurança que elas habilitam.
Use para perguntas como:
Estamos pagando por recursos que não usamos?
Temos Entra ID P2? O PIM está sendo usado?
Quantas licenças estão ociosas?
Distingue explicitamente 'não licenciado', 'licenciado e não configurado' e 'licenciado mas não avaliado', porque as três levam a ações diferentes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and open-world behavior. The description adds meaningful behavioral context by explaining that the tool cross-references license data with actual usage and explicitly distinguishes three license states that lead to different actions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core operation, followed by concrete use-case bullets and a meaningful distinction about output categories. Every sentence adds value and the structure makes the tool easy to understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless tool, the description fully explains what the tool does, why an agent would call it, and what kind of distinctions the output provides. With no output schema, this level of context is sufficient for correct invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100%, so there is no parameter burden for the description to carry. Baseline 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Cruza') and resource ('licenças assinadas do tenant' com 'uso real dos recursos de segurança'), clearly distinguishing this from sibling tools like get_tenant_licenses or get_pim_state_summary. Example questions further clarify the intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit example questions that indicate when to use the tool, such as checking for unused licenses or PIM usage. It does not explicitly mention when not to use it or name alternatives, but the usage context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_management_group_inventoryBRead-onlyIdempotent
Retorna inventário de Management Groups visíveis para auditoria de governança.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover readOnly, openWorld, and idempotent behavior, so the safety profile is clear. The description adds some useful scoping by mentioning 'visible' management groups for governance audit, but it does not disclose pagination behavior, how limit affects the result set, or what data an inventory item contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the action, resource, and purpose without filler or redundancy. It is easy to scan and contains no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only one optional parameter and annotations covering safety, the description is minimally adequate. However, with no output schema and no explanation of the limit parameter or returned structure, the agent is left with meaningful gaps about what the inventory actually contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only provides the parameter name 'limit', its type, and a default of 50, with 0% description coverage. The tool description does not explain what limit controls or whether pagination is involved, so the agent must infer meaning from the parameter name alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retorna' / returns), a clear resource ('Management Groups'), and a scope qualifier ('visíveis para auditoria de governança'). This makes it easy for an agent to identify the tool as returning governance-relevant, visible management groups and distinguishes it from sibling tools focused on resource groups, subscriptions, or identities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as list_resource_groups, list_resources, or get_subscriptions. There are no exclusions, prerequisites, or context cues to help the agent select this tool over its many siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_owned_objectsCRead-onlyIdempotent
Ownership 360: objetos (Groups, Applications, Service Principals, Agents, Blueprints) sob responsabilidade de um usuário.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| user_identifier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, covering the safety and consistency profile. The description adds useful context about the object types and the user-centric scope, but it does not disclose behavior such as pagination, ordering, empty results, or how ownership is determined. It adds moderate value beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that lists the relevant object types and the scope in a compact form. The 'Ownership 360' branding adds little functional value but does not create significant noise. It is front-loaded with the key concept and avoids redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should clarify what the tool returns, but it only lists object categories without describing return shape, pagination, or error behavior. There is also no guidance on the required user_identifier format, which is critical for correct invocation. For a tool with simple inputs but many siblings, this description leaves important gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning. It only mentions 'um usuário' (a user), which maps to user_identifier, but does not explain whether the identifier is an email, UPN, object ID, or display name. The limit parameter is entirely unexplained beyond its name, leaving an agent to guess semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns objects (Groups, Applications, Service Principals, Agents, Blueprints) under a user's responsibility, which matches the tool name. It identifies the resource scope but lacks an explicit verb, relying on the name 'get'. It partially distinguishes from siblings like get_agents_by_owner and list_objects_without_owner by covering multiple object types, though it doesn't explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternative tools such as get_agents_by_owner, identity_360, or list_objects_without_owner. There is no mention of use cases, exclusions, or conditions. An agent would have to infer appropriateness from the name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pim_state_summaryARead-onlyIdempotent
Retorna comparativo de estados PIM (Active vs Eligible vs Permanent).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent behavior, so the safety profile is covered. The description adds only the comparison concept, not additional behavioral details like how the summary is computed or whether it reflects current tenant state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every word contributes to identifying the tool's purpose and output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool, the description gives enough context to understand the returned comparison. It could be slightly more explicit about whether it returns counts, lists, or a ratio, but the absence of inputs and presence of annotations reduce the need for more detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the description is not required to explain any input semantics. It still adds value by stating the comparison categories that define the output scope.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Retorna') and resource ('comparativo de estados PIM'), and spells out the exact categories compared (Active vs Eligible vs Permanent). This clearly separates it from sibling tools like list_pim_role_states, which is about listing states rather than producing a comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: an agent can infer this is the tool to call when it needs a PIM state comparison summary. However, the description does not explicitly state when to prefer it over alternatives such as list_pim_role_states or pim_natural_language_query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resource_groups_countARead-onlyIdempotent
Retorna a quantidade de Resource Groups visíveis no escopo autenticado.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds useful context by clarifying that the count is limited to resource groups visible in the authenticated scope, which is meaningful behavioral information beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word adds meaning: the action, the object, and the scope are all included compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter count tool with annotations covering read-only and idempotent behavior, the description is nearly complete. It clearly states what is counted and the applicable scope; only a more explicit indication of the response format (e.g., integer) is not present, though 'quantidade' already implies it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100%, so there is no parameter information for the description to supplement. The baseline for no parameters is 4, and the description adds no unnecessary param details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Retorna a quantidade') and the resource ('Resource Groups'), plus the scope ('visíveis no escopo autenticado'). It is easily distinguished from sibling tools like list_resource_groups because it explicitly indicates a count rather than a list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to choose this count tool over alternatives such as list_resource_groups or get_subscriptions_count. The intended use case is implied by the name and phrasing, but there is no explicit when-to-use or when-not-to-use instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_role_risk_scoreCRead-onlyIdempotent
Calcula score de risco (0-100) para uma role privilegiada de Entra ID ou Azure RBAC.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | ||
| scope | No | / | |
| state | No | ||
| provider | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds the 0-100 score range and specifies that the target is a privileged role in Entra ID or Azure RBAC, but it does not disclose behavior like input format expectations or output structure beyond the score range.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It communicates the core purpose and score range efficiently, though it sacrifices parameter guidance for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, zero schema descriptions, no output schema, and a large sibling set, the description is too minimal. An agent cannot reliably determine how to populate 'scope' and 'state', what 'provider' values are valid, or what the full response contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only hints that 'role' is a privileged role and that 'provider' relates to Entra ID or Azure RBAC; it provides no meaningful semantics for 'scope' or 'state', nor accepted values or formats for the required parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Calcula') and a clear resource ('score de risco para role privilegiada de Entra ID ou Azure RBAC'), and it includes the output range 0-100. It does not explicitly contrast with sibling tools, but the purpose is distinct enough among the listed siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. With many assessment and scoring siblings, the agent is left to infer the appropriate selection context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscription_direct_access_summaryBRead-onlyIdempotent
Resumo de role assignments diretos em escopo de subscription (inclui privilegiados).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld hints, so the description only needs to add behavioral context. It adds that this is a summary rather than a list, focuses on direct assignments, and includes privileged ones. It does not disclose output shape, pagination behavior, or the practical meaning of 'direct' versus effective access, but the annotation coverage lowers the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence with no filler. It places the core resource and scope first and the privileged-inclusion qualifier at the end, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and only one parameter, the description covers the essential subject and scope but leaves out what the summary contains, how 'direct' is defined relative to effective access, and how the limit parameter behaves. It is adequate for simple selection but not fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one optional 'limit' parameter with a default of 20, but the description does not mention it or give any additional meaning. With schema description coverage at 0%, the description should compensate; it does not, though the single parameter is self-explanatory enough to avoid a 1.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (role assignments diretos), the scope (subscription), and the operation type (summary), and adds that privileged assignments are included. It is specific enough to distinguish from effective-access or tenant-wide summaries, though it does not explicitly name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use case is implied by the scope: use this when wanting a summary of direct role assignments at subscription level. However, there is no explicit guidance about when not to use it or which sibling tool to prefer for related cases like effective access or detailed assignment lists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscriptions_countARead-onlyIdempotent
Retorna exclusivamente a quantidade de subscriptions Azure visíveis para a identidade autenticada.
Use esta ferramenta para perguntas como:
Quantas subscriptions existem?
Quantas assinaturas Azure eu tenho?
Quantas subscriptions consigo visualizar?
NÃO use search_official_guidance para descobrir quantidade de subscriptions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the description does not need to restate safety. The description adds meaningful behavioral context: it returns only the quantity, not a list, and scopes the count to subscriptions visible to the authenticated identity. This is extra information beyond the annotations and clarifies what the tool actually does.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a first sentence states the core behavior, a short list gives concrete usage examples, and a final sentence provides a negative usage rule. Every sentence earns its place, and key information is front-loaded before the examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless count tool with no output schema, the description is complete: it states what is counted, the scope, and gives concrete example queries. The explicit exclusion of search_official_guidance covers the most plausible alternative. No critical missing information remains for an agent to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter schema to supplement. The description appropriately avoids inventing parameter details. The semantic guidance about 'visible to the authenticated identity' is the only relevant input-related context, and it is clear. A score of 4 reflects the zero-parameter baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns exclusively the count of Azure subscriptions visible to the authenticated identity. It uses a specific verb ('returns') and resource ('Azure subscriptions'), and the scope ('visible to the authenticated identity') is explicit. It also distinguishes itself by explicitly warning not to use search_official_guidance for this purpose, which helps disambiguate from a sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: it lists sample natural-language questions that should route here ('How many subscriptions exist?', 'How many Azure subscriptions do I have?', etc.). It also explicitly states when NOT to use an alternative tool by saying NOT to use search_official_guidance to discover subscription counts. This gives clear when-to-use and when-not-to-use direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tenant_licensesARead-onlyIdempotent
Lista os SKUs licenciados do tenant, com unidades habilitadas, consumidas e ociosas, além dos planos de serviço ativos.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds meaningful behavioral context by specifying the return content: licensed SKUs with unit counts and active service plans. It does not mention pagination or response format, but for a zero-parameter read-only listing that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence in Portuguese that front-loads the action, names the resource, and enumerates the key output fields. Every part of the sentence adds value, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, read-only annotations, and no output schema, the description is largely complete: it tells the agent what the tool lists and which license-related fields are returned. It could be slightly more explicit about scope or response shape, but the absence of parameters and the simple read-only nature keep this from being a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema description coverage is 100%, so there are no parameter semantics for the description to clarify. The baseline for zero-parameter tools is 4, and the description does not need to compensate for missing parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lista') and resource ('SKUs licenciados do tenant'), and further details the exact output dimensions: enabled, consumed, and idle units plus active service plans. This clearly distinguishes it from sibling tools like get_license_posture or get_pim_state_summary, which target different license/posture concepts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its use case by naming the data it returns, but it provides no explicit guidance about when to choose this tool over alternatives, nor does it mention any exclusions or related tools. An agent must infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_authentication_methodsBRead-onlyIdempotent
Retorna métodos de autenticação e status de MFA/passwordless de um usuário.
| Name | Required | Description | Default |
|---|---|---|---|
| user_identifier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate read-only, open-world, and idempotent behavior. The description adds specificity about the returned data without contradicting the annotations, so it is transparent but relies on annotations for side-effect disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, grammatically correct sentence with no unnecessary words, making it concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple and the description states its core function, it does not indicate the output format or any limitations, leaving the agent to infer the response structure. However, given the lack of an output schema, the description is minimally adequate but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter user_identifier is only described by its name and type, with no explanation of the expected format (e.g., UPN, object ID, email). The description's phrase 'de um usuário' confirms it refers to a user but does not clarify the identifier convention.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns authentication methods and MFA/passwordless status for a specific user, using the verb 'Retorna' (Returns). This distinguishes it from sibling tools like list_users_without_mfa because it is user-specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as get_authentication_methods_summary or assess_privileged_mfa. It does not mention prerequisites or compare with other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_effective_azure_accessARead-onlyIdempotent
Resolve acesso efetivo Azure RBAC de um usuário (direto + herdado via grupos transitive).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| user_identifier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint and idempotentHint, so the description adds value by detailing that access is computed as direct plus transitive group inheritance. This provides behavioral insight beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no unnecessary words. It efficiently conveys the core purpose and scope, making it well-structured and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient for an agent to understand what the tool does and when to call it, especially given its read-only nature and explicit inclusion of transitive groups. It does not describe output format, but there is no output schema, so this is not a major gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides zero descriptions for parameters, and the description only implicitly covers 'user_identifier' via 'de um usuário'. The 'limit' parameter is not explained at all. Since coverage is 0% and the description does not compensate for the missing parameter semantics, the score is low.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that it resolves effective Azure RBAC access for a user, explicitly including both direct and transitive group inheritance. This is a specific verb ('resolve') and resource ('Azure RBAC access') that distinguishes it from sibling tools like list_azure_role_assignments or list_users_with_direct_permissions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (for effective access including transitive inheritance) but does not explicitly mention alternatives or exclusion criteria. An agent can infer its use from the phrase 'direto + herdado via grupos transitive', but there is no direct guidance on choosing this over other list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_answer_identity_questionARead-onlyIdempotent
Interpreta uma pergunta de identidade em linguagem natural, escolhe a capability correta e executa a consulta de forma validada.
Use para perguntas abertas como:
"Quais usuários possuem Global Administrator?"
"Quais aplicações possuem Directory.ReadWrite.All?"
"Quem pode ativar Owner via PIM?"
Respeita a separação de fontes: Microsoft Graph para identidade/diretório e APIs Azure para Azure RBAC/recursos. Retorna erro explícito quando a capability não existe ou quando falta permissão. Nunca inventa chamadas Graph.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| question | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds beyond that: it explains that the tool selects a capability, validates the query, respects source separation, returns explicit errors for missing capability or permission, and never invents Graph calls. This is meaningful behavioral context, though it does not mention success return shape or limit handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a front-loaded purpose sentence, a scannable list of example questions, and terse final sentences covering scope and error behavior. No wasted words, and the most important information appears first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only natural-language query tool with no output schema, the description covers the essential invocation context: supported question types, source separation, validation behavior, and error semantics. The main gaps are the lack of an explicit success-return description and the absence of guidance on when to use sibling natural-language tools instead.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description must compensate for missing parameter documentation. It enriches the 'question' parameter through natural-language examples and the statement that it handles open identity questions. However, it says nothing about 'limit', which has a default of 50 but whose semantics and behavior are left undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific behavior: it interprets a natural-language identity question, selects the correct capability, and executes a validated query. Concrete example questions clarify the intended resource and make the purpose easy to grasp. It does not explicitly differentiate from the many sibling natural-language query tools such as timeline_natural_language_query or iam_natural_language_query, so it stops just short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context ('Use para perguntas abertas como...') and states the source-separation rule between Microsoft Graph and Azure APIs. However, it provides no exclusions or alternatives for when an agent should prefer a more specific sibling tool like pim_natural_language_query or iam_natural_language_query, leaving some usage boundary inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_assessmentARead-onlyIdempotent
Executa assessment de identidade baseado no capability registry, declarando explicitamente cobertura EVALUATED / PARTIAL / NOT_EVALUATED por domínio.
'scope' aceita: identity, directory, privileged, workload, azure. Nunca reporta NOT_EVALUATED como zero.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| scope | No | identity |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, idempotent, and open-world hints; the description adds valuable behavioral context beyond them, particularly the rule that NOT_EVALUATED is never reported as zero. It also states the explicit coverage taxonomy (EVALUATED / PARTIAL / NOT_EVALUATED), which helps the agent interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences cover purpose, output format, valid scope values, and a critical reporting nuance. Every sentence earns its place and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still gives the core output shape (coverage per domain with three statuses) and one key interpretation rule. Minor gaps remain around what 'limit' controls and how capability registry domains map to concrete results, but the definition is sufficient for a confident first invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no descriptions, so the description's list of valid scope values (identity, directory, privileged, workload, azure) adds real meaning where the schema is silent. However, the 'limit' parameter is not addressed at all, and the description does not fully compensate for 0% schema_description_coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Executa assessment de identidade'), a source ('capability registry'), and the distinctive output behavior (explicit EVALUATED / PARTIAL / NOT_EVALUATED coverage per domain). This separates it from generic assessment siblings by clarifying that it reports coverage status rather than raw findings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied rather than stated: an agent can infer to use this when it needs domain-level coverage from the capability registry. There is no explicit when-to-use or when-not-to-use guidance, and no alternatives are named despite many assessment-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_directory_objectsARead-onlyIdempotent
Coleta objetos de diretório de um ou mais domínios e correlaciona a mesma identidade entre eles, preservando a fonte de cada evidência.
'domains' aceita lista separada por vírgula (ex.: "users,service_principals,directory_roles"). Se vazio, os domínios são inferidos da pergunta.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| domains | No | ||
| question | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the read-only, idempotent, open-world profile, and the description adds meaningful behavior beyond that: it correlates the same identity across domains and preserves source evidence. It also discloses how empty 'domains' behaves, though it does not describe return shape or pagination, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences pack the core purpose, a concrete parameter example, and fallback behavior with no filler. The main function is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient for a basic read-only call with optional parameters, and the domain-inference behavior is useful. However, because there is no output schema, the lack of any description of result shape or pagination leaves the agent to guess what the tool will return.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates for 'domains' by giving a comma-separated example and the empty-value fallback, and it partially explains 'question' by referencing domain inference. 'limit' is left undocumented beyond its schema default, so the compensation is incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific action ('coleta objetos de diretório...') and adds the distinctive correlation-across-domains behavior with source preservation. It does not explicitly contrast with sibling tools, so it is clear but not differentiated by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose graph_directory_objects over the many sibling tools such as list_users, graph_list, or identity_360. The only guidance is the domain-inference fallback for the 'domains' parameter, which is parameter behavior rather than tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_discover_capabilitiesARead-onlyIdempotent
Capability discovery de identidade.
Use ANTES de consultar quando não souber qual domínio/endpoint atende a pergunta.
Se 'question' for informado, retorna o roteamento sugerido (domínio, capability, fonte, permissões necessárias) SEM executar nada.
Se 'domain'/'source' forem informados, lista as capacidades catalogadas.
Fontes possíveis: microsoft_graph (identidade/diretório), azure_resource_graph / azure_management / azure_authorization (recursos e Azure RBAC).
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | ||
| source | No | ||
| question | No | ||
| include_gaps | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/idempotentHint/openWorldHint annotations, the description discloses the critical behavioral trait: it returns routing suggestions 'SEM executar nada' (without executing anything), confirming its safety as a pre-query discovery step. It also names possible sources (microsoft_graph, azure_resource_graph, azure_management, azure_authorization) and the routing output fields, none of which the annotations convey. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the purpose line and the 'use before querying' rule come first, followed by dash-separated mode rules and a concise source list. The mixed Portuguese/English phrasing and slight restatement of the tool's name in the opening line are minor inefficiencies, but nothing is long-winded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and 0% schema coverage, the description covers the two main modes, the routing output fields, and the supported sources, but it omits 'include_gaps' entirely and gives no example or return-format detail. Since this tool is explicitly positioned as the first-stop router ('use before consulting'), those omissions are meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It functionally explains three of the four parameters ('question' triggers routing; 'domain'/'source' trigger catalog listing), but 'include_gaps' is never mentioned, leaving its meaning and interaction with the other modes undefined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose — capability discovery for identity — and defines two concrete modes: with 'question' it returns suggested routing (domain, capability, source, required permissions), and with 'domain'/'source' it lists cataloged capabilities. This clearly differentiates it from the many query/execution siblings in the toolset such as graph_query, graph_list, and graph_get, which run actual requests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly provides a trigger condition: 'Use ANTES de consultar quando não souber qual domínio/endpoint atende a pergunta' (use before querying when you don't know which domain/endpoint answers the question). Mode selection is also explicit via if/then rules, though no sibling tool is named as the alternative and no when-not-to-use exclusion is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_getBRead-onlyIdempotent
Obtém um objeto específico de uma capability catalogada (operação 'get').
'id' deve ser um GUID ou identificador simples; valores fora desse padrão são rejeitados.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| select | No | ||
| capability_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool readOnlyH/readOnly and idempotent, and the description adds useful behavioral context: 'id' must be a GUID or simple identifier and values outside that pattern are rejected. This is a concrete validation behavior beyond the structured annotations. It does not discuss errors, auth, or return format, but the annotations cover the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded: first sentence gives purpose, second sentence gives a validation rule. The parenthetical '(operação get)' is somewhat redundant with the tool name, but overall there is no meaningful bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 3 parameters, no output schema, and no parameter descriptions, the description is not complete enough. It fails to explain what capability_id represents, what select does, what a cataloged capability is, or how to discover valid capability IDs. An agent would need to infer too much to invoke this tool reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only clarifies the format of 'id'. The required 'capability_id' and the optional 'select' parameter are left completely unexplained, so the description does not compensate for the schema's lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('obtém') and resource ('objeto específico de uma capability catalogada'), and the word 'específico' signals single-object retrieval as opposed to listing. However, it does not explicitly contrast with sibling tools like graph_list or graph_query, relying mostly on the operation label 'get' to differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this tool when you want a specific object from a cataloged capability. There is no explicit statement of when to use it versus alternatives, no when-not-to-use conditions, and no reference to graph_discover_capabilities for finding capability IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_listARead-onlyIdempotent
Lista objetos de uma capability catalogada (operação 'list').
'capability_id' precisa existir no registry (use graph_discover_capabilities). 'filter' aceita apenas campos declarados como suportados pela capability. Endpoints arbitrários são rejeitados.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| filter | No | ||
| select | No | ||
| capability_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world behavior. The description adds validation behavior: invalid capability_ids, unsupported filter fields, and arbitrary endpoints are rejected. This is meaningful behavioral context beyond the annotations and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded: the core definition comes first, followed by three crisp, non-redundant constraint lines. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core calling flow and validation rules are covered well, but with no output schema the description omits return shape and pagination behavior. It also leaves limit and select semantics to inference, so the tool is usable but not fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides useful semantics for capability_id and filter, but limit and select remain completely undocumented in both the schema and the description, leaving a real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence 'Lista objetos de uma capability catalogada' identifies a concrete operation and resource scope. The restriction 'Endpoints arbitrários são rejeitados' helps distinguish it from generic graph_query/graph_get tools, though the term 'capability catalogada' is not fully explained.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear prerequisite: capability_id must exist in the registry, and it names graph_discover_capabilities as the tool to find one. It also explicitly forbids arbitrary endpoints, giving a useful boundary, but it does not explicitly contrast with specific sibling list_* tools or graph_query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_permissionsARead-onlyIdempotent
Retorna as permissões Microsoft Graph / Azure necessárias para uma consulta, incluindo suporte a delegated e application permission e requisito de licença.
Não executa consulta: serve para validar viabilidade antes de consultar.
| Name | Required | Description | Default |
|---|---|---|---|
| question | No | ||
| capability_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
As anotações já declaram readOnlyHint, openWorldHint e idempotentHint. A descrição acrescenta informação comportamental relevante: a ferramenta não executa consultas e valida viabilidade antes de consultar. Isso complementa as anotações sem contradizê-las.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Duas frases curtas e diretas, com a informação principal na primeira e a limitação/papel da ferramenta na segunda. Nenhuma palavra é desperdiçada e a estrutura é ideal para leitura rápida por um agente.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Para uma ferramenta simples e somente leitura, a descrição cobre o essencial: o que retorna, os tipos de permissão e a limitação de não executar consultas. No entanto, não há descrição do formato de retorno nem dos parâmetros, o que deixa lacunas para um agente que precise invocá-la corretamente.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
O schema tem cobertura de 0% e a descrição não explica os parâmetros 'question' e 'capability_id'. Embora 'question' possa ser inferido como a consulta, 'capability_id' permanece sem significado. A descrição não compensa a ausência total de descrições no schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A descrição afirma claramente o verbo ('Retorna'), o recurso ('permissões Microsoft Graph / Azure') e o propósito ('necessárias para uma consulta'), diferenciando-se dos irmãos de consulta ao explicitar que não executa consulta. Isso permite ao agente distinguir a ferramenta de outras como graph_query ou graph_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A frase 'Não executa consulta: serve para validar viabilidade antes de consultar' fornece contexto claro de quando usar e um critério de exclusão (não é para executar consulta). Não nomeia explicitamente alternativas, mas o contexto é suficiente para guiar a seleção.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_queryBRead-onlyIdempotent
Executa consulta parametrizada em fontes que aceitam query (ex.: Azure Resource Graph).
Somente leitura: operadores KQL de escrita ou de acesso externo são bloqueados. 'scope' é validado contra o formato de escopo Azure.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| scope | No | ||
| capability_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint), it specifies that KQL write/external access operators are blocked and that scope is validated against Azure format. It also confirms read-only behavior, adding useful behavioral constraints not present in the schema. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the main purpose, followed by the two most important behavioral constraints. Every sentence adds value and there is no verbose filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four parameters, no output schema, and a required capability_id, the description leaves the central parameter undefined and provides no usage scenario or relationship to sibling graph_* tools. The safety and scope details are good, but a caller cannot confidently construct a valid call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the burden but only explains scope validation. It does not clarify the meaning of capability_id, which is required, nor query and limit behavior. This is insufficient for an agent to correctly populate parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Executa consulta parametrizada') and a target ('fontes que aceitam query, ex.: Azure Resource Graph'), establishing what the tool does. It does not fully differentiate it from the many graph_* siblings, but conveys that it runs a KQL query rather than a fixed list/get operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies use for query-capable sources like Azure Resource Graph and notes read-only constraints, but it never explicitly states when to prefer graph_query over graph_list, graph_get, or other siblings. There are no exclusion conditions or alternatives named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_relationshipBRead-onlyIdempotent
Consulta relacionamentos de um objeto de diretório (membros, owners, membership transitiva, app role assignments de um principal).
Exemplos de capability_id:
graph.groups.members
graph.groups.transitive_membership
graph.applications.owners
graph.service_principals.owners
graph.app_role_assignments.assigned_to
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| limit | No | ||
| capability_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description's 'Consulta' is consistent with a read-only operation. The description adds context about the kinds of relationships available, but does not disclose pagination behavior, permission requirements, or return shape. This is acceptable given annotation coverage, but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: a single sentence states the primary purpose, followed by a categorized list of example capability_id values. Every sentence earns its place, and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple, but the absence of an output schema means the description should hint at return values, which it does not. It also does not explain how to choose among capability_id options or when to use this tool instead of a sibling graph tool. The examples help, but notable gaps remain for a generic relationship endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the burden of documenting parameters. It clarifies capability_id with concrete examples and implies that id refers to a directory object, but leaves limit undefined. This is partial compensation, not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Consulta relacionamentos') and resource ('objeto de diretório'), and enumerates specific relationship types (members, owners, transitive membership, app role assignments). The capability_id examples further bound the tool's scope. However, it does not explicitly differentiate itself from sibling graph tools like graph_list or graph_query, so it is not a full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use or when-not-to-use guidance, and names no alternatives. The capability_id examples imply a usage pattern, but an agent is left to infer when this generic relationship query is preferable over the many specialized sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_role_assignmentsARead-onlyIdempotent
Consulta atribuições de privilégio mantendo as fontes separadas:
Directory roles e PIM de diretório via Microsoft Graph
Azure RBAC via Azure Resource Graph
Não assume que Microsoft Graph cobre Azure RBAC.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| include_pim | No | ||
| include_azure_rbac | No | ||
| include_directory_roles | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and open-world behavior. The description adds meaningful behavioral context beyond annotations: it promises source separation and explicitly disclaims that Microsoft Graph covers Azure RBAC, which is critical for correctly interpreting the results. It does not detail return shape or pagination, but that is partially mitigated by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the main purpose, and organized with bullet points for the key source distinctions. The final warning is short but high-value. Every clause earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, and the description does not explain result structure, how source separation manifests in the output, or whether the limit applies per source or globally. However, the annotations (readOnly, openWorld, idempotent) and the explicit source separation warning provide enough context for an agent to make a reasonable first call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining parameters. It indirectly maps the source categories to include_pim, include_azure_rbac, and include_directory_roles, but it never explains the limit parameter, the toggles' effects, or how defaults behave. The description does not sufficiently compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Consulta atribuições de privilégio') and precisely identifies the covered sources: directory roles/PIM via Microsoft Graph and Azure RBAC via Azure Resource Graph. The phrase 'mantendo as fontes separadas' distinguishes it from simpler single-source role assignment tools among the siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for use: it is the tool to use when privilege assignments must be queried with sources kept separate across Microsoft Graph and Azure Resource Graph. The warning 'Não assume que Microsoft Graph cobre Azure RBAC' is a useful usage guardrail, though it does not explicitly name sibling alternatives or state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
iam_natural_language_queryARead-onlyIdempotent
Interpreta uma pergunta de IAM em linguagem natural e responde com correlação Entra + Azure. Sempre retorna resumo e detalhes compreensíveis, sem depender de frase exata.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| question | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, open-world, idempotent behavior. The description adds that the tool always returns a summary plus understandable details, which helps an agent know what to expect in the response. Nothing contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences carry the essential behavior and response expectation with no filler. The key action is placed first and the response behavior second, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only NL query tool with no output schema, the description gives a basic response shape (summary + details) and input tolerance. It lacks sibling usage guidance and parameter detail, so an agent still has uncertainty about when to choose this over neighboring query tools and what limit controls. Overall it is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has two parameters but 0% description coverage, so the description needed to explain them; it does not mention question or limit at all. The question parameter is inferable from the tool's purpose, but limit semantics are left entirely to the schema title and default. This is a meaningful gap because limit's behavior is not self-evident in an NL-query tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a clear action—interpret an IAM natural-language question—and adds the key differentiator that answers correlate Entra with Azure. It is not a bare tautology because it specifies the resource scope and output orientation. However, it does not explicitly contrast with timeline/agent/pim variants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for open-ended IAM questions phrased naturally, noting that exact wording is not required. It provides no explicit when-to-use guidance or exclusions relative to sibling natural-language tools such as timeline_natural_language_query or pim_natural_language_query. The context is sufficient to infer general use but not to make a confident selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
identity_360ARead-onlyIdempotent
Identity 360: visão completa de uma identidade — quem é, a que possui acesso (Entra + Azure, direto/grupo/PIM), como recebeu, ownership e risco (blast radius, findings). Aceita UPN, displayName ou objectId.
| Name | Required | Description | Default |
|---|---|---|---|
| user_identifier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints, so the description's job is to add context. It adds useful behavioral scope: the tool aggregates Entra + Azure access via direct/group/PIM, traces how access was received, and includes ownership and risk findings. It does not describe output structure or potential volume, but the annotations lower the burden for safety-related traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the primary concept ('visão completa de uma identidade') before enumerating covered dimensions. Each clause adds distinct information: access types, provenance, ownership, risk, and accepted identifiers. Slightly repetitive with the tool name at the start, but otherwise efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity aggregation tool with no output schema, the description gives a solid category-level map of what to expect: identity basics, Entra/Azure access, assignment reasoning, ownership, and risk. It also identifies accepted input formats. It could be more explicit about the shape of findings or whether output is a single summary object versus multiple sections, but the core information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only provides user_identifier as a required string with no description, and schema coverage is 0%. The description compensates by specifying that UPN, displayName, or objectId are all accepted, which is essential for calling the tool correctly. It does not give an explicit example or clarify uniqueness/case behavior, but it provides the core semantic guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description defines identity_360 as a complete view of an identity, listing its scope: identity attributes, Entra/Azure access (direct/group/PIM), access origin, ownership, and risk. It clearly identifies the resource (an identity) and distinguishes it from narrower sibling tools. It lacks an explicit verb such as "returns" or "provides," so it stops short of a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys that the tool is appropriate when a holistic identity perspective is needed, including access, ownership, and risk. It does not explicitly state when to prefer this over siblings like get_user_effective_azure_access or compute_identity_blast_radius, nor does it mention exclusions. The usage context is implied rather than made explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_agent_identitiesCRead-onlyIdempotent
Lista inventário de Agent Identities com owner, blueprint, permissões e risco.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds that the result includes owner, blueprint, permissions, and risk, which is useful but does not explain filtering semantics or pagination behavior. This is a reasonable level of transparency given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler and gets straight to the resource and fields. It is appropriately front-loaded, though it could have used the brevity to also clarify the status parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameter semantics, the description leaves important aspects of calling the tool unclear, especially the meaning of 'status'. The presence of many sibling tools also increases the need for usage context, which is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation of 'limit' or 'status'. While 'limit' is fairly self-explanatory from the schema, 'status' is ambiguous and no valid values or effect are described, so the description does not compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the specific resource ('Agent Identities') and states the fields returned (owner, blueprint, permissions, risk), making the tool's purpose reasonably clear. It does not explicitly contrast with sibling list tools, so it falls 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool instead of the many sibling list/query tools, nor any mention of typical use cases or exclusions. The description only says what the tool lists; an agent must infer when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_application_provenanceARead-onlyIdempotent
Diferencia app registrations criadas por usuários no seu tenant das aplicações nativas da Microsoft (first-party) e de apps de terceiros consentidos.
Classificação baseada em appOwnerOrganizationId (sinal autoritativo do diretório), não em heurística de nome.
'provenance' aceita: all, tenant (criadas no seu tenant), microsoft (nativas), thirdparty (terceiros), managedidentity.
Use para perguntas como:
"Quais aplicações foram criadas pelos usuários?"
"Qual a diferença entre app registrations próprias e nativas?"
"Quantas aplicações são nativas da Microsoft?"
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| provenance | No | all | |
| include_managed_identities | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful behavioral context by explaining that classification is based on appOwnerOrganizationId rather than name heuristics, and by defining the provenance values. It does not describe output format or pagination, but that is a minor gap given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core distinction, then gives the authoritative classification detail, the provenance values, and finally example questions. Every section earns its place and there is no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with three optional parameters, the description covers purpose, classification logic, parameter values, and example queries. It does not explicitly state the return shape, but with no output schema present, a slightly more explicit note about the returned list would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the description fully explains the key provenance parameter with its five allowed values and their meanings. The limit and include_managed_identities parameters are not elaborated, though their names and defaults make their semantics reasonably clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to differentiate app registrations created by users in the tenant from Microsoft first-party apps and third-party consented apps. It also names the authoritative classification signal (appOwnerOrganizationId) and provides concrete example questions, making the purpose specific and distinguishable from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context with example questions like 'Quais aplicações foram criadas pelos usuários?' and states it is for distinguishing provenance types. However, it does not explicitly mention when not to use it or contrast it with the sibling summarize_application_provenance tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_application_secrets_expiringARead-onlyIdempotent
Lista secrets expirados ou próximos da expiração em aplicações do Entra ID.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the description does not need to repeat those. The description adds the filtering behavior of expired or near-expiry status, but it does not disclose other behavioral details such as pagination, ordering, or whether the result includes full secret metadata. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that clearly states the tool's purpose without unnecessary words or repetition. It is front-loaded with the core action and scope, making it easy for an agent to quickly understand and select the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only list tool with no required parameters and no nested objects, the description provides enough context for an agent to understand what the tool returns and when to call it. It could be slightly more complete by explicitly linking 'days' to the expiration threshold and describing the output shape, but the basic invocation context is sufficiently covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden of explaining parameters. It only indirectly relates to 'days' by mentioning proximity to expiration, and it says nothing about 'limit' or how these parameters interact with the filter. The schema shows defaults, but no semantic meaning is added beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lista') and a clear resource ('secrets expirados ou próximos da expiração em aplicações do Entra ID'), making the tool's purpose immediately understandable. It also differentiates this tool from sibling list tools such as list_users or list_azure_role_assignments by focusing specifically on application secrets expiring soon.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use case is implied by the description: auditing Entra ID application secrets that are expired or about to expire. However, it does not explicitly state when to prefer this tool over alternatives, nor does it mention exclusions or conditions such as 'use only when you need expiration, not all secrets.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_applications_without_ownersBRead-onlyIdempotent
Lista aplicações sem owner definido no Entra ID.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds the scoping detail that only applications without owners are returned and that the source is Entra ID, but does not disclose additional behavior such as pagination, limits, or data completeness beyond what the annotations already imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no filler. It front-loads the action and resource, and every word contributes to the tool's meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with one optional parameter and strong annotations, the description is nearly complete. It identifies the source system, the filtering condition, and the action. It could be slightly richer by describing the return shape or clarifying the limit parameter, but these are minor gaps given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one optional parameter, limit, and the description provides no explanation of it. Schema description coverage is 0%, so the description was expected to compensate, but it does not mention limit, its default, or its effect on results.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Lista'), the resource ('aplicações'), and the filtering condition ('sem owner definido no Entra ID'). This makes the tool's purpose unambiguous and distinguishes it from sibling tools focused on agents, users, or generic objects, though it does not explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as list_objects_without_owner or list_agents_by_owner. It states what the tool does but not the conditions under which it should be selected, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_azure_role_assignmentsBRead-onlyIdempotent
Lista role assignments Azure RBAC (User, Group, Service Principal e Managed Identity).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already communicate that the operation is read-only, idempotent, and open-world, which covers the safety profile. The description adds the principal types in scope but does not disclose pagination behavior, listing scope, or response shape, so the added behavioral value is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. The core action and resource scope are front-loaded, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with one optional parameter, the description is minimally viable: an agent can invoke it without arguments. However, without an output schema or any mention of result ordering, pagination, or scope, the context is not complete for an agent that needs to consume or filter results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description says nothing about the only parameter, 'limit', and schema description coverage is 0%, so the description does not compensate for the schema gap. The property title 'Limit' with a default of 50 provides minimal meaning, but the description itself adds no parameter-level semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb ('Lista') and resource ('role assignments Azure RBAC') and enumerates the principal types covered (User, Group, Service Principal, Managed Identity). It is clear about what the tool does, though it does not explicitly distinguish it from sibling tools like list_privileged_azure_role_assignments or list_orphan_azure_role_assignments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided about when to call this tool versus alternatives. The sibling set contains several similar listing tools, so the absence of routing or exclusion criteria leaves the agent to infer intent 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.
list_deny_assignmentsCRead-onlyIdempotent
Lista deny assignments do Azure.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only restates the tool's basic behavior and adds no context beyond the annotations, such as scope defaults, pagination behavior, or permissions needed. Since annotations already declare readOnlyHint, openWorldHint, and idempotentHint, this description provides no additional behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no redundant or filler content. It is concise and front-loaded, though it is minimal enough that it borders on under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and only a limit parameter, the description leaves important context unclear, such as the scope of the deny assignments returned and how the result differs from the many nearby role-assignment tools. An agent could select the tool from its name, but would have weak expectations about its output and scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has only one optional 'limit' parameter with 0% description coverage, and the description does not mention it. While 'limit' is self-explanatory from its name and default value, the description adds no parameter-level meaning or usage hints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation (list) and the resource type (Azure deny assignments), making it easy to tell this apart from the related role-assignment tools. It does not explicitly explain what deny assignments are or contrast with siblings, so it falls just 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description does not say when to prefer this tool over list_azure_role_assignments, list_privileged_azure_role_assignments, or list_orphan_azure_role_assignments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_disabled_users_with_active_rolesARead-onlyIdempotent
Lista usuários desabilitados no Entra ID que ainda possuem role assignments diretos ativos.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish read-only, open-world, and idempotent behavior. The description adds the key filtering behavior (disabled users with still-active direct role assignments), which is useful context, but it does not disclose output shape, pagination, or ordering. Given the strong annotation coverage, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no wasted words. It packages the resource and condition clearly and is immediately readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with one optional parameter and read-only/idempotent annotations, the description is mostly sufficient. It lacks return-shape details and explicit sibling differentiation, but the absence is not critical because the tool name and schema cover the invocation basics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'limit' is optional and has a default in the schema, but schema description coverage is 0% and the tool descripion does not mention the parameter at all. The property name and default make misuse unlikely, yet the description adds no semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lista'), a clear resource ('usuários desabilitados no Entra ID'), and a precise filter ('que ainda possuem role assignments diretos ativos'). This distinguishes it from nearby siblings like list_entra_users or list_users_with_direct_permissions because it combines disabled status with active direct role assignments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative guidance is provided. The description does not mention that this tool is for dormant/risky access discovery or how it differs from sibling tools such as list_users_with_direct_permissions or list_orphan_azure_role_assignments, so an agent cannot route between them from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_entra_usersBRead-onlyIdempotent
Lista usuários do Microsoft Entra ID com nome, UPN e e-mail.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds the output field detail, but it does not mention pagination, limit behavior, or whether all or only some users are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise, front-loaded sentence with no filler. It states the action, target resource, and expected output fields efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with strong read-only annotations, the description provides the essential output fields. However, it lacks mention of the limit parameter's effect and does not differentiate from the similarly named sibling 'list_users', leaving selection and pagination behavior partially underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, 'limit', is defined in the schema with a default of 20, but the description adds no meaning to it. With 0% schema description coverage, the description should compensate, but it omits any mention of pagination or how the limit affects results.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Lista usuários') and resource ('Microsoft Entra ID'), and specifies the output fields (nome, UPN, e-mail). It is unambiguous about what the tool does, though it does not distinguish itself from the sibling 'list_users' tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as 'list_users', 'list_users_without_mfa', or other list-oriented tools. No context, prerequisites, or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_graph_critical_application_permissionsBRead-onlyIdempotent
Lista aplicações/service principals com Microsoft Graph Application Permissions críticas.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint and idempotentHint, so the safety profile is covered. The description adds the scoping detail of filtering to critical Graph Application Permissions, but it does not define what makes a permission 'critical' or disclose sorting/pagination/output behavior. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler. It front-loads the action and the resource, which is appropriate for a simple list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list with one optional parameter, this is close to sufficient. However, the description omits details about the meaning of 'critical' and the output contract, and there is no output schema to fill that gap. A slightly richer description would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'limit' is not mentioned in the description, and schema_description_coverage is 0%. However, the parameter is simple and self-espianatory given the schema's type and default. The description does not add meaning, but the gap is minor for this optional integer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Lista') and resource ('aplicações/service principals') filtered by 'Microsoft Graph Application Permissions críticas'. It is clear and can be distinguished from broad permission tools, but it does not explicitly contrast with siblings like graph_permissions or list_application_provenance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The only signal is the name, which is insufficient for an agent deciding between this and the many permission-related sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_objects_without_ownerBRead-onlyIdempotent
Lista objetos sem owner (Groups, Applications, Service Principals, Agents, Blueprints).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering the safety profile. The description adds the resource scope but does not disclose behavior such as pagination, limit handling, or whether the result set is a combined list or grouped. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that conveys the core purpose and enumerates the object types with no wasted words. It is front-loaded and easily parseable by an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple: one optional parameter, read-only annotations, and no output schema. The description is adequate for basic selection, but it lacks guidance on overlap with list_applications_without_owners and does not clarify output shape or pagination behavior. These gaps prevent a higher score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter, limit, with a default of 200, and the schema description coverage is 0%. The description does not mention the limit parameter at all, so it fails to compensate for the low schema coverage. The parameter name and default are self-explanatory, but the description adds no semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it lists objects without an owner, and explicitly enumerates the included object types (Groups, Applications, Service Principals, Agents, Blueprints). However, it does not distinguish itself from the sibling tool list_applications_without_owners, which overlaps in scope since Applications are included here too.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool might be useful (finding ownerless objects) but provides no explicit guidance on when to choose it over alternatives. Given the sibling list_applications_without_owners, the lack of differentiation is a meaningful gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_orphan_azure_role_assignmentsARead-onlyIdempotent
Lista role assignments órfãos (principal não resolvido no tenant visível).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds one useful behavioral detail: orphan is defined as unresolved principal within the visible tenant. It does not contradict the annotations and provides some context beyond them, but nothing more substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that defines the tool's purpose and its key qualifier without any filler. It is efficiently front-loaded with the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple read-only list tool with annotations that already provide safety and open-world context. However, with no output schema and no mention of return values, pagination, or how limit affects results, there are minor gaps for an agent selecting and invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention the only parameter, limit. The parameter name is somewhat self-explanatory, but the description adds no meaning about pagination, maximum values, or behavior when omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lista'), a specific resource ('role assignments órfãos'), and defines the key concept in parentheses ('principal não resolvido no tenant visível'). This clearly distinguishes it from the sibling list_azure_role_assignments by focusing on orphaned assignments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: call this when you need role assignments whose principal cannot be resolved in the visible tenant. However, it does not explicitly mention alternatives like list_azure_role_assignments or state when not to use this tool, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pim_role_statesBRead-onlyIdempotent
Lista atribuições privilegiadas classificadas por estado: Active, Eligible e Permanent.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| include_permanent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description is consistent with them. The phrase 'classified by state' adds some output-organization context, but the description does not disclose anything beyond that, such as result volume or filtering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence, with the main action and classification front-loaded and no redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although the annotations cover safety, there is no output schema and no parameter explanation, so an agent lacks crucial details for invoking this tool. It also does not help disambiguate among the many sibling list/get tools, leaving selection and parameter choices under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should compensate but does not. The only indirect clue is the mention of 'Permanent', which maps to include_permanent; the limit parameter and the precise effect of include_permanent are not explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lista') and identifies the resource ('atribuições privilegedas') plus the classification states (Active, Eligible, Permanent). It is clear, though it does not explicitly differentiate itself from nearby sibling tools such as get_pim_state_summary or list_privilege_timeline_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this tool versus alternatives. It neither names sibling tools nor states conditions for use, so an agent must infer the use case from the name and one-line description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_privileged_azure_role_assignmentsARead-onlyIdempotent
Lista role assignments privilegiados em Azure RBAC (Owner, User Access Administrator, Contributor).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description only needs to add context. It adds meaningful behavioral scope by specifying exactly which Azure RBAC roles are considered privileged, helping the agent understand the filter. It stops short of describing pagination or output format, but the safety profile is already covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that communicates the core purpose and the exact role filter without wasted words. It earns its place by adding the privileged-role definition rather than repeating the tool name or generic list behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with one optional parameter and no output schema, the description is largely sufficient: it names what is returned conceptually, the scope, and the roles included. It could be more complete by noting the default limit or noting what the response list contains, but the simplicity of the tool makes the absence non-critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has a single 'limit' parameter with a default of 50 and 0% description coverage. The tool description does not mention the limit parameter at all, so it adds no meaning beyond the schema. However, the parameter is optional, self-explanatory, and has a sensible default, which mitigates the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Lista'), a clear resource ('role assignments privilegiados em Azure RBAC'), and explicitly enumerates the privileged roles included: Owner, User Access Administrator, Contributor. This distinguishes it from sibling tools like list_azure_role_assignments and list_orphan_azure_role_assignments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended context is implied by the word 'privileged' and the listed roles, but the description does not explicitly say when to use this tool instead of alternatives such as list_azure_role_assignments or list_orphan_azure_role_assignments. There is no direct comparison or exclusion guidance, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_privilege_timeline_eventsCRead-onlyIdempotent
Lista eventos de ganho/perda/ativação de privilégios no período informado.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| action | No | all | |
| provider | No | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered and the bar is lower. The description adds modest context by enumerating the event categories (gain/loss/activation) and scoping to a period, but does not disclose return shape, pagination behavior, or limit semantics. No contradiction with the annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero filler, front-loading the verb and resource before the qualifiers. It earns its place but could easily absorb a few more words to clarify the action/provider filters without losing its tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with 0% schema coverage and no output schema, the description is too thin. It omits parameter semantics, expected output format, any limit/action/provider behavior, and fails to position itself among the several privilege-timeline siblings. The annotations cover read-only/idempotent safety, but the operational picture is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden of explaining parameters. It only clarifies the time period (via 'período informado'), which maps to 'days', while 'limit', 'action', and 'provider' remain entirely unexplained — their meaning is left to name inference, and the default 'all' values for action/provider are not interpreted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Lista'), a resource ('eventos de ganho/perda/ativação de privilégios'), and a time scope ('período informado'), so an agent can grasp what it does. However, it does not distinguish it from closely related siblings such as get_identity_privilege_timeline, summarize_privilege_timeline, or export_privilege_timeline_report — the differentiation is left to inference from the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus the many timeline-related siblings (get_identity_privilege_timeline, summarize_privilege_timeline, export_privilege_timeline_report, timeline_natural_language_query). With such a dense sibling cluster, the absence of any routing hints or exclusions leaves the agent to guess which tool fits a given intent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_public_ip_resourcesARead-onlyIdempotent
List Public IP resources. This does not prove that a workload is actually internet-exposed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable interpretive context beyond the annotations: the presence of a public IP resource does not mean the associated workload is internet-exposed. This helps prevent misuse of the tool's results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The primary action is stated first, and the important caveat follows immediately. Every sentence carries meaning, making it highly efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only listing tool with one optional parameter, the description is mostly complete. It defines the operation, adds an important interpretational caveat, and the annotations cover safety and idempotency. It could optionally clarify the cloud provider or result fields, but these are not critical given the simple nature of the tool and the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention the only parameter, 'limit,' and the input schema provides no description for it either. Schema description coverage is 0%, so the description should compensate, but it does not. The parameter name and default value make its purpose inferable, but the agent receives no explicit guidance on semantics like maximum value, pagination, or result-count behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List Public IP resources.' It also clarifies an important semantic boundary: listing public IP resources does not prove actual internet exposure. This is clear enough to distinguish it from generic listing tools like list_resources, though it does not explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need to list public IP resources. The caveat 'does not prove that a workload is actually internet-exposed' provides important context for interpreting results, but it does not explicitly state when to prefer this tool over alternatives or when not to use it. Usage guidance is present but only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_resource_groupsCRead-onlyIdempotent
Lista Resource Groups com filtros read-only por nome.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| name_contains | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description does not need to restate safety. It adds little beyond 'read-only filters by name' and does not mention pagination, scope, result shape, or open-world limitations. There is no contradiction with annotations, but the description does not meaningfully enrich behavioral understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with the primary action and resource front-loaded. The word 'read-only' is somewhat redundant with the annotations, but the overall text is compact and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only list tool, the description is nearly sufficient, but it omits any mention of the limit parameter or return behavior. There is no output schema, and the Portuguese wording may add slight friction for an English-oriented agent, so several details are left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only mentions filtering 'por nome' (by name). It does not explain the limit parameter or the exact matching behavior of name_contains, even though default values and property names provide partial hints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Lista' and the specific resource 'Resource Groups', and it mentions filtering by name, so the core action is clear. It does not explicitly distinguish itself from sibling tools such as list_resources or get_resource_groups_count, but the resource type is specific enough to avoid major confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to use this tool versus alternatives like list_resources, get_resource_groups_count, or other list_* siblings. Usage is only implied by the tool name and the action described, with no explicit context, exclusions, or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_resourcesBRead-onlyIdempotent
List Azure resources using controlled read-only filters. Use full Azure resource type when filtering, e.g. microsoft.compute/virtualmachines.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| name_contains | No | ||
| resource_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, openWorldHint, and idempotentHint. The description reinforces this with 'controlled read-only filters,' which is useful context, and adds the full-resource-type requirement. It does not disclose pagination, default result behavior, or the exact return format, but the safety profile is already well covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The first sentence states the tool's purpose, and the second provides actionable filter guidance with a concrete example. It is front-loaded and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with three optional parameters, the description covers the main object and gives guidance on the most important filter. However, there is no output schema, and the description does not explain the return shape or the semantics of limit and name_contains. It is minimally adequate but not complete for an agent that needs to invoke all parameters correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for missing parameter documentation. It only clarifies resource_type by requiring the full Azure resource type with an example; limit and name_contains remain semantically undefined. With three parameters and no schema descriptions, this is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List Azure resources using controlled read-only filters.' It is clear that this tool lists Azure resources and distinguishes itself from more specific siblings like list_resource_groups or list_public_ip_resources by covering all Azure resources with a resource_type filter. It could be stronger by explicitly naming sibling overlap, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need to list Azure resources with read-only filters. It gives a concrete rule about using full Azure resource types, which is useful. However, it does not explicitly state when not to use it or how it compares to the many sibling list_* tools, so an agent must infer the appropriate selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_top_blast_radiusCRead-onlyIdempotent
Ranking de identidades por maior blast radius.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint, idempotentHint) indicate no side effects, which partially covers behavior. However, the description itself does not disclose any behavioral traits such as whether it returns a paginated list, the default order, or if it requires prior data loading. With annotations present, the bar is lower, but the description adds no transparency beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of a single sentence in Portuguese. It is appropriately sized for the tool's simplicity and does not include superfluous details. The structure is clean and easy to parse, aligning with the ideal of brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the description bears full responsibility for explaining what the agent should expect. It only states the ranking concept but omits details like the return type, fields, sorting order, and any required environment setup. Without this context, the agent may struggle to handle the response correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter 'limit' has no description in the schema, and the tool description does not mention it. Consequently, there is zero coverage from both schema and description. The name 'limit' suggests a cap on results, but it is not explicit. Given the low schema coverage, the description fails to compensate, making the parameter's meaning ambiguous for an agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: it provides a ranking of identities by blast radius. The verb 'list' and the phrase 'Ranking de identidades' together convey the action and subject. It is distinct from computing blast radius for a specific identity (e.g., compute_identity_blast_radius) based on the name and description. However, it does not define 'blast radius' or mention the output format, which slightly reduces clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention that it is for a global ranking (as opposed to per-identity computation) or any preconditions (e.g., needing environment data first). The agent must infer usage from the tool name and sibling tools, which is not sufficient for robust selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersCRead-onlyIdempotent
Lista usuários do Entra ID visíveis para a identidade autenticada.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| disabled_only | No | ||
| name_contains | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a behavioral nuance about visibility to the authenticated identity, which is not fully covered by the annotations. However, the annotations already indicate read-only, open-world, and idempotent behavior, so the incremental transparency is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that directly states the core function. It contains no fluff or extraneous details, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal and does not cover parameter semantics or usage context. In an environment with many overlapping list tools, the lack of differentiation and missing parameter details leaves the agent without enough information to make a confident selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema defines limit, disabled_only, and name_contains with no descriptions, and the description does not elaborate on their meaning or defaults. With zero parameter explanation in either the description or schema fields, the agent cannot infer how to use them correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb 'lists' and the resource 'Entra ID users', which is clear in isolation. However, it does not differentiate from several similar sibling tools like list_entra_users or list_users_with_direct_permissions, leaving the agent to guess when this particular variant is appropriate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the many alternatives. No mention of filtering behavior, relationship to other list tools, or any condition that would make this tool the preferred choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_users_with_direct_permissionsCRead-onlyIdempotent
Lista usuários com role assignments diretos no Azure RBAC.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| disabled_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, openWorldHint=true, and idempotentHint=true, so the safety profile is well covered. The description adds the scoping detail of 'direct role assignments' but does not disclose behavioral traits such as pagination, default limits, or how disabled_only interacts with results. This is acceptable given the annotations, but not particularly informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no filler and the core purpose is front-loaded. It is concise, though the brevity contributes to missing parameter and usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameter descriptions, no output schema, and many similar sibling tools, the description is not complete enough for reliable tool selection. The meaning of disabled_only and the behavior of limit are left to inference, and no guidance helps distinguish this from the many related identity-listing tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention limit or disabled_only at all. The parameter names give some basic hints, but the description adds no meaning beyond what the schema types and defaults already show.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action ('Lista') and the resource ('usuários com role assignments diretos no Azure RBAC'), making the tool's purpose reasonably clear. It distinguishes itself from sibling list_azure_role_assignments because it returns users rather than assignments, but it does not explicitly contrast with similar user-listing siblings such as list_disabled_users_with_active_roles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It never mentions related tools like list_azure_role_assignments or get_user_effective_azure_access, nor does it state any exclusions or conditions that would help an agent choose between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_users_without_mfaCRead-onlyIdempotent
Lista usuários sem MFA registrado.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds no behavioral context beyond restating the tool's name, such as how MFA registration is determined, whether disabled users are included, or any pagination or data-freshness behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence that directly conveys the tool's purpose with no filler or redundant wording. It is appropriately sized for a simple read-only list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list with one optional parameter, the basic action and target resource are clear. However, it lacks details that would help an agent disambiguate from related tools and understand exactly what qualifies as 'MFA registrado', 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate for parameter meaning. The only parameter, 'limit', is self-explanatory, but the description does not clarify its semantics such as maximum allowed value, default usage behavior, or how it affects the result set. The schema provides only a default of 100.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Lista') and a specific resource ('usuários sem MFA registrado'), making the tool's core purpose obvious. However, it does not explicitly differentiate it from closely related sibling tools such as list_users_with_weak_authentication or assess_privileged_mfa, leaving potential ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With many similarly named sibling list tools, the agent must infer the intended use case from the name alone, and no conditions, exclusions, or recommended alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_users_with_passkeyARead-onlyIdempotent
Lista usuários com passkey/FIDO2 registrado.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnly, idempotent, and open-world behavior. The description adds the core filtering behavior—returning only users with a registered passkey/FIDO2—but does not go beyond that with details like output shape, pagination, or permissions. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundancy. Every word contributes to the core purpose, which is appropriate for a simple one-parameter list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple read-only nature and rich annotations, the description is minimally adequate. However, it lacks usage alternatives, parameter semantics, and any note about the returned data shape, which would make it fully self-contained for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention the 'limit' parameter at all. The schema only provides the parameter name, type, and default, leaving the agent to infer its semantics without any compensating explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list) and the resource (users with passkey/FIDO2 registered). This specific filter distinguishes it from sibling tools like list_users_without_mfa and list_users_with_weak_authentication without needing to inspect schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use case is implied by the description—call this when you need users who have a passkey/FIDO2 registered. However, there is no explicit when-to-use guidance, no exclusions, and no mention of alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_users_with_weak_authenticationBRead-onlyIdempotent
Lista usuários com métodos fracos registrados (sms/voice/email/password), com evidência técnica.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| include_mfa_registered | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds a small amount of behavioral context ('com evidência técnica'), indicating that output includes technical evidence, but it does not disclose filtering behavior, ordering, pagination, or what counts as evidence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact, front-loaded sentence with no wasted words. It conveys the core resource, the specific weak methods, and the output characteristic, making it appropriately sized and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no output schema and no parameter descriptions, the description is too thin. It does not explain what 'evidência técnica' looks like, how the limit parameter affects results, or what including MFA-registered users means, leaving important context for correct invocation missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain either parameter. 'limit' and 'include_mfa_registered' are present in the schema but receive no semantic explanation, so the description fails to compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: it lists users with weak registered authentication methods, specifically naming sms/voice/email/password, and mentions technical evidence. It is unambiguous about what the tool returns, though it does not explicitly contrast itself with closely related siblings such as list_users_without_mfa or get_user_authentication_methods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use case is implied by the description: finding users with weak registered auth methods. However, there is no explicit guidance about when to prefer this tool over closely related siblings such as list_users_without_mfa or assess_privileged_mfa, and no exclusions or alternative conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pim_natural_language_queryBRead-onlyIdempotent
Interpreta perguntas de PIM em linguagem natural e retorna resposta com resumo e detalhes.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| question | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description does not need to restate safety. It adds that the tool interprets the input and returns a summary plus details, which is useful context, but it does not discuss limitations, result bounds, or interpretation behavior beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence conveys the operation, input type, and output shape without redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-required-parameter NL query tool with read-only annotations, the description is minimally adequate: an agent knows what to pass and roughly what to expect. But with no output schema, the summary/detail description is vague, and the omission of 'limit' plus lack of guidance versus sibling NL tools creates a noticeable completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only clarifies the 'question' parameter as a natural-language PIM question; the 'limit' parameter is entirely undocumented in both the schema and the description, leaving its effect on the returned response unknown.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Interpreta'), identifies the resource domain ('PIM'), and states the output ('resposta com resumo e detalhes'). It is clear when read alone, but it does not explicitly differentiate from sibling NL tools such as iam_natural_language_query, timeline_natural_language_query, or agent_natural_language_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use when the user has a natural-language question about PIM. However, there is no explicit when-to-use/when-not-to-use guidance or mention of alternative tools, which leaves routing among the sibling NL query tools to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_agent_assessmentARead-onlyIdempotent
Executa assessment específico de Agent Identities e retorna ranking de risco.
| Name | Required | Description | Default |
|---|---|---|---|
| top_risks | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not contradict the annotations (readOnly, idempotent, openWorld). It adds no extra context, but the annotations already provide adequate safety and side-effect information, so the low additional disclosure is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no redundancy or unnecessary detail. It efficiently conveys the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While it specifically names the domain (Agent Identities), it does not clarify what the assessment entails, what the ranking format is, or how it differs from other similar assessment tools. However, given the tool name and sibling context, the intent is mostly discernible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'top_risks' has no schema description, and the tool description gives no explanation of its purpose or effect. With 0% schema coverage, the description fails to compensate, leaving the parameter meaning unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (executes), the resource (Agent Identities), and the outcome (returns risk ranking). It distinguishes itself from sibling listing tools by being an assessment that produces a ranking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternative assessment or listing tools. There is no mention of prerequisites, ideal scenarios, or differences from the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_enterprise_identity_auditARead-onlyIdempotent
Executa auditoria IAM enterprise consolidada (Entra + Azure + subscriptions + management groups).
| Name | Required | Description | Default |
|---|---|---|---|
| top_risks | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and repeatability. The description adds useful scope context (Entra, Azure, subscriptions, management groups) and clearly signals an audit/read operation. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence states the action, object, and scope in a parenthetical, with no filler or repetition. It is appropriately front-loaded and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex enterprise-wide audit tool with no output schema, the description does not explain what the audit returns, what 'top_risks' means, or whether the output is a report, list, or score. The annotations cover safety, but the agent cannot anticipate the result shape or configure the one parameter meaningfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not mention top_risks at all. The agent is left to infer that the parameter controls the number of top risks returned, with no guidance on units, effect, or valid range.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Executa') and names a clear resource ('auditoria IAM enterprise') with explicit scope breakdown (Entra + Azure + subscriptions + management groups). This differentiates it from sibling tools like run_iam_assessment and the many list_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'consolidada' implies this is the broad, cross-scope enterprise audit, so an agent can infer when to use it. However, there is no explicit guidance about when to prefer it over run_iam_assessment, graph_assessment, or the timeline assessment tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_iam_assessmentBRead-onlyIdempotent
Executa um IAM Assessment no ambiente e retorna riscos principais e plano de remediação.
| Name | Required | Description | Default |
|---|---|---|---|
| top_risks | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only, open-world, and idempotent behavior. The description supplements this by disclosing the output (main risks and remediation plan), but adds no further behavioral context such as scope, cost, or side effects. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no redundant wording; the key action and outcome are front-loaded. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool, the description states purpose and outputs, but it omits any parameter semantics and does not differentiate from the many sibling assessment tools. These gaps lower completeness below the 'get_calls' standard, though annotations compensate for safety context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter, top_risks, with 0% description coverage, and the description does not mention it at all. The parameter name and default (10) provide limited inference, but the description fails to compensate for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Executa um IAM Assessment no ambiente') and names its outcome ('retorna riscos principais e plano de remediação'), so an agent can identify what the tool does. However, it does not explicitly distinguish this from sibling tools like run_agent_assessment or run_enterprise_identity_audit, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a use case: when an IAM assessment of the environment is needed. But it provides no explicit when-to-use guidance and names no alternative tools, which is a notable gap given the large sibling set with overlapping assessment/audit names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_official_guidanceARead-onlyIdempotent
Return curated official Microsoft Learn references relevant to an Azure topic or best-practice question.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| topic | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint, openWorldHint, idempotentHint) already cover that the tool is read-only and side-effect free. The description adds no further behavioral details beyond the word 'curated', which implies filtering but not its mechanism. No contradictions exist between the description and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that directly states the tool's function and input scope. It avoids unnecessary jargon or extraneous details, making it easy to read and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description conveys the general purpose but lacks details about the returned data structure, such as whether references are URLs, titles, or snippets, and how they are ordered. Given the absence of an output schema, this omission leaves some ambiguity about the exact format of the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema defines 'topic' as a required string and 'limit' as an optional integer with default 4. The description explains that the topic is an Azure topic or best-practice question, giving context to the 'topic' parameter. However, 'limit' is not described at all, leaving its purpose ambiguous despite being a common parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns curated official Microsoft Learn references for an Azure topic or best-practice question. It specifies the exact resource (Microsoft Learn references) and the subject area (Azure), distinguishing it from sibling tools that focus on identity, roles, or resource inventory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. While the sibling list contains many tools, none directly compete as a documentation search tool, so the intended usage is implied but not stated. No mention of prerequisites, typical scenarios, or when to avoid using it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_application_provenanceARead-onlyIdempotent
Resumo executivo da procedência das aplicações do tenant: quantas estão sob sua governança (criadas no tenant) versus pré-provisionadas pela Microsoft, com percentuais e foco de governança.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly and idempotent behavior; the description adds value by disclosing the analytical content: counts of governed versus Microsoft-provisioned apps, percentages, and a governance focus. It does not describe every output detail, but for a read-only summary tool that is not a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that front-loads the tool's purpose and then specifies the exact output dimensions: counts, percentages, and governance focus. There is no filler or redundant repetition of schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless summary tool, the description supplies sufficient context: what is summarized, the tenant scope, the categorical breakdown, and the metric types. Since there is no output schema, the description reasonably characterizes the return content without needing to enumerate fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so there are no parameter semantics for the description to clarify. The baseline for a no-parameter tool applies; the description makes the tool callable without any input decision.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('summarize') and resource ('application provenance') and clearly defines the scope: tenant applications categorized as created in the tenant versus pre-provisioned by Microsoft, with percentages and governance focus. The 'Resumo executivo' wording distinguishes this from the sibling list_application_provenance, which implies a detailed listing rather than an aggregate summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when an executive summary of application provenance is needed, but it does not explicitly state when to choose this tool over list_application_provenance or other siblings. No exclusionary or alternative guidance is provided, so the agent must infer the boundary from the word 'Resumo'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_privilege_timelineBRead-onlyIdempotent
Resumo da timeline de privilégios (ganhos, revogações, ativações e anomalias).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds useful context about the content categories (gains, revocations, activations, anomalies), but does not disclose behavior such as aggregation logic, date-range handling, or return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the core purpose, and the parenthetical list efficiently conveys scope. It has no redundant filler, though it could have included more operational detail without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and safe annotations, the description is mostly adequate. However, it omits any mention of the 'days' parameter, does not distinguish itself from closely related timeline tools, and provides no information about what the returned summary contains beyond the category list. Since there is no output schema, a bit more context would be valuable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining the 'days' parameter. It does not mention 'days', its meaning, or its effect on the summary. The schema only provides a type and default, leaving the agent to guess that it controls the lookback window.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (privilege timeline) and the operation (summary), and it lists the covered aspects: gains, revocations, activations, and anomalies. It does not explicitly differentiate this from sibling tools like list_privilege_timeline_events or export_privilege_timeline_report, but the summarize intent is reasonably clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus the many sibling tools such as list_privilege_timeline_events, get_identity_privilege_timeline, timeline_natural_language_query, or export_privilege_timeline_report. The intended use is only implied by the word 'summary', with no explicit conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
timeline_natural_language_queryCRead-onlyIdempotent
Interpreta perguntas de auditoria temporal de privilégios em linguagem natural.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| question | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description adds little behavioral context beyond those hints. It does not disclose what the tool returns, how it handles malformed questions, or any limitations of the natural-language interpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no filler or redundancy, and the core purpose is front-loaded. It is concise, though the brevity comes at the cost of useful details that could have been included without harming structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's NL-query nature, the absence of an output schema, and the large set of ambiguous sibling tools, this description is too sparse. It lacks examples, alternative routing guidance, and any explanation of the query result format or capabilities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies that 'question' is a natural-language temporal privilege audit question, but it says nothing about the 'limit' parameter, default behavior, or expected question format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: it interprets natural-language questions about temporal privilege audit. The temporal privilege audit scope distinguishes it from generic query tools, though it does not explicitly contrast it with other natural-language query siblings like iam_natural_language_query or pim_natural_language_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the many related NL query and timeline tools. The intended context is implied by the description but no exclusions or alternatives are provided, leaving the agent to infer routing 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
66 tool updates
v0.1.0- First observed
agent_natural_language_query - First observed
assess_privileged_mfa - First observed
compute_identity_blast_radius - First observed
detect_toxic_combinations - First observed
export_privilege_timeline_report - First observed
get_agent_relationships - First observed
get_agents_by_owner - First observed
get_authentication_methods_summary - First observed
get_authentication_strength_summary - First observed
get_environment_summary - First observed
get_identity_access_summary - First observed
get_identity_privilege_timeline - First observed
get_license_posture - First observed
get_management_group_inventory - First observed
get_owned_objects - First observed
get_pim_state_summary - First observed
get_resource_groups_count - First observed
get_role_risk_score - First observed
get_subscription_direct_access_summary - First observed
get_subscriptions_count - First observed
get_tenant_licenses - First observed
get_user_authentication_methods - First observed
get_user_effective_azure_access - First observed
graph_answer_identity_question - First observed
graph_assessment - First observed
graph_directory_objects - First observed
graph_discover_capabilities - First observed
graph_get - First observed
graph_list - First observed
graph_permissions - First observed
graph_query - First observed
graph_relationship - First observed
graph_role_assignments - First observed
iam_natural_language_query - First observed
identity_360 - First observed
list_agent_identities - First observed
list_application_provenance - First observed
list_application_secrets_expiring - First observed
list_applications_without_owners - First observed
list_azure_role_assignments - First observed
list_deny_assignments - First observed
list_disabled_users_with_active_roles - First observed
list_entra_users - First observed
list_graph_critical_application_permissions - First observed
list_objects_without_owner - First observed
list_orphan_azure_role_assignments - First observed
list_pim_role_states - First observed
list_privilege_timeline_events - First observed
list_privileged_azure_role_assignments - First observed
list_public_ip_resources - First observed
list_resource_groups - First observed
list_resources - First observed
list_top_blast_radius - First observed
list_users - First observed
list_users_with_direct_permissions - First observed
list_users_with_passkey - First observed
list_users_with_weak_authentication - First observed
list_users_without_mfa - First observed
pim_natural_language_query - First observed
run_agent_assessment - First observed
run_enterprise_identity_audit - First observed
run_iam_assessment - First observed
search_official_guidance - First observed
summarize_application_provenance - First observed
summarize_privilege_timeline - First observed
timeline_natural_language_query
TDQS
Scored across 66 tools
Several tools have unclear boundaries, such as list_entra_users vs list_users, list_azure_role_assignments vs graph_role_assignments, and the multiple natural-language query and assessment tools. An agent could easily choose the wrong tool for user-listing, role-assignment, or timeline questions. A few tools like identity_360 and detect_toxic_combinations are distinct, but the overall set is highly ambiguous.
Most tools follow readable snake_case list_/get_/run_ naming, but the set mixes conventions with names like identity_360, graph_assessment, and noun-first NL query tools such as pim_natural_language_query and agent_natural_language_query. The graph_* prefix is inconsistently combined with verbs, making the pattern predictable only part of the time.
66 tools is an extreme number for an identity security audit server, and many tools are near-duplicates or could be consolidated into parameterized operations. This far exceeds the 25+ threshold and creates a heavy, unwieldy tool surface.
The surface is quite comprehensive for read-only identity governance: it covers users, RBAC, PIM, MFA, licenses, agent identities, blast radius, object ownership, provenance, and Graph/API access. Since this is an audit-focused server, missing create/update/delete is acceptable; minor gaps exist around detailed sign-in/audit log exploration and remediation actions.
Maintenance
Related MCP Connectors
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Copilot connector permission audits with owner signoff receipts.
- ZopDev MCPOAuthdev.zop
Cloud cost, inventory and governance on AWS/Azure/GCP. Read-only by default, optional scoped writes
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceProvides secure access to Microsoft Entra ID (Azure AD) resources including users, devices, and applications through Microsoft Graph API. Enables querying organizational data with comprehensive audit logging to Azure Blob Storage.-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to query Microsoft Entra data using natural language, converting requests into Microsoft Graph API calls for read-only enterprise IT scenarios.53CC BY-4.0
- AlicenseAqualityBmaintenanceEnables auditing and monitoring of Microsoft Entra ID security posture, Conditional Access policies, and Zero Trust alignment via Microsoft Graph API.5MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to inspect and audit Azure Landing Zones by inventorying resources, auditing tagging, evaluating policy compliance, and detecting infrastructure drift, all in read-only mode.-