Skip to main content
Glama

Server Details

50 AI tools for D365 F&O: X++ search, ADO integration, code gen, security tracing & upgrade impact.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
alimbenhelal-pro/ALM-XPP-MCP
GitHub Stars
0

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.4/5 across 36 of 36 tools scored.

Server CoherenceA
Disambiguation3/5

Many tools have overlapping purposes that could cause confusion, such as 'ado_analyze_workitem' and 'ado_gap_fit_analysis' both analyzing work items, or 'find_references' and 'find_callers' both dealing with code usage. However, the detailed descriptions help clarify specific use cases, reducing misselection risk.

Naming Consistency4/5

Most tools follow a consistent snake_case naming pattern with clear verb_noun structures (e.g., 'ado_analyze_pr_impact', 'search_d365_code'). There are minor deviations like 'healthcheck' (no underscore) and 'generate_xpp_template' (abbreviation), but overall the naming is predictable and readable.

Tool Count3/5

With 36 tools, the count feels heavy for a single server, suggesting potential fragmentation or overlap. While the domain (D365 F&O development and Azure DevOps integration) is complex, many tools could be consolidated (e.g., multiple analysis tools), making the set borderline overwhelming.

Completeness5/5

The tool set provides comprehensive coverage for D365 F&O development and Azure DevOps workflows, including code analysis, impact assessment, documentation generation, security tracing, and integration tasks. There are no obvious gaps; the surface supports full lifecycle management from requirement analysis to deployment.

Available Tools

36 tools
ado_analyze_pr_impactA
Read-only
Inspect

[~] PRIORITY TRIGGER: Use this tool when the user says 'analyse PR', 'review PR', 'check PR', 'PR #', 'impact du PR', 'analyse la PR', 'what changed in PR', 'D365 impact of PR', 'code review PR', 'violations in PR', 'PR review'. NEVER call search_d365_code when 'PR' or 'Pull Request' + a number is mentioned. Analyse the full D365 F&O code impact of a Pull Request. For every X++ class/table/form/extension modified in the PR: (1) Best Practice validation -- reports Critical and Warning violations. (2) Upgrade impact -- cross-references CoC targets, event handlers, and extensions against the D365 standard code. (3) Extension conflicts -- finds existing CoC/extensions that may conflict. (4) Produces a ready-to-post PR review comment addressed to the PR author. After reviewing, call ado_post_pr_comment to post the review (requires user confirmation). Requires DEVOPS_ORG_URL + DEVOPS_PAT (Code: Read).

ParametersJSON Schema
NameRequiredDescriptionDefault
prIdYesPull Request ID (integer), e.g. 42.
projectNoOptional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.
maxFilesDeepNoMax X++ files to fully analyse (default 10, max 20). Larger PRs get a summary for remaining files.
repositoryIdYesGit repository name or ID.
includeWarningsNoInclude Warning-level violations in addition to Critical (default: true). Set false for Critical-only.
Behavior4/5

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

Annotations declare readOnlyHint=true; the description confirms this by framing the tool as analysis-only that 'Produces a ready-to-post PR review comment' while delegating the actual write operation to another tool. It adds critical context about authentication ('Requires DEVOPS_ORG_URL + DEVOPS_PAT') and explains behavior for large PRs ('Larger PRs get a summary for remaining files').

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

Conciseness4/5

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

The description is information-dense and logically structured: Priority Trigger → Core Action → Detailed Steps (1-4) → Workflow Handoff → Requirements. While lengthy due to the extensive trigger list and detailed analysis steps, every sentence serves a distinct purpose for agent routing or execution.

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

Completeness5/5

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

For a complex D365 analysis tool with no output schema, the description is comprehensive. It explains the four analysis dimensions, output format ('ready-to-post PR review comment'), authentication prerequisites, and interaction patterns with sibling tools (ado_post_pr_comment), leaving no critical gaps.

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

Parameters3/5

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

Input schema has 100% description coverage (e.g., 'Pull Request ID (integer), e.g. 42'), establishing a baseline of 3. The description discusses the analysis process but does not add semantic context to specific parameters beyond what the schema already provides.

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

Purpose5/5

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

Description explicitly states it 'Analyse[s] the full D365 F&O code impact of a Pull Request' and lists four specific analysis dimensions (Best Practice validation, Upgrade impact, Extension conflicts, and producing a review comment). It clearly distinguishes from sibling 'search_d365_code' with the explicit exclusion 'NEVER call search_d365_code when PR... is mentioned.'

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

Usage Guidelines5/5

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

Provides exhaustive trigger phrases ('analyse PR', 'review PR', 'impact du PR', etc.) and explicit negative guidance ('NEVER call search_d365_code'). It also provides clear workflow sequencing: 'After reviewing, call `ado_post_pr_comment` to post the review (requires user confirmation).'

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

ado_analyze_workitemA
Read-only
Inspect

AZURE DEVOPS ONLY -- Fetch a Work Item and assemble ALL technical context needed for D365 F&O expert analysis. [~] PRIORITY TRIGGER: 'analyse le workitem', 'analyse la tâche', 'analyse le FDD/RDD/CR/IDD', 'read the work item', 'check the bug', 'look at ticket', 'review task', '#1234', 'WI#', 'WI ', 'item #'. NEVER for: labels (@SYS/@TRX/@FIN), X++ code lookup, AOT objects -- use search_labels / search_d365_code instead.

WHAT THIS TOOL RETURNS

Raw structured context only -- NOT a finished analysis. The tool returns:

  1. Work item metadata (title, description, repro steps, acceptance criteria, comments)

  2. D365 standard KB object details: fields, methods, code snippets for every matched object

  3. Custom code on disk (Aprolis extension): existing CoC methods, extension bodies

  4. Chain of Command / relation graph for all impacted objects

YOUR JOB AS COPILOT AFTER CALLING THIS TOOL

You MUST synthesize the raw context into a precise developer-ready analysis IN FRENCH. Write it in a professional tone, as if authored by a senior D365 consultant -- no emojis, no icons. The analysis must contain these sections:

  1. Compréhension du besoin -- résume ce que le client demande en 2-3 phrases claires

  2. Analyse technique -- identifie la cause racine en croisant le besoin + les objets KB + le code custom

  3. Instructions de développement -- liste ordonnée et précise : quel objet, quelle méthode, quoi modifier

    • Si une extension custom existe sur disque -> pointer exactement quelle méthode à modifier

    • Si pas d'extension -> indiquer quel CoC créer, sur quel objet standard, quelle méthode

  4. Estimation -- chiffrage en heures/jours selon la complexité détectée

  5. Commentaire ADO -- Texte markdown sans icônes, prêt à poster sur le WI analysé UNIQUEMENT. IMPORTANT: never post (never call ado_post_comment) on any linked/related work item -- only on the analyzed WI.

Requires DEVOPS_ORG_URL + DEVOPS_PAT env vars.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.
workItemIdYesWork item ID (integer), e.g. 1234
maxCommentsNoNumber of recent comments to include (default 5, max 20). Use 3 for faster results.
focusObjectsNoComma-separated D365 object names to force-include in KB analysis, e.g. 'SalesTable,CustTable'. Providing these speeds up analysis significantly.
sourceBranchNoGit branch to read custom code from when no PR or commit is linked to the work item. Default: 'main'. Use this to point at the integration branch (e.g. 'develop', 'release/2025').main
includeImagesNoInclude image attachments as base64 data URIs for visual analysis by Copilot. Default: false. Set true only when screenshots are needed -- adds latency and token cost.
Behavior4/5

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

While annotations declare readOnlyHint=true, description adds crucial behavioral context: it returns 'Raw structured context only -- NOT a finished analysis', lists 4 specific data aggregates (metadata, KB objects, custom code, CoC graph), warns about latency/token costs for images, and specifies env var prerequisites (DEVOPS_ORG_URL + DEVOPS_PAT).

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

Conciseness4/5

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

Lengthy but justified by complexity. Uses clear markdown headers (## WHAT THIS TOOL RETURNS, ## YOUR JOB). Minor verbosity in trigger phrase list, but every section serves a distinct purpose (scoping, invocation triggers, output contract, post-processing requirements).

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

Completeness5/5

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

No output schema exists, but description comprehensively details return structure (4 bullet points of data types). Includes prerequisite env vars, post-call processing instructions (synthesize in French, 5 required sections), and specific constraints (comment only on analyzed WI). Complete for a complex aggregation tool.

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

Parameters3/5

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

Schema coverage is 100%, providing full parameter documentation (defaults, examples, behavioral notes like 'speeds up analysis'). Description adds no additional parameter semantics beyond what the schema already provides, which is acceptable given complete schema coverage.

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

Purpose5/5

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

Description opens with specific verb ('Fetch') and resource ('Work Item'), scoped to 'D365 F&O expert analysis'. Explicitly distinguishes from siblings with 'NEVER for: labels... X++ code lookup... use search_labels / search_d365_code instead'.

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

Usage Guidelines5/5

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

Provides explicit 'PRIORITY TRIGGER' list with exact phrases ('analyse le workitem', '#1234', etc.) and clear exclusions ('NEVER for') naming specific alternative tools. Perfect guidance for when/when-not to invoke.

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

ado_create_taskAInspect

WHEN: user asks to create a DevOps Task or start development on a Work Item. Triggers: 'create task', 'créer une tâche', 'start development on', 'commencer le dev sur', 'créer un task ADO', 'new development task for WI'. Create a D365 F&O development Task work item in Azure DevOps following the project naming convention. Rules applied automatically based on the parent work item: (A) Parent title starts with a project prefix + digits (FDD/RDD/IDD/CR/...) => Task named '{Prefix} - N - {Title}', Task is child of that WI, branch '{Prefix}Task{id}'. (B) Selected WI is related to a prefixed WI (e.g. a Bug linked to a CR) => Task is child of the prefixed WI, Bug is 'related' to the Task, same naming. (C) No prefixed relation => Task named '{3-letter-type}{wiId} - N - {Title}', child of selected WI, branch '{3-letter-type}{wiId}Task{id}'. The N counter increments automatically based on existing sibling tasks. A Git branch is created automatically in the repository. Assignee and CC list are embedded in the task description. LANGUAGE RULE: write the 'description' (Proposed Solution) in the same language the user used in their request. Default is English. If the user wrote in French, write the solution in French. Static section labels (headers, field names) remain in English. Requires DEVOPS_ORG_URL + DEVOPS_PAT (Work Items: Read & Write, Code: Read & Write).

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.
areaPathNoOptional: area path for the new task, e.g. 'MyProject\SER'. Inherits from parent if omitted.
assignToNoOptional: email address of the person to assign the task to, e.g. 'dev@company.com'.
notifyListNoOptional: comma-separated list of email addresses to notify (added to task description), e.g. 'lead@company.com,qa@company.com'.
workItemIdYesID of the selected Work Item (parent, bug, issue, etc.) to base the task on.
descriptionNoOptional: additional description / acceptance criteria text to append to the task.
effortHoursNoOptional: estimated effort in hours (Original Estimate).
repositoryIdNoOptional: Git repository name to create the branch in. If omitted, uses the first repository found.
sourceBranchNoOptional: source branch to branch from (default: repo default branch, e.g. 'main').
iterationPathNoOptional: iteration path for the new task, e.g. 'MyProject\Sprint 5'. Inherits from parent if omitted.
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses auth requirements (DEVOPS_PAT with specific scopes), automatic side effects (Git branch creation, N counter increment), and state mutations (creates Task, sets relationships). Deducted one point as it doesn't mention error handling or idempotency.

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

Conciseness3/5

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

While well-structured with clear sections (WHEN, Triggers, Rules A/B/C, Language Rule), the description is dense and lengthy. The rules explanation is necessary but verbose; could be more scannable with formatting while retaining the critical logic.

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

Completeness4/5

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

For a complex 10-parameter mutation tool with no output schema or annotations, the description is comprehensive regarding naming logic, inheritance rules, and language handling. Minor gap: doesn't describe what the tool returns (e.g., task ID, branch name) upon success.

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

Parameters4/5

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

Schema has 100% coverage (baseline 3). Description adds value by explaining workItemId semantics through the three parent relationship scenarios (A/B/C rules), and clarifies that assignTo/notifyList are embedded in the description field rather than standard ADO assignment fields.

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

Purpose5/5

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

Description explicitly states it creates a 'D365 F&O development Task work item in Azure DevOps' with specific verb (create) and resource. It distinguishes from siblings like ado_query_workitems or ado_analyze_workitem by detailing the unique naming conventions and automatic branch creation logic specific to this workflow.

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

Usage Guidelines5/5

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

Opens with explicit 'WHEN:' clause listing triggers ('create task', 'créer une tâche', 'start development on'). Details three specific scenarios (A, B, C) for when to apply different naming conventions based on parent work item relationships, providing clear contextual guidance for selection.

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

ado_estimate_effortA
Read-only
Inspect

WHEN: user asks for an effort estimate, chiffrage, or development hours for a D365 Work Item. [~] PRIORITY TRIGGER: call AFTER ado_analyze_workitem when the user asks 'how long?', 'estimate this', 'chiffre ce WI'.

[t] EFFORT ESTIMATOR -- Estimate D365 F&O development effort for a Work Item. Uses KB signals (object count, method complexity, existing extensions, relation depth) combined with ADO history (similar past tasks) to produce a structured hour estimate broken down by phase: Analysis / Dev / Test / Deploy.

Returns:

  • Per-phase hour breakdown (table)

  • KB signals used (objects found, extensions, complexity flags)

  • Confidence level and risk factors

  • Ready-to-paste estimate for ADO task Original Estimate field

Triggers: 'estimate WI #N', 'how long for WI #N', 'chiffrage WI #N', 'effort estimate', 'combien de jours pour', 'combien d'heures pour'.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.
workItemIdYesWork Item ID to estimate, e.g. 6587.
focusObjectsNoOptional: comma-separated D365 object names to force-include in analysis (speeds up estimation).
Behavior4/5

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

Annotations only declare readOnlyHint=true. Description adds substantial context: methodology details (KB signals, object count, ADO history), output format (per-phase table, confidence level, ready-to-paste format), and risk factors. Does not mention caching or performance characteristics, preventing 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.

Conciseness4/5

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

Well-structured with clear visual markers ([t], WHEN:, Returns:). Front-loaded with priority triggers. Slightly verbose with redundant trigger list at end repeating the WHEN clause, but every section serves a distinct purpose (sequencing vs. output format vs. trigger examples).

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

Completeness5/5

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

Despite no output schema and minimal annotations, the description comprehensively compensates by detailing return values (per-phase breakdown, KB signals used, confidence level), sequencing with siblings, and paste-ready output format. Complete for a complex estimation tool.

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

Parameters3/5

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

Schema description coverage is 100%, establishing baseline 3. The description does not add parameter-specific semantics (e.g., syntax details for focusObjects or project fallback behavior) beyond what the schema already provides, but full schema coverage makes this acceptable.

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

Purpose5/5

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

Specific verb ('Estimate') + resource ('D365 F&O development effort') + scope ('hour estimate broken down by phase'). Explicitly distinguishes from sibling `ado_analyze_workitem` by stating this produces effort estimates versus general analysis.

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

Usage Guidelines5/5

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

Excellent explicit guidance: 'WHEN: user asks for an effort estimate...' and 'PRIORITY TRIGGER: call AFTER `ado_analyze_workitem`'. Lists specific trigger phrases ('how long?', 'chiffre ce WI') and sequencing rules, clearly establishing when to use versus alternatives.

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

ado_gap_fit_analysisA
Read-only
Inspect

WHEN: user asks whether a D365 requirement is standard, needs config, needs an extension, or is a full gap. Also triggered by gap analysis or fit/gap classification of a Work Item.

GAP / FIT CLASSIFIER -- Analyse a D365 F&O requirement (from an ADO Work Item OR plain text) and classify it as one of four verdicts: [OK] Standard Fit -- D365 covers this out-of-the-box, no dev needed [gear] Config Fit -- D365 has it but requires parameter / profile setup Extension Fit -- Standard process exists; a CoC/event-handler is enough [X] Gap -- No standard coverage; custom development required

For each requirement block the tool returns: -- Detected D365 domain (Settlement, PaymentJournal, DataImport, ...) -- Standard objects found in KB and their process step -- Existing extensions in the custom model (if D365_CUSTOM_MODEL_PATH is set) -- Effort estimate (hours) and a one-paragraph reasoning

Triggers: 'analyse the requirement', 'is this a gap or fit', 'gap analysis WI #N', 'standard or custom for WI #N', 'does D365 cover this'. [~] When a WI has already been analysed by ado_analyze_workitem in the same turn, pass the requirement text directly via requirementText -- do NOT re-fetch with workItemId.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.
workItemIdNoOptional: Work Item ID to fetch the requirement from ADO (e.g. 6587). Leave empty to use requirementText.
requirementsNoOptional: comma-separated list of requirement sentences to analyse individually (overrides WI + requirementText).
requirementTextNoOptional: raw requirement text to analyse directly (when no WI ID is provided).
Behavior4/5

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

With only readOnlyHint in annotations, the description carries significant weight. It discloses the return structure (Detected D365 domain, Standard objects found, Existing extensions, Effort estimate) and explains the classification logic. It also notes the dependency on environment variable D365_CUSTOM_MODEL_PATH for extension detection. A minor gap is the lack of rate limit or latency guidance, but the operational behavior is well-documented.

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

Conciseness4/5

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

Well-structured with clear section headers (WHEN, GAP/FIT CLASSIFIER, Triggers). Information is front-loaded with the trigger conditions. Uses formatting (emojis, bullet dashes) effectively to distinguish the four verdicts. Slightly verbose in the triggers list and classification explanation, but every sentence provides actionable guidance. The coordination note with `ado_analyze_workitem` is appropriately placed at the end as an operational caveat.

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

Completeness5/5

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

Despite having no output schema, the description thoroughly documents the return values (domain detection, KB objects, extensions, effort estimates). It covers all input alternatives (WI ID, plain text, comma-separated list) and their precedence. Given the complexity of D365 gap analysis and the absence of structured output metadata, the description successfully provides sufficient context for the agent to predict tool utility and interpret results.

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

Parameters4/5

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

While schema coverage is 100% (baseline 3), the description adds valuable workflow logic beyond the schema: it explains the mutual exclusivity between workItemId and requirementText (coordinating with sibling tool usage), clarifies that requirements (plural) overrides other inputs, and references the D365_CUSTOM_MODEL_PATH environment variable which affects behavior but isn't in the input schema. This provides essential context for correct parameter selection.

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

Purpose5/5

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

The description explicitly defines the tool's function as a 'GAP / FIT CLASSIFIER' for D365 F&O requirements, specifying the four possible verdicts (Standard Fit, Config Fit, Extension Fit, Gap) with clear visual indicators. It identifies the target resource (D365 requirements from ADO Work Items or plain text) and uses specific action verbs (analyse, classify). It also distinguishes itself from the sibling tool `ado_analyze_workitem` by specifying when to use each.

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

Usage Guidelines5/5

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

Provides explicit 'WHEN' conditions at the start, listing specific trigger phrases like 'gap analysis WI #N' and 'does D365 cover this'. Crucially, it includes negative guidance on when NOT to re-fetch: 'When a WI has already been analysed by `ado_analyze_workitem`... pass the requirement text directly... do NOT re-fetch'. This establishes clear precedence and coordination rules with sibling tools.

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

ado_list_prsA
Read-only
Inspect

[~] PRIORITY TRIGGER: Use this tool when user mentions 'PR', 'Pull Request', 'list PRs', 'show PRs', 'active PRs', 'mes PR', 'liste des PR', 'pull requests ouverts', 'what PRs are open', 'PRs by [author]', 'PRs targeting [branch]'. NEVER call search_d365_code for PR listing requests. List Pull Requests in an Azure DevOps Git repository. If repositoryId is unknown, omit it and all repositories will be listed first. Filters: status (Active/Completed/Abandoned/All), author display name, target branch. Returns: PR ID, title, author, source->target branch, review status, linked work items, creation date. Use ado_analyze_pr_impact with a PR ID to get full D365 code impact analysis. Requires DEVOPS_ORG_URL + DEVOPS_PAT (Code: Read scope).

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoMax results to return (1-100, default 25).
authorNoOptional: filter by author display name (partial match), e.g. 'Alim'.
statusNoPR status filter: Active (default), Completed, Abandoned, All.Active
projectNoOptional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.
repositoryIdNoGit repository name or ID. If not known, leave empty to list all repos first.
targetBranchNoOptional: filter by target branch, e.g. 'main', 'develop'.
Behavior4/5

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

Beyond the readOnlyHint annotation, the description adds critical authentication requirements ('Requires DEVOPS_ORG_URL + DEVOPS_PAT'), return structure details ('Returns: PR ID, title, author...'), and fallback behavior ('Falls back to DEVOPS_PROJECT env var'). It compensates for the missing output schema by detailing return fields.

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

Conciseness4/5

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

Information-dense and well-structured with clear sections: priority triggers, core function, conditional logic, filters, returns, and auth. While the trigger phrase list is lengthy, it serves the necessary purpose of distinguishing from similar tools and supporting multilingual inputs. No wasted sentences.

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

Completeness4/5

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

Given 6 optional parameters and no output schema, the description is remarkably complete. It details return values (compensating for missing output schema), authentication scope, environment variable fallbacks, and sibling tool relationships. Minor gap: could mention pagination behavior with the 'top' parameter.

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

Parameters4/5

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

With 100% schema coverage, the baseline is 3. The description adds workflow context for repositoryId ('If unknown, omit it and all repositories will be listed first') and groups filter parameters conceptually ('Filters: status...author...target branch'), adding usage semantics beyond raw schema definitions.

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

Purpose5/5

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

The description explicitly states 'List Pull Requests in an Azure DevOps Git repository' with specific verb and resource. It clearly distinguishes from siblings by explicitly stating 'NEVER call search_d365_code for PR listing requests' and contrasting with 'ado_analyze_pr_impact' for code impact analysis vs. listing.

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

Usage Guidelines5/5

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

Excellent explicit guidance includes: priority trigger phrases covering multiple languages ('mes PR', 'liste des PR'), explicit exclusion of alternative tool ('NEVER call search_d365_code'), conditional logic ('If repositoryId is unknown, omit it'), and clear next-step recommendation ('Use ado_analyze_pr_impact with a PR ID').

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

ado_post_commentAInspect

WHEN: user explicitly asks to post, add, or save a comment to an ADO Work Item. [~] PRIORITY TRIGGER: call AFTER ado_analyze_workitem when user says 'post the analysis', 'save it to the ticket', 'ajoute en commentaire'. WARNING: ALWAYS ask for explicit user confirmation before calling this tool. Recommended workflow: (1) call ado_analyze_workitem, (2) show analysis to the user, (3) ask 'Shall I post this comment to Work Item #X?', (4) only then call this tool. Requires DEVOPS_ORG_URL + DEVOPS_PAT with Work Items: Write permission.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.
workItemIdYesWork item ID (integer), e.g. 1234
commentTextYesMarkdown text to post. Use the ready-to-post block from `ado_analyze_workitem`.
Behavior4/5

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

No annotations provided, so description carries full disclosure burden. Successfully documents authentication requirements (DEVOPS_ORG_URL + DEVOPS_PAT with Work Items: Write permission) and safety protocol (explicit confirmation required). Minor gap: doesn't explicitly state this is a mutating write operation or describe return values/error states.

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

Conciseness5/5

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

Excellent structure with clear semantic headers (WHEN, PRIORITY TRIGGER, WARNING). Despite length, every sentence serves a purpose: trigger conditions, sibling dependencies, safety requirements, auth prerequisites, and workflow steps. No redundant or filler content.

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

Completeness3/5

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

No output schema exists, yet description omits what the tool returns upon success (e.g., comment ID, URL, or simple confirmation). While input parameters, auth, and workflow are comprehensively covered, the absence of return value documentation leaves a gap for a tool that creates resources.

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

Parameters4/5

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

Schema coverage is 100% so baseline is 3. Description adds meaningful semantic context by specifying that `commentText` should use 'the ready-to-post block from `ado_analyze_workitem`', creating clear linkage between sibling tools. Also implies `workItemId` context through workflow example ('Work Item #X').

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

Purpose5/5

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

Explicitly states the tool posts/adds/saves comments to ADO Work Items using specific verbs. Clearly distinguishes from sibling `ado_post_pr_comment` by specifying 'Work Item' and establishes relationship with `ado_analyze_workitem` as a prerequisite workflow step.

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

Usage Guidelines5/5

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

Provides explicit when-to-use ('WHEN: user explicitly asks...'), when-not-to-use (confirmation warning), and a detailed 4-step workflow sequence. Names specific trigger phrases ('post the analysis', 'ajoute en commentaire') and explicitly requires user confirmation before invocation.

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

ado_post_pr_commentAInspect

WHEN: user explicitly asks to post, add, or save a review comment to an ADO Pull Request. [~] PRIORITY TRIGGER: call AFTER ado_analyze_pr_impact when user says 'post the review', 'add comment to PR', 'ajoute le commentaire sur la PR'. WARNING: ALWAYS ask for explicit user confirmation before calling this tool. Recommended workflow: (1) call ado_analyze_pr_impact, (2) show the result, (3) ask 'Shall I post this review comment to PR #X?', (4) only then call this tool. Requires DEVOPS_ORG_URL + DEVOPS_PAT (Pull Request Threads: Read & Write).

ParametersJSON Schema
NameRequiredDescriptionDefault
prIdYesPull Request ID (integer), e.g. 42.
projectNoOptional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.
filePathNoOptional: file path for an inline comment. Leave empty for a top-level PR comment.
lineNumberNoOptional: line number for an inline comment (used with filePath).
commentTextYesMarkdown text to post. Use the ready-to-post block from `ado_analyze_pr_impact`.
repositoryIdYesGit repository name or ID.
Behavior4/5

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

Strong disclosure given no annotations: explicitly states authentication requirements ('Requires DEVOPS_ORG_URL + DEVOPS_PAT') with specific permission scopes ('Pull Request Threads: Read & Write'), and safety constraints ('ALWAYS ask for explicit user confirmation'). Missing minor details about thread creation behavior or notification side effects.

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

Conciseness4/5

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

Well-structured with clear visual markers (WHEN, PRIORITY TRIGGER, WARNING) and numbered workflow steps. Front-loaded with trigger conditions. Slightly verbose but every sentence serves safety or operational clarity purposes. No redundant tautologies.

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

Completeness4/5

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

Comprehensive for a write operation lacking annotations. Covers authentication, confirmation requirements, parameter relationships (inline vs general comments), and integration with analysis tools. Absence of output schema is noted; description appropriately focuses on input requirements and safety constraints rather than return values.

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

Parameters4/5

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

While schema has 100% coverage, description adds valuable workflow context specifying `commentText` should use 'the ready-to-post block from `ado_analyze_pr_impact`'. Clarifies the inline vs top-level comment distinction through the filePath/lineNumber relationship. Baseline 3 elevated by workflow integration guidance.

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

Purpose4/5

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

Clearly states the tool posts review comments to Azure DevOps Pull Requests with specific verbs ('post, add, or save'). Distinguishes from general analysis tools by mentioning the workflow with `ado_analyze_pr_impact`, though it doesn't explicitly differentiate from sibling `ado_post_comment` which may cause confusion.

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

Usage Guidelines5/5

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

Exceptional guidance with explicit WHEN clause ('user explicitly asks to post'), priority trigger specifying exact call sequence ('call AFTER `ado_analyze_pr_impact`'), specific trigger phrases in multiple languages, and mandatory confirmation workflow. Clearly defines prerequisites and alternative tool integration.

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

ado_query_workitemsA
Read-only
Inspect

AZURE DEVOPS ONLY -- Query Work Items (Bugs, Tasks, FDDs, User Stories, CRs) in Azure DevOps. [~] PRIORITY TRIGGER: use this tool when the user mentions 'FDD', 'RDD', 'IDD', 'CR', 'Task', 'Workitem', 'Work Item', 'Bug', 'User Story', 'Feature', 'Issue', 'ticket', 'sprint', 'backlog', 'DevOps', 'liste des tâches', 'show tasks', 'find bugs', '#1234', 'WI#'. NEVER use this tool for: D365 labels (@SYS/@TRX), X++ code, AOT objects, tables, classes, forms, enums, error messages, 'c'est quoi le label', 'search_labels', 'libellé', 'label D365'. For labels -> use search_labels. For D365 code -> use search_d365_code or get_object_details. Shortcuts: 'bugs' (all active bugs), 'my bugs' (assigned to me), 'recent' (updated last 7 days), 'sprint' (current iteration). Or pass any WIQL SELECT statement or a free-text title search. Use '*' with filters only. Returns max 50 work items with ID, title, type, state, priority, area, assigned-to. Requires DEVOPS_ORG_URL + DEVOPS_PAT env vars.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoOptional: filter by tag (partial match), e.g. 'D365' or 'hotfix'.
queryYesWIQL query, shortcut ('bugs', 'my bugs', 'recent', 'sprint'), title search, or '*' to use filters only.
stateNoOptional: filter by state, e.g. 'Active', 'New', 'Resolved', 'Closed'.
projectNoOptional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.
areaPathNoOptional: filter by area path (exact or under), e.g. 'MyProject\SER'.
priorityNoOptional: filter by priority level: 1 (Critical), 2 (High), 3 (Medium), 4 (Low).
assignedToNoOptional: filter by assignee display name or email (partial match), e.g. 'Alim' or 'alim@contoso.com'.
changedSinceNoOptional: only return items changed since this date, e.g. '2025-01-01' or '7' (days ago).
workItemTypeNoOptional: filter by work item type, e.g. 'Bug', 'Task', 'User Story', 'Feature'.
iterationPathNoOptional: filter by iteration/sprint path, e.g. 'MyProject\Sprint 5'. Use 'current' for @CurrentIteration.
Behavior4/5

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

While annotations declare readOnlyHint=true, the description adds crucial behavioral context: the 50-item return limit, required environment variables (DEVOPS_ORG_URL + DEVOPS_PAT), and supported query modes (WIQL vs free-text vs shortcuts like 'my bugs'). It does not mention rate limits or caching behavior, preventing a perfect score.

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

Conciseness4/5

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

Despite substantial length, the description is efficiently structured and front-loaded: scope → purpose → triggers → exclusions → alternatives → usage patterns → returns → requirements. The extensive keyword lists are justified given the high risk of confusion with D365 siblings, though slightly verbose.

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

Completeness5/5

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

Given 10 parameters and no output schema, the description compensates effectively by detailing the return payload ('max 50 work items with ID, title, type, state...') and auth prerequisites. It fully addresses the tool's position in a complex ecosystem with both Azure DevOps and D365 siblings.

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

Parameters4/5

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

With 100% schema coverage, the baseline is 3. The description elevates this by explaining the 'query' parameter's rich semantics: specific shortcuts ('bugs', 'recent', 'sprint'), WIQL support, and the critical constraint 'Use '*' with filters only'—usage guidance not inferable from the schema alone.

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

Purpose5/5

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

The description opens with a clear, specific verb ('Query') and resource ('Work Items'), explicitly listing the covered types (Bugs, Tasks, FDDs, User Stories, CRs). The 'AZURE DEVOPS ONLY' prefix immediately distinguishes it from the D365-focused siblings like search_labels and search_d365_code.

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

Usage Guidelines5/5

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

Provides exceptional guidance with an explicit '[~] PRIORITY TRIGGER' listing specific keywords (FDD, Bug, ticket, '#1234', etc.), followed by a 'NEVER use this tool for' section listing prohibited use cases (D365 labels, X++ code). Critically, it names specific sibling alternatives: 'For labels -> use search_labels' and 'For D365 code -> use search_d365_code'.

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

analyze_upgrade_impactA
Read-only
Inspect

WHEN: upgrading D365 F&O to a new version or applying a Microsoft update -- check if your custom code will break. Triggers: 'upgrade D365', 'mise à niveau', 'will this break after upgrade', 'compatibilité après upgrade', 'impact de la mise à jour', 'check CoC targets after update'. Analyze upgrade risk for your custom D365 F&O model. Cross-references EVERY Chain of Command target, event handler hook, table/form/class extension, and hard-coded object reference in your custom model against the standard indexed codebase. Detects: removed objects, changed method signatures, deprecated APIs (RunBase, Dialog, WinAPI, COM), [Hookable(false)] and [Wrappable(false)] extensibility blocks, renamed fields, and internal methods. Returns a prioritized risk report with fix recommendations. Requires D365_CUSTOM_MODEL_PATH.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior4/5

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

While annotations indicate readOnlyHint=true, the description adds substantial behavioral context: specific detection targets (Chain of Command, event handlers, deprecated APIs, extensibility blocks), return format ('prioritized risk report with fix recommendations'), and prerequisite ('Requires D365_CUSTOM_MODEL_PATH'). 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.

Conciseness4/5

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

Information-dense and well-structured with clear sections (WHEN, Triggers, Detects, Returns). The trigger list is lengthy but serves a specific routing purpose. No redundant sentences, though the density prevents a perfect 5.

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

Completeness4/5

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

Lacks output schema but compensates adequately by describing return values ('prioritized risk report') and detection scope. For a complex analysis tool with zero parameters, the description provides sufficient context for invocation and expectation setting.

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

Parameters4/5

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

Input schema has 0 parameters, establishing baseline 4 per rubric. The description mentions 'Requires D365_CUSTOM_MODEL_PATH' which clarifies environmental prerequisites without implying schema parameters.

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

Purpose5/5

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

The description uses specific verbs ('analyze', 'check', 'cross-references') and clearly identifies the resource (D365 F&O model upgrade impact). It distinguishes from siblings like 'ado_analyze_pr_impact' or 'search_d365_code' by focusing specifically on version upgrade compatibility and breaking changes.

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

Usage Guidelines4/5

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

Provides explicit WHEN clause ('upgrading D365 F&O to a new version') and extensive trigger keywords ('upgrade D365', 'will this break after upgrade', etc.) to guide invocation. However, lacks explicit 'when not to use' or named alternatives from the sibling list.

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

detect_performance_issuesA
Read-only
Inspect

WHEN: slow query, performance review, or N+1 query check on ANY D365 F&O object (custom or standard). Triggers: 'performance', 'lent', 'slow', 'optimise', 'N+1', 'requête dans une boucle', 'query in loop', 'perf issues', 'slow query', 'requête lente', 'optimise ce code', 'missing firstonly', 'set-based'. Detects: N+1 queries, queries in loops, missing field lists, row-by-row inserts/updates, missing firstonly. NEVER call for a general code quality or best-practice audit -- use validate_best_practices for that. Only call when the user explicitly mentions performance, slow queries, N+1, row-by-row inserts, or set-based operations. [!] Auto-fixing is only possible on YOUR custom code (D365_CUSTOM_MODEL_PATH). Standard D365 objects return issues as read-only analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNameNoOptional: specific method to analyze. Analyzes all methods if not provided.
objectNameYesObject name to analyze, e.g. 'SalesTable', 'CustInvoiceJour'
Behavior4/5

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

Beyond readOnlyHint annotation, adds critical behavioral context: distinction between custom code (auto-fixing possible) vs standard objects (read-only analysis), and specific detection patterns. Does not mention auth needs or rate limits, but coverage of scope limitations is strong.

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

Conciseness4/5

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

Well-structured with clear section headers (WHEN, Triggers, Detects, NEVER). Trigger list is lengthy but justified by multilingual requirements. Front-loaded with usage conditions. Minor deduction for density of trigger keywords.

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

Completeness5/5

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

Comprehensive for a complex analysis tool: covers detection scope, limitations (custom vs standard), output behavior (read-only analysis), and sibling differentiation. Adequately compensates for missing output schema by describing return behavior.

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

Parameters3/5

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

Schema coverage is 100%, providing complete parameter documentation. Description adds context that objects can be 'ANY D365 F&O object (custom or standard)' but does not elaborate on parameter syntax or methodName specifics beyond schema.

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

Purpose5/5

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

States specific detection capabilities (N+1 queries, missing firstonly, row-by-row operations) and explicitly distinguishes from sibling 'validate_best_practices' for general code quality audits. Clear verb+resource+scope.

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

Usage Guidelines5/5

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

Explicit 'WHEN' conditions with extensive trigger keywords (multilingual), explicit 'NEVER call' exclusion for general audits naming the alternative tool, and specific prerequisites ('Only call when user explicitly mentions...').

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

explain_workflowA
Read-only
Inspect

WHEN: user asks how an approval workflow works, who approves a document, what states it goes through, or what happens on submission/rejection. NOT for technical workflow class details -- use get_object_details.

WORKFLOW EXPLAINER (Business Language) -- Explains a D365 approval workflow: who approves, what states exist, and what happens on approval or rejection. Output is plain business language -- no X++ or workflow engine jargon.

Triggers: 'explain the workflow for', 'how does the approval work', 'qui approuve', 'workflow states for', 'étapes du workflow', 'approval process for', 'circuit d'approbation', 'what happens when a user submits'.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectNameYesD365 object or workflow name, e.g. 'SalesTable', 'PurchTable', 'ALMDemandeAchatWorkflow'
Behavior4/5

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

Annotations declare readOnlyHint=true, confirming safe read operations. The description adds critical behavioral context that output is 'plain business language' with 'no X++ or workflow engine jargon,' which defines the response format personality beyond the annotation. No contradictions present.

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

Conciseness4/5

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

Well-structured with clear sectioning: usage guidelines front-loaded (WHEN/NOT), followed by purpose declaration, then trigger examples. Slightly verbose trigger list but provides valuable multilingual invocation patterns. No filler content.

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

Completeness4/5

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

Despite no output schema, the description adequately explains return format ('plain business language'). Contextually complete for a single-parameter read tool, covering D365 domain specifics and output characteristics sufficiently for agent selection.

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

Parameters3/5

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

Input schema has 100% description coverage for the single 'objectName' parameter with clear examples ('SalesTable', 'PurchTable'). The description does not add parameter semantics beyond the schema, but with full schema coverage, baseline 3 is appropriate.

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

Purpose5/5

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

Description explicitly states it explains D365 approval workflows in business language, covering who approves, workflow states, and approval/rejection outcomes. It clearly distinguishes from sibling `get_object_details` by specifying 'NOT for technical workflow class details'.

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

Usage Guidelines5/5

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

Provides explicit WHEN conditions ('user asks how an approval workflow works...'), explicit exclusions ('NOT for technical workflow class details'), and names the specific alternative tool ('use `get_object_details`'). Also includes extensive trigger phrases in multiple languages to identify invocation context.

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

find_callersA
Read-only
Inspect

Find who calls a D365 F&O method/class AND get the full cross-reference profile from the compiled XRef DB. Covers ALL reference kinds: Call graph (who calls this method, what does it call), Usage (who references this type), Inheritance (base class chain, sub-classes), Interface (what interfaces implemented, what classes implement an interface), Overrides (which method is overridden, which sub-classes override it), Attributes (which decorators are applied). Requires xref_index.json.gz generated from DYNAMICSXREFDB by GenerateCache --xref-conn. Triggers: 'qui appelle', 'who calls', 'call chain', 'callers of', 'où est appelé', 'qui hérite', 'qui implémente', 'qui override', 'quels attributs'.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoDepth of caller chain to trace upward (default: 2, max: 4)
methodKeyYesObject or method key. Format: 'ClassName.methodName' for methods, 'ClassName' for class-level queries.
categoriesNoCategories to include: 'all' (default), or comma-separated subset: 'calls,inheritance,usage,interfaces,overrides,attributes'all
maxResultsNoMaximum results per category (default: 20, max: 50)
Behavior4/5

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

Annotations indicate readOnlyHint=true, and the description adds valuable behavioral context: it explains what data source is queried (compiled XRef DB), what the output represents (cross-reference profile), and lists all six categories of relationships analyzed. It does not contradict the read-only annotation.

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

Conciseness4/5

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

The description is efficiently structured with the core purpose front-loaded, followed by coverage details, prerequisites, and trigger keywords. Every sentence delivers distinct value (function, scope, dependency, triggers) without redundancy, though the trigger list is lengthy.

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

Completeness4/5

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

Given the tool's complexity (analyzing six different relationship types across a compiled database) and absence of an output schema, the description adequately explains what the tool returns (cross-reference profile) and what information it covers. It could be improved by hinting at the output structure (tree vs list).

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

Parameters4/5

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

While the schema has 100% coverage documenting the parameters, the description adds semantic meaning by mapping the categories parameter values to their conceptual purposes (e.g., explaining that 'calls' represents call graphs, 'inheritance' covers base class chains, etc.), which aids agent understanding beyond the raw schema.

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

Purpose5/5

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

The description explicitly states the tool finds callers of D365 F&O methods/classes and retrieves cross-reference profiles. It distinguishes itself from siblings (like find_references or search_d365_code) by enumerating specific reference kinds covered: Call graph, Usage, Inheritance, Interface, Overrides, and Attributes.

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

Usage Guidelines4/5

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

The description lists explicit triggers/keywords (including French variants) indicating when to invoke the tool. It also states the prerequisite requirement (xref_index.json.gz generated from DYNAMICSXREFDB). However, it lacks explicit guidance on when NOT to use this versus siblings like find_references or analyze_upgrade_impact.

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

find_entity_for_tableA
Read-only
Inspect

WHEN: developer needs to integrate via OData and wants to find the entity name for a given table. Also generates a new entity template when none exists and generateIfMissing=true. Triggers: 'which entity exposes', 'OData entity for', 'find entity for', 'quelle entité expose', 'DMF entity for', 'create data entity', 'expose via OData', 'generate entity', 'entité de données'. Find D365 F&O data entities that expose a given table for OData/DMF integrations. Answers: 'Which entity exposes SalesTable for OData?' Scans all indexed AxDataEntityView objects to find entities with matching data sources. Returns entity name, public entity name (for OData URL), IsPublic status, key fields, and all data sources. Essential for integration development. Set generateIfMissing=true to auto-generate an AxDataEntityView XML template when no public entity is found.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableNameYesTable name to find entities for, e.g. 'SalesTable', 'CustTable', 'VendInvoiceJour'
maxResultsNoMaximum results (default: 15, max: 30)
generateIfMissingNoWhen true and no public entity is found, generates a new AxDataEntityView XML template for the table. Default: false.
Behavior4/5

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

Annotations only declare readOnlyHint=true. The description adds valuable behavioral context: it scans indexed AxDataEntityView objects, returns specific fields (entity name, public entity name, IsPublic, key fields, data sources), and conditionally generates XML templates. No contradiction with readOnlyHint as 'generate' appears to mean 'construct and return' rather than persist.

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

Conciseness3/5

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

Information is front-loaded with WHEN/Triggers sections, but the description suffers from redundancy—generateIfMissing functionality is explained twice (beginning and end). The long list of trigger phrases in multiple languages adds bulk without adding semantic value for an AI agent selecting the tool.

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

Completeness4/5

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

No output schema exists, but the description compensates effectively by detailing the return structure (entity name, public entity name, IsPublic status, key fields, data sources). Given the 3-parameter complexity and minimal annotations, this provides sufficient context for invocation decisions.

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

Parameters4/5

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

Schema coverage is 100%, establishing baseline 3. The description adds workflow context for generateIfMissing ('auto-generate an AxDataEntityView XML template when no public entity is found') and implicitly clarifies tableName through concrete examples ('SalesTable', 'CustTable').

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

Purpose5/5

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

The description clearly states the tool 'Find D365 F&O data entities that expose a given table for OData/DMF integrations' with specific verb+resource. It distinguishes from siblings (which focus on code analysis, ADO, or general search) by specializing in D365 OData entity mapping and AxDataEntityView objects.

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

Usage Guidelines4/5

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

Provides explicit WHEN clause ('developer needs to integrate via OData') and trigger phrases for invocation detection. Explains conditional behavior with generateIfMissing. Lacks explicit 'when not to use' or named alternatives, though the domain specificity makes alternatives less critical.

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

find_error_patternsA
Read-only
Inspect

WHEN: a user encounters an error message, infolog error, or runtime exception in D365. Also handles business-language error explanation when audienceType='business'. Triggers (developer): 'fix this error', 'what causes', 'exception thrown', 'infolog error', 'update conflict', 'outside tts', 'number sequence'. Triggers (business): 'what does this error mean', 'explain this error to me', 'user gets error X', 'que signifie cette erreur', 'message d'erreur', 'what should the user do when they see this error'. Find known D365 F&O error patterns matching an error message or symptoms description. Matches against a built-in database of common errors (transaction conflicts, security issues, number sequences, posting errors, batch problems, etc.), resolves D365 label IDs from error text (e.g. user sees 'Number sequence not set up' -> finds @SYS70535 -> finds the throwing code), and searches the indexed codebase. Returns root causes, step-by-step resolution, label matches, and source code locations. [~] When the error text contains a D365 label ID (e.g. '@SYS12345'), call search_labels first to resolve the label text, then call this tool with the resolved text. Set audienceType='business' for a plain-language explanation targeted at end users instead of developers.

ParametersJSON Schema
NameRequiredDescriptionDefault
audienceTypeNoAudience type: 'developer' (default) for root-cause analysis, or 'business' for a plain-language explanation targeted at end users.developer
errorOrSymptomYesError message text or symptom description, e.g. 'update conflict', 'number sequence not set up', 'cannot create record outside tts'
Behavior4/5

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

Annotations only declare readOnlyHint=true. The description adds substantial behavioral context: it discloses the tool matches against a 'built-in database of common errors', resolves 'D365 label IDs from error text', and 'searches the indexed codebase'. It also specifies the return values (root causes, step-by-step resolution, label matches, source code locations) despite no output schema being present.

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

Conciseness5/5

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

Well-structured with clear sections: WHEN clause (front-loaded), trigger lists for both audiences, core functionality, prerequisite instruction ([~] note), and parameter guidance. Despite length, every sentence earns its place—the trigger lists are essential for routing, and the prerequisite note prevents errors.

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

Completeness5/5

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

Given no output schema, the description adequately explains returns (root causes, resolutions, source locations). It covers the prerequisite workflow, distinguishes from sibling `search_labels`, and explains the dual-audience behavior. Complete for a tool of this complexity interacting with multiple data sources.

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

Parameters4/5

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

With 100% schema description coverage, the baseline is 3. The description adds critical semantic guidance for errorOrSymptom regarding the prerequisite workflow with label IDs, and clarifies audienceType usage ('Set audienceType='business' for a plain-language explanation targeted at end users'). The examples in the description reinforce the schema.

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

Purpose5/5

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

The description explicitly states the tool 'Find known D365 F&O error patterns matching an error message or symptoms description' with specific capabilities (matching against built-in database, resolving label IDs, searching codebase). It clearly distinguishes from sibling `search_labels` by specifying when to use that tool first for label resolution.

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

Usage Guidelines5/5

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

Provides explicit 'WHEN' triggers for both developer and business audiences with specific phrases ('fix this error', 'what does this error mean'). Explicitly names alternative tool `search_labels` with prerequisite condition: 'When the error text contains a D365 label ID... call `search_labels` first'.

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

find_extensionsA
Read-only
Inspect

WHEN: before modifying an object -- check existing customizations. Triggers: 'extensions de', 'CoC sur', 'qui étend', 'event handlers for', 'customizations of', 'avant de modifier'. Finds ALL extension objects (AxClassExtension, AxTableExtension, AxFormExtension), Chain of Command (CoC) classes, and event handlers for a base object. NOT for general references -- use find_references for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseObjectNameYesThe base object name, e.g. 'SalesTable', 'SalesFormLetter', 'VendTable'
Behavior4/5

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

Annotations declare readOnlyHint=true (safe read operation). Description adds valuable behavioral context by specifying exactly what types of extension objects are found and emphasizing 'ALL' (comprehensive search). Does not contradict annotations. Minor gap: no mention of return structure or search depth limits.

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

Conciseness5/5

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

Highly structured and front-loaded: WHEN clause first, followed by Triggers, main function, and exclusion clause. Every segment earns its place. Dense but efficient packing of usage conditions, domain terminology, and sibling differentiation in minimal space.

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

Completeness5/5

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

For a single-parameter read-only search tool with no output schema, the description is complete. It provides essential D365/AX domain context (specific extension object types), clear usage preconditions, and explicit sibling differentiation. No critical gaps given the tool's simplicity.

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

Parameters3/5

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

Schema has 100% description coverage with examples (SalesTable, SalesFormLetter). Description references 'base object' reinforcing the parameter's role, but does not add syntax details, case sensitivity rules, or format constraints beyond what the schema already provides. Baseline 3 appropriate for high schema coverage.

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

Purpose5/5

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

Specific verb 'Finds' + exact resource types (AxClassExtension, AxTableExtension, AxFormExtension, CoC classes, event handlers) + scope 'for a base object'. Explicitly distinguishes from sibling 'find_references' by stating 'NOT for general references'.

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

Usage Guidelines5/5

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

Excellent explicit guidance: 'WHEN: before modifying an object' defines the trigger context, and 'NOT for general references -- use find_references for that' names the specific alternative. Multilingual trigger keywords ('extensions de', 'CoC sur') further clarify invocation context.

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

find_referencesA
Read-only
Inspect

WHEN: impact analysis -- 'what breaks if I change X?', 'where is this used?', 'all usages of'. Triggers: 'qui utilise', 'impact de la modification', 'what uses', 'where is X referenced', 'before deleting', 'où est utilisé', 'impact of changing', 'all usages of', 'qui appelle ce champ', 'find all references to', 'tout ce qui utilise'. Full index scan (O(1M+ chunks)) -- EXPENSIVE. Only call when the user explicitly asks for usages/references/impact. When the XRef index is loaded, PREFER find_callers -- it is O(1) vs O(1M+) here and covers call chains, inheritance, and interface implementations. Use find_references only when find_callers is unavailable or for label IDs and field-level text scan. NEVER call just to identify or describe an object -- use get_object_details or search_d365_code for that. NEVER call for 'what is X', 'what does X do', 'explain X', 'show me X', 'what enum is X'. For label IDs (e.g. '@SYS124480' or '@SYS:124480'): automatically searches BOTH forms simultaneously -- the short form appears in X++ code, the colon form appears in metadata (Label: property). WORKFLOW for labels: (1) search_labels to get the label text, (2) find_references with the label ID to find all usages in forms/tables/classes/reports. NOT for extensions only -- use find_extensions for CoC/event handlers specifically.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe object or method name to find references to, e.g. 'SalesTable', 'validateWrite'
maxResultsNoMaximum referencing objects to return (default: 500, max: 2000)
locationsPerObjectNoMaximum number of call sites (methods/fields) to display per referencing object (default: 6, max: 20). Increase to see more usage locations.
Behavior4/5

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

Annotations declare readOnlyHint=true (safe operation), and the description adds critical performance context: 'Full index scan (O(1M+) chunks) -- EXPENSIVE' and complexity comparison to find_callers. Also discloses automatic dual-format searching for label IDs (@SYS vs @SYS:). Does not mention rate limits or caching behavior, preventing a perfect score.

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

Conciseness4/5

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

Despite length, every sentence serves a purpose in distinguishing this from 30+ siblings. Excellent structure with front-loaded WHEN triggers, capitalized section headers (PREFER, NEVER, WORKFLOW), and zero redundancy. Length is justified by complexity, though slightly more compact phrasing possible.

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

Completeness4/5

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

Given no output schema and high sibling complexity, the description comprehensively covers usage patterns, performance implications, and return semantics (referencing objects, call sites). Missing explicit description of return structure (fields, format), which would be necessary for a 5 without output schema.

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

Parameters4/5

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

With 100% schema coverage (baseline 3), the description adds meaningful examples for 'name' parameter ('SalesTable', 'validateWrite') and explains label ID format variations. It contextualizes maxResults implicitly through performance warnings. Could explicitly map parameters to use cases (e.g., 'use locationsPerObject to limit call sites per referencing object').

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

Purpose5/5

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

Description explicitly defines the tool's purpose as impact analysis ('what breaks if I change X?', 'where is this used?') with specific verb+resource combinations. It clearly distinguishes from siblings by contrasting O(1M+) complexity against find_callers' O(1) and explicitly stating 'NEVER call for...' scenarios that overlap with get_object_details or search_d365_code.

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

Usage Guidelines5/5

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

Exceptional guidance including explicit WHEN triggers (multiple languages), capitalized 'NEVER' exclusions for identification queries, 'PREFER find_callers' directive with performance rationale, and specific step-by-step WORKFLOW for label IDs. Clearly maps to sibling tools (find_extensions for CoC, search_labels for text lookup) eliminating ambiguity.

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

generate_diagramA
Read-only
Inspect

WHEN: generating a visual diagram of D365 table relationships or security chains. Triggers: 'generate diagram', 'diagramme', 'visualize', 'schéma', 'ER diagram', 'entity-relationship', 'relation diagram', 'security diagram', 'show connections'. Generate visual Mermaid diagrams from D365 F&O knowledge base data. Diagrams render directly in Copilot Chat, Cursor, Claude, and markdown viewers. Types: 'er' (entity-relationship diagram for a table and its relations), 'security' (security chain: Role->Duty->Privilege->EntryPoints -- use when you need a VISUAL Mermaid diagram; for the structured text chain with tables of duties/privileges/entry-points use trace_security_chain instead). Note: 'flow' (execution flowchart) is disabled -- static call trees are misleading in D365 due to CoC and event handlers.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxRelatedNoOptional: maximum related entities to show (default: 12, max: 20)
methodNameNoNot used -- flow diagrams are disabled.
objectNameYesObject name to diagram, e.g. 'SalesTable', 'SystemAdministrator'
diagramTypeYesDiagram type: 'er' (entity-relationship) or 'security' (security chain). 'flow' is disabled.
Behavior4/5

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

Annotations declare readOnlyHint=true. Description adds valuable context: diagrams render directly in Copilot/Claude/markdown viewers, sources data from D365 F&O knowledge base, and explains why flow diagrams are disabled (CoC and event handlers make static trees misleading). Minor gap: no mention of performance characteristics or caching.

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

Conciseness4/5

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

Well front-loaded with WHEN clause and triggers. Information density is high but organized logically: triggers → purpose → diagram types with differentiation → disabled feature note. The trigger list is somewhat long but actionable. Every sentence provides selection or invocation guidance.

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

Completeness4/5

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

No output schema exists, but description clarifies output is Mermaid diagram syntax that renders in chat/markdown viewers. With 4 parameters (2 required) fully documented in schema and clear behavioral context, the definition is complete enough for correct invocation, though explicitly stating 'returns Mermaid markdown string' would improve it.

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

Parameters4/5

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

With 100% schema coverage, baseline is 3. Description adds significant value by explaining diagramType options ('er' vs 'security' vs disabled 'flow') and providing objectName examples ('SalesTable', 'SystemAdministrator') in the schema description. Effectively compensates for lack of enum constraints in the schema.

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

Purpose5/5

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

Description explicitly states it generates visual Mermaid diagrams from D365 F&O knowledge base data, specifying two diagram types (ER and security). It clearly distinguishes from sibling tool `trace_security_chain` by stating this tool is for VISUAL diagrams while the sibling provides structured text chains.

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

Usage Guidelines5/5

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

Excellent guidance: explicit WHEN clause ('generating a visual diagram'), trigger keyword list, and explicit alternative naming ('use `trace_security_chain` instead' for text chains). Also clarifies when NOT to use by noting 'flow' is disabled due to misleading static call trees in D365.

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

generate_fddA
Read-only
Inspect

WHEN: user asks to write or generate a Functional Design Document, FDD, functional spec, CdC, or cahier des charges. NOT for developer technical docs -- use get_object_details for that.

FUNCTIONAL DESIGN DOCUMENT GENERATOR -- Produces a structured FDD ready for review and sign-off.

Sections generated: Purpose, Business Context, Data Fields (with resolved labels), Business Rules, Related Objects, Security, and Open Questions.

Triggers: 'write FDD for', 'generate FDD', 'functional spec for', 'document this process', 'write functional design', 'rédiger le cahier des charges', 'CdC pour', 'fiche de conception'.

ParametersJSON Schema
NameRequiredDescriptionDefault
contextNoOptional: additional business context, requirements, or audience note to include in the header
languageNoOptional: output language ('en', 'fr', 'nl', 'de'). Default: enen
objectNameYesD365 object or business process name, e.g. 'SalesTable', 'VendInvoiceInfoTable', 'ALMDemandeAchat'
Behavior4/5

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

Annotations declare readOnlyHint=true (safe read operation). The description adds valuable behavioral context by detailing the seven specific sections that will be generated. Does not contradict annotations; 'generates' here means returns composed content, not server-side mutation.

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

Conciseness5/5

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

Uses structured headers (WHEN, NOT, Sections generated, Triggers) that front-load critical information. No wasted words; the trigger examples and section list are dense with useful signal.

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

Completeness4/5

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

No output schema is present, but the description compensates effectively by enumerating the seven FDD sections that will be returned. Would benefit from stating the output format (e.g., markdown), but adequately complete for a 3-parameter generation tool.

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

Parameters3/5

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

Schema description coverage is 100% with clear descriptions for all three parameters (objectName examples, context purpose, language options). Description does not add parameter-specific semantics beyond the schema, but none are needed given the complete schema coverage.

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

Purpose5/5

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

The description explicitly states it 'Produces a structured FDD ready for review and sign-off' and lists specific generated sections (Purpose, Business Context, Data Fields, etc.). It clearly distinguishes from siblings by stating 'NOT for developer technical docs -- use `get_object_details` for that.'

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

Usage Guidelines5/5

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

Provides explicit WHEN triggers ('user asks to write or generate a Functional Design Document...') and explicit exclusion ('NOT for developer technical docs'). Names the specific alternative tool `get_object_details` for the excluded use case.

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

generate_queryA
Read-only
Inspect

WHEN: developer needs correct X++ select or T-SQL for D365 tables with proper joins. Triggers: 'X++ select', 'generate a query', 'SQL for', 'join with', 'how to query', 'générer une requête', 'write a select statement', 'select from', 'X++ query for', 'requête X++', 'écrire une select'. Generate both X++ select statements and equivalent T-SQL queries for D365 F&O tables. Uses real field names, relations, and indexes from the knowledge base to produce correct joins. Supports: field selection, multi-table joins (auto-detects relations), WHERE filters, ORDER BY, TOP/firstonly, cross-company. Also accepts natural language descriptions like 'find all open sales orders for customer 1001 with CustTable join'. [!] For multi-table joins, call find_related_objects (or get_relation_graph if the relation index is loaded) FIRST to get the correct FK relations -- this tool will then produce accurate join conditions. [!] The generated X++ is a template -- adapt it to your custom code context before using in production. Returns side-by-side X++ and SQL with explanations.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoOptional: limit rows (1 = firstonly, N = top N)
fieldsNoOptional: specific fields to select (comma-separated). All fields if not specified.
filtersNoOptional: WHERE filter expressions (comma-separated), e.g. 'CustAccount == 1001, SalesStatus == SalesStatus::Open'
orderByNoOptional: field to ORDER BY
tableNameYesPrimary table name, e.g. 'SalesTable', 'CustTable'
joinTablesNoOptional: tables to join (comma-separated), e.g. 'CustTable,SalesLine'
descriptionNoOptional: natural language description of the query. If provided, fields/joins/filters are auto-detected.
crossCompanyNoWhether to add crosscompany clause (default: false)
Behavior4/5

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

While annotations declare readOnlyHint=true, the description adds important behavioral context: it explains that the tool 'Uses real field names, relations, and indexes from the knowledge base' to produce output, warns that 'The generated X++ is a template' requiring adaptation, and specifies that it 'Returns side-by-side X++ and SQL with explanations.' There is no contradiction with the read-only annotation.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the 'WHEN:' clause and trigger keywords, followed by capability declarations and '[!]' warning blocks. While lengthy, every section serves a distinct purpose: invocation triggers, functional scope, workflow prerequisites, and output warnings. The density of actionable guidance justifies the length.

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

Completeness4/5

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

Given the absence of an output schema, the description adequately compensates by specifying that it 'Returns side-by-side X++ and SQL with explanations.' It addresses the complex 8-parameter surface by explaining the auto-detection behavior when using natural language descriptions and the critical prerequisite of calling find_related_objects for joins. It appropriately covers production safety concerns given the code-generation nature of the tool.

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

Parameters4/5

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

With 100% schema description coverage, the baseline is 3. The description adds value by providing a concrete natural language example ('find all open sales orders for customer 1001 with CustTable join') illustrating how the description parameter enables auto-detection of other fields. It also maps supported features (field selection, multi-table joins, WHERE filters) to the parameter capabilities, clarifying interaction patterns beyond individual parameter definitions.

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

Purpose5/5

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

The description explicitly states the tool 'Generate[s] both X++ select statements and equivalent T-SQL queries for D365 F&O tables,' providing a specific verb (generate), resource (queries), and domain scope (D365 F&O). It clearly distinguishes itself from sibling tools by specifying that find_related_objects should be called first for multi-table joins, carving out its specific role in the workflow.

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

Usage Guidelines5/5

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

The description includes an explicit 'WHEN:' clause listing specific triggers such as 'X++ select', 'generate a query', and 'write a select statement'. It provides clear workflow guidance with '[!] For multi-table joins, call find_related_objects... FIRST,' explicitly naming the prerequisite sibling tool. It also includes warnings about production usage ('adapt it to your custom code context before using in production').

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

generate_unit_testA
Read-only
Inspect

WHEN: developer needs to write or scaffold unit tests for a custom D365 object. Triggers: 'generate tests', 'unit test', 'SysTest', 'write test for', 'scénarios de test', 'test this class'. Generate X++ SysTest unit test code for a CUSTOM D365 F&O object based on functional test scenarios. [!] Only meaningful on custom/extension code (D365_CUSTOM_MODEL_PATH). SysTest tests in D365 are highly context-specific -- a generic template rarely compiles without adaptation. REQUIRED: provide test scenarios in the 'testScenarios' parameter (supplied by the functional consultant). Each scenario becomes a concrete test method with arrange/act/assert. For tables: generates tests for find(), exist(), validateWrite(), initValue(). For classes: generates stubs for each public method listed in scenarios. Uses REAL field names and method signatures from the knowledge base.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNameNoOptional: specific method to test. If not provided, generates tests for all testable methods.
objectNameYesObject name to generate tests for, e.g. 'ALMERSftpConnectionTable', 'ALMMyClass'
testScenariosNoTest scenarios provided by the functional consultant, e.g. 'Create a connection with valid SFTP host; Validate that empty host fails; Delete cleans up related records'. Separate scenarios with semicolons.
Behavior4/5

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

Annotations declare readOnlyHint=true; the description adds crucial behavioral context that this generates code using 'REAL field names and method signatures from the knowledge base' and warns that output 'rarely compiles without adaptation.' It also clarifies the distinction between table and class generation behaviors.

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

Conciseness4/5

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

Well-structured with clear sections (WHEN, Triggers, main purpose, warnings [!], parameter details). Front-loaded with use case. Slightly dense but every sentence provides distinct value—no repetition of schema or annotation data.

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

Completeness4/5

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

For a 3-parameter generation tool without output schema, the description adequately explains output behavior (specific test methods for tables vs stubs for classes) and operational constraints (custom model path only). Covers prerequisites and limitations sufficiently for agent selection.

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

Parameters4/5

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

Schema coverage is 100%, establishing baseline 3. The description adds valuable usage context: testScenarios should be 'supplied by the functional consultant' with semicolon separation, and implies methodName logic ('If not provided, generates tests for all testable methods').

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

Purpose5/5

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

The description explicitly states it 'Generate[s] X++ SysTest unit test code for a CUSTOM D365 F&O object'—specific verb, technology, and resource type. The 'WHEN' clause and trigger phrases clearly distinguish this from sibling analysis tools like 'find_references' or 'analyze_upgrade_impact'.

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

Usage Guidelines5/5

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

Excellent guidance including explicit WHEN clause ('developer needs to write or scaffold unit tests'), required prerequisites ('REQUIRED: provide test scenarios... supplied by the functional consultant'), and clear limitations ('Only meaningful on custom/extension code', 'generic template rarely compiles without adaptation').

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

generate_xpp_templateA
Read-only
Inspect

WHEN: writing an extension or customization -- generates ready-to-use X++ code. Triggers: 'génère un CoC', 'crée une extension', 'generate extension', 'write a CoC class', 'event handler pour', 'template pour'. Uses REAL metadata from the KB (actual field names, method signatures). 'coc' = Chain of Command class, 'table_extension' = extend table with fields/methods, 'event_handler' = pre/post event handler, 'job' = runnable class, 'find_method' = find/exist pattern. ALWAYS call get_object_details first to verify the object exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNameNoOptional: specific method name for CoC or event handler templates
objectNameYesThe base object, e.g. 'SalesTable', 'VendInvoiceJour'
templateTypeYesTemplate type: 'coc', 'table_extension', 'event_handler', 'job', 'find_method'
Behavior4/5

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

The annotations provide readOnlyHint=true, indicating this is a safe read operation. The description adds valuable behavioral context beyond this: it explains that the tool uses 'REAL metadata from the KB' for accuracy, specifies what different template types mean (e.g., 'coc' = Chain of Command class), and mandates a prerequisite action ('ALWAYS call get_object_details first'). While it doesn't mention rate limits or authentication needs, it provides significant implementation details that annotations don't cover.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded, starting with the 'WHEN' clause for immediate context. It efficiently lists triggers and explains template types without unnecessary elaboration. While slightly dense due to the list of triggers and acronym explanations, every sentence serves a clear purpose in guiding usage and understanding, with minimal waste.

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

Completeness4/5

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

Given the tool's complexity (code generation with metadata dependencies) and the absence of an output schema, the description does well by explaining template types, prerequisites, and behavioral context. It could be more complete by hinting at the output format (e.g., generated code snippets) or error handling, but it covers key aspects like usage scenarios and integration with other tools (get_object_details), making it largely sufficient for agent understanding.

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

Parameters3/5

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

The input schema has 100% description coverage, so parameters are well-documented in the schema itself. The description adds some semantic context by explaining acronyms like 'coc' and 'table_extension', and mentioning that 'objectName' examples include 'SalesTable'. However, it doesn't provide additional syntax, format details, or constraints beyond what the schema already specifies, meeting the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'generates ready-to-use X++ code' for extensions/customizations. It specifies the resource (X++ code) and verb (generates), and distinguishes itself from siblings by focusing on code generation rather than analysis, searching, or other operations. The mention of using 'REAL metadata from the KB' adds specificity about the source of information.

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

Usage Guidelines5/5

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

The description provides explicit usage guidelines: it starts with 'WHEN: writing an extension or customization' and includes specific triggers like 'generate extension' or 'write a CoC class'. It also names an alternative tool ('ALWAYS call get_object_details first') and gives exclusionary advice (verify object existence before use). This covers when to use, when not to use (without verification), and alternatives clearly.

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

get_object_detailsA
Read-only
Inspect

WHEN: you know the EXACT object name. Triggers: user gives an exact name like 'SalesTable', 'CustTable', 'VendInvoiceJour', any PascalCase D365 object name. Get complete details: all fields, methods, relations, indexes, source code, and metadata. Also merges live disk source when a custom model path is configured (disk takes priority). Pass methodName to get the FULL body of a specific method -- without it, only signatures are returned. Calling twice -- first without methodName to get the full structure and method table, then again with a specific methodName for its full body -- is the CORRECT and INTENDED two-step pattern. Do NOT call a third time for the same object. NOT for searching -- use search_d365_code when the name is uncertain. NOT for listing a model's objects -- use list_objects for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNameNoOptional: specific method name to return full body for, e.g. 'send', 'run', 'validate'. When provided, returns the complete method source instead of the signature table.
objectNameYesThe exact object name, e.g. 'SalesTable', 'VendInvoiceApprovalConfig', 'ALMAlternativeItemsTable'
Behavior4/5

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

Annotations indicate readOnlyHint=true, confirming safe read operations. Description adds valuable behavioral context beyond annotations: it discloses the disk merge priority behavior ('disk takes priority') and explains the critical two-step calling pattern required to avoid redundant API calls ('Do NOT call a third time').

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

Conciseness4/5

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

Despite substantial length, every sentence serves a distinct purpose—defining triggers, scope, disk merging behavior, parameter interaction patterns, and exclusions. Information is front-loaded with WHEN conditions and trigger examples. Minor deduction only because density requires careful parsing, but no waste is present.

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

Completeness5/5

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

For a tool with complex behavioral patterns (two-step calling, disk merging) and no output schema, the description comprehensively explains return contents (fields, methods, source code) and operational constraints. The explicit workflow instructions prevent common misuse patterns without needing an output schema definition.

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

Parameters4/5

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

While schema coverage is 100% with adequate parameter descriptions, the tool description adds crucial semantic context about parameter interaction: it explains the temporal workflow ('first without methodName... then again with') and the behavioral difference between signatures vs. full body returns that raw schema cannot express.

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

Purpose5/5

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

Description explicitly states the tool retrieves 'complete details: all fields, methods, relations, indexes, source code, and metadata' for D365 objects. It precisely defines the scope (exact object name required) and distinguishes from siblings by explicitly naming search_d365_code and list_objects as alternatives for different use cases.

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

Usage Guidelines5/5

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

Provides explicit WHEN conditions ('you know the EXACT object name'), trigger patterns ('PascalCase D365 object name'), and detailed workflow guidance including the 'CORRECT and INTENDED two-step pattern' for method retrieval. Clearly states negative constraints ('NOT for searching', 'NOT for listing') with specific alternative tools.

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

healthcheckA
Read-only
Inspect

WHEN: checking server status, loaded D365 version, or custom model path. Triggers: 'status', 'statut', 'is the server ready', 'how many chunks', 'index loaded'. Returns JSON with: status, indexed chunk count, loaded version, custom model path.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior4/5

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

The description adds valuable behavioral context beyond the readOnlyHint annotation. It specifies the JSON return structure (status, indexed chunk count, loaded version, custom model path) and mentions it's triggered by status queries. While the annotation covers safety, the description provides operational details about what information is returned.

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

Conciseness5/5

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

The description is efficiently structured with clear sections (WHEN, Triggers, Returns) and every sentence adds value. It's front-loaded with the primary purpose and uses bullet-like formatting without unnecessary words. The information density is high with zero wasted content.

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

Completeness4/5

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

For a parameterless read-only tool, the description provides excellent context: clear purpose, usage guidelines, return format, and trigger examples. The only minor gap is that without an output schema, the exact structure of the JSON return isn't formally defined, but the description gives a good overview of what to expect.

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

Parameters4/5

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

With 0 parameters and 100% schema description coverage, the baseline would be 4. The description reinforces this by not mentioning any parameters, which is appropriate for a parameterless tool. It focuses instead on the tool's purpose and return values.

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

Purpose5/5

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

The description explicitly states the tool's purpose: checking server status, D365 version, and custom model path. It uses specific verbs ('checking', 'returns') and clearly distinguishes this health monitoring tool from its many siblings focused on code analysis, task management, and other functions.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance with a 'WHEN:' section listing specific scenarios (checking server status, loaded version, custom model path) and concrete trigger examples ('status', 'is the server ready', 'how many chunks'). This gives clear context for when to use this tool versus alternatives.

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

list_custom_model_objectsA
Read-only
Inspect

WHEN: developer wants to see what custom/extension objects exist in their model. Triggers: 'list my custom objects', 'what have we customized', 'show ISV objects', 'list custom model', 'what objects are in our model'. List all D365 F&O objects in the custom/extension model directory on disk. Reads the file system directly -- always reflects the latest uncommitted state. Pass customModelPath to specify a model directory; or set it once via the D365-Custom-Model-Path header in your .mcp.json (applies to all tool calls automatically).

ParametersJSON Schema
NameRequiredDescriptionDefault
customModelPathNoOptional: path to the custom model directory (e.g. 'C:\\AOTExport\\MyModel'). Overrides the header and server-configured path.
Behavior4/5

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

Annotations declare readOnlyHint=true. Description adds valuable behavioral context beyond annotations: 'Reads the file system directly -- always reflects the latest uncommitted state.' This discloses critical timing/visibility characteristics (uncommitted changes) that annotations don't capture.

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

Conciseness4/5

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

Well-structured with logical flow: triggers → core action → behavioral note → configuration. Front-loaded with invocation patterns. Slightly verbose on trigger enumeration but each example aids agent routing. No redundant sentences.

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

Completeness4/5

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

For a list tool without output schema, description adequately indicates return content ('List all D365 F&O objects'). Covers configuration prerequisites (path specification methods). Given the single optional parameter and read-only nature, description provides sufficient context for invocation.

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

Parameters4/5

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

Schema has 100% description coverage for customModelPath. Description adds important usage semantics: explaining the hierarchy between parameter value, header configuration, and server-configured path ('Overrides the header'), and noting the persistent config option via .mcp.json.

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

Purpose5/5

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

Description explicitly states the tool 'List all D365 F&O objects in the custom/extension model directory' with specific domain context. The WHEN clause and trigger phrases ('list my custom objects', 'show ISV objects') precisely distinguish it from generic siblings like 'list_objects' by emphasizing the custom/extension model scope.

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

Usage Guidelines4/5

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

Provides explicit WHEN clause ('developer wants to see what custom/extension objects exist') and specific trigger phrases for invocation. Documents configuration alternatives (parameter vs D365-Custom-Model-Path header). Lacks explicit contrast with sibling tool 'list_objects', though the custom model scope is implicitly distinguished.

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

list_objectsA
Read-only
Inspect

WHEN: you need ALL objects of a given type or in a given model. Triggers: 'list all tables in ALM', 'show all classes', 'quels objets dans le modèle', 'give me all forms'. Full index scan -- returns EVERY matching object, not just top search results. Use to discover what tables, classes, forms, enums, etc. exist in a specific model. When no filters are given and a custom model is configured, defaults to listing that model. NOT for a single object -- use get_object_details. NOT for natural language search -- use search_d365_code.

ParametersJSON Schema
NameRequiredDescriptionDefault
aotTypeNoFilter by AOT type: AxClass, AxTable, AxForm, AxView, AxEnum, AxEdt, AxDataEntityView, AxSecurityPrivilege, AxSecurityDuty, AxSecurityRole, AxQuery, AxReport, Documentation. Leave empty for all types.
modelNameNoFilter by model/module name (partial match). Examples: 'ALM', 'ApplicationSuite'. Leave empty for all models.
Behavior4/5

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

With readOnlyHint: true in annotations, the description adds valuable behavioral context: it warns that this performs a 'Full index scan' (implying potential performance cost), and explains default behavior when 'no filters are given and a custom model is configured.' It does not contradict the read-only annotation.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the 'WHEN:' clause. While lengthy, every sentence serves a distinct purpose: intent recognition (triggers), behavioral scope (full scan), use case (discovery), and exclusions. The multi-language trigger examples are justified for intent recognition.

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

Completeness4/5

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

Given the 100% schema coverage and readOnly annotation, the description is appropriately complete. It explains the return scope ('returns EVERY matching object') without requiring an output schema, and enumerates specific AOT types (tables, classes, forms, enums) that align with the aotType parameter.

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

Parameters4/5

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

Schema coverage is 100%, establishing a baseline of 3. The description adds value by mapping the parameters to concrete use cases mentioned in the triggers (e.g., 'tables', 'classes', 'ALM' model), reinforcing that aotType filters by object category and modelName filters by module.

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

Purpose5/5

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

The description explicitly states the tool lists 'ALL objects of a given type or in a given model' with a 'Full index scan.' It clearly distinguishes this from siblings by specifying it returns 'EVERY matching object, not just top search results,' contrasting with search_d365_code.

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

Usage Guidelines5/5

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

Exceptional guidance with explicit WHEN/NOT directives. It names specific sibling alternatives: 'NOT for a single object -- use get_object_details' and 'NOT for natural language search -- use search_d365_code.' It also provides concrete trigger phrases ('list all tables in ALM', 'quels objets dans le modèle') to help the agent recognize intent.

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

map_business_processA
Read-only
Inspect

WHEN: mapping the technical D365 objects behind a business process, or understanding which tables/forms implement a flow. Triggers: 'processus métier', 'Order-to-Cash', 'Procure-to-Pay', 'Record-to-Report', 'business process flow', 'qui est impliqué dans', 'map the process', 'flux du processus', 'quels objets dans le flux'. Map a D365 F&O business process to its complete object chain. For known processes (Order-to-Cash, Procure-to-Pay, Record-to-Report, Plan-to-Produce, Inventory-Management, Hire-to-Retire, Project-Accounting, Asset-Lifecycle): shows every step with forms, tables, classes, entities, reports, and security roles involved. For any other object name: traces all dependencies (tables, classes, forms, entities) from that entry point. Produces a Mermaid process flow diagram. Use 'list' to see all known process mappings. NOT for a single object's FK relations only -- use find_related_objects for that (faster and more precise).

ParametersJSON Schema
NameRequiredDescriptionDefault
processNameYesBusiness process name (e.g. 'Order-to-Cash', 'Procure-to-Pay', 'sales', 'purchasing') or an object name to trace from. Use 'list' to see all known processes.
Behavior4/5

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

Annotations indicate read-only (readOnlyHint: true), which is consistent. Description adds valuable behavioral context: output format (Mermaid diagram), behavioral split between known processes (showing security roles/reports) versus generic object tracing, and performance note that sibling tool is faster for single-object relations.

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

Conciseness5/5

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

Despite length, every sentence earns its place: WHEN clause, trigger keywords, dual-mode behavior explanation (known vs unknown processes), output specification, special parameter value, and sibling contrast. Front-loaded structure makes scanning efficient.

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

Completeness4/5

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

For a complex tool with no output schema, description adequately compensates by specifying the Mermaid diagram output and detailing the two operational modes. However, absence of output schema prevents a 5, as return structure details (e.g., whether it returns raw graph data or rendered image) remain unspecified.

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

Parameters4/5

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

With 100% schema coverage, baseline is 3. Description adds significant value by enumerating the 8 known process names that trigger special handling (Order-to-Cash, Procure-to-Pay, etc.) and documenting the special 'list' parameter value behavior, which is not obvious from schema alone.

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

Purpose5/5

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

Description explicitly states it maps business processes to 'complete object chain' or traces dependencies, producing a 'Mermaid process flow diagram'. It clearly distinguishes from sibling `find_related_objects` by stating this is for full process flows versus single object FK relations.

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

Usage Guidelines5/5

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

Excellent guidance with explicit 'WHEN:' clause listing triggers (e.g., 'Order-to-Cash', 'map the process'), specific instruction to use 'list' for available mappings, and clear exclusion criteria ('NOT for a single object's FK relations only -- use `find_related_objects`').

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

search_d365_codeA
Read-only
Inspect

WHEN: object name is unknown, partial, or you need to find by concept/keyword. Triggers: 'find', 'search', 'look for', 'chercher', 'trouver', 'où est', 'comment fonctionne', 'what is', 'show me'. Search the D365 F&O knowledge base for X++ code, tables, classes, forms, views, enums, EDTs, security objects using natural language or partial names. Returns ALL chunks (metadata, Declaration, methods) for the top-scoring objects so the LLM has complete context on the first call. Lower-scoring results return a short preview. No follow-up get_object_details call is needed for top results. NOT for listing all objects in a model -- use list_objects for that. NOT when the exact name is known -- use get_object_details for that. NEVER call search_d365_code twice in the same conversation turn. If one search did not find the object, answer from what you have -- do not repeat the search. When you need context on MORE THAN ONE concept simultaneously, use batch_search instead -- it runs all queries in parallel and is faster. NEVER use this tool when the user mentions: 'FDD', 'RDD', 'IDD', 'Task', 'Workitem', 'Work Item', 'Bug', 'PR', 'Pull Request', 'ticket', 'DevOps', 'sprint', 'backlog', '#1234', 'WI#', 'analyse le workitem', 'analyse la tâche', 'analyse le FDD'. For those, always use ado_query_workitems, ado_analyze_workitem, ado_list_prs, or ado_analyze_pr_impact instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
topKNoMaximum number of results to return (default: 10, max: 50)
queryYesNatural language search query. Examples: 'vendor invoice approval', 'tables in ALM', 'SalesTable fields', 'security privileges for purchasing'
domainNoOptional: filter results to a specific AOT type. Examples: 'AxTable', 'AxClass', 'AxForm', 'AxEnum'. Leave empty for all types.
topObjectsNoNumber of top-scoring objects whose ALL chunks are returned (default: 5, max: 20). Increase to broaden coverage, decrease for tighter focus.
Behavior4/5

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

Annotations declare readOnlyHint=true, but the description adds crucial behavioral context: 'Returns ALL chunks (metadata, Declaration, methods) for the top-scoring objects' vs 'Lower-scoring results return a short preview,' and 'No follow-up get_object_details call is needed.' This discloses the tiered return behavior not indicated in annotations. Does not mention rate limits or auth requirements.

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

Conciseness4/5

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

The description is lengthy but information-dense and front-loaded with WHEN clauses. Every section serves a distinct purpose: trigger keywords (including French), behavioral explanation, return format, and sibling distinctions (~20 siblings). While verbose, the length is justified by the need to prevent confusion with ADO tools and other search utilities.

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

Completeness5/5

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

Despite no output schema, the description fully explains the return structure (full chunks vs previews), covers the domain scope (D365 F&O, X++), and provides complete guidance on tool selection among numerous siblings (list_objects, get_object_details, batch_search, ado_* tools). Sufficient for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100% (all 4 parameters fully documented with types, defaults, and examples). The description references 'top-scoring objects' implicitly mapping to topObjects parameter, but does not explicitly elaborate on parameter semantics beyond the schema. With high schema coverage, baseline 3 is appropriate.

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

Purpose5/5

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

Description explicitly states the tool 'Search[es] the D365 F&O knowledge base for X++ code, tables, classes, forms... using natural language or partial names.' It clearly distinguishes from siblings: 'NOT for listing all objects... use list_objects' and 'NOT when the exact name is known... use get_object_details.' Specific verb, resource, and scope with clear sibling differentiation.

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

Usage Guidelines5/5

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

Provides exhaustive when/when-not guidance: explicit triggers ('find', 'search', 'chercher'), exclusions ('NEVER use this tool when the user mentions: FDD, Workitem...'), and alternatives ('use batch_search instead' for multiple concepts, 'use get_object_details' for exact names). Also includes operational constraints ('NEVER call search_d365_code twice in the same conversation turn').

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

search_labelsA
Read-only
Inspect

Search D365 F&O labels across all indexed languages. Given text (e.g. 'Sales order'), finds the matching label ID (@SYS12345). Given a label ID (e.g. '@SYS12345' or '@SYS:12345'), finds the text in all languages. Accepts both D365 short form (@SYS124480) and colon form (@SYS:124480) -- both are normalized automatically. Searches across 1 000 000+ label entries. WORKFLOW: call search_labels first to resolve the label text, then call find_references with the same label ID to find ALL X++ objects (forms, tables, classes, reports) that use it in their code or metadata. Languages: en-US and fr are loaded at startup. Other languages (de, nl, ar, es, zh...) are loaded on-demand -- first call ~15s, then instant.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesText to search for (e.g. 'Sales order', 'Invoice amount') or a label ID (e.g. '@SYS12345', '@AccountsReceivable:CustInvoice')
languageNoOptional: filter by language code (e.g. 'en-US', 'fr', 'de', 'nl'). Leave empty for all languages.
maxResultsNoMaximum results (default: 20, max: 50)
Behavior5/5

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

Beyond the readOnlyHint annotation, the description adds critical behavioral details: language loading performance ('first call ~15s, then instant'), startup vs on-demand language availability, automatic normalization of label formats (@SYS:12345 vs @SYS12345), and data scale (1M+ entries). No contradiction with readOnlyHint=true.

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

Conciseness4/5

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

Information-dense but well-structured with clear functional separation: core purpose, bidirectional examples, format normalization, scale, workflow, and performance notes. Each sentence serves a distinct purpose, though the density slightly impacts scannability.

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

Completeness4/5

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

Excellent coverage of input behavior and workflow integration. Minor gap: lacks explicit description of return value structure (e.g., array format, specific fields returned) given the absence of an output schema, though the bidirectional explanation implicitly clarifies what data is returned.

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

Parameters4/5

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

With 100% schema coverage, the baseline is 3. The description adds valuable context about query parameter formats (short vs colon form) and language parameter performance implications (startup vs on-demand loading), enhancing understanding beyond the raw schema definitions.

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

Purpose5/5

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

The description explicitly states the tool searches D365 F&O labels bidirectionally (text-to-ID and ID-to-text) with concrete examples ('Sales order' → '@SYS12345'). It distinguishes itself from sibling 'find_references' by explicitly stating the workflow sequence, clearly delineating responsibilities between the two tools.

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

Usage Guidelines5/5

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

Contains an explicit 'WORKFLOW:' section stating exactly when to use this tool ('call search_labels first to resolve the label text, then call find_references'), providing clear sequencing and alternative selection criteria that directly reference a sibling tool.

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

suggest_edtA
Read-only
Inspect

WHEN: adding a new field to a table -- find the best existing D365 EDT to extend instead of using raw primitives (str, int64, real, date). Triggers: 'what EDT for', 'which EDT should I extend', 'quel EDT pour', 'quel type étendu', 'EDT for a field'. D365 best practice mandates EDT reuse over raw primitive types. Call BEFORE declaring any field with a primitive type. Returns ranked candidate EDTs with their base type, label, and model.

ParametersJSON Schema
NameRequiredDescriptionDefault
topKNoNumber of EDT candidates to return (default: 8, max: 20)
purposeYesPurpose of the field in plain language, e.g. 'customer account number', 'approval status enum', 'invoice amount in transaction currency'
baseTypeNoOptional: D365 primitive base type to filter by, e.g. 'str', 'int64', 'real', 'date', 'enum'. Leave empty to search all types.
fieldNameYesField name or concept, e.g. 'AccountNum', 'vendorId', 'itemCode', 'approvalStatus'
Behavior4/5

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

Annotations declare readOnlyHint=true, confirming this is a safe suggestion tool. Description adds valuable context about return values ('ranked candidate EDTs with their base type, label, and model') which compensates for the missing output schema. Does not mention rate limits or caching, but covers the essential behavioral contract.

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

Conciseness5/5

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

Highly structured with 'WHEN:' prefix and 'Triggers:' list. Every sentence serves a distinct purpose: usage context, trigger phrases, business justification, invocation timing, and return value description. No redundant or wasted text.

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

Completeness4/5

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

Comprehensive for a recommendation tool: explains D365 domain context, best practice rationale, when to invoke, and return value structure. Lacks output schema but description compensates by detailing the return format. Would be 5 with formal output schema, but adequately complete as-is.

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

Parameters3/5

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

Schema has 100% description coverage with detailed explanations for fieldName, purpose, baseType, and topK. The description references 'field name or concept' and 'purpose' in the usage context but does not add parameter-specific semantics beyond what the schema already provides. Baseline 3 is appropriate given complete schema documentation.

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

Purpose5/5

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

Description clearly states the specific action ('find the best existing D365 EDT to extend') and resource (EDTs vs raw primitives). It distinctly differs from siblings like 'search_d365_code' or 'find_references' by focusing on type selection/best practices rather than code search or analysis.

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

Usage Guidelines5/5

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

Excellent explicit guidance: 'WHEN: adding a new field to a table', 'Call BEFORE declaring any field with a primitive type', and specific trigger phrases ('what EDT for', 'which EDT should I extend'). Also explains the business rule ('D365 best practice mandates EDT reuse').

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

suggest_refactoringA
Read-only
Inspect

WHEN: developer wants to improve code quality before a PR merge or code review. Triggers: 'refactor', 'clean up', 'simplify', 'too long method', 'nested ifs', 'code smells', 'améliorer le code'. Suggest concrete refactoring actions for YOUR custom D365 F&O X++ code. [!] Only runs on custom/extension code (D365_CUSTOM_MODEL_PATH). Refactoring standard Microsoft code is not actionable. Analyzes: long methods (extract method), deep nesting (guard clauses), row-by-row operations (set-based), large switch statements (strategy pattern), hardcoded strings (constants), unprotected CLR calls (error handling), wide transactions (narrow scope). Returns before/after code examples.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNameNoOptional: specific method to analyze.
objectNameYesObject name to analyze, e.g. 'ALMMyClass', 'ALMMyTable'
Behavior4/5

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

Annotations declare readOnlyHint=true (safe operation). Description adds valuable behavioral context: lists specific analysis patterns performed (long methods, deep nesting, row-by-row operations, etc.) and discloses output format ('Returns before/after code examples'). 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.

Conciseness4/5

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

Well-structured with front-loaded 'WHEN' clause, explicit triggers section, and bulleted analysis patterns. Information-dense but organized. The multilingual trigger ('améliorer le code') and specific pattern list add value despite length.

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

Completeness4/5

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

For a 2-parameter tool with simple schema and no output schema, description adequately compensates by detailing return value type (before/after examples) and specific analysis capabilities. The scope limitation (custom code only) is critical contextual completeness for D365 environments.

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

Parameters4/5

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

Schema coverage is 100%, establishing baseline 3. Description adds meaningful constraint that tool 'Only runs on custom/extension code (D365_CUSTOM_MODEL_PATH)', which semantically restricts valid inputs for objectName parameter to custom model objects only, beyond what the schema examples show.

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

Purpose5/5

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

Description uses specific verb phrase 'Suggest concrete refactoring actions' with clear resource 'custom D365 F&O X++ code'. The '[!] Only runs on custom/extension code' constraint effectively distinguishes it from sibling analysis tools like validate_best_practices or search_d365_code by restricting scope to D365_CUSTOM_MODEL_PATH.

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

Usage Guidelines5/5

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

Explicit 'WHEN' clause identifies trigger scenarios (before PR merge/code review). Lists specific keyword triggers ('refactor', 'clean up', 'nested ifs', etc.). Clearly states exclusion criteria: 'Refactoring standard Microsoft code is not actionable', providing clear when-not-to-use guidance.

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

trace_role_license_treeA
Read-only
Inspect

WHEN: security design, licence audit, or 'what licence does this role require?'. Triggers: 'arborescence du rôle', 'licence nécessaire pour', 'what licence for role', 'role tree', 'droits du rôle', 'entry points of role', 'privilege tree for'. Builds the COMPLETE tree for ONE role: Role -> Duties -> Privileges -> Entry Points. For each entry point, classifies the required D365 licence per the March 2026 Licensing Guide: Team Members (~$8/user/mo, read-only + named tasks), Operations-Activity (~$50, warehouse mobile & production floor), Finance (~$180), Supply Chain Mgmt (~$180), Human Resources (~$22), Project Operations (~$120), Commerce (~$180). Grant-level aware: NoAccess/Read/View -> Team Members; Activity writes -> Operations-Activity; transactional writes -> full product licence based on functional area. Confidence: High (known module prefix) . Medium (keyword) . Low (fallback). Ends with a Optimization section: Team Members / Activity eligibility, role-split opportunities, per-user/month cost estimates (March 2026 MSRP). Always validate against the Microsoft D365 Licensing Guide. For a full multi-role scan, call trace_role_license_tree multiple times -- once per role. NOT for the pure technical duty/privilege/entry-point chain without licence inference -- use trace_security_chain for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNameYesThe exact security role name, e.g. 'SystemAdministrator', 'AccountsPayablePaymentsClerk', 'ALMMyCustomRole'
maxEntryPointsNoMaximum entry points to show per privilege (default: 20, max: 100)
Behavior4/5

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

Annotations declare readOnlyHint=true; description adds substantial behavioral context including confidence classification (High/Medium/Low), specific output structure (Optimization section, cost estimates), grant-level awareness logic, and validation requirements against Microsoft Licensing Guide. 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.

Conciseness4/5

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

Despite length, the description is information-dense and well-structured with front-loaded WHEN clause, bulleted triggers, clear section flow (build logic → confidence → optimization → validation → usage patterns), and zero filler. Every sentence addresses selection, invocation, or output expectations.

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

Completeness4/5

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

For a complex licensing analysis tool with no output schema, the description adequately explains return structure (complete tree with license classifications), auxiliary outputs (optimization section, cost estimates), and reliability indicators. Would benefit from explicit output format/schema description, but covers essential behavioral outputs comprehensively.

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

Parameters3/5

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

Schema has 100% description coverage with clear parameter descriptions. The description reinforces the 'ONE role' constraint (guiding roleName usage) and mentions Entry Points (relating to maxEntryPoints), but does not add significant semantic detail beyond what the schema already provides, warranting the baseline score for high-coverage schemas.

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

Purpose5/5

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

The description explicitly states it 'Builds the COMPLETE tree for ONE role: Role -> Duties -> Privileges -> Entry Points' and clearly distinguishes from sibling tool `trace_security_chain` for 'pure technical duty/privilege/entry-point chain without licence inference'. Specific verb+resource+scope is present with D365 licensing context.

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

Usage Guidelines5/5

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

Provides explicit WHEN clause ('security design, licence audit, or what licence does this role require?'), lists specific trigger keywords ('arborescence du rôle', 'role tree', etc.), and explicitly names the alternative tool `trace_security_chain` for technical-only traces. Also advises on multi-role scan patterns ('call multiple times -- once per role').

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

trace_security_chainA
Read-only
Inspect

WHEN: security audit -- need the TECHNICAL chain from Role/Duty/Privilege to Entry Points and Table/Form permissions. Also handles BUSINESS-LANGUAGE role explanation when businessLanguage=true. Triggers (technical): 'sécurité de', 'who can access', 'security for', 'role duty privilege', 'droits sur', 'technical security chain', 'trace le rôle', 'what privileges does', 'what duties are assigned', 'which role allows', 'accès au formulaire', 'what roles have access', 'quel rôle donne accès'. Triggers (business language): 'what can a user with role X do', 'explain this role', 'what does this role give access to', 'quel accès donne ce rôle', 'droits du rôle', 'what licence does this role need', 'droits requis pour'. Traverses: Role -> Duties -> Privileges -> Entry Points -> Table/Form Permissions. Set businessLanguage=true for plain-language capability list (no Duty/Privilege IDs). NOT for licence cost inference per entry point -- use trace_role_license_tree for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
businessLanguageNoWhen true, explains the role in plain business language (capabilities list) instead of the technical Role->Duty->Privilege chain. Default: false.
securityObjectNameYesSecurity object name, e.g. 'SystemAdministrator', 'VendInvoiceApprovalConfig'
Behavior4/5

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

Annotations declare readOnlyHint=true; description adds valuable behavioral context including the specific traversal path ('Role -> Duties -> Privileges -> Entry Points -> Table/Form Permissions') and the functional difference between technical mode (with IDs) and businessLanguage=true mode (plain-language capabilities). Could mention performance characteristics.

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

Conciseness4/5

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

Information-dense but well-structured with clear sections (WHEN, Triggers technical/business, Traverses, NOT FOR). Trigger lists are lengthy but necessary for accurate LLM routing. No redundant repetition of schema details.

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

Completeness4/5

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

For a security chain traversal tool with no output schema, the description adequately explains what gets returned (technical chain vs business capabilities) and the scope of data covered. Sibling differentiation is complete. Minor gap: doesn't describe output format structure.

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

Parameters4/5

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

Schema coverage is 100%, establishing baseline 3. Description elevates this by adding functional semantics for businessLanguage parameter: 'Set businessLanguage=true for plain-language capability list (no Duty/Privilege IDs)', explaining the consequence of the parameter beyond the schema's type/default.

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

Purpose5/5

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

Description explicitly states the tool retrieves the 'TECHNICAL chain from Role/Duty/Privilege to Entry Points and Table/Form permissions' and contrasts this with business-language explanations. It clearly distinguishes from sibling 'trace_role_license_tree' by stating it is 'NOT for licence cost inference per entry point'.

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

Usage Guidelines5/5

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

Provides explicit WHEN clause ('security audit -- need the TECHNICAL chain'), lists specific trigger phrases for both technical and business-language contexts, and explicitly names the alternative tool ('use trace_role_license_tree for that') for license cost inference scenarios.

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

validate_best_practicesA
Read-only
Inspect

WHEN: code review, quality gate, or best-practice audit on ANY D365 F&O object (custom or standard). Triggers: 'vérifie les bonnes pratiques', 'check quality', 'code review', 'violations', 'best practices pour', 'audit du code', 'check this class', 'any issues in', 'vérifie cette classe', 'quality check', 'bonnes pratiques sur'. Checks: security vulnerabilities, performance issues, transaction problems, error handling, code quality. NOT for deep performance profiling (N+1 queries, row-by-row inserts) -- use detect_performance_issues for that. [!] Auto-fixing violations is only possible on YOUR custom code (D365_CUSTOM_MODEL_PATH). Standard D365 objects return read-only violation analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodNameNoOptional: specific method to validate. Validates all methods if not provided.
objectNameYesObject name to validate, e.g. 'SalesTable', 'CustInvoiceJour'
minSeverityNoMinimum severity: 'Info', 'Warning', 'Critical' (default: 'Warning')Warning
Behavior4/5

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

Annotations declare readOnlyHint=true; the description adds valuable context about what gets analyzed (security vulnerabilities, transaction problems) and explains the auto-fixing constraint ('only possible on YOUR custom code'). However, it could clarify whether auto-fixing suggestions are returned or if the tool suggests without returning fix data.

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

Conciseness5/5

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

Excellent structure with clear section headers (WHEN, Triggers, Checks, NOT for). Information is front-loaded and dense without redundancy. The '[!]' warning format efficiently highlights critical constraints regarding custom vs. standard code.

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

Completeness4/5

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

Despite lacking an output schema, the description adequately explains return behavior (violation analysis, read-only for standard objects, severity filtering). For a validation tool with good annotations, this is sufficient, though mentioning the output format (list of violations vs. summary) would improve it further.

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

Parameters3/5

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

Schema description coverage is 100% (all 3 parameters have complete descriptions including types, defaults, and examples). The description does not add parameter-specific semantics beyond the schema, which is acceptable given the high schema coverage baseline.

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

Purpose5/5

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

Description clearly states it performs best-practice audits and code review on D365 F&O objects, checking security, performance, transactions, and error handling. It explicitly distinguishes from sibling 'detect_performance_issues' by stating 'NOT for deep performance profiling... use detect_performance_issues for that.'

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

Usage Guidelines5/5

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

Provides explicit WHEN context ('code review, quality gate, or best-practice audit'), lists specific trigger keywords, and clearly identifies the alternative tool for excluded use cases. Also clarifies scope limitations (custom vs. standard objects) that determine output behavior.

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

Discussions

No comments yet. Be the first to start the discussion!

Try in Browser

Your Connectors

Sign in to create a connector for this server.