Skip to main content
Glama

Server Details

D365 F&O: 90 AI tools over 200K+ objects, 25M+ cross-refs, 24M+ label translations.

Status
Unhealthy
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.5/5 across 38 of 38 tools scored. Lowest: 3.8/5.

Server CoherenceA
Disambiguation4/5

Most tools have distinct purposes and clear triggers, reducing ambiguity. For example, PR-related tools are separated into analysis, listing, commenting, and dependency mapping. However, some overlap exists between find_references, find_extensions, and find_callers, which could confuse an agent without careful descriptions.

Naming Consistency4/5

Tool names follow a consistent snake_case pattern with verb_noun structure within subgroups (e.g., ado_*, find_*, search_*, generate_*). There is no mixing of camelCase or other styles, though the variety of prefixes slightly reduces predictability.

Tool Count3/5

With 38 tools, the server feels slightly over-scoped for its domain. While each tool has a specific function, the number is high compared to typical well-scoped servers (10-15 tools). Some tools like find_references and find_callers could be consolidated.

Completeness4/5

The tool set covers a broad range of D365 F&O development and DevOps tasks, including code search, analysis, security, performance, upgrades, and work item management. Minor gaps exist, such as the absence of direct object modification or batch job management, but the core workflows are well covered.

Available Tools

90 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. Reads each changed file's CONTENT straight from the PR's source commit via the ADO REST API, so it reviews the PROPOSED (un-merged) code -- including brand-new files that do not yet exist on the target branch. DO NOT fall back to local git show/git diff: this tool already pulls the un-merged content over the API and analyses it against the indexed standard KB. When includeSource is true (the default), the FULL un-merged source of every analysed file is embedded in the output (one fenced block per file), so you have everything needed for a complete semantic review -- BP findings AND the actual code -- in a single call. NEVER run git to read the files. This matters for metadata-only PRs (tables/enums/menu items/reports): the BP engine is X++-centric and may report few violations on AOT XML, but the embedded source lets you review those changes properly. 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.
includeSourceNoEmbed the un-merged SOURCE of each analysed file in the output so the reviewer can do a full semantic code review without a local git checkout. Default true.
includeWarningsNoInclude Warning-level violations in addition to Critical (default: true). Set false for Critical-only.
sourceCharsPerFileNoMax characters of source to embed per file when includeSource is true (1000-40000, default 8000). Larger files are truncated with a note.
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses that the tool reads from the ADO REST API (not local git), handles un-merged and brand-new files, embeds full source by default, and is X++-centric with known limitations on AOT XML. It also clarifies permission requirements (DEVOPS_ORG_URL + DEVOPS_PAT with Code: Read). No contradiction with annotations.

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

Conciseness3/5

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

The description is comprehensive but verbose, repeating the same warning against local git usage three times ('DO NOT fall back to local git show/git diff', 'NEVER run git'). While it is front-loaded with the trigger, the length and redundancy prevent it from being concise. Not every sentence earns its place.

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 tool with no output schema, the description covers all essential contexts: purpose, triggers, alternatives, behavior, limitations (metadata-only PRs, maxFilesDeep), output contents (source embedding, review comment), and post-tool workflow. It is fully complete for an agent to select and invoke the tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by elaborating on includeSource's purpose (enabling full semantic review without local checkout) and on maxFilesDeep behavior (larger PRs get summary). This goes beyond the schema descriptions, earning a 4.

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 specific verb+resource: 'Analyse the full D365 F&O code impact of a Pull Request.' It clearly differentiates from sibling tools by explicitly stating 'NEVER call search_d365_code when PR... is mentioned' and by outlining a distinct analysis workflow (BP, upgrade impact, extension conflicts). This makes the tool's purpose unambiguous.

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 a dedicated 'PRIORITY TRIGGER' section listing exact user phrases that should invoke this tool, and explicitly excludes alternatives ('NEVER call search_d365_code'). It also gives workflow guidance: 'After reviewing, call ado_post_pr_comment...' and warns against using local git commands. This is exemplary usage guidance.

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 (customer extension model): 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.
Behavior5/5

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

Beyond the readOnlyHint annotation, the description adds valuable behavioral context: it returns raw structured context, not a finished analysis; lists the four categories of returned data; states environment variable requirements; and explicitly says it never posts comments. This fully discloses behavior and is consistent 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 lengthy but well-structured with clear headers and a front-loaded summary. Every section serves a purpose: trigger phrases, exclusions, return content, post-processing instructions, and environment requirements. It could be tightened, but the organization makes it easy to scan.

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 tool with no output schema, the description is exceptionally complete. It explains what the tool returns, what it does not do, how the agent should use the results, when to use it, when to avoid it, and the required environment variables. This fully equips an agent to select and invoke the tool correctly.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description does not add parameter-level detail beyond the schema, but it does mention the required env vars (DEVOPS_ORG_URL, DEVOPS_PAT) which contextualize the parameters. It does not repeat or contradict schema descriptions.

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

Purpose5/5

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

The description states a specific verb and resource: 'Fetch a Work Item and assemble ALL technical context needed for D365 F&O expert analysis.' It clearly distinguishes itself from siblings by noting it is for work items (not PRs), and explicitly excludes label lookups and X++ code search, directing to alternative 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?

The description provides explicit priority trigger phrases, explicit 'NEVER for' exclusions, and names alternative tools (search_labels, search_d365_code). It also clarifies the tool's role as a context-gathering step and instructs the agent to never post comments on related work items, giving clear when-to-use and 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.

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.
Behavior5/5

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

With no annotations provided, the description fully carries the burden of transparency. It discloses substantive behaviors: automatic branch creation, child/related linking rules, auto-incrementing counter, embedded assignee/CC in description, language switching, and required permissions (DEVOPS_ORG_URL + DEVOPS_PAT). This is far more than a generic 'create' statement.

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 long but logically structured with labeled sections (WHEN, Rules, LANGUAGE RULE, Requires). Each part contributes necessary behavior for correct execution, and the critical trigger information is front-loaded. Slight trimming could improve conciseness, but the structure earns its 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 10-parameter tool with no output schema, the description covers triggers, naming conventions, branch creation, language handling, and required credentials. It does not describe return values (e.g., task ID/URL), which would improve completeness, but the provided context is sufficient for an agent to invoke the tool correctly in most cases.

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. The description adds meaningful context beyond the schema by explaining how `workItemId` determines naming/linking rules and that the `description` parameter should be written in the user's language. This enriches parameter understanding without repeating schema text.

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 'Create a D365 F&O development Task work item in Azure DevOps' and provides explicit trigger phrases, clearly distinguishing it from siblings like ado_update_workitem. The verb+resource+scope is specific and unambiguous.

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?

Starts with 'WHEN' and lists concrete user triggers ('create task', 'start development on', etc.), which precisely indicates when to use this tool over others. It also covers language rules and credential prerequisites, giving clear guidance on invocation context.

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 already declare readOnlyHint=true, and the description adds context about internal methodology (KB signals, ADO history) and output content (per-phase hours, confidence, risk). It does not contradict annotations and offers meaningful behavioral detail beyond the read-only flag, though it could mention potential failure modes.

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-organized with bolded section labels (WHEN, PRIORITY TRIGGER, Returns, Triggers) and front-loads the most critical usage condition. It is somewhat long due to the trigger list, but every sentence provides actionable info; minor redundancy in the trigger phrases.

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 the complexity of an effort estimation tool and the absence of an output schema, the description fully covers what the tool does, when to use it (including after a specific sibling tool), and what it returns (per-phase breakdown, KB signals, confidence/risk, ready-to-paste estimate). This is sufficient for an agent to select and invoke it correctly.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for all three parameters (workItemId, project, focusObjects). The tool description does not add extra parameter guidance beyond the triggers, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description opens with 'Estimate D365 F&O development effort for a Work Item', using a specific verb and resource, and details the output (per-phase hour breakdown). It clearly distinguishes this from sibling tools like ado_analyze_workitem (analysis) and ado_create_task (creation) by focusing on estimation.

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' section states the user intent (effort estimate, chiffrage, development hours) and a 'PRIORITY TRIGGER' instructs to call AFTER ado_analyze_workitem. Trigger phrases like 'estimate this' and 'chiffre ce WI' provide clear, actionable guidance for when to invoke this tool.

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).
Behavior5/5

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

The description adds substantial behavior details beyond the readOnlyHint annotation: it lists the exact return components (domain, standard objects, existing extensions, effort estimate, reasoning) and discloses the dependency on D365_CUSTOM_MODEL_PATH for extension detection. It also explains the input precedence logic, giving the agent a clear model of the tool's behavior.

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 moderately long but well-organized with labeled sections (WHEN, verdict list, return list, triggers, note). Every section contributes meaningful information, and the front-loaded WHEN section helps agents quickly determine relevance. It is slightly verbose but appropriate given the tool's complexity.

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?

With no output schema and moderate input complexity, the description covers all necessary aspects: triggers, input modes, return format, and a caveat about environment dependencies. It fully prepares an agent to invoke the tool correctly and interpret results, making it highly complete for its context.

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 all parameters are already described. The tool description adds value by clarifying the precedence relationship (requirements overrides both workItemId and requirementText) and the fallback behavior between workItemId and requirementText, which is not fully evident 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 clearly states the tool's function: analyzing a D365 F&O requirement (from an ADO Work Item or plain text) and classifying it into four explicit verdicts. This distinguishes it from sibling tools by focusing on fit/gap classification, not generic analysis or PR impact.

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

Usage Guidelines4/5

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

The description provides a dedicated 'WHEN' section and trigger phrases, making clear when to use the tool. It also gives a specific when-not (do not re-fetch with workItemId if already analyzed by ado_analyze_workitem) and guidance on selecting between input parameters. However, it does not explicitly reference alternative sibling tools, so it stops short of a perfect 5.

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'.
Behavior5/5

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

Beyond the readOnlyHint annotation, it discloses authentication requirements (DEVOPS_ORG_URL + DEVOPS_PAT with Code: Read scope), fallback behavior when repositoryId is omitted, and the exact return fields (PR ID, title, author, source->target branch, review status, linked work items, creation date).

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?

Although the trigger list is somewhat long, every sentence serves a purpose: trigger phrases, exclusions, purpose, behavior, returns, related tool, and auth. Information is front-loaded and well-structured.

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?

With no output schema, the description lists return fields explicitly. It also covers authentication, filters, and fallback behavior, making it complete for an agent to invoke correctly.

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

Parameters3/5

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

Input schema covers 100% of parameters with detailed descriptions, including the repositoryId fallback behavior. The description only summarizes filters and does not add meaningful semantic information beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

Description clearly states 'List Pull Requests in an Azure DevOps Git repository' with a specific verb and resource. It also distinguishes itself from sibling tools by explicitly saying 'NEVER call search_d365_code for PR listing requests' and pointing to ado_analyze_pr_impact for impact 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?

Provides a PRIORITY TRIGGER with specific phrases to detect when to use this tool, and explicitly forbids using search_d365_code. It also instructs to use ado_analyze_pr_impact for impact analysis, giving clear when-to-use/alternatives.

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?

With no annotations, the description carries the full burden and discloses critical behavioral traits: it mandates explicit user confirmation before invocation, states required permissions (DEVOPS_PAT with Work Items: Write), and specifies a strict ordering after analysis. This goes beyond basic side-effect statements.

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 labeled sections (WHEN, PRIORITY TRIGGER, WARNING, Recommended workflow, Requirements). Every sentence contributes essential operational information with no redundancy or fluff.

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

Completeness4/5

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

For a simple write operation with no output schema, the description covers when to use, prerequisites, required permissions, confirmation protocol, and integration with a prior analysis tool. Return value details are not necessary given the tool's straightforward action.

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% with clear parameter descriptions. The description adds value by instructing to use the ready-to-post block from 'ado_analyze_workitem' for commentText and clarifying the project fallback to DEVOPS_PROJECT env var, going beyond schema details.

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 'WHEN: user explicitly asks to post, add, or save a comment to an ADO Work Item,' identifying the specific verb, resource, and scope. This distinguishes it from sibling tools like 'ado_post_pr_comment' which targets pull requests.

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 trigger conditions ('user explicitly asks to post...') and a recommended workflow involving 'ado_analyze_workitem' and user confirmation. It lacks explicit when-not-to-use alternatives (e.g., for PR comments), but the guidance is otherwise clear and actionable.

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.
Behavior5/5

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

With no annotations, the description carries the full behavioral burden. It discloses authentication requirements (DEVOPS_ORG_URL + DEVOPS_PAT with scopes 'Pull Request Threads: Read & Write'), mandates user confirmation, and instructs to use the 'ready-to-post block' from the analysis tool, providing important behavioral and safety context.

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 concise and well-structured: it leads with WHEN, then PRIORITY TRIGGER, WARNING, workflow, and credentials. Every sentence adds value with no repetition or fluff.

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 annotations and no output schema, the description is remarkably complete. It covers when to invoke (after analysis), the prerequisite workflow, confirmation requirement, auth needs, and the expected content source. It lacks only an explicit return value description, but for a simple post-comment action this is not a critical gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters in detail. The tool description does not add significant parameter-level meaning beyond what's in the schema; the only extra hint ('Use the ready-to-post block...') is already present in the schema for commentText. Thus baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('post, add, or save') and a specific resource ('review comment to an ADO Pull Request'). It distinguishes itself from the sibling tool `ado_post_comment` by focusing on PR review comments and explicitly referencing the prior analysis 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?

The description gives explicit when-to-use guidance: 'WHEN: user explicitly asks...' and 'PRIORITY TRIGGER: call AFTER ado_analyze_pr_impact...' with example phrases. It also provides a recommended workflow with steps and a warning to ask for confirmation, fully clarifying usage context.

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

ado_pr_dependency_mapA
Read-only
Inspect

PR DEPENDENCY MAP -- Scan multiple Pull Requests and build a cross-PR dependency graph based on (a) shared X++/AOT objects and (b) branch chain relationships.

For each PR:

  • Lists X++ / AOT objects changed (from diff)

  • Detects OBJECT CONFLICTS: same object modified in multiple PRs => merge risk

  • Detects BRANCH CHAIN: if PR_A.targetBranch == PR_B.sourceBranch => PR_A must merge first

  • Computes RECOMMENDED MERGE ORDER (topological sort by branch dependencies)

Output:

  • Per-PR object table

  • Conflict matrix (object -> [PR list])

  • Dependency graph summary

  • Ordered merge sequence

Triggers: 'PR dependencies', 'ordre de merge des PR', 'conflits entre PR', 'quelles PR touche le même objet', 'dependency map PRs', 'merge order PRs', 'list PRs with objects', 'objets par PR', 'cross-PR impact'. Requires DEVOPS_ORG_URL + DEVOPS_PAT (Code: Read scope).

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoMaximum PRs to analyse (default: 30, max: 60).
statusNoPR status filter: Active (default), Completed, Abandoned, All.Active
projectNoOptional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.
repositoryIdYesGit repository name or ID.
targetBranchNoOptional: filter by target branch, e.g. 'develop'.
Behavior4/5

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

Annotations include readOnlyHint=true, and the description reinforces this by framing all actions as scanning, listing, detecting, and computing. It adds meaningful context beyond annotations: it detects object conflicts and branch chains, computes merge order, and requires Code: Read scope. No contradictions exist.

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 well-structured, front-loaded with the tool's purpose, and breaks down details into bullet points and sections. Every sentence contributes value—purpose, method, outputs, triggers, and requirements—without verbose filler.

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

Completeness5/5

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

Despite lacking an output schema, the description thoroughly enumerates what the agent can expect: per-PR object table, conflict matrix, dependency graph summary, and ordered merge sequence. It also covers operational requirements and trigger scenarios, making it self-contained 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?

The input schema already provides complete descriptions for all 5 parameters (100% coverage), so the baseline is 3. The description does not add parameter-specific semantics beyond what the schema provides, but it does mention environment variables (DEVOPS_ORG_URL/DEVOPS_PAT) that are not in the schema. This is adequate but not exceptional.

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 unambiguously states the tool scans multiple Pull Requests and builds a cross-PR dependency graph based on shared X++/AOT objects and branch chain relationships. It enumerates specific outputs and trigger phrases, making it clearly distinct from siblings like ado_list_prs or ado_analyze_pr_impact.

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?

Clear usage context is provided through trigger phrases ('PR dependencies', 'conflits entre PR', etc.) and the multi-PR scope. It also states the prerequisite of DEVOPS_ORG_URL + DEVOPS_PAT. However, it does not explicitly contrast with single-PR alternatives like ado_analyze_pr_impact, so it lacks explicit 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.

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'.
whereClauseNoOptional: extra WHERE condition(s) for custom fields, appended with AND. Use the Field Reference Name, e.g. "[Custom.Extensionlifecyclestatus]='010. Registered'". Multiple conditions: separate with ' AND '.
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.
Behavior5/5

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

Despite having readOnlyHint annotation, the description adds significant behavioral context beyond annotations: 'Returns max 50 work items with ID, title, type, state, priority, area, assigned-to,' 'Requires DEVOPS_ORG_URL + DEVOPS_PAT env vars,' and 'Use '*' with filters only.' These details inform the agent about limits, prerequisites, and query syntax nuances. No contradiction with annotations.

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

Conciseness4/5

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

The description is long but densely informative, with clear sections: scope, trigger keywords, exclusions, shortcuts, return behavior, and prerequisites. Each sentence adds value, but the length is near the upper bound for a tool description. It is structured effectively, so a 4 is appropriate.

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 read-only query tool with no output schema, the description provides essential context: return field list, result limit, environment variable requirements, and usage patterns. It lacks error handling or edge-case behavior, but given the tool's simplicity and rich schema, it is adequately complete. A 4 reflects minor gaps such as missing pagination or error scenarios.

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

Parameters4/5

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

The input schema covers all 11 parameters with descriptions (100% coverage), so baseline is 3. The description adds value by explaining the 'query' parameter's syntax options: shortcuts ('bugs', 'my bugs'), WIQL statements, free-text title search, and the wildcard '*' usage. It also mentions shortcut behaviors, which is beyond schema. This warrants a 4.

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: 'Query Work Items (Bugs, Tasks, FDDs, User Stories, CRs) in Azure DevOps.' It uses a specific verb ('Query'), identifies the resource ('Work Items'), and distinguishes from siblings through explicit exclusions and alternative tools. The 'AZURE DEVOPS ONLY' prefix further clarifies 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?

The description provides explicit usage triggers: 'PRIORITY TRIGGER: use this tool when the user mentions...' with a comprehensive keyword list. It also gives clear when-not-to-use guidance and alternative tools: 'NEVER use this tool for: D365 labels... For labels -> use search_labels.' This is exemplary usage guidance.

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

ado_read_attachmentA
Read-only
Inspect

AZURE DEVOPS ONLY -- Reads the ACTUAL CONTENT of a file attached to a work item (Excel spreadsheet, Word document, text/CSV/JSON/XML file, or image). WHEN: a work item (FDD/RDD/CR/Bug/Task/User Story) has an Excel/Word attachment with requirements, field mappings, mockups, or specs that need to be read to understand the ask. Triggers: 'read the attachment', 'open the excel file on the work item', 'what does the attached document say', 'lis le fichier joint', 'ouvre l'excel du ticket'. Call ado_analyze_workitem first (or ado_query_workitems) to discover attachment file names if you don't already know the exact fileName. Supported: .xlsx/.xlsm (returns sheet names + a markdown table of the requested/first sheet), .docx (returns extracted markdown text + tables), .txt/.csv/.json/.xml/.md/.log (returned as-is), images (.png/.jpg/.jpeg/.gif/.bmp/.webp, returned as a base64 data URI for visual analysis, max 4 MB). Other binary formats (PDF, .pptx, .zip, etc.) are NOT parsed -- returns metadata + a manual download link instead. Max attachment size read: 25 MB. Requires DEVOPS_ORG_URL + DEVOPS_PAT env vars.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.
fileNameYesExact attachment file name as shown by ado_analyze_workitem, e.g. 'Field Mapping.xlsx'. Case-insensitive.
sheetNameNoOptional: sheet name for .xlsx/.xlsm attachments. Defaults to the first sheet.
workItemIdYesWork item ID, e.g. 1234
Behavior5/5

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

Goes far beyond the readOnlyHint annotation: discloses per-format return behavior (.xlsx returns sheet names + markdown table, .docx extracted markdown, images as base64 data URI), size limits (max 25 MB, images 4 MB), unsupported formats (PDF, pptx) with fallback behavior, and env var requirements. No contradictions with annotations.

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

Conciseness4/5

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

The description is long but densely informative, with a clear front-loaded purpose statement followed by structured usage scenarios, triggers, format-specific behavior, and requirements. Every sentence earns its place; the complexity of the tool justifies the length, though it could be slightly more compact.

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 thoroughly covers return formats, size limits, unsupported cases, and discovery workflow. It anticipates the user's needs (how to find attachment names, what to expect per format) and leaves no major gaps for a tool of this complexity.

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 description coverage is 100%, so baseline is 3. The description adds meaning by clarifying that fileName must be the exact name from ado_analyze_workitem and that sheetName applies only to spreadsheet attachments. It also notes case-insensitivity, adding practical value beyond the schema.

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

Purpose5/5

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

Description opens with a specific verb+resource: 'Reads the ACTUAL CONTENT of a file attached to a work item.' It explicitly lists supported file types and distinguishes itself from sibling tools (e.g., ado_analyze_workitem) by focusing on attachment content. The 'AZURE DEVOPS ONLY' prefix further scopes the tool.

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 (work item has an Excel/Word attachment with requirements, mappings, etc.), triggers ('read the attachment', 'open the excel file'), and even names the companion tool to call first (ado_analyze_workitem) to discover attachment file names. This gives clear guidance on when to use vs. alternatives.

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

ado_review_xpp_prA
Read-onlyIdempotent
Inspect

WHEN: reviewing a PR that modifies X++ code or AOT objects and you need D365-specific insights. Returns a structured code review for each changed object: blast radius (who calls it), existing best-practice violations, performance issues, and impact severity. Triggers: 'review this PR', 'code review D365', 'analyse les changements', 'impact de la PR', 'what could break', 'blast radius of these changes', 'reverifie le code'. Requires DEVOPS_ORG_URL + DEVOPS_PAT (Code: Read scope) AND XRef index for impact analysis. Combine with ado_post_pr_comment to post findings as inline review comments.

ParametersJSON Schema
NameRequiredDescriptionDefault
prIdYesPull Request ID to review.
projectNoAzure DevOps project name. Falls back to DEVOPS_PROJECT env var.
repositoryIdNoGit repository name or ID.
maxDeepAnalysisNoMax AOT objects to deeply analyse (1-20, default 8). Objects beyond this limit are listed but not deeply analysed.
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint, and the description reinforces this by framing the tool as returning a review without side effects. It discloses the need for specific environment variables, PAT scope, and an XRef index, and clarifies that it does not post comments but must be combined with ado_post_pr_comment. This adds meaningful behavioral context beyond the annotations.

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

Conciseness4/5

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

The description is well-structured, starting with the 'WHEN' clause and then covering outputs, triggers, requirements, and next steps. It is somewhat long due to the trigger phrase list, but every element serves a purpose. The front-loading makes it easy to scan.

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 thoroughly explains what the tool returns (structured code review with blast radius, violations, performance, impact). It also covers prerequisites and usage guidance. For a complex D365-specific tool, this is highly complete and leaves little ambiguity for an AI agent.

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 each parameter (prId, project, repositoryId, maxDeepAnalysis) already documented in the schema. The description adds a high-level explanation of the analysis process but does not add parameter-specific semantics beyond what the schema provides, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: reviewing a PR that modifies X++ code or AOT objects and returning a structured code review. It lists specific outputs (blast radius, best-practice violations, performance issues, impact severity) and distinguishes itself from generic PR tools by emphasizing D365-specific insights.

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?

Usage context is explicit with a 'WHEN' clause and trigger phrases, plus prerequisites (DEVOPS_ORG_URL, DEVOPS_PAT, XRef index). It also recommends combining with ado_post_pr_comment for posting findings. However, it does not explicitly name alternative tools for non-X++ PR reviews, leaving the exclusion implied.

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

ado_update_workitemAInspect

Update one or more fields on an existing Azure DevOps Work Item. Can update any standard field (System.Description, System.Title, System.State, System.AssignedTo, ...) or custom field (Custom.Extensionlifecyclestatus, ...) using its Field Reference Name. Triggers: 'mets à jour la description du workitem', 'change le state', 'update field', 'post ça en description'. Always show the user what will be changed and ask for confirmation before calling. Requires DEVOPS_PAT with Work Items: Write permission.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional: Azure DevOps project name.
fieldsJsonYesJSON object mapping Field Reference Names to values. Examples: {"System.Description":"<p>New desc</p>"} or {"System.State":"Active","Custom.MyField":"value"}. Use HTML for Description/ReproSteps. Standard field refs: System.Title, System.State, System.AssignedTo (email), System.AreaPath, System.Tags, System.Description, Microsoft.VSTS.Common.Priority, Microsoft.VSTS.TCM.ReproSteps.
workItemIdYesWork item ID to update.
Behavior4/5

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

With no annotations, the description carries the burden of disclosing behavioral traits. It reveals a critical safety requirement (confirmation before calling), and a permission requirement (DEVOPS_PAT with Work Items: Write). It does not describe failure modes, reversibility, or return format, but covers the most important operational constraints.

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 four sentences, front-loaded with the primary action. It efficiently includes examples, triggers, a safety instruction, and permission requirements without being verbose. Minor redundancy with the schema prevents a perfect score.

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 mutation tool with a well-specified schema and no output schema, the description covers the essential aspects: purpose, field naming conventions, examples, permission, and confirmation. It doesn't mention error handling or return values, but these are less critical for an update operation. The description feels complete enough for an agent to use it correctly.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all parameters thoroughly. The description adds some extra context (e.g., using HTML for Description), but largely repeats information from the schema. It doesn't significantly enhance understanding beyond the structured field descriptions.

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 verb 'Update' and the resource 'existing Azure DevOps Work Item', with scope 'one or more fields'. It distinguishes from sibling tools like ado_create_task or ado_query_workitems by focusing on updating fields, and gives concrete examples of standard and custom fields.

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?

It provides explicit behavioral guidelines: always show changes and ask for confirmation, and requires a PAT with Write permission. It also lists example triggers to signal when the tool is appropriate. However, it does not explicitly contrast with alternative tools or state when not to use it.

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

ado_wiki_create_or_update_pageA
Destructive
Inspect

AZURE DEVOPS ONLY -- Create a new wiki page, or OVERWRITE an existing one with new markdown content. ALWAYS call ado_wiki_get_page first if you intend to edit (not replace) an existing page's content, since this tool replaces the ENTIRE page body -- it does not merge/append. Automatically handles the page's ETag for safe concurrent-edit detection. Requires DEVOPS_ORG_URL + DEVOPS_PAT env vars (PAT needs Wiki: Read & Write scope).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesWiki page path, e.g. '/Home' or '/Architecture/Deployment'. Parent pages are created automatically if missing.
contentYesFull markdown content for the page (replaces any existing content).
projectNoOptional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.
wikiIdentifierNoWiki name or id. Omit to auto-resolve to the project's only/first wiki (call ado_wiki_list if there are several).
Behavior5/5

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

Beyond the destructiveHint annotation, the description explains the full-body replacement, no merge/append behavior, automatic ETag handling for concurrent edits, and required env vars with PAT Wiki Read/Write scope. This is substantive added context that helps the agent predict 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.

Conciseness5/5

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

The description is front-loaded with the scope warning, then the action, followed by essential warnings and prerequisites. Every sentence adds important information without redundancy, making it efficient and easy to parse.

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

Completeness4/5

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

For a write operation with no output schema, the description covers purpose, usage, behavioral nuances, and prerequisites thoroughly. It doesn't explicitly describe success/error return values, but that is less critical for a create/replace tool and the essential invocation details are present.

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% and the param descriptions are already detailed. The tool description adds some extra context (e.g., parent pages auto-created) but doesn't provide additional parameter-level syntax or format details, so the baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb+resource pair ('Create a new wiki page, or OVERWRITE an existing one') and adds the critical detail that it replaces the entire body rather than merging. It clearly distinguishes from sibling wiki tools like get, delete, and list.

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 guidance is provided: 'ALWAYS call ado_wiki_get_page first if you intend to edit (not replace) an existing page's content.' It also clarifies the tool's non-merge behavior, giving the agent a clear decision rule for when to use this vs. an alternative.

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

ado_wiki_delete_pageA
Destructive
Inspect

AZURE DEVOPS ONLY -- Delete a wiki page. This also deletes its sub-pages if any exist under it. Requires DEVOPS_ORG_URL + DEVOPS_PAT env vars (PAT needs Wiki: Read & Write scope).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesWiki page path to delete, e.g. '/Architecture/Old-Design'.
projectNoOptional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.
wikiIdentifierNoWiki name or id. Omit to auto-resolve to the project's only/first wiki (call ado_wiki_list if there are several).
Behavior4/5

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

The annotations provide destructiveHint=true, and the description adds valuable context by explaining that sub-pages are also deleted and by specifying exact environment variable requirements plus PAT scope. This goes beyond the annotation, though it does not mention irreversibility or error behavior.

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

Conciseness5/5

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

The description is two concise sentences that front-load the purpose and add critical caveats. Every sentence earns its place without redundancy.

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

Completeness4/5

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

For a delete operation, the description covers the main purpose, cascading deletion, required environment variables, and access scope. It could additionally mention irreversibility or behavior when the page does not exist, but overall it is sufficiently complete for the tool's complexity.

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 already has 100% coverage with descriptive parameter definitions. The tool description itself adds no extra parameter-specific meaning, so it does not exceed the baseline provided by the schema.

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

Purpose5/5

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

The description clearly states the tool deletes a wiki page with the specific verb 'Delete' and specifies the resource. It distinguishes itself from sibling tools like ado_wiki_get_page, ado_wiki_create_or_update_page, and ado_wiki_list by focusing exclusively on deletion.

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

Usage Guidelines4/5

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

The description provides clear context for use, including the 'AZURE DEVOPS ONLY' restriction, the behavior of deleting sub-pages, and required environment variables. It implicitly signals it is for deletion scenarios, but does not explicitly name alternative tools or state when not to use it.

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

ado_wiki_get_pageA
Read-only
Inspect

AZURE DEVOPS ONLY -- Read the content of a wiki page (and its immediate sub-page paths). path uses wiki page-path syntax, e.g. '/Home' or '/Architecture/Deployment'. Requires DEVOPS_ORG_URL + DEVOPS_PAT env vars.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesWiki page path, e.g. '/Home' or '/Architecture/Deployment'.
projectNoOptional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.
wikiIdentifierNoWiki name or id. Omit to auto-resolve to the project's only/first wiki (call ado_wiki_list if there are several).
includeSubPagesNoAlso list immediate sub-page paths under this page.
Behavior4/5

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

Annotations declare readOnlyHint=true, so the safe read nature is already known. The description adds useful context: requires DEVOPS_ORG_URL + DEVOPS_PAT env vars and clarifies the read scope includes immediate sub-page paths, which goes beyond the annotation.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the Azure DevOps scope and purpose. Every sentence serves a purpose: scope, action, syntax example, and env var requirements. No redundant wording.

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 read-only tool with full schema coverage and annotations, the description is sufficiently complete. It specifies scope, requirements, and path syntax. The only gap is not describing return format, but the absence of an output schema is not critical for a simple read operation.

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% coverage with descriptive text and examples. The description essentially repeats the path example from the schema without adding new parameter semantics, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool reads wiki page content and immediate sub-page paths. It uses a specific verb (Read) and resource (wiki page), and distinguishes itself from sibling write (create/update/delete) and list tools by the action and 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 clear context for when to use: Azure DevOps only, requires specific env vars, and describes path syntax. However, it does not explicitly mention alternatives (e.g., ado_wiki_list) or exclusions.

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

ado_wiki_listA
Read-only
Inspect

AZURE DEVOPS ONLY -- List all wikis in a project (the project wiki plus any published code-as-wiki repos). Use this FIRST when the user doesn't know the wiki's exact name/id, or to confirm which wiki to target before reading/writing a page. Requires DEVOPS_ORG_URL + DEVOPS_PAT env vars.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.
Behavior4/5

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

Annotations already declare readOnlyHint, so the description adds useful context by specifying environment requirements (DEVOPS_ORG_URL + DEVOPS_PAT), scope limitation to Azure DevOps, and the inclusion of both project wiki and code-as-wiki repos. It does not contradict annotations.

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

Conciseness5/5

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

Two sentences, front-loaded with scope and purpose, followed by usage guidance and prerequisite environment variables. Every sentence adds value with no wasted words.

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 simple list operation with one optional parameter and a readOnly annotation, the description covers purpose, usage, and prerequisites. No output schema exists, but the output (list of wikis) is self-evident from the tool's purpose.

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% for the single optional parameter, which already documents that it falls back to DEVOPS_PROJECT env var. The description adds no additional parameter details, so the baseline of 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?

Specific verb 'List' with resource 'wikis in a project', including the nuance of 'project wiki plus any published code-as-wiki repos'. It clearly distinguishes from sibling wiki page tools by focusing on listing rather than reading/writing/deleting a particular page.

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?

Explicitly instructs 'Use this FIRST when the user doesn't know the wiki's exact name/id, or to confirm which wiki to target before reading/writing a page.' This provides direct usage context and contrasts with sibling operations, giving clear when-to-use guidance.

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-onlyIdempotent
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

Behavior5/5

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

The description adds significant detail beyond the readOnlyHint and idempotentHint annotations: it specifies the analysis scope (CoC targets, event handlers, extensions, hard-coded refs), what it detects (removed objects, signature changes, deprecated APIs), and the output ('prioritized risk report with fix recommendations'). No contradiction.

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

Conciseness4/5

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

The description is fairly long but well-structured: it leads with WHEN, then explains the analysis, lists examples, and states output and requirements. Every sentence conveys useful information, though the trigger list could be trimmed without loss of essential guidance.

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 the tool's complexity (0 params, no output schema), the description is remarkably complete: it covers use case, triggers, prerequisite, analysis depth, output format (prioritized risk report), and recommendations. It adequately prepares an agent to select and invoke the tool correctly.

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

Parameters4/5

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

With 0 parameters, the schema is empty, and the baseline is 4. The description adds value by mentioning the prerequisite 'Requires D365_CUSTOM_MODEL_PATH', which is not in the schema. This helps the agent understand an environmental dependency.

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

Purpose5/5

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

The description states a specific action ('Analyze upgrade risk'), a specific resource ('custom D365 F&O model'), and the approach (cross-referencing custom code against the standard codebase). It clearly distinguishes itself from siblings like find_change_impact by focusing on the upgrade scenario.

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

Usage Guidelines4/5

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

The description provides an explicit 'WHEN' clause (upgrading D365 F&O or applying a Microsoft update) and includes trigger phrases. However, it does not mention when not to use it or name alternatives, so it stops short of a perfect score.

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

appinsights_clear_connectionAInspect

Removes the Application Insights connection cached for the current session by appinsights_set_connection.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior4/5

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

With no annotations provided, the description carries the transparency burden. It discloses the key behavior: it removes a cached connection, is session-scoped, and is tied to the setter. It does not detail idempotency, error behavior, or consequences for subsequent queries, but the statement 'cached for the current session' gives important context beyond the tool name.

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

Conciseness5/5

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

The description is a single, grammatically clear sentence that front-loads the verb 'Removes' and includes the essential details (what is removed, scope, and relationship to setter). There is no superfluous 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 simple tool with no parameters or output schema, the description is largely complete: it states the action, scope, and pairing with set_connection. It lacks explicit mention of return value or edge cases, but for a clear/remove operation of this simplicity, the information provided is sufficient.

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

Parameters4/5

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

The tool has zero parameters (schema coverage 100% with no properties). Per rubric, the baseline is 4. The description adds no parameter detail because there are none to explain, and no parameter-related information is needed.

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 action: 'Removes the Application Insights connection cached for the current session.' It names the specific resource (Application Insights connection), the scope (current session), and links to the companion setter (appinsights_set_connection), distinguishing it from siblings like appinsights_query and appinsights_set_connection.

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 implies usage: call this when you want to clear the cached connection for the current session, particularly after using appinsights_set_connection. It provides clear context and implicitly differentiates from alternatives by referencing the paired setter, though it does not explicitly state 'when not to use' or name alternatives.

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

appinsights_diagnose_slownessAInspect

WHEN: user wants to understand/deduce why a D365 F&O environment feels slow, using the real Application Insights telemetry the environment already emits -- no trace file upload needed. Runs a set of canned KQL queries and assembles one combined report:

  1. X++ exception hotspots (exceptions table) -- top types/messages by count.

  2. Hot custom telemetry events (customEvents table) -- top event names by frequency, plus a duration breakdown for events that carry an ElapsedMilliseconds custom property (covers ALMMonitoring-instrumented FDDs, and any out-of-box signal using the same convention).

  3. Slow web requests/dependencies (requests/dependencies tables) -- only rendered if the workspace actually has data there (uncommon for FnO's own AOS tier, but present for Commerce/Portal/custom web extensions sharing the same App Insights resource). Requires the connection to be configured first via appinsights_set_connection (or server env vars).

Triggers: 'déduire et comprendre les lenteurs', 'why is my environment slow', 'diagnose slowness from App Insights', 'analyse la lenteur avec App Insights', 'performance issue live environment', 'slow environment telemetry'.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoMax rows per section (1-50). Default 15.
lookbackHoursNoHow far back to analyze, in hours (1-720). Default 24.
minDurationMsNoMinimum average duration (ms) for a custom event to be flagged as 'slow'. Default 2000.
Behavior4/5

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

No annotations are present, so the description carries the full burden. It discloses the tool runs KQL queries, assembles a report, conditions on data availability ('only rendered if the workspace actually has data'), and requires a pre-configured connection. It could be more explicit about being read-only, but the diagnostic nature is clear from context.

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 well-structured, front-loaded with 'WHEN', and uses a numbered list to clearly enumerate report sections. Every sentence contributes value—prerequisites, data source, output composition, and conditional rendering—without fluff.

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 annotations and no output schema, the description is remarkably complete: it covers purpose, trigger scenarios, prerequisites, what the report includes, and data-dependent behavior. It leaves no major gaps for an agent to mis-invoke the 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?

Input schema covers 100% of parameters with descriptions and defaults, so baseline is 3. The description adds slight semantic context (e.g., minDurationMs relates to flagging 'slow' events, lookbackHours implies time window), but this mostly reinforces schema info without going much beyond it.

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: 'diagnose slowness' using Application Insights telemetry. It lists specific report sections (X++ exception hotspots, custom telemetry events, slow web requests) and differentiates it from generic queries like appinsights_query by noting it runs 'canned KQL queries' and assembles a combined report.

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?

Starts with 'WHEN: user wants to understand/deduce why a D365 F&O environment feels slow' and provides explicit prerequisites ('Requires the connection to be configured first via appinsights_set_connection'). It also mentions that no trace file upload is needed, distinguishing from alternatives, and lists trigger phrases for clarity.

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

appinsights_queryAInspect

Run a raw KQL (Kusto) query against the D365FO environment's Application Insights / Log Analytics workspace (read-only -- the query language has no mutation operators). Requires the connection to be configured first via appinsights_set_connection (or server env vars). Use the standard App Insights schema: requests, dependencies, exceptions, traces, customEvents, pageViews, performanceCounters. Prefer appinsights_diagnose_slowness for a ready-made "why is it slow" report -- use this tool for anything more specific/custom.

Triggers: 'run this KQL', 'query app insights', 'requête KQL', 'log analytics query', 'custom App Insights query for my environment'.

ParametersJSON Schema
NameRequiredDescriptionDefault
kqlYesKQL query text, e.g. "exceptions | where timestamp > ago(1h) | take 20". Do NOT include an explicit 'ago()'/time-range filter for the primary time column -- use the lookbackHours parameter instead (applied as the query time range).
maxRowsNoMax rows to return (1-500). Default 100.
lookbackHoursNoHow far back to query, in hours (1-720). Default 24.
Behavior4/5

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

With no annotations provided, the description carries the full burden. It clearly discloses the read-only nature ('the query language has no mutation operators') and the connection prerequisite. It doesn't detail error handling or return format, but the read-only safety aspect is the most critical behavioral trait and is explicitly stated.

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 concise and well-structured: purpose, prerequisite, usage differentiation, and trigger phrases. Every sentence earns its place, and trigger phrases are especially useful for AI agent selection without adding bloat.

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 annotations and no output schema, the description provides sufficient context: what the tool does, the environment it targets, the schema to use, the prerequisite, and the sibling alternative. The parameter details are well-covered in the schema, so the description need not repeat them.

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. The description adds value by listing the standard App Insights schema tables (requests, dependencies, exceptions, etc.), which directly enriches the semantics of the 'kql' parameter. This goes beyond simply repeating schema field names.

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 specific verb+resource: 'Run a raw KQL (Kusto) query against the D365FO environment's Application Insights / Log Analytics workspace.' It also explicitly differentiates from the sibling appinsights_diagnose_slowness by advising to prefer that tool for ready-made reports and use this one for custom queries.

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 guidance: 'Prefer appinsights_diagnose_slowness for a ready-made... use this tool for anything more specific/custom.' It also states the prerequisite of configuring the connection via appinsights_set_connection or server env vars, and lists trigger phrases for selection.

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

appinsights_set_connectionAInspect

Securely register the D365 F&O environment's Application Insights / Log Analytics connection for the CURRENT session. The client secret is encrypted in memory (AES-256-GCM), never written to disk and never echoed back. Once set, appinsights_query and appinsights_diagnose_slowness use it automatically until it expires or you call appinsights_clear_connection.

HOW TO GET THE VALUES: workspaceId -- the Log Analytics WORKSPACE ID (GUID, not the App Insights app id) behind the Application Insights resource the environment is linked to (D365FO: System administration > Monitoring and Telemetry parameters > Application Insights Registry tab shows the connection string; the workspace id is on that Log Analytics workspace resource's Overview blade in the Azure Portal). tenantId/clientId/clientSecret -- an Entra ID app registration granted the 'Log Analytics Reader' (or 'Monitoring Reader') role on that workspace resource (Azure Portal > workspace > Access control (IAM) > Add role assignment). Read-only -- no write access is ever needed or used.

In a locked server deployment (APPINSIGHTS_LOCK_SERVER_CONFIG=true) this tool is disabled and the server's own environment credentials are used instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientIdYesApp registration (client) id (GUID), granted Log Analytics Reader on the workspace.
tenantIdYesEntra (Azure AD) tenant id (GUID).
ttlMinutesNoMinutes the connection stays cached for this session (1-480). Default 60.
workspaceIdYesLog Analytics workspace ID (GUID) behind the linked Application Insights resource.
clientSecretYesApp registration client secret. Encrypted in memory; never logged or persisted.
Behavior5/5

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

With no annotations provided, the description carries the full burden for behavioral disclosure. It richly discloses security and session behavior: client secret encrypted in memory with AES-256-GCM, never written to disk, never echoed back, session-scoped, automatic use by dependent tools, and disabled in locked server mode. It also explains the read-only role requirement, which is critical for safe usage.

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 appropriately detailed for a security-sensitive setup tool. It is front-loaded with the main purpose, then structured into 'HOW TO GET THE VALUES' and a locked-server note. Every sentence adds valuable information—there is no fluff or redundancy. The length is justified by the complexity of the task.

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 the tool's complexity, the description is remarkably complete. It covers the intent, session scope, security mechanisms, dependent tools, prerequisites (Entra ID role), how to obtain each parameter, and the locked-server deployment behavior. No output schema exists, and the description doesn't need to explain return values for a setter tool. The only minor omission is what happens if a connection already exists, but this does not significantly impact completeness.

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

Parameters5/5

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

Although schema description coverage is 100%, the description adds significant meaning beyond the schema. It clarifies that workspaceId is the Log Analytics workspace ID (GUID) and not the App Insights app id, provides a detailed 'HOW TO GET THE VALUES' section including Azure Portal navigation, explains the required Entra ID roles for tenantId/clientId/clientSecret, and clarifies that the secret is encrypted and never persisted. This goes well beyond the schema's basic property descriptions.

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: 'Securely register the D365 F&O environment's Application Insights / Log Analytics connection for the CURRENT session.' It uses a specific verb (register) and resource (telemetry connection), and distinguishes from siblings by noting that appinsights_query and appinsights_diagnose_slowness use this connection automatically, and appinsights_clear_connection removes it.

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

Usage Guidelines4/5

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

The description provides clear usage context: it should be called before appinsights_query or appinsights_diagnose_slowness, and it remains active until expiry or explicit clear. It also gives an explicit exclusion: in a locked server deployment (APPINSIGHTS_LOCK_SERVER_CONFIG=true) the tool is disabled. However, it does not explicitly discuss alternatives like d365fo_set_connection or contrast with clear_connection beyond the auto-use note.

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

compare_objectsA
Read-onlyIdempotent
Inspect

Compare two D365 F&O objects side-by-side (fields, methods, signatures). Handy when investigating differences between standard and a customisation, or between two similar tables.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectNameAYesFirst object name, e.g. 'SalesTable'
objectNameBYesSecond object name, e.g. 'PurchTable'
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds useful behavioral context by enumerating what is compared (fields, methods, signatures), which goes beyond the bare schema. No contradictions exist.

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 exactly two sentences, front-loaded with the core purpose and followed by a useful use-case note. Every word earns its place; there is no filler or redundancy.

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

Completeness4/5

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

The tool is simple with only two parameters and no output schema. The description covers purpose, what is compared, and common use cases. It does not mention the output format, but for this tool the output is inherently a side-by-side comparison, making the description sufficient.

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

Parameters3/5

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

Schema description coverage is 100% with both parameters (objectNameA, objectNameB) having clear descriptions and examples. The tool description does not add additional parameter semantics beyond what the schema already provides, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's function: 'Compare two D365 F&O objects side-by-side' and specifies the aspects compared ('fields, methods, signatures'). This specific verb+resource+scope distinguishes it from siblings like diff_model_versions (which compares model versions) and get_object_details (which retrieves details for a single object).

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

Usage Guidelines4/5

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

The description provides clear when-to-use guidance: 'Handy when investigating differences between standard and a customisation, or between two similar tables.' It gives concrete scenarios but does not explicitly mention alternatives or exclusions, so it falls short of a 5.

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

create_aot_objectA
Read-only
Inspect
Generate a complete, ready-to-deploy D365 F&O AOT XML scaffold for any object type.
Returns the XML + the correct file path inside the model -- the calling client (VS Extension,
Cursor, Copilot Chat) is responsible for writing the result to disk. This tool is fully
read-only on the server: it never writes to the filesystem, never mutates external state,
and is safe to expose from the cloud MCP.
When the knowledge base is available the scaffold is auto-enriched with real metadata
(existing field EDTs, related-table validation, auto-detected grid fields, etc.).

  Supported aotType values ----------------------------------------------
AxTable       . AxClass     . AxForm       . AxEnum
    AxEdt      . AxView            . AxQuery           . AxDataEntityView
    AxMenuItemDisplay . AxMenuItemAction  . AxMenuItemOutput
    AxSecurityPrivilege . AxSecurityDuty . AxSecurityRole . AxSecurityPolicy
    AxReport          . AxFormExtension  . AxTableExtension  . AxClassExtension
    AxEnumExtension   . AxEdtExtension   . AxQueryExtension  . AxWorkflow

     Common options (all types) --------------------------------------------
label - human-readable label shown in the UI

developerDoc - developer documentation string (tables/classes)

     AxTable --------------------------------------------------------------------------
    tableGroup     - Main | WorksheetHeader | WorksheetLine | Transaction | Parameter | Group
    cacheLookup  - None | Found | FoundAndEmpty | NotInTTS | EntireTable
  fields         - csv  "Name:Type[:EDT[:Label[:mandatory]]]"

Types: String Int Int64 Real Date DateTime Enum Container Guid indexes - csv "IndexName:field1+field2[:unique|:alternatekey]" relations - csv "RelName:RelatedTable:Field:RelatedField" titleField1/2 - field names for the lookup title createdBy / modifiedBy - true | false (default true) generateFind / generateExist / generateValidateWrite / generateInitValue - true | false

AxClass -------------------------------------------------------------------------- extends - base class name implements - csv of interfaces abstract / final - true | false pattern - SysOperation | RunBase | Service | EventHandler | none (default) methods - csv of additional method names to stub

     AxForm ----------------------------------------------------------------------------
    dataSourceTable - primary data-source table name
    pattern  - SimpleList | DetailsTransaction | DetailsMaster | ListPage | Dialog
    gridFields      - csv of field names for the grid (auto-detected from KB if omitted)
    detailFields    - csv of field names for the detail group
  methods      - csv of form method names to stub

     AxEnum ----------------------------------------------------------------------------
    style - Ordinary | ComboBox | Radio | CheckBox

values - csv "Name[:Label[:intValue]]" e.g. "Draft:Draft:0,Posted:Posted:1"

     AxEdt -----------------------------------------------------------------------------
    extends        - base EDT (e.g. Name, Description, Amount)

stringSize - integer enumType - base enum for enum EDTs referenceTable - table that provides the lookup

     AxView ----------------------------------------------------------------------------
    dataSources    - csv  "Table[:Alias]"
    fields    - csv  "DataSource.Field[:Alias]"

     AxQuery -------------------------------------------------------------------------
dataSources    - csv  "Table[:Alias[:JoinMode]]"

     AxDataEntityView -----------------------------------------------------------
    primaryTable    - root table

joinTables - csv of additional tables publicEntityName - OData collection name (pluralised entity name) isPublic - true | false (default true) fields - csv "Table.Field[:PublicName]" (auto-detected from KB if omitted)

     AxMenuItemDisplay / Action / Output ------------------------------------------
    objectName     - target form / class / report name
    runOn       - Server | Client | Called from  (default Server)

helpText - tooltip string

     AxSecurityPrivilege -----------------------------------------------------------
    entryPoints    - csv  "MenuItemName[:ObjectType[:Grant]]"
    ObjectType: MenuItemDisplay | MenuItemAction | MenuItemOutput

Grant: NoAccess | Read | Update | Create | Delete

AxSecurityDuty --------------------------------------------------------------------- privileges - csv of privilege names to include

AxSecurityRole ---------------------------------------------------------------------- duties - csv of duty names privileges - csv of privilege names (direct assignment -- avoid if possible)

     AxReport -------------------------------------------------------------------------

query- AxQuery name driving the dataset dataSourceTable - alternative: direct table name (if no query)

   AxFormExtension -----------------------------------------------------------------
    baseForm   - name of the standard form to extend
    fields  - csv  "ControlName[:EDT]"

AxTableExtension --------------------------------------------------------------------- baseTable - name of the standard table to extend fields - csv "Name:Type[:EDT[:Label[:mandatory]]]" indexes - csv "IndexName:field1+field2[:unique|:alternatekey]"

AxClassExtension (Chain of Command) ------------------------------------------- baseClass - name of the standard class/table/form to wrap baseType - class | table | form (default class) methods - csv of method names to wrap with CoC

     AxEnumExtension ---------------------------------------------------------------
    baseEnum       - name of the standard enum to extend
    values         - csv  "Name[:Label[:intValue]]"  IMPORTANT: start from value 10 or higher
                     to avoid conflicts with standard values (D365 extension contract)

     AxEdtExtension ----------------------------------------------------------------
    baseEdt        - name of the standard EDT to extend
    stringSize     - new StringSize (must be <= base EDT limit; omit to inherit)
    label          - override label for this extension

     AxQueryExtension --------------------------------------------------------------
    baseQuery      - name of the standard query to extend
    dataSources    - csv  "Table[:Alias[:JoinMode]]"  (add extra data sources)
    ranges         - csv  "DataSource.Field:value"  (add filter ranges)

     AxSecurityPolicy  (Row Level Security) ----------------------------------------
    constrainedTable - primary table this policy restricts
    query           - AxQuery name that defines the allowed rows
    operation       - Select | Update | Create | Delete | Insert (default Select)
    enabled         - true | false  (default true)

     AxWorkflow ---------------------------------------------------------------------
    category       - category name (links to a module/table)
    documentTable  - table the workflow operates on
    documentMenuItem - menu item that opens the record
ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesObject name -- must start with the ISV prefix, e.g. 'ALMMyTable', 'ABCSalesService'.
aotTypeYesAOT type, e.g. 'AxTable', 'AxClass', 'AxForm', 'AxEnum', 'AxEdt', 'AxSecurityPrivilege', etc.
optionsNoKey-value options dict. Provide only the keys relevant to your aotType. Example for AxTable: { "label": "My Table", "tableGroup": "Main", "fields": "MyId:String:MyIdEdt:My ID:mandatory,Description:String::Description", "indexes": "MyIdIdx:MyId:alternatekey", "relations": "CustTable:CustTable:CustAccount:AccountNum", "titleField1": "MyId", "generateFind": "true", "generateExist": "true", "generateValidateWrite": "true" }
Behavior5/5

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

Beyond the readOnlyHint annotation, the description explicitly states it 'never writes to the filesystem, never mutates external state, and is safe to expose from the cloud MCP.' It also discloses that the calling client is responsible for writing the result, which is critical behavioral context. This fully satisfies the transparency requirement.

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 long, but the length is justified by the 18 supported aotTypes. The structure is clear: a concise intro followed by organized per-type sections. Each line serves a purpose, though the density could be overwhelming; a shorter summary might improve quick scanning.

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

Completeness4/5

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

For a tool with no output schema, the description adequately explains the output (XML + file path) and covers input options exhaustively. It lacks details on error handling or exact response format, but the core usage is fully documented. The enrichment behavior adds completeness but is conditional.

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

Parameters5/5

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

While the schema provides 100% coverage with descriptions for the 3 parameters, the description adds a massive per-aotType option matrix, giving meaning to every possible 'options' key (e.g., 'tableGroup', 'cacheLookup', 'fields' formats). This is far beyond the schema's generic example and provides crucial semantic detail for correct usage.

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 opening line states the exact action and scope: 'Generate a complete, ready-to-deploy D365 F&O AOT XML scaffold for any object type.' It also clarifies the tool's dual output (XML + file path) and responsibility boundary, which distinguishes it from sibling generators like generate_query or generate_data_entity.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool: whenever an AOT object scaffold is needed, with client-side write responsibility. It also notes a conditional enrichment when the knowledge base is available. However, it does not explicitly name alternatives or state when not to use it, so it lacks explicit exclusions.

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

d365fo_clear_connectionAInspect

Removes the D365 F&O connection cached for the current session by d365fo_set_connection.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It explains what is removed (cached connection) and its scope (current session), but does not mention side effects (e.g., whether it's safe to call with no active connection) or idempotency. For a simple state-clearing tool, this is adequate but lacks depth.

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

Conciseness5/5

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

The description is a single, clear sentence that conveys all essential information without waste. It is perfectly front-loaded with the action and object.

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 zero-parameter, no-output-schema tool that simply resets a cached connection, the description is fully complete. It names the tool it pairs with and the exact thing it clears, leaving no ambiguity.

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

Parameters4/5

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

The tool has zero parameters, so the description need not add parameter semantics. The baseline of 4 applies, and the description adds no unnecessary parameter details.

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

Purpose5/5

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

The description clearly states the action ('Removes') and the specific resource ('D365 F&O connection cached for the current session'). It names the paired setter tool (d365fo_set_connection), which distinguishes it from similar clear tools like appinsights_clear_connection.

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?

Use is implied for clearing a D365 F&O connection established by d365fo_set_connection. It doesn't explicitly state when not to use it or mention alternatives, but the context is clear and the sibling setter name provides a mental trigger for when this tool is relevant.

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

d365fo_set_connectionAInspect

Securely register the D365 F&O connection (URL + Entra app-registration credentials) for the CURRENT session. The client secret is encrypted in memory (AES-256-GCM), never written to disk and never echoed back. Once set, all odata_* and dmf_* tools use it automatically until it expires or you call d365fo_clear_connection.

Use this instead of resending the secret on every call. In a locked server deployment (D365FO_LOCK_SERVER_CONFIG=true) this tool is disabled and the server's own environment credentials are used instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseUrlYesF&O environment base URL, e.g. https://yourenv.cloudax.dynamics.com (https only).
clientIdYesApp registration (client) id (GUID).
tenantIdYesEntra (Azure AD) tenant id (GUID).
ttlMinutesNoMinutes the connection stays cached for this session (1-480). Default 60.
clientSecretYesApp registration client secret. Encrypted in memory; never logged or persisted.
Behavior5/5

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

With no annotations, the description takes full responsibility for transparency. It discloses that the client secret is encrypted in memory (AES-256-GCM), never written to disk or echoed back, that the connection automatically applies to odata_* and dmf_* tools, has an expiration/TTL, and is disabled under locked server configuration. This is comprehensive behavioral context beyond what the schema provides.

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 concise and well-structured. It leads with the primary purpose, then explains security and usage details, and ends with the disabled-lockdown caveat. Every sentence provides meaningful information; there is no redundant or 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?

The description covers the tool's role in the broader tool ecosystem (how odata_* and dmf_* tools use it), the security model, the TTL behavior, and the locked-server exception. It does not mention return values or error handling, but for a setter tool with no output schema this is a minor gap. Overall, it's well contextualized.

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 provides 100% description coverage for all 5 parameters, each with clear descriptions (e.g., baseUrl includes an example and 'https only', clientSecret notes encryption). The description adds general context about URL + Entra app-registration credentials and the client secret's encryption, but this mostly restates schema information. Since schema coverage is high, the baseline of 3 applies.

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: 'Securely register the D365 F&O connection... for the CURRENT session.' It uses a specific verb ('register'), identifies the resource (D365 F&O connection), and sets the scope (session). It also distinguishes from related tools by noting it feeds all odata_* and dmf_* tools and that d365fo_clear_connection resets it.

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: 'Use this instead of resending the secret on every call.' It also explains when the tool is not applicable, stating it is disabled in locked server deployments (D365FO_LOCK_SERVER_CONFIG=true) and that server credentials are used instead. This clearly informs when to choose 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.

detect_performance_issuesA
Read-onlyIdempotent
Inspect

Profile an X++ object for N+1 queries, queries in loops, missing field lists, row-by-row inserts/updates, missing firstOnly. Returns compact issue table with line + fix. Only call when performance is explicitly the concern — for general quality use validate_best_practices. [!] Auto-fixing requires D365_CUSTOM_MODEL_PATH (custom code only).

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

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

The annotation declares readOnlyHint=true and idempotentHint=true, but the description says 'Auto-fixing requires D365_CUSTOM_MODEL_PATH (custom code only)', implying the tool can modify code when that path is set. This contradicts the readOnlyHint annotation. No other behavioral details are provided, and the contradiction is significant.

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 three sentences: purpose with concrete checks, output format, and usage guidance. It is front-loaded with the core functionality and every sentence contributes meaningful information without redundancy.

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

Completeness4/5

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

For a read-only profiling tool with a well-described schema, the description covers purpose, checks, output, and usage. However, the ambiguous auto-fixing note creates a contradiction with annotations, which detracts from completeness and could confuse the agent.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains objectName and methodName. The description does not add additional parameter-level meaning beyond what the schema provides, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description uses the specific verb 'Profile' and identifies the resource as 'an X++ object', then enumerates precise performance patterns (N+1 queries, queries in loops, missing field lists, row-by-row inserts/updates, missing firstOnly). It also distinguishes itself from validate_best_practices by targeting performance specifically.

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?

It explicitly states when to use: 'Only call when performance is explicitly the concern'. It also names the alternative for general quality: 'for general quality use validate_best_practices'. This meets the when/when-not/alternative criterion.

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

diff_model_versionsA
Read-only
Inspect

Compare two D365 F&O KB snapshots to produce a changelog (added/removed/modified objects). Use action 'save_baseline' once, then 'compare' between two snapshots.

ParametersJSON Schema
NameRequiredDescriptionDefault
path1YesFor 'compare': path to baseline cache file. For 'compare_caches': path to first cache. For 'save_baseline': output path for the baseline file.
actionYesAction: 'compare' (current vs baseline), 'compare_caches' (two cache files), or 'save_baseline' (save current state)
filterModelNoOptional: filter to a specific model name
path2OrLabelNoOptional: For 'compare_caches': path to second cache file. For 'compare'/'save_baseline': label for the baseline.
Behavior1/5

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

Annotation Contradiction. The tool is marked readOnlyHint=true, but the description instructs using 'save_baseline', which writes an output file (as clarified in the schema: 'output path for the baseline file'). This is a write operation and contradicts the read-only hint, misleading the agent about 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.

Conciseness5/5

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

Two sentences, front-loaded with the main purpose, followed by a brief usage instruction. Every word earns its place with no fluff.

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

Completeness3/5

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

The description explains the primary 'compare' workflow but omits the 'compare_caches' action entirely, which is present in the schema. Combined with the annotation contradiction, the description is not fully complete for a tool with multiple modes and a potential side effect.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds workflow context for action ordering and mentions path1 depending on action, but most parameter meaning is already in the schema. No significant new semantics added.

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 function: 'Compare two D365 F&O KB snapshots to produce a changelog (added/removed/modified objects)'. It specifies the resource (D365 F&O KB snapshots) and output, differentiating it from sibling tools like compare_objects by focusing on KB snapshot versions.

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 workflow guidance: 'Use action save_baseline once, then compare between two snapshots.' This tells the agent how to sequence operations, though it does not mention alternatives or when-not-to-use the tool relative to siblings. It gives clear context for the intended use case.

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

dmfAInspect

Consolidated Data Management Framework tool — one entry point for all 5 DMF operations, selected via action. Each action forwards to the exact same implementation as its dedicated tool (dmf_import_file / dmf_create_data_project / dmf_apply_entity_filter / dmf_export_package / dmf_get_job_status) — identical behavior and validation, just one tool schema instead of five. The dedicated tools remain available unchanged.

action="import" (= dmf_import_file): entityName, legalEntity, filePath OR csvContent, definitionGroupId?, execute?, overwrite?, pollTimeoutSeconds? action="create_project" (= dmf_create_data_project): projectName, entities, sourceName, operationType? ('Export' default or 'Import') action="apply_filter" (= dmf_apply_entity_filter): projectName, entityRowName, aotEntityName, fieldName, filterValue action="export" (= dmf_export_package): definitionGroupId, legalEntity, packageName?, reExecute?, pollTimeoutSeconds? action="status" (= dmf_get_job_status): executionId

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesimport | create_project | apply_filter | export | status
executeNoimport: execute after staging. Default true.
entitiesNocreate_project: comma-separated DMF entity names.
filePathNoimport: path to a .csv file on disk (or use csvContent).
fieldNameNoapply_filter: field to filter on, e.g. 'VendorAccountNumber'.
overwriteNoimport: overwrite existing project definition. Default true.
reExecuteNoexport: re-execute the project. Default true.
csvContentNoimport: inline CSV content (or use filePath).
entityNameNoimport: target DMF entity name, e.g. 'Customers V3'.
sourceNameNocreate_project: existing DMF source data format name.
executionIdNostatus: the executionId returned by an import or export action.
filterValueNoapply_filter: value or wildcard to match.
legalEntityNoimport/export: legal entity / company id, e.g. 'USMF'.
packageNameNoexport: optional package name.
projectNameNocreate_project/apply_filter: DMF project name.
aotEntityNameNoapply_filter: AOT entity name, e.g. 'VendVendorV2Entity'.
entityRowNameNoapply_filter: entity row label, e.g. 'Vendors V2'.
operationTypeNocreate_project: 'Export' (default) or 'Import'.
definitionGroupIdNoimport/export: definitionGroupId (DMF project id).
pollTimeoutSecondsNoimport/export: max seconds to poll for completion. Default 300.
Behavior3/5

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

Annotations only include readOnlyHint:false, and the description adds that each action forwards to the same implementation with identical behavior and validation. It doesn't disclose side effects, permission requirements, or return behavior beyond what parameter descriptions already offer, though no contradictions exist.

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 long but necessarily so for covering 5 actions. It is well-structured with an intro sentence and a clean action-by-action breakdown. Every sentence contributes useful information, though it could be tightened slightly.

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

Completeness3/5

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

The description comprehensively covers actions and parameters, but with no output schema, it fails to state what each action returns (e.g., executionId, status, etc.). This is a notable gap for a dispatcher tool, even though the link to dedicated tools partially compensates.

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 description coverage is 100%, the description significantly enhances parameter understanding by grouping parameters per action (import, create_project, apply_filter, export, status) and indicating optionality with '?'. This mapping is not present in the schema alone and greatly clarifies which parameters are relevant for each action.

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 is a consolidated one-entry-point tool for all 5 DMF operations, explicitly listing each action and its corresponding dedicated tool. This distinguishes it from sibling tools while being very specific about its purpose.

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 explains the consolidating purpose and notes that dedicated tools remain available unchanged, implying when to use this unified schema vs the individual tools. However, it does not explicitly state exclusion criteria or scenarios where the dedicated tools would be preferred.

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

dmf_apply_entity_filterA
Idempotent
Inspect

Apply a single-field value filter to ONE entity row of an existing DMF project, so the export only contains the matching records. The kernel builds the packed query (custom 'GenerateQueryData' action), the container envelope is stripped on the QueryRun.pack() signature, and the inner blob is PATCHed onto DataManagementDefinitionGroupDetails.QueryData (the exact format the standard table DMFDefinitionGroupEntity stores). Works for ANY entity and ANY field, but only a single field = single value per call (call once per entity row). Wildcards are passed through (e.g. value '1001*'). NOTE: filtering a parent (e.g. 'Vendors V2' on VendorAccountNumber) does NOT auto-filter child rows -- apply the same filter to related rows (e.g. 'Vendor bank accounts', 'Vendor postal addresses') for a single-record export. Requires the custom 'GenerateQueryData' action in the environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldNameYesEntity field to filter on, e.g. 'VendorAccountNumber'.
filterValueYesValue or wildcard to match, e.g. '1001' or '1001*'.
projectNameYesExisting DMF project (definitionGroupId) in FO.
aotEntityNameYesAOT entity name the kernel resolves, e.g. 'VendVendorV2Entity'.
entityRowNameYesEntity row label as shown on the project line, e.g. 'Vendors V2'.
Behavior4/5

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

The description discloses technical behavior well beyond the annotations: 'The kernel builds the packed query (custom GenerateQueryData action), the container envelope is stripped on the QueryRun.pack() signature, and the inner blob is PATCHed onto DataManagementDefinitionGroupDetails.QueryData.' This explains how the filter is applied and that it modifies the project definition. It also notes the side effect that child rows are not auto-filtered. None of this contradicts the annotations (idempotentHint=true, destructiveHint=false).

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 longer but every sentence contributes actionable information. It front-loads the core purpose and then adds constraints, examples, and a critical warning. The structure is logical: purpose, mechanics, limitations, and requirement. It earns a 4 rather than 5 because it could be slightly trimmed without losing value, but it is not verbose or redundant.

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 the tool's complexity and lack of an output schema, the description is remarkably complete. It explains the purpose, the exact mechanics, the single‑field limitation, the parent/child caveat, the prerequisite custom action, and the wildcard behavior. It also provides examples for field names and values. There is no ambiguous behavior left unaddressed for a typical AI agent 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?

The input schema already covers all parameters with descriptions, so the baseline is 3. The description adds extra semantics by explaining that only a single field/value combination is supported per call, that wildcards are passed through (e.g., '1001*'), and that entityRowName refers to the project line label. This enriches the parameter meaning beyond the schema definitions, such as clarifying the relationship between 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 clearly states the tool's purpose with a specific verb and resource: 'Apply a single-field value filter to ONE entity row of an existing DMF project, so the export only contains the matching records.' It also distinguishes itself from sibling DMF tools by emphasizing it filters an existing project rather than creating or exporting. The phrase 'Works for ANY entity and ANY field' further clarifies the 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?

The description provides clear when-to-use context: 'only a single field = single value per call (call once per entity row)' and 'Works for ANY entity and ANY field.' It also gives important exclusions and requirements: 'filtering a parent does NOT auto-filter child rows' and 'Requires the custom GenerateQueryData action in the environment.' While it doesn't name alternative tools explicitly, it offers sufficient guidance on limitations and prerequisites.

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

dmf_create_data_projectA
Idempotent
Inspect

Create (or extend) a DMF data project -- EXPORT or IMPORT -- entirely through standard public OData entities, with NO X++ customization required. It POSTs the header to DataManagementDefinitionGroups and one row per entity to DataManagementDefinitionGroupDetails with AutoGenerateMapping=Yes, so FO generates each entity's source<->staging mapping automatically. Idempotent: an existing project is reused and entities already present are skipped. For EXPORT, the project can then be run with dmf_export_package. Provide an EXISTING DMF 'source data format' name for sourceName (e.g. a comma-delimited format).

ParametersJSON Schema
NameRequiredDescriptionDefault
entitiesYesComma-separated DMF entity names, e.g. 'Customers V3,Released products V2'.
sourceNameYesExisting DMF source data format name that defines the file format.
projectNameYesName of the data project (definitionGroupId) to create or extend.
operationTypeNoOperation type: 'Export' (default) or 'Import'.Export
Behavior5/5

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

Annotations already declare idempotentHint=true and destructiveHint=false. The description adds behavioral details: POSTs to DataManagementDefinitionGroups and DataManagementDefinitionGroupDetails with AutoGenerateMapping=Yes, reuses existing projects, skips existing entities, and eliminates X++ customizations. No contradiction.

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

Conciseness4/5

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

The description is a dense paragraph covering purpose, mechanism, idempotency, and next steps. All sentences contribute useful information; however, it could be slightly condensed without losing meaning.

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?

The description explains the tool's full role: creation mechanics, idempotence, prerequisites, and connection to downstream tools. It doesn't specify return values, but no output schema exists and that's not critical for a creation tool. It covers the operation well.

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 covers all parameters with descriptions. The description adds semantic value by requiring sourceName to be an existing format and by explaining that entities already present are skipped, which informs the entities parameter. The operationType default is clear. Overall, it enriches beyond the schema.

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

Purpose5/5

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

The description uses a specific verb 'Create (or extend)' with a clear resource 'DMF data project -- EXPORT or IMPORT'. It distinguishes from sibling tools like dmf_export_package and dmf_import_file by scoping its role to project definition.

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?

It provides clear context: create the project first, then run with dmf_export_package for exports. It doesn't explicitly mention dmf_import_file or alternatives, but the workflow is clear. It also mentions 'Provide an EXISTING DMF source data format name' as a prerequisite. However, it lacks explicit '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.

dmf_export_packageAInspect

Trigger a bulk export through the Data Management package REST API and return the download URL when complete. NOTE: the DMF EXPORT project (definitionGroupId) must already exist in FO with its entities + mapping configured -- create it with dmf_create_data_project if needed. For ad-hoc exports without a project, use odata_export_entity instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
reExecuteNoRe-execute the project (true) or reuse last staging (false). Default true.
legalEntityYesLegal entity / company id to export from, e.g. 'USMF'.
packageNameNoOptional package name. Default derived from the project id.
definitionGroupIdYesExisting DMF export project (definitionGroupId) in FO.
pollTimeoutSecondsNoMax seconds to poll for completion. Default 300.
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It explains the prerequisite and indicates the tool waits for completion ('when complete'), but it does not disclose potential side effects of reExecute, authentication needs, rate limits, or what happens on failure. These gaps are significant for a potentially long-running action with no structured safety hints.

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?

Three sentences covering purpose, prerequisite, and alternative. Every sentence earns its place with no redundant or filler content. The critical note is clearly separated and front-loaded.

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 and no annotations, the description covers the core purpose, the key prerequisite, and the primary alternative. It mentions the download URL as the return value and implies polling behavior via 'when complete'. It does not explicitly describe the polling mechanism, but the parameter descriptions cover timeout and re-execution, so the description is reasonably complete for invoking the 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?

The schema already provides 100% coverage with clear descriptions for all five parameters. The description adds minor context about definitionGroupId needing to exist and packageName derivation, but these are already implied by the schema. It does not substantially enhance parameter understanding beyond the schema.

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

Purpose5/5

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

The description clearly states the action ('Trigger a bulk export'), the resource ('Data Management package REST API'), and the outcome ('return the download URL'). It also distinguishes from sibling tools by naming odata_export_entity for ad-hoc exports and dmf_create_data_project for project creation.

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?

Explicitly provides usage context: a prerequisite (the DMF export project must exist), a fallback creation tool (dmf_create_data_project), and an alternative for ad-hoc exports (odata_export_entity). This gives clear when-to-use guidance.

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

dmf_get_job_statusAInspect

Poll the status of a DMF import/export execution by its executionId (e.g. NotRun, Executing, Succeeded, PartiallySucceeded, Failed). For a completed export, also returns the download URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
executionIdYesThe executionId returned by dmf_import_file or dmf_export_package.
Behavior4/5

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

With no annotations provided, the description carries the transparency burden. It discloses that the tool is a polling status check (read-only implied), enumerates possible return states (e.g., Succeeded, Failed), and reveals that completed exports include a download URL. This is useful behavioral context beyond the schema, though it doesn't discuss rate limits or potential long-running operations.

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

Conciseness5/5

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

Two concise sentences front-load the core purpose, then add status examples and the export download URL behavior. Every word adds value with no redundancy or filler.

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

Completeness4/5

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

For a low-complexity tool with one parameter and no output schema, the description sufficiently explains what the tool returns (status and download URL). It could mention non-destructive behavior or error handling, but the 'Poll' wording and status list make the tool's behavior adequately complete.

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

Parameters3/5

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

The schema already provides 100% coverage for the single parameter, including its source ('returned by dmf_import_file or dmf_export_package'). The tool description repeats 'by its executionId' without adding further semantic nuance. Baseline 3 is appropriate as the description doesn't materially enhance parameter understanding.

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

Purpose5/5

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

The description uses a specific verb ('Poll') and resource ('status of a DMF import/export execution'), clearly distinguishing it from sibling tools like dmf_import_file and dmf_export_package which initiate operations. It also specifies the key parameter (executionId) and gives concrete status examples.

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 implies usage after an import/export by referencing executionId returned by dmf_import_file or dmf_export_package, and mentions 'Poll' indicating repeated calls. It lacks explicit 'when not to use' statements, but the context is clear enough for correct selection among DMF tools.

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

dmf_import_fileA
Destructive
Inspect

Bulk-import a CSV file into a D365 F&O entity through the Data Management package REST API. Builds the package (Manifest + header + CSV) in memory, uploads it to Azure blob, then calls ImportFromPackage which AUTO-CREATES the data project from the manifest. Runs in batch; the tool polls until completion and returns the final status plus an error-keys file URL when rows fail. Provide either filePath (a .csv on disk) or inline csvContent. Resolve the entity name from the KB (find_entity_for_table) -- do not invent it.

ParametersJSON Schema
NameRequiredDescriptionDefault
executeNoExecute the import after staging (true) or stage only (false). Default true.
filePathNoPath to a .csv file on disk. Provide this OR csvContent.
overwriteNoOverwrite an existing project definition with the same id. Default true.
csvContentNoInline CSV content (header row + data). Provide this OR filePath.
entityNameYesTarget entity name as known to DMF (the entity, not the OData set), e.g. 'Customers V3'.
legalEntityYesLegal entity / company id to import into, e.g. 'USMF'.
definitionGroupIdNoDMF definition group (data project) id. Default: auto-generated from entity + timestamp.
pollTimeoutSecondsNoMax seconds to poll for completion before returning the executionId. Default 300.
Behavior5/5

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

Beyond the annotations (destructiveHint, openWorldHint), the description discloses important behavioral details: it auto-creates the data project from the manifest, uploads to Azure blob, runs in batch, polls until completion, and returns final status plus an error-keys URL on failure. This gives the agent a strong mental model of the tool's side effects and asynchronous nature.

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?

Every sentence earns its place: purpose, process, batch behavior, input modes, and entity resolution guidance. The description is front-loaded with the core purpose and contains no filler or repetition of schema fields.

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 the lack of an output schema, the description covers the key aspects: what it does, how it works, side effects (auto-created project), asynchronous behavior, return value (status and error-keys URL), and input alternatives. It is sufficiently complete for a complex tool with 8 parameters.

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 extra value by explicitly instructing to resolve entityName via find_entity_for_table and clarifying the filePath/csvContent mutual exclusion, which is helpful even though it partially echoes the schema.

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

Purpose5/5

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

The description clearly states the tool's function: 'Bulk-import a CSV file into a D365 F&O entity through the Data Management package REST API.' It uses a specific verb and resource, and the process details (builds package, uploads to blob, calls ImportFromPackage) further distinguish it from sibling tools like dmf_export_package.

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?

It provides clear context on how to use the tool: 'Provide either filePath (a .csv on disk) or inline csvContent' and 'Resolve the entity name from the KB (find_entity_for_table) -- do not invent it.' However, it does not explicitly state when not to use this tool or name alternative tools for related operations (e.g., dmf_create_data_project), so it lacks exclusions.

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

dmf_transform_excelAInspect

Transform a multi-sheet Excel (.xlsx) into DMF-ready rows using a data-driven JSON mapping -- equivalent to FO_TransformExcelForDMF. NO FO credentials required (offline transform). Provide the workbook via ONE of: sourceUrl (Blob/SharePoint SAS URL or Graph downloadUrl), filePath (local .xlsx) or fileContentBase64 (inline upload, small files only). The mappingJson spec supports: sourceSheet, targetSheet, columnMappings {source->target}, conditionalValues [{sourceColumn,matches[],values{}}], staticValues{}, deduplicateOn[] and autoGeneratedFields (array OR object keyed by sheet, e.g. {"Products V2":["PRODUCTNUMBER"]}) which are removed so FO generates them. Returns CSV (default, feed to dmf_import_file) or JSON (feed to odata_upsert_rows). Set listSheetsOnly=true to just inspect the workbook's sheet names.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format: 'csv' (default) or 'json'.csv
filePathNoLocal path to a .xlsx file. Provide one of sourceUrl/filePath/fileContentBase64.
sheetNameNoOverride the source sheet name. Empty = use mappingJson.sourceSheet, else the first sheet.
sourceUrlNoURL to the .xlsx (Blob/SharePoint SAS or Graph downloadUrl). Provide one of sourceUrl/filePath/fileContentBase64.
outputPathNoOptional file path to also write the full transformed result to.
mappingJsonNoMapping spec JSON (columnMappings, conditionalValues, staticValues, deduplicateOn, autoGeneratedFields, sourceSheet). Optional when listSheetsOnly=true.
listSheetsOnlyNoIf true, only list the workbook's sheet names (diagnostic). mappingJson not required.
fileContentBase64NoBase64-encoded .xlsx content (inline upload, small files). Provide one of sourceUrl/filePath/fileContentBase64.
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states the offline nature ('NO FO credentials required'), input constraints ('small files only'), and output behavior including downstream feed targets. It also explains a key transformation rule: autoGeneratedFields are 'removed so FO generates them.' This provides substantial transparency beyond a simple transform description, though it omits details on error handling and exact conditionalValues semantics.

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

Conciseness5/5

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

The description is a single, well-structured paragraph with dense, purposeful sentences. Each segment—purpose, credential note, input methods, mapping spec, output routing, diagnostic flag—adds essential information without redundancy. Though lengthy, the complexity of the tool justifies every sentence, and the most critical information (purpose and input options) is front-loaded.

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 (8 parameters, complex mapping spec, no output schema), the description is notably complete. It covers input alternatives, mapping capabilities, output formats and downstream integration, and the diagnostic listSheetsOnly mode. It lacks some edge-case details like error handling and size limits for sourceUrl/filePath, and the conditionalValues structure is only sketched, but an agent can reasonably select and invoke the tool correctly based on this description.

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 description coverage is 100%, so the baseline is 3. The description adds value by elaborating on the mappingJson spec: it enumerates supported keys (sourceSheet, targetSheet, columnMappings, conditionalValues, staticValues, deduplicateOn, autoGeneratedFields) and gives a concrete example of the sheet-keyed autoGeneratedFields format. This goes beyond the schema's one-line description and helps the agent construct valid inputs.

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 specific action and outcome: 'Transform a multi-sheet Excel (.xlsx) into DMF-ready rows using a data-driven JSON mapping'. It also names the equivalent function (FO_TransformExcelForDMF) and clarifies it's an offline transform, distinguishing it from related import/export tools. The purpose is unambiguous and distinct from sibling tools.

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 gives clear usage context: 'NO FO credentials required (offline transform)' and 'Provide the workbook via ONE of: sourceUrl... filePath... or fileContentBase64 (inline upload, small files only)' tells the agent when and how to use it. It also provides downstream routing guidance ('Returns CSV (default, feed to dmf_import_file) or JSON (feed to odata_upsert_rows)') and a diagnostic mode. However, it doesn't explicitly contrast with sibling tools like dmf_create_data_project or dmf_import_file, which would have pushed it to a 5.

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'
Behavior3/5

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

Annotations already provide `readOnlyHint: true`, which covers the safety profile. The description adds that output is 'plain business language' and free of X++/jargon, which is useful but does not go beyond this to discuss other behavioral traits such as response structure or data sources. It neither contradicts the annotations nor adds substantial behavioral depth.

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

Conciseness3/5

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

The description is front-loaded with usage guidance and structured with labels like 'WHEN' and 'NOT'. However, the purpose is restated multiple times: the WHEN section and the WORKFLOW EXPLAINER line echo the same content, and the triggers list adds length. It is reasonably organized but contains redundancy.

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

Completeness4/5

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

Given the tool's moderate complexity, a single parameter, and a `readOnlyHint` annotation, the description covers the essential context: what the tool does, when to use it, its output tone, and how it differs from a sibling. It does not describe return format, but no output schema exists and the explanation-oriented behavior is conveyed clearly.

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

Parameters3/5

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

The input schema has 100% description coverage for the single parameter, including examples ('SalesTable', 'PurchTable', 'ALMDemandeAchatWorkflow'). The tool description does not add additional parameter semantics beyond what the schema already provides, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Explains') and a concrete resource ('D365 approval workflow'), and enumerates the exact aspects covered: who approves, what states exist, and what happens on approval/rejection. It also distinguishes itself from the sibling tool `get_object_details` by explicitly stating it is 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?

The description provides explicit usage conditions prefixed with 'WHEN,' including example user intents, and an explicit exclusion: 'NOT for technical workflow class details -- use `get_object_details`.' It also lists trigger phrases to help the agent recognize when to invoke the tool.

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

find_callersA
Read-onlyIdempotent
Inspect

Full cross-reference profile for a class or method: callers, callees, inheritance chain, interface implementations, overrides, attributes. Requires xref_index.json.gz (generated from DYNAMICSXREFDB via GenerateCache --xref-conn). Falls back to vector-search when XRef not loaded.

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 already declare readOnlyHint and idempotentHint, so the description adds valuable context about the index requirement and fallback to vector-search. This goes beyond the annotation-provided safety profile without contradicting it.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary purpose and followed by the dependency and fallback note. Every sentence adds value with no redundancy.

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

Completeness4/5

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

Despite lacking an output schema, the description explains the breadth of the profile and the fallback behavior. It provides enough detail for an agent to understand the tool's scope, though a more explicit return format description would improve completeness.

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 schema already documents all four parameters with 100% coverage. The description does not add extra meaning or examples for parameters, so it meets the baseline without exceeding it.

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

Purpose4/5

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

The description clearly states the tool produces a 'full cross-reference profile' for a class or method, listing specific components (callers, callees, inheritance, etc.). This distinguishes it from broader search tools like find_references, though it does not explicitly name alternatives.

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

Usage Guidelines3/5

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

The description implies usage through its detailed purpose but does not explicitly state when to prefer this over sister tools. It does provide a prerequisite (xref_index.json.gz) and a fallback behavior, which offers some contextual guidance.

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

find_change_impactA
Read-onlyIdempotent
Inspect

WHEN: about to modify an X++ object or method and need to understand what could break. Returns a blast-radius report: direct callers, transitive dependents (BFS up to 3 hops), custom model extensions, interface propagation, and severity classification (Critical/High/Medium/Low). Requires the XRef index (loaded from xref_index.json.gz). Triggers: 'what breaks if I change X', 'impact of modifying SalesLine', 'blast radius', 'refactoring risk', 'quel impact si je modifie', 'qu'est-ce qui dépend de'. Pass objectName='SalesLine' for table/class-level impact, or objectName='SalesLine.insert' for method-level impact. Combine with validate_best_practices / detect_performance_issues to get both impact AND current code quality before committing a change.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxDepthNoMax BFS depth (1-5). Default 3.
objectNameYesObject or method to analyse, e.g. 'SalesLine' or 'SalesLine.insert'.
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint. The description adds meaningful behavioral context: requires XRef index (loaded from xref_index.json.gz), performs BFS up to 3 hops, and produces severity classifications. This goes beyond the annotations, though it doesn't detail all edge cases or output format specifics.

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 front-loaded with 'WHEN'. It includes trigger phrases, examples, and a combination tip. While slightly long, every sentence earns its place for a complex tool. The structure (WHEN → returns → requires → triggers → example → combination) is logical and efficient.

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 and the tool's complexity, the description covers the purpose, usage triggers, required setup (XRef), parameter semantics, and output content (blast-radius report details). It also addresses sibling differentiation and integration with other tools. This is a complete, self-sufficient description.

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

Parameters5/5

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

Schema coverage is 100% and both parameters have descriptions. The description adds crucial semantic value: 'Pass objectName='SalesLine' for table/class-level impact, or objectName='SalesLine.insert' for method-level impact.' It also clarifies maxDepth's role via 'BFS up to 3 hops' in the main text. This meaningfully augments the schema.

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

Purpose5/5

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

The description clearly states the tool's function: 'Returns a blast-radius report: direct callers, transitive dependents... severity classification.' The verb 'find change impact' is specific and the resource (X++ objects/methods) is explicit. It also distinguishes from sibling tools like find_callers and find_references by focusing on impact/blast radius.

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' guidance: 'about to modify an X++ object or method and need to understand what could break.' Includes trigger phrases and example usage (e.g., objectName='SalesLine'). Also suggests complementary tools: 'Combine with validate_best_practices / detect_performance_issues...' This gives clear context for when to use the tool versus alternatives.

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-onlyIdempotent
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?

Beyond the readOnly and idempotent annotations, the description discloses the tool's scanning behavior ('scans all indexed AxDataEntityView objects'), the return fields, and the conditional generation of a template when generateIfMissing=true. It clearly presents the generation side effect, which is important context even if the annotation suggests no persistent writes.

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

Conciseness3/5

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

The description is longer than necessary, with a lengthy trigger list and some redundant explanations. It is front-loaded with the WHEN clause, which is good, but the overall structure could be more compact without losing essential information. It is still readable and organized, so it earns a middling score.

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 lacking an output schema, the description sufficiently explains return values (entity name, public entity name, IsPublic status, key fields, data sources) and covers the main use case along with the generateIfMissing edge behavior. It gives an agent enough context to invoke the tool correctly and interpret results.

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

Parameters3/5

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

The schema descriptions cover all three parameters (100% coverage), providing details for tableName, maxResults, and generateIfMissing. The description repeats the generateIfMissing behavior but adds no extra semantic nuance beyond the schema. Therefore, the description provides no significant additional parameter meaning.

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 primary function: finding D365 F&O data entities that expose a given table for OData/DMF integrations. It uses a specific verb ('find') and resources ('data entities'), and includes an example query ('Which entity exposes SalesTable for OData?'). This distinguishes it from sibling tools like generate_data_entity, though it also mentions a generation capability as a secondary behavior.

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

Usage Guidelines4/5

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

The description provides an explicit WHEN clause ('developer needs to integrate via OData and wants to find the entity name for a given table') and lists trigger phrases that signal user intent. It does not explicitly name alternative tools to use instead, but the context is clear enough that an agent can identify the appropriate scenario.

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-onlyIdempotent
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'
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds substantial behavioral context: it matches against a built-in error database, resolves label IDs, searches the indexed codebase, and returns root causes, resolutions, and source locations. This aligns with the read-only nature and enhances understanding beyond the annotations.

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

Conciseness4/5

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

The description is long but well-structured with sections (WHEN, triggers, function, returns, special note). It includes extensive trigger examples that contribute to clarity, though some redundancy exists (e.g., repeated audience-type explanation). Overall, the structure helps scannability and the length is justified by the tool's complexity.

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 no output schema, the description is remarkably complete: it covers when to use, what it does, what it returns, how to interact with sibling tools, and audience variations. It even provides a workflow for label resolution. This leaves minimal gaps for an agent to invoke it correctly.

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

Parameters5/5

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

While the schema already describes both parameters (100% coverage), the description adds semantic value by explaining that audienceType='business' produces a plain-language explanation for end users and providing concrete examples for errorOrSymptom. This enriches the parameter meaning beyond the schema.

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

Purpose5/5

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

The description explicitly states the tool's function: 'Find known D365 F&O error patterns matching an error message or symptoms description.' It also distinguishes itself from the sibling tool search_labels by noting label resolution and instructing to call search_labels first for label IDs.

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 a clear 'WHEN' section and lists specific triggers for both developer and business contexts. It explicitly names an alternative tool ('call search_labels first') and explains the audienceType parameter for choosing between developer and business explanations.

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

find_event_handlersA
Read-only
Inspect

Find all event handlers that subscribe to events on a D365 table or class. Searches the knowledge base for [SubscribesTo(classStr(objectName), ...)] / [SubscribesTo(tableStr(objectName), ...)] attribute patterns. Use eventName to narrow results to a specific event (e.g. 'OnInserted'). WHEN: 'who handles X', 'what subscribes to Y', 'event handlers for Z', 'qui écoute l'événement', 'abonnés à l'événement', 'SubscribesTo', 'data events for'.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventNameNoOptional: filter to a specific event name, e.g. 'OnInserted', 'OnUpdated', 'OnDeleted', 'OnValidatingWrite'.
objectNameYesTable or class name to find event handlers for, e.g. 'SalesTable', 'PurchTable'.
handlerTypeNoOptional: filter by handler type — 'DataEventHandler' or 'PrePostEventHandler'.
Behavior4/5

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

While readOnlyHint already indicates safety, the description adds value by disclosing that it searches the knowledge base for specific SubscribesTo attribute patterns, which is beyond the annotation. This helps set expectations about the search scope and mechanism without contradicting the read-only hint.

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 compact, front-loads the core purpose, and includes a concise WHEN list. The multilingual trigger phrases add a little length but are purposeful; the overall structure is 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 read-only search tool with three well-documented parameters and no output schema, the description covers what it does, how it searches, and when to use it. It does not describe the return format, but the simplicity and annotations make this adequate.

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

Parameters3/5

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

Schema coverage is 100%, so each parameter already has a description. The tool description reinforces eventName usage with an example but does not add significant semantic detail beyond the schema, matching 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 starts with 'Find all event handlers that subscribe to events on a D365 table or class,' which names the specific verb, resource, and target, clearly distinguishing it from siblings like find_references or find_callers. It further specifies the search pattern (SubscribesTo) making the purpose unmistakable.

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 guidance with natural-language trigger phrases in both English and French, plus advice to use eventName for narrowing. It does not mention alternatives or exclusions, but the usage context is clear and actionable without being misleading.

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

find_extensionsA
Read-onlyIdempotent
Inspect

Find all extension objects (AxClassExtension, AxTableExtension, AxFormExtension, AxEnumExtension), CoC classes ([ExtensionOf]), and event handlers for a base object. Also queries Azure DevOps Code Search in real-time for custom extensions not yet in the KB. ALWAYS call before creating a new extension — avoid parallel customizations.

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 already declare readOnlyHint and idempotentHint, covering the safety profile. The description adds meaningful behavioral context: it queries Azure DevOps Code Search in real-time for extensions not yet in the KB, implying potential network dependency and KB staleness. No contradiction with annotations; this is useful supplementary information.

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?

Three concise sentences with no waste. The first sentence front-loads the core function with specifics, the second adds the live query behavior, and the third delivers an imperative usage directive. Every sentence earns its place.

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

Completeness4/5

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

The tool has moderate complexity with one parameter and no output schema. The description covers what the tool searches (KB + live Azure DevOps), what it finds (extensions, CoC, event handlers), and when to invoke it. It could describe return format, but the core context is sufficiently complete for an agent to call the tool correctly.

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

Parameters3/5

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

Schema coverage for the single parameter baseObjectName is 100%, with examples in the schema description. The tool description does not elaborate on parameter syntax or constraints beyond that, but since the schema already documents the parameter fully, the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool finds all extension objects, CoC classes, and event handlers for a base object, enumerating specific extension types (AxClassExtension, AxTableExtension, etc.). This distinguishes it from sibling tools like find_event_handlers or find_references by precisely defining the resource and 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 guidance is provided: 'ALWAYS call before creating a new extension — avoid parallel customizations.' This tells the agent exactly when to use the tool and why, making the usage context unambiguous.

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

find_referencesA
Read-onlyIdempotent
Inspect

Full index scan for all usages of an object, method, field, or label ID. Use for impact analysis before changing or deleting an object. EXPENSIVE — O(1M+ chunks). Prefer find_callers when XRef index is loaded (O(1)). Label IDs: automatically searches both @SYS124480 and @SYS:124480 forms. NOT for extensions only — use find_extensions for CoC/event handlers.

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 already declare readOnlyHint and idempotentHint, providing safety context. The description adds valuable behavioral context beyond annotations: the expensive O(1M+ chunks) warning, automatic handling of both label ID forms, and the exclusion for extensions-only searches. No contradiction with annotations.

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

Conciseness5/5

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

The description is compact yet dense: every sentence adds essential information (purpose, usage context, cost warning, label handling, exclusion), with no filler. It is front-loaded with the most important info and structured logically.

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 read-only search tool with no output schema, the description covers the core purpose, when to use, cost, label special cases, and alternative tools. It is complete enough for an agent to select and invoke correctly, especially given rich sibling context and annotations.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description slightly expands the meaning of 'name' to include fields and label IDs, but does not add significant detail for maxResults or locationsPerObject, which the schema already documents adequately.

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 performs a full index scan for usages of object, method, field, or label ID, and it explicitly differentiates from siblings like find_callers and find_extensions. The verb 'find' and scope are specific and unambiguous.

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?

Explicitly advises using it for impact analysis before changing/deleting an object, and gives concrete alternatives: 'Prefer find_callers when XRef index is loaded' and 'use find_extensions for CoC/event handlers.' This is textbook usage guidance.

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

find_relation_pathA
Read-onlyIdempotent
Inspect

WHEN: you need to know HOW two AOT objects are connected -- the chain of relations linking them. Triggers: 'how is X related to Y', 'comment X est lié à Y', 'path between', 'chemin entre', 'lien entre deux tables', 'connection between', 'is X reachable from Y'. Walks the pre-computed relation graph (FK, DeleteAction, DataSource, Extension, Security edges -- both directions) and returns the SHORTEST navigation path(s) as a chain of object names + edge kinds. Token-light: returns ONLY names and relation kinds, never full object source. O(1)-per-node BFS, no vector scan. Use get_relation_graph for the full neighbourhood of a single object; use this to traverse multiple hops between two known objects.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesStart object name, e.g. 'SalesTable'
targetYesDestination object name, e.g. 'CustTable'
maxDepthNoMaximum hops to traverse (default: 4, max: 8). Higher = slower, more paths.
maxPathsNoMaximum number of distinct paths to return (default: 5, max: 20).
Behavior5/5

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

Annotations declare readOnlyHint and idempotentHint, and the description supplements this with concrete behavioral details: traverses FK, DeleteAction, DataSource, Extension, Security edges in both directions; returns only names and relation kinds; O(1)-per-node BFS with no vector scan. This goes beyond what annotations express and sets expectations for output size and performance.

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 information-dense but well-structured, front-loading the WHEN and trigger phrases before the mechanism. Each sentence adds value: the graph edges detail, the token-light promise, and the comparison to the sibling tool. No tautology or filler.

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

Completeness5/5

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

Given there is no output schema, the description explains the return shape (chain of object names + edge kinds) and covers performance, scope, and alternatives. The tool is read-only and idempotent per annotations, and the description adds the specifics of graph traversal and limitations, making it sufficiently complete for an agent to select and invoke correctly.

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

Parameters4/5

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

Input schema covers all 4 parameters with full descriptions (100% coverage), so baseline is 3. The description adds context that source and target are object names, and explains the graph traversal includes both directions and the performance implication of maxDepth, which enriches understanding beyond the schema.

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

Purpose5/5

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

The description clearly states the tool's function: finding the shortest navigation path(s) between two AOT objects via the relation graph, returning a chain of object names and edge kinds. It distinguishes itself from sibling get_relation_graph by specifying this is for multi-hop traversal between two known objects.

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?

Explicitly provides WHEN/trigger phrases (e.g., 'how is X related to Y') and directly contrasts with get_relation_graph: 'Use get_relation_graph for the full neighbourhood of a single object; use this to traverse multiple hops between two known objects.' This gives clear selection guidance.

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

find_similar_implementationsA
Read-onlyIdempotent
Inspect

Find D365 objects structurally similar to the one you supply (same kind, similar method set, similar field set). Useful when you need a working reference implementation to copy from.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxResultsNoMaximum results (default: 15, max: 30)
objectNameYesObject name to find similar objects for, e.g. 'ALMERSftpConnectionTable', 'SalesTable'
filterAotTypeNoOptional: filter to a specific AOT type, e.g. 'AxTable', 'AxClass'. If not set, uses the same type as the source object.
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds behavioral context by defining what 'similar' means (same kind, method set, field set), which helps the agent understand the matching logic. No contradictions with annotations.

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

Conciseness5/5

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

The description is concise and front-loaded. The first sentence states the core purpose, and the second sentence adds a practical use case. Every word earns its place with no redundancy.

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

Completeness4/5

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

For a straightforward search tool, the description adequately explains purpose and use case. However, since there is no output schema, the description does not mention the return format or ordering, which is a minor gap. Overall, it is complete enough for an agent to select and invoke correctly.

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

Parameters3/5

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

The input schema fully describes all three parameters, including defaults and examples. The description adds no additional parameter semantics beyond the schema, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Find') and resource ('D365 objects') and clearly states the similarity criteria ('same kind, similar method set, similar field set'). This distinguishes it from sibling tools like find_references or find_related_objects, which serve different purposes.

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

Usage Guidelines4/5

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

The description provides clear context on when to use this tool: 'when you need a working reference implementation to copy from.' However, it does not explicitly exclude alternatives or name sibling tools for different scenarios, so it misses the top score.

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

fix_best_practice_violationsA
Read-onlyIdempotent
Inspect

WHEN: validate_best_practices returned violations and you want concrete X++ fix suggestions. Returns each BP violation with its built-in fix suggestion AND (when Ollama is available) an AI-generated X++ code patch using the source from the knowledge base. Triggers: 'fix best practice', 'corriger les violations', 'generate fix', 'patch BP'. Set generatePatches=true to call Ollama (ALMXPP_SUMMARIZE_MODEL) for code patches -- requires Ollama running at OLLAMA_HOST. Falls back to built-in fix suggestions if unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectNameYesObject or method to fix, e.g. 'SalesLine' or 'SalesLine.insert'.
maxViolationsNoMax violations to process (1-20, default 10).
generatePatchesNoGenerate X++ code patches via Ollama (requires OLLAMA_HOST). Default false.
Behavior4/5

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

The annotations already declare readOnlyHint and idempotentHint, and the description adds context about the optional Ollama dependency, the fallback to built-in suggestions, and the requirement for OLLAMA_HOST. This gives the agent a clear picture of potential side effects and dependencies beyond the basic read-only nature.

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 structured with a 'WHEN' prefix and includes triggers and dependencies. It's a moderate length that covers necessary details without excessive verbosity. It could be slightly tighter but is well organized.

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?

The tool has a moderately complex behavior with optional AI patches, but the description covers the core behavior, return value, fallback, and external dependency. Without an output schema, it explains what the agent can expect. It's complete enough for this complexity.

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 already provides descriptions for all three parameters (100% coverage). The description does not add significant new meaning beyond what the schema offers; it mentions generatePatches triggers Ollama, but that's already in the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool returns fix suggestions for BP violations and is meant to be used after validate_best_practices. It distinguishes itself from sibling validation tools by focusing on concrete X++ fix suggestions. The 'WHEN' opener makes the purpose explicit.

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

Usage Guidelines4/5

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

The description explicitly specifies when to use: after validate_best_practices returned violations. It also lists trigger phrases. However, it doesn't mention alternatives or exclusions like when not to use it, so it's clear context but no explicit exclusions.

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

generate_data_entityA
Read-only
Inspect

WHEN: developer needs to CREATE a data entity (AxDataEntityView) AOT XML from a table for OData/DMF/data migration. Triggers: 'create data entity', 'generate entity', 'créer une data entity', 'exposer table via OData', 'DMF entity', 'entity for OData', 'entité de données', 'générer entity XML', 'AxDataEntityView pour', 'data entity from table'. Produces complete AxDataEntityView AOT XML with data sources, field mappings, entity key, IsPublic/PublicEntityName for OData, staging table template. Uses real field names and relations from the local custom model. ALWAYS call find_entity_for_table first to verify a standard entity doesn't already exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoOptional: specific fields to include (comma-separated). All fields if not specified.
isPublicNoWhether the entity should be available via OData (default: true)
tableNameYesPrimary table name, e.g. 'SalesTable', 'CustTable'
entityNameYesDesired entity name, e.g. 'ALMSalesOrderEntity'
joinTablesNoOptional: additional tables to join (comma-separated), e.g. 'CustTable,InventDim'
publicEntityNameNoOptional: OData collection name (e.g. 'SalesOrders'). Auto-generated if not provided.
Behavior4/5

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

Annotations include readOnlyHint=true, and the description adds that it produces complete XML with data sources, field mappings, entity key, IsPublic/PublicEntityName, and staging table template. This goes beyond the annotation but doesn't disclose return format or error behavior, so it's not a perfect 5.

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 well-structured with 'WHEN', 'Triggers', 'Produces', 'Uses', and 'ALWAYS' sections. Every sentence carries value, including the trigger list which aids intent matching. No redundancy.

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

Completeness4/5

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

The description covers the tool's purpose, prerequisites, inputs, and produced artifact. Without an output schema, it lacks explicit output format details, but the main use case and trigger context are fully described. Could mention error scenarios, but overall it's quite complete.

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% with descriptions for all 6 parameters. The description enriches this by noting that it uses real field names/relations from the local model and that publicEntityName auto-generates if absent, adding meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the tool creates an AxDataEntityView AOT XML from a table for OData/DMF/data migration. The verb 'CREATE' and specific resource 'data entity (AxDataEntityView) AOT XML' make it distinct from siblings like create_aot_object or generate_xpp_form.

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 explicitly states when to use it ('WHEN: developer needs to CREATE a data entity...') and lists trigger phrases for intent matching. It also mandates calling find_entity_for_table first to verify no standard entity exists, providing clear exclusion guidance.

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

generate_diagramA
Read-onlyIdempotent
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?

With annotations already declaring readOnlyHint and idempotentHint, the description adds useful behavioral context: outputs are Mermaid diagrams that render in specific viewers, and the 'flow' type is disabled because static call trees are misleading due to CoC and event handlers. This goes beyond the annotations and explains a design decision.

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 somewhat long but well-structured, with sections for WHEN, triggers, types, and a note. There is no redundancy; each sentence contributes useful information. It could be slightly more concise, but the organization earns its 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 tool's complexity (two active types, one disabled), a complete description is needed. It covers all diagram types, mentions rendering, and explains the disabled flow. It does not explicitly state the return format (Mermaid code), but that is reasonably inferred from 'Diagrams render directly in Copilot Chat...' so the description is sufficient.

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

Parameters4/5

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

The schema provides 100% coverage with descriptions, so the baseline is 3. The description adds meaning by elaborating on diagramType values ('er' for entity-relationship, 'security' for Role->Duty->Privilege->EntryPoints) and clarifying that methodName is unused because flow is disabled. This adds value beyond the schema.

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

Purpose5/5

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

The description clearly states the tool's function: 'Generate visual Mermaid diagrams from D365 F&O knowledge base data.' It specifies the two supported diagram types ('er' and 'security') and explicitly distinguishes from sibling tools like trace_security_chain, making its purpose unambiguous and well-scoped.

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 opens with 'WHEN: generating a visual diagram...' and provides triggers. It explicitly advises using trace_security_chain for structured text chains instead of the visual security diagram, and notes that 'flow' is disabled, offering clear when-to-use and when-not-to-use guidance with an alternative.

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, and the description does not contradict this. The description adds useful behavioral context beyond annotations by listing the sections generated (Purpose, Business Context, etc.) and implying the output is a structured document ready for review, which is helpful for setting expectations.

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 with WHEN, a summary sentence, output sections, and triggers. It is a bit lengthy due to the enumerations, but each part serves a purpose. It is front-loaded with the most critical usage guidance, making it efficient despite its 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 tool's moderate complexity (3 params, no output schema), the description covers usage triggers, exclusions, output structure, and purpose. It does not explain error handling or what happens if the objectName is invalid, but it is sufficiently complete for a document generator.

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

Parameters3/5

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

Schema coverage is 100% with clear descriptions for all three parameters. The description mentions 'resolved labels' and sections but does not add extra meaning to the parameters themselves. It meets the baseline for schema-covered parameters but does not further elaborate.

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: 'Produces a structured FDD ready for review and sign-off.' It specifies the resource (Functional Design Document) and distinguishes it from sibling tools by explicitly excluding developer technical docs and pointing to get_object_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?

The description provides explicit when-to-use guidance: 'WHEN: user asks to write or generate a Functional Design Document...' and what not to use it for ('NOT for developer technical docs -- use get_object_details'). It also lists trigger phrases, making the decision easy.

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

generate_queryA
Read-onlyIdempotent
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)
Behavior5/5

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

Annotations declare readOnlyHint=true and idempotentHint=true, indicating safe read-only behavior. The description goes beyond this by detailing the tool's outputs (side-by-side X++ and SQL with explanations), its reliance on real field names/relations/indexes, auto-detection of joins, and the warning that output is a template. No contradictions with annotations.

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

Conciseness4/5

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

The description is structured with clear sections (WHEN, supports, pre-requisites, caveat) and front-loaded with purpose. It is longer than ideal due to the extensive trigger list, but every sentence conveys useful information about usage, constraints, or output. The length is justified by the tool's complexity.

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 8 parameters, no output schema, and no nested objects, the description is exceptionally complete. It explains the return format (side-by-side X++ and SQL with explanations), pre-requisites for joins, supported query features (field selection, filters, order by, top, cross-company), and natural language input. It leaves little ambiguity about what the tool produces and how to use 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?

The input schema already covers all parameters with descriptions (100% coverage), providing a strong baseline. The description adds value by explaining the 'description' parameter (natural language auto-detection) and contextualizing parameters like top (firstonly) and crossCompany within the overall query-building workflow, though it does not detail each parameter.

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 function: generating X++ select statements and equivalent T-SQL queries for D365 F&O tables. It distinguishes itself from sibling tools by focusing on query generation and even instructs users to call find_related_objects first for joins, showcasing a specific resource and verb.

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' section with trigger phrases and specifies the context for use. It also provides critical usage guidance: for multi-table joins call find_related_objects first, and notes that generated X++ is a template requiring adaptation. This clearly tells when and how to use the tool.

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

generate_release_note_documentAInspect

WHEN: you have already called prepare_release_note_context and analyzed its 'objects' array yourself, producing a findings JSON array per the 'instructions' field it returned. This tool renders that findings array into a downloadable Word (.docx, detailed appendix) and PowerPoint (.pptx, executive summary) release note and returns their download URLs. Does NOT call any LLM itself -- the reasoning must already be done by you.

ParametersJSON Schema
NameRequiredDescriptionDefault
v1YesOlder D365FO version (same value passed to prepare_release_note_context).
v2YesNewer D365FO version (same value passed to prepare_release_note_context).
findingsJsonYesJSON array of your findings, one per object from prepare_release_note_context's 'objects' array. Schema: [{"aotType":"...","objectName":"...","changeType":"Added|Removed|Modified","riskLevel":"Critical|Warning|Info|None","whatChanged":"...","documentedInMsLearn":true|false,"msLearnReference":"...","undocumentedReason":"...","regressionRisk":"...","opportunity":"...","recommendation":"..."}]
touchedAddedYestouchedAdded count returned by prepare_release_note_context.
touchedRemovedYestouchedRemoved count returned by prepare_release_note_context.
businessContextNoOptional business/functional context (same value passed to prepare_release_note_context), included in the Word document.
touchedModifiedYestouchedModified count returned by prepare_release_note_context.
customModelLabelYesCustom model label(s) -- use the customModelLabel field returned by prepare_release_note_context.
Behavior4/5

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

The description adds key behavioral context beyond the single readOnlyHint annotation: it produces two file types (Word and PowerPoint), returns download URLs, and explicitly states it does not invoke an LLM. This is important for setting agent expectations. It could mention potential side effects like file storage or permissions, but the disclosed behavior is already quite transparent.

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

Conciseness5/5

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

The description is three sentences: the first gives a clear 'WHEN' condition, the second states the core action and output, and the third reinforces the no-LLM behavior. It is front-loaded, every sentence adds distinct value, and there is no wasted wording.

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 (8 parameters, no output schema) and the rich input schema, the description provides sufficient context: the prerequisite workflow, output formats, and the explicit no-LLM behavior. It does not describe error conditions or the exact structure of the returned URLs, but with 100% schema coverage, the missing pieces are minor for an agent to proceed correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds some context by referencing the 'instructions' field from prepare_release_note_context and the 'objects' array, which helps relate findingsJson to the prior tool's output. However, this information largely overlaps with the schema descriptions, so it doesn't significantly elevate beyond the 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?

The description clearly states the tool's function: it renders a findings array into downloadable Word and PowerPoint release notes and returns download URLs. The verb 'renders' is specific, and it explicitly differentiates from sibling prepare_release_note_context by requiring that the context has already been analyzed and a findings JSON produced.

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 opens with 'WHEN:' and provides an explicit prerequisite: the agent must have called prepare_release_note_context and analyzed the 'objects' array. It also gives a when-not by stating 'Does NOT call any LLM itself,' implying it should only be used after the reasoning is already done. This clearly establishes usage context and differentiates from the analysis-heavy sibling tools.

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

generate_security_reportA
Read-only
Inspect

Generate a security & licensing governance report for the indexed model(s). For each role, lists duties, privileges, entry points and the inferred user-license tier (Activity, Operations, Finance, etc.). Surfaces orphan duties/privileges that grant no real access.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterModelNoOptional: restrict the report to a single model name (e.g. 'ApplicationSuite', 'ContosoCustom'). Empty = all indexed models.
maxRolesDetailNoMaximum number of roles to expand in detail (default 50, max 200).
Behavior3/5

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

Annotations declare readOnlyHint=true, and the description adds that it 'indexes' and 'infers' license tiers, plus surfaces orphan duties/privileges. However it does not explain what 'inferred user-license tier' means (e.g., heuristics), nor whether this is computationally expensive or requires a pre-built index. Enough to know it's safe, but lacking depth.

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?

Three sentences, front-loaded with the core purpose, then details on content and unique output. No wasted words; every sentence adds value.

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?

The description covers what the report includes and its unique 'orphan duties' feature. Given readOnly annotation and rich schema, no output schema exists but return format not explained. For a report tool, the main missing piece is output structure, but description adequately orients the agent. Contextually complete enough.

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 for both parameters (filterModel, maxRolesDetail), each with clear explanations and defaults. The description reaffirms filterModel semantics ('Empty = all indexed models') but adds no additional meaning beyond the schema.

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

Purpose5/5

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

Description states a specific verb (generate) and resource (security & licensing governance report for indexed models), with clear scope: per-role duties/privileges/entry points/license tier. It distinguishes itself from related security tools like trace_role_license_tree or trace_security_chain by focusing on report generation and orphan access.

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?

Implies usage for generating governance reports when wanting a comprehensive view of roles, duties, and license tiers. It doesn't explicitly name when-not-to-use or alternatives, but sibling names like trace_role_license_tree and trace_security_chain suggest alternatives for targeted traces. Context is clear enough.

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

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'
sampleValuesNoOptional: JSON object mapping field name to sample value used in each ARRANGE block, e.g. '{"AccountNum":"C0001","Amount":1500.50}'. Replaces the 'TODO: set up test data' placeholders with concrete assignments.
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 already declare readOnlyHint=true, and the description does not contradict that. It adds valuable behavioral context beyond the annotation: 'SysTest tests in D365 are highly context-specific -- a generic template rarely compiles without adaptation,' and it details exactly what gets generated for tables vs. classes, plus the use of real field names from the knowledge base.

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 moderately long but well-structured with a WHEN section, a warning, and a REQUIRED pointer. It front-loads the purpose, includes trigger phrases, and every sentence contributes either usage guidance or behavioral specifics. No redundant filler.

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

Completeness4/5

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

Given there is no output schema, the description adequately covers what the tool returns (generated code), the logic for tables vs. classes, and the required input relationship between testScenarios and the generated methods. It also explains the constraint about custom code. It does not specify the exact return format, but that is not critical 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?

Although schema coverage is 100%, the description adds essential semantics: it explicitly marks testScenarios as 'REQUIRED' (the schema does not make it required), explains how scenarios map to test methods, and clarifies that sampleValues replaces placeholders. This goes beyond the schema descriptions.

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

Purpose5/5

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

The description clearly states a specific action: 'Generate X++ SysTest unit test code for a CUSTOM D365 F&O object based on functional test scenarios.' The verb 'generate' and the resource 'X++ SysTest unit test code' are precise, and the emphasis on 'CUSTOM' differentiates it from sibling tools like generate_xpp_template or generate_query.

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 includes explicit trigger phrases ('generate tests', 'unit test', 'SysTest', etc.) and a clear context: 'WHEN: developer needs to write or scaffold unit tests for a custom D365 object.' It also warns that it is 'Only meaningful on custom/extension code.' However, it does not explicitly name alternatives for non-custom objects, so it stops short of full when-not guidance.

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

generate_xpp_formA
Read-only
Inspect

Generate a complete, compilable AxForm AOT XML with the CORRECT control serialization () for the requested pattern. Patterns: SimpleList, DetailsMaster, DetailsTransaction, ListPage, Dialog, DropDialog, Workspace, Extension. After generation, call validate_form_pattern on the result before write_aot_object.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoComma-separated field names to include in the grid/header, e.g. 'AccountNum,Name,Status'
formNameYesPascalCase form name, e.g. 'ALMCustomerForm'
modelNameNoModel name for label prefix, e.g. 'ALMMyModel'
fieldTypesNoOptional: comma-separated control type per field (aligned 1:1 with fields). Values: String, Int, Real, Date, DateTime, Enum, CheckBox, Reference. If omitted, all fields default to AxFormStringControl (current behavior).
formPatternYesForm pattern: 'SimpleList', 'DetailsMaster', 'DetailsTransaction', 'ListPage', 'Dialog', 'DropDialog', 'Workspace', 'Extension'
primaryTableNoPrimary/header table name, e.g. 'ALMCustomerTable'
secondaryTableNoSecondary/joined table name (DetailsTransaction: lines table; ListPage: InnerJoin lookup table), e.g. 'SalesTable'
Behavior4/5

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

The annotation readOnlyHint=true indicates a safe read-only operation, and the description adds value beyond that by specifying the output quality (complete, compilable), the correct serialization technique, and the required follow-up steps (validate before write). This gives useful behavioral context not present in annotations.

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

Conciseness5/5

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

The description is two sentences long and front-loaded with the primary purpose. Every clause adds value: the 'complete, compilable' quality claim, the serialization detail, the pattern list, and the post-generation workflow. No filler words.

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

Completeness4/5

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

For a tool with 7 parameters and no output schema, the description gives essential context: what it produces, the supported patterns, and the critical workflow step. It does not explain the exact shape of the generated XML or how parameters interact, but the schema covers param semantics, and the description covers the main behavioral requirements.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add significant parameter semantics beyond the schema; it mentions the pattern list (already in schema) and the 'CORRECT control serialization' hint, but individual parameters are well-documented in the schema itself.

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: generating a complete, compilable AxForm AOT XML with specific control serialization. It lists the supported patterns and distinguishes itself from sibling generation tools like generate_data_entity, generate_query, and generate_xpp_template by focusing on AxForm AOT XML.

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

Usage Guidelines4/5

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

The description provides clear context: it is for generating AxForm XML for the listed patterns, and it explicitly instructs to call validate_form_pattern before write_aot_object. However, it does not explicitly mention when not to use this tool or direct alternatives, so it lacks exclusions.

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 readOnlyHint annotation already conveys that this is a safe, non-mutating operation. The description adds context beyond this by stating that the tool 'Uses REAL metadata from the KB' and that it depends on a prior get_object_details call, both of which are useful behavioral insights not captured by annotations.

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

Conciseness4/5

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

The description is well-structured with clear sections (WHEN, Triggers, definitions) and every sentence serves a purpose. It is somewhat longer than necessary due to the trigger phrase list, but the information density is high and it is front-loaded with the primary use case.

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

Completeness4/5

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

With 3 parameters, no output schema, and multiple template types, the description provides adequate context: it explains what the tool does, when to use it, prerequisite actions, and template type semantics. It does not detail output format, but the 'generates ready-to-use X++ code' phrase covers the essential return value.

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 descriptions cover 100% of parameters, giving a baseline of 3. The description enriches this by fully decoding the templateType values (e.g., 'coc' = Chain of Command, 'event_handler' = pre/post event handler) and providing example object names like 'SalesTable'. This meaningfully improves the agent's ability to choose correct parameter 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 clearly states the tool 'generates ready-to-use X++ code' for extensions/customizations, listing specific template types (coc, table_extension, event_handler, job, find_method). This distinguishes it from sibling tools like generate_xpp_form, which targets forms, and generate_query/data_entity, which target other artifacts.

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 includes a 'WHEN' clause and concrete trigger phrases like 'génère un CoC' and 'generate extension', making the intended usage explicit. It also instructs to ALWAYS call get_object_details first, which is a valuable prerequisite. However, it does not explicitly name alternatives or state when not to use this tool.

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

get_data_entity_infoA
Read-onlyIdempotent
Inspect

WHEN: developer building an OData / DMF integration needs a quick rundown of a specific data entity: its public OData name, datasources, key fields, and IsPublic status. Triggers: 'data entity info', 'OData entity details', 'is X a public entity', 'entity datasources'. Cloud-safe: pure metadata read from the KB.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityNameYesData entity name (AxDataEntityView), e.g. 'CustCustomerV3Entity', 'SalesOrderHeaderV2Entity'.
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, and the description adds that it is a 'pure metadata read from the KB' and 'Cloud-safe', providing context about its data source and lack of side effects. This adds value beyond the annotations.

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

Conciseness5/5

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

The description is concise and well-structured, opening with WHEN, then the tool's purpose, then triggers, and ends with a safety note. Every sentence adds value and there is no fluff.

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 tool with no output schema, the description fully covers the returned information (OData name, datasources, key fields, IsPublic status), usage triggers, and safety. It is complete and self-contained.

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 fully describes the one parameter (entityName) with examples, and the description indirectly reinforces it. With 100% schema coverage, the description doesn't add significant extra parameter semantics, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool provides a 'quick rundown' of a specific data entity, listing exact outputs: public OData name, datasources, key fields, and IsPublic status. It also includes trigger phrases and distinguishes itself from broader object tools by focusing on OData/DMF integration needs.

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 includes a WHEN clause and trigger examples, giving clear context for when to use this tool. However, it does not explicitly mention alternatives or when not to use it, so it misses full exclusion/alternative guidance.

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

get_menu_item_infoA
Read-onlyIdempotent
Inspect

WHEN: developer needs to resolve a menu item -- find its target object (form / action / output), linked security privilege, label, and parameters. Triggers: 'menu item info', 'what does menu item X open', 'menu item target', 'security privilege for menu item'. Cloud-safe: parses the AxMenuItem XML already loaded in the KB. Returns the resolved object name, menu item type (Display/Action/Output), linked privilege, and the form/class/report it points to.

ParametersJSON Schema
NameRequiredDescriptionDefault
menuItemNameYesMenu item name (without prefix), e.g. 'CustTable', 'SalesTableListPage', 'ALMMyMenuItem'.
menuItemTypeNoOptional: menu item type to disambiguate when multiple exist with the same name. 'Display', 'Action', or 'Output'. Default: try all.
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds meaningful context by stating 'Cloud-safe: parses the AxMenuItem XML already loaded in the KB' and enumerating the exact return content. It does not contradict annotations and provides useful insight into the tool's non-destructive, local parsing behavior.

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 organized with WHEN, Triggers, Cloud-safe, and Returns segments. It is slightly longer than necessary but every sentence provides distinct value (usage context, safe behavior, return values). It earns a 4 rather than 5 due to some redundancy (e.g., 'menu item' repeated frequently).

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?

There is no output schema, so the description's explicit listing of return values ('resolved object name, menu item type, linked privilege, and the form/class/report it points to') fully covers what the tool returns. Combined with usage triggers, parameter disambiguation, and behavior context, the description is complete for a read-only, idempotent 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% with detailed parameter descriptions (e.g., menuItemName example values and menuItemType disambiguation). The description echoes this information but does not add substantial meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb+resource: 'resolve a menu item -- find its target object (form / action / output), linked security privilege, label, and parameters.' It clearly differentiates from sibling tools like get_object_details or get_object_context by focusing exclusively on menu item resolution and its unique outputs (menu item type, linked privilege).

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 opens with a clear WHEN clause and provides trigger phrases ('menu item info', 'what does menu item X open'), giving explicit context for when to use this tool. However, it does not name alternatives or explicitly state when not to use it, so it falls short of a 5.

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

get_object_contextA
Read-onlyIdempotent
Inspect

WHEN: you need a COMPLETE picture of a D365 object in ONE call. Returns in a single response: full structure (fields, method signatures, relation summary) AND all CoC extensions / event handlers -- equivalent to calling get_object_details THEN find_extensions. Use this INSTEAD of those two separate calls to reduce round-trips. Optionally includes best-practice violations (set includeValidation=true). Pass methodName to also include the full body of a specific method. Pass aotType to disambiguate when several AOT objects share the same name.

ParametersJSON Schema
NameRequiredDescriptionDefault
aotTypeNoOptional: AOT type to disambiguate, e.g. 'AxTable', 'AxClass', 'AxForm'.
methodNameNoOptional: specific method name to include full body for.
objectNameYesExact object name, e.g. 'SalesTable', 'CustTable', 'VendInvoiceJour'
includeValidationNoInclude best-practice violations (default false -- adds latency for large objects).
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint, but the description adds valuable behavioral context: it combines two operations into one, includes extensions by default, and notes that includeValidation adds latency. This goes beyond the structured annotations and sets accurate expectations.

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 dense but well-structured, starting with a 'WHEN' clause, then listing return contents, and then explaining optional parameters. Every sentence serves a purpose, and it is front-loaded with the most critical information.

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?

With no output schema, the description explicitly states what is returned (full structure, method signatures, relation summary, CoC extensions/event handlers). It also covers the optional parameters and their tradeoffs, making the tool's behavior clear for an agent to decide when to use 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?

The input schema has 100% description coverage, but the tool description adds practical context for parameters like aotType (disambiguation when names collide) and methodName (includes full body). This adds meaning beyond the schema's basic descriptions, though the schema already covers the essentials.

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: to provide a COMPLETE picture of a D365 object in one call, including full structure and CoC extensions. It explicitly distinguishes from siblings by calling out get_object_details and find_extensions as alternatives, making it easy to know what this tool uniquely offers.

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 begins with 'WHEN: you need a COMPLETE picture...' and provides explicit guidance on when to use this tool instead of the two separate calls. It also explains optional parameters for validation and method body, giving clear context for choosing this tool over alternatives.

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

get_object_detailsA
Read-onlyIdempotent
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. COST NOTE: this returns the FULL object and can be very large (100KB+ for big tables/forms like SalesLine). If you ONLY need relations / FK / DeleteActions / data sources / who-references, call get_relation_graph instead -- it is O(1) and roughly 6x lighter (no source code). Reserve get_object_details for when you genuinely need field details, method bodies, or source code. 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. DISAMBIGUATION: when a name exists as several AOT types (e.g. a Table AND a Form both named 'SalesLine'), this returns the PRIMARY type (Table/Class/Entity before the much heavier Form) and notes the others -- pass aotType (e.g. 'AxTable', 'AxForm', or shorthand 'table'/'form'/'class') to pick a specific one. This prevents dumping the heaviest object and truncating the rest. 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
aotTypeNoOptional: AOT type to disambiguate when several objects share the name, e.g. 'AxTable', 'AxForm', 'AxClass' (shorthand 'table'/'form'/'class'/'enum'/'edt'/'view'/'entity' also accepted). When omitted and the name is ambiguous, the primary type (Table/Class/Entity before Form) is returned with a note listing the others.
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'
Behavior5/5

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

Annotations already mark readOnlyHint and idempotentHint, and the description adds substantial extra context: large response size (100KB+), disk source priority, methodName returning full bodies vs. signatures, the intended two-step calling pattern, and disambiguation behavior. No contradiction with annotations.

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

Conciseness5/5

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

The description is front-loaded with the most critical usage condition ('WHEN'), followed by cost warnings and alternatives. Each sentence serves a purpose: cost, alternatives, two-step pattern, and disambiguation. The length is intentional for a complex tool with significant performance implications.

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 thoroughly explains return content: fields, methods, relations, indexes, source, metadata, and the distinction between signature-only and full-body responses. It also covers disk source merging and ambiguous-name handling. This fully prepares an agent to use the tool correctly.

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

Parameters5/5

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

Although schema coverage is 100%, the description enriches each parameter's meaning. It explains that methodName returns the full body when provided and only signatures otherwise, that aotType disambiguates with primary type fallback, and provides concrete examples for objectName. This goes beyond the schema's field descriptions.

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 specific verb and resource: 'Get complete details: all fields, methods, relations, indexes, source code, and metadata.' It explicitly distinguishes from siblings like get_relation_graph, search_d365_code, and list_objects by naming them in usage notes, so the purpose is unambiguous and not confused with other 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?

The description provides explicit WHEN guidance: 'WHEN: you know the EXACT object name.' It also gives clear exclusions and alternatives: 'If you ONLY need relations / FK / DeleteActions ... call get_relation_graph instead,' 'NOT for searching -- use search_d365_code,' and 'NOT for listing a model's objects -- use list_objects.' This is textbook alternative/usage guidance.

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

get_output_pageA
Read-onlyIdempotent
Inspect

Retrieve the NEXT page of a previously PAGINATED tool output. When a tool result is too large for a single response, it is split losslessly into ordered pages — the footer of each page gives you a token and the next page number. Call this tool with that token to read the continuation; nothing is dropped, so you can walk every page in order and reconstruct the full result. Pages are cached only briefly (the last few large results). If the token is unknown or expired, re-run the original tool to regenerate it.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoThe page number to retrieve (the previous page footer tells you the next one). Defaults to 2.
tokenYesThe pagination token from a paginated tool's footer, e.g. 'op_a1b2c3d4e5'.
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint, and the description adds important behavioral details about caching (pages cached briefly), lossless pagination, and token expiry/regeneration. This goes beyond the annotations by explaining the lifecycle and failure handling.

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 well-structured and front-loaded, stating the main purpose in the first sentence. Each subsequent sentence adds valuable context about pagination mechanics, caching, and error recovery without redundancy. It is thorough but not bloated.

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?

The tool is simple (2 parameters, no output schema), but the description fully covers the return behavior (pages, tokens), the prerequisites (previously paginated output), and failure modes (expired token). It provides enough context for an agent to use the tool correctly in any scenario.

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

Parameters4/5

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

The input schema already provides full descriptions for both parameters (100% coverage). The description adds extra value by explaining the token's origin ('from a paginated tool's footer') and giving an example token format ('op_a1b2c3d4e5'), which helps the agent understand what to pass.

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 retrieves the NEXT page of a previously paginated tool output, with specific mention of tokens and page numbers. It distinguishes itself from sibling tools by focusing solely on pagination continuation, not on any domain-specific operation.

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 explicitly explains when to use this tool: when a result is too large and paginated, using the token from the previous page footer. It also provides an alternative when the token is invalid or expired (re-run the original tool), giving clear usage context and exclusions.

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

get_relation_graphA
Read-onlyIdempotent
Inspect

WHEN: you need the COMPLETE bidirectional relation graph for an object in ONE call. Triggers: 'relations of', 'FK of', 'what tables link to', 'quelles tables liées à', 'avant de générer du code', 'before generating code', 'foreign keys', 'delete actions', 'who references', 'qui référence', 'graph de relations'. Returns ALL outgoing edges (FK relations, DeleteActions, DataSources, Extensions, Security...) AND all incoming back-references (forms, entities, CoC classes, privileges... that reference it). Backed by the pre-computed relation index -- O(1) lookup, no vector scan. Much faster and more complete than find_related_objects for known object names. ALWAYS call this before generating code that touches multiple objects or requires join logic. Use find_related_objects when the relation index is not yet built (fallback to vector scan).

ParametersJSON Schema
NameRequiredDescriptionDefault
maxEdgesNoMaximum edges to show per direction (default: 200, max: 500)
objectNameYesThe exact object name, e.g. 'SalesTable', 'CustTable', 'SalesFormLetter'
aotTypeFilterNoOptional: filter edges by relation kind to reduce noise. Comma-separated. Examples: 'TableFK', 'DeleteAction', 'Extension', 'DataSource', 'Security'. Leave empty for all kinds.
Behavior5/5

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

Beyond the readOnly and idempotent hints, the description discloses O(1) lookup behavior, no vector scan, completeness of the returned graph, and the fallback to find_related_objects. It also enumerates the types of edges and back-references returned, adding significant transparency without contradicting annotations.

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

Conciseness5/5

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

The description is well-structured with clear sections ('WHEN:', 'Triggers:', 'Returns:') and is dense with useful information. Every sentence contributes either to usage guidance, behavioral details, or alternatives, with no redundant filler.

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

Completeness5/5

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

Despite lacking an output schema, the description fully explains what is returned (outgoing and incoming edges with examples), performance characteristics, and when to use the tool vs. the fallback. It provides complete context for an agent to decide when and how to invoke 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?

The schema covers all parameters at 100%, so the baseline is 3. The description adds value by giving concrete examples for aotTypeFilter ('TableFK', 'DeleteAction', 'Extension', 'DataSource', 'Security') that map to the relation kinds returned, thereby enriching the parameter's meaning.

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 function: returning 'the COMPLETE bidirectional relation graph for an object in ONE call.' It specifies both outgoing edges (FK relations, DeleteActions, etc.) and incoming back-references, and explicitly distinguishes it from the sibling tool find_related_objects, making the purpose unambiguous.

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 when-to-use guidance with trigger phrases, mandates use before code generation, and names find_related_objects as the alternative when the relation index is not built. This gives clear directions on choosing between tools.

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

get_security_coverage_for_objectA
Read-onlyIdempotent
Inspect

WHEN: developer/security architect needs to know WHICH ROLES can access a specific form, table, menu item or service operation. Triggers: 'who can access', 'which roles see', 'security coverage for', 'quels roles ont accès à', 'find roles with access'. Walks the security graph backwards (EntryPoint -> Privilege -> Duty -> Role) and returns all roles that grant any level of access (Read / Update / Create / Delete / Correct) on the given object. Read-only: scans the in-memory KB, never writes.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxRolesNoMaximum roles to expand (default 30, max 100).
minGrantNoOptional: minimum grant level to include in results. Values: 'Read', 'Update', 'Create', 'Delete', 'Correct', 'Any'. Default: 'Any'.Any
objectNameYesObject name to audit (form, table, menu item, service operation). Example: 'CustTable', 'SalesTableListPage', 'CustCustomerServiceMenu'.
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, lowering the bar. The description adds useful context beyond annotations by explaining it walks the security graph backwards and scans the in-memory KB, never writing. No contradiction with annotations.

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

Conciseness4/5

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

The description is well-structured with a WHEN section, trigger examples, and a clear explanation of the behavior. It is slightly verbose due to multilingual trigger phrases, but the essential information is front-loaded and no sentence is wasted.

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

Completeness4/5

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

Without an output schema, the description adequately explains what the tool returns (all roles with any grant level) and the read-only nature. It provides enough context for the tool's complexity, though it doesn't detail the result structure or pagination 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% and all three parameters have descriptive text with examples. The description does not add further parameter-level detail, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's function: returning roles that can access a specific object. It uses a specific verb ('get') and resource ('security coverage for object'), and distinguishes itself from sibling tools by detailing the backward security graph traversal (EntryPoint -> Privilege -> Duty -> Role) and the focus on role access.

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

Usage Guidelines4/5

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

The description provides a clear 'WHEN' section listing the target user (developer/security architect) and specific trigger phrases in multiple languages. While it doesn't explicitly mention when not to use the tool or name alternative tools, the context is strong and unambiguous.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes
Behavior4/5

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

Annotations only declare readOnlyHint=true. Description adds valuable behavioral context by specifying the JSON return fields (status, indexed chunk count, loaded version, custom model path) and trigger phrases. No contradictions.

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?

Three compact components (WHEN, Triggers, Returns) deliver purpose, usage, and behavior in a single line without wasted words. Information is front-loaded and every segment earns its place.

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 zero parameters and an output schema, the description covers purpose, triggers, and return contents. It's more than sufficient for a simple health-check tool; no critical gaps.

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?

No parameters in schema; description doesn't need to elaborate. Baseline for 0-param tools is 4, and the description adds no unnecessary parameter details.

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?

Description clearly states the tool checks server status, loaded D365 version, and custom model path, and lists the return fields. It is specific and matches the healthcheck name, though it doesn't explicitly distinguish from sibling tools by name.

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

Usage Guidelines4/5

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

Explicitly provides a 'WHEN' clause and natural-language triggers ('status', 'is the server ready'), making it clear when to invoke. Does not describe exclusions or alternatives, but context is clear.

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?

The annotation readOnlyHint already declares a read-only operation. The description adds valuable behavioral context by noting it reads the file system directly and always reflects the latest uncommitted state, and explains the header configuration option. This goes beyond the annotation without contradicting it.

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 with a WHEN section, core purpose, behavioral note, and parameter guidance. It is somewhat long due to trigger examples, but each section earns its place and the most important info is front-loaded.

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 simple listing tool with one optional parameter and no output schema, the description covers purpose, usage triggers, key behavioral trait, and parameter configuration. It is complete for an agent to decide when and how to invoke 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?

The input schema already describes customModelPath with override behavior. The description adds the header set-once alternative and clarifies that it applies globally, providing extra context beyond the schema. Since schema coverage is 100%, this is a solid addition.

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 lists D365 F&O objects in the custom/extension model directory on disk. It uses a specific verb and resource, and the WHEN/triggers further clarify the intended use case, distinguishing it from generic object-listing tools.

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

Usage Guidelines4/5

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

The description provides a clear WHEN context and example triggers for using the tool. It does not explicitly name alternative tools or exclusions, but the context is specific enough for an agent to select it appropriately.

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

list_objectsA
Read-onlyIdempotent
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: matches BOTH package/module name (partial) AND object name (substring). Examples: 'ALM' (package), 'Cust' (any object containing 'Cust'), 'SalesTable'. Leave empty for all.
Behavior4/5

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

Annotations already mark it as read-only and idempotent. The description adds valuable behavioral context: 'Full index scan' indicating it returns every match, and the default model fallback behavior. This goes beyond the annotations without contradicting them.

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

Conciseness5/5

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

The description is well-structured with a WHEN section, trigger examples, behavior note, and explicit exclusions. It is concise yet packed with actionable information; every sentence contributes to usage decisions.

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 simple listing tool with no output schema and only two optional parameters, the description covers all necessary context: purpose, behavior, defaults, and alternatives. It fully equips an agent to select and invoke the tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds meaning by explaining that with no filters it defaults to listing the configured custom model, which clarifies the effect of null parameters. It also reinforces the filtering semantics of modelName (partial match on both package and object name).

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 it lists ALL objects of a given type or model, with explicit triggers like 'list all tables in ALM' and 'show all classes'. It distinguishes itself from siblings by explicitly stating it is NOT for single-object lookup (get_object_details) or natural language search (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 an explicit WHEN section with example triggers, describes default behavior when no filters are given (falls back to configured model), and names alternative tools for different use cases. This gives strong guidance on when to use vs. not use the tool.

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

list_release_note_inputsA
Read-only
Inspect

WHEN: ALWAYS call this FIRST, before prepare_release_note_context -- it discovers the exact D365FO version strings and custom model ids actually indexed on THIS server, which you cannot guess. Triggers: 'release note', 'compare D365 versions', 'upgrade impact for a client', 'what changed for this client', 'regression risk', 'note de version'. Returns every indexed version (exact 'version' string to use as v1/v2, e.g. 10.0.2527.109) and every ready-to-use custom model (exact 'id' to use as customModelIds, plus its name and optional clientGroup tag -- models sharing the same clientGroup belong to the same client and should usually ALL be passed together, e.g. the client's own extensions AND a separate ISV vendor model). IMPORTANT: this server holds the ACTUAL indexed code diff and the client's ACTUAL custom code -- generic Microsoft Learn / Azure Updates / documentation-search tools do NOT have this data and must NOT be used for D365 F&O release-note or upgrade-impact questions about a specific client; those tools only know public, generic release notes, not this client's real regression/opportunity picture.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior5/5

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

Annotations provide readOnlyHint=true, and the description complements this by detailing what the tool returns and how the data is structured (exact version strings, custom model ids with clientGroup tags). It discloses that this server holds actual indexed code, which is critical context beyond the read-only hint, and explains why the data cannot be guessed.

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 long but well-structured with clear sections (WHEN, Triggers, Returns, IMPORTANT). Every sentence conveys necessary information, but it is somewhat dense and could be broken into shorter sentences for easier parsing. Still, it earns its length with actionable guidance.

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?

Since there is no output schema, the description fully explains the return values, including their types, exact formatting, and the semantic relationship between models and clientGroup. It also covers the prerequisite sequence (call this first) and why generic tools are insufficient, making it complete for the agent's needs.

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

Parameters5/5

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

The tool has 0 parameters, so the baseline is 4. The description goes further by explaining the output semantics: it returns exact 'version' strings to use as v1/v2, 'customModelIds' values, and the meaning of clientGroup tags. This directly aids the agent in using the returned data correctly, effectively substituting for parameter 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?

The description clearly states the tool's purpose: discover the exact D365FO version strings and custom model ids indexed on this server. It uses a specific verb ('list') and resource ('release note inputs'), and explicitly distinguishes itself from prepare_release_note_context and generic documentation tools, making its role unmistakable.

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 guidance: 'ALWAYS call this FIRST' and lists trigger phrases like 'release note' and 'upgrade impact'. It also tells the agent what NOT to use (generic Microsoft Learn / Azure Updates tools) and why, giving clear exclusions and alternatives.

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-onlyIdempotent
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 already declare readOnlyHint and idempotentHint, and the description adds behavioral context beyond that: it produces a Mermaid diagram, traces dependencies from an entry point, and covers known processes with details on what is shown (forms, tables, classes, etc.). It does not contradict the annotations. No additional side effects or rate limits are mentioned, but the read-only and idempotent safety profile is already established.

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 longer than average but every sentence earns its place, covering when, triggers, behavior, output, known mappings, and exclusions. It is front-loaded with the WHEN clause and trigger words, making it easy to scan. Minor trimming could be done (e.g., the long trigger list), but the structured format is effective.

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 tool with one parameter and no output schema, the description is exceptionally complete. It explains the output format (Mermaid diagram), provides a list of known processes, describes fallback behavior for arbitrary objects, and gives usage examples. It also clarifies the boundary with a sibling tool. The description covers all essential context for an agent to use this tool correctly.

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

Parameters4/5

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

The schema description covers the parameter fully (100% coverage), explaining examples and the special 'list' value. The tool description adds semantic depth by listing known process names, explaining fallback behavior for any object name, and giving trigger terms. This goes beyond the schema's basic parameter description, making the parameter's intent clearer.

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 verb and resource: 'Map a D365 F&O business process to its complete object chain.' It explicitly distinguishes this tool from siblings by noting it is NOT for single-object FK relations and points to `find_related_objects` as the alternative. The mention of known processes and triggers further clarifies its exact 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?

The description provides explicit WHEN guidance at the start, listing triggers and example scenarios. It also includes a clear exclusion: 'NOT for a single object's FK relations only -- use `find_related_objects` for that (faster and more precise).' This tells the agent exactly when to select this tool versus an alternative.

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

odata_export_entityAInspect

Export any D365 F&O data entity via OData (transactional, no DMF project required). Universal: works for ANY public entity. Supports $select, $filter, $orderby and follows server paging automatically. Returns CSV (default) or JSON. Use for live/ad-hoc exports and small-to-medium volumes. For very large bulk exports prefer dmf_export_package. Resolve the entity set name from the KB first (find_entity_for_table / get_data_entity_info) -- do not invent entity names.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoOptional OData $filter expression.
formatNoOutput format: 'csv' (default) or 'json'.csv
selectNoOptional $select (comma-separated fields). Empty = all fields.
maxRowsNoMax rows to return (0/empty = no cap, follows all pages). Default 1000.
orderByNoOptional $orderby expression.
entitySetYesOData public entity set name, e.g. 'CustomersV3', 'ReleasedProductsV2'.
outputPathNoOptional file path to also write the full result to (e.g. C:\temp\export.csv).
crossCompanyNoSet true to query across all legal entities (adds cross-company=true).
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses transactional behavior, automatic server paging, output formats (CSV/JSON), and warns against inventing entity names. However, it does not mention the default maxRows cap (1000) or any performance/permission considerations, leaving some behavioral gaps.

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 compact yet information-dense, covering purpose, capabilities, use cases, and warnings in just four short lines. Every sentence adds value, and the structure front-loads the core purpose before context.

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 an 8-parameter tool with 100% schema coverage and no output schema, the description competently covers the tool's role in the broader workflow: alternatives, prerequisites, and behavior. The only minor incompleteness is the interplay between automatic paging and the maxRows default, which could confuse an agent expecting unlimited exports by default.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters clearly. The description mentions $select, $filter, $orderby support, which largely echoes parameter names, and adds an important external prerequisite (entity name resolution) but does not deepen parameter semantics 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?

The description opens with a specific verb and resource: 'Export any D365 F&O data entity via OData', then clarifies scope ('Universal: works for ANY public entity') and differentiates from the sibling dmf_export_package, which is clearly the intended cousin for large bulk exports. This makes the tool's purpose unmistakable.

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 guidance is provided: 'Use for live/ad-hoc exports and small-to-medium volumes. For very large bulk exports prefer dmf_export_package.' It also instructs agents to resolve entity set names via find_entity_for_table / get_data_entity_info rather than guessing, giving clear when-to and when-not-to usage.

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

odata_upsert_rowsA
DestructiveIdempotent
Inspect

Idempotent import of rows into any entity via OData: PATCH when the record exists (matched by keyFields), otherwise POST. Safe to re-run -- duplicates are updated, not re-created. Best for small-to-medium transactional loads (e.g. <= a few thousand rows). For bulk loads use dmf_import_file. Provide rows as a JSON array of objects; resolve key fields from the KB (get_data_entity_info) -- do not guess them.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsJsonYesJSON array of row objects, e.g. [{"CustomerAccount":"C0001","Name":"Acme"}].
entitySetYesOData public entity set name, e.g. 'CustomersV3'.
keyFieldsYesComma-separated business key fields used to detect existing records, e.g. 'CustomerAccount' or 'dataAreaId,ItemNumber'.
legalEntityNoOptional legal entity (dataAreaId) injected into each row when absent.
crossCompanyNoSet true to allow cross-company writes.
Behavior4/5

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

Annotations already provide idempotentHint and destructiveHint. The description adds meaningful context by explaining the PATCH-if-exists/POST-otherwise logic and confirming re-runs update duplicates rather than create new records. This goes beyond the annotation hints, though openWorldHint is not specifically addressed.

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?

Four sentences, each earning its place: main operation and idempotency, safety re-run, usage scope with alternative, and parameter guidance. No fluff, front-loaded with the most important information.

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?

Everything an agent needs to decide and invoke correctly is present: operation semantics, scope/size limits, alternative tool, and a KB reference for key resolution. The tool has 5 parameters, all schema-documented, and this description complements them with usage context. No output schema is needed for a write/upsert tool; the description is complete.

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 description coverage is 100%, so parameters are well-documented. The description adds extra guidance on how to provide rowsJson and keyFields, and warns against guessing key fields. This supplemental instruction adds value beyond the schema without redundancy.

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 it imports rows into an OData entity, with explicit PATCH/POST behavior and idempotency. It distinguishes itself from sibling tools like odata_export_entity and dmf_import_file by specifying the upsert mechanism and 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?

Explicitly says best for small-to-medium transactional loads (<= a few thousand rows) and names dmf_import_file as the alternative for bulk loads. Also instructs to resolve key fields from the KB and not guess them, giving clear when-to-use and how-to-prepare guidance.

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

plan_and_executeAInspect

CHAIN-OF-TOOLS PLANNER -- Execute a multi-step JSON plan in ONE call by chaining tools. Pass an EXPLICIT JSON array of steps (NL parsing disabled to prevent ambiguity). Maximum 5 steps per plan. The chain stops on any critical failure (ado_analyze_workitem, get_object_details).

Required Format (JSON array)

[{"tool":"get_object_details","args":{"objectName":"SalesTable"}},{"tool":"validate_best_practices","args":{"objectName":"SalesTable"}}]

When to use

  • You already know the exact sequence of 2-5 tool calls needed

  • The output of step N is independent of step N+1 (or matches the carried context: analysis_output)

  • You want SSE progress events between steps

When NOT to use

  • Single tool call (use the tool directly)

  • Plan depends on the user's intermediate decision (call tools one at a time)

  • More than 5 steps (split into separate calls)

Cost: $0 -- pure in-process execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalYesNatural language goal OR a JSON array of explicit steps. Examples: 'analyse WI #6587 and create a task', 'check best practices for ALMMyClass'.
projectNoOptional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.
assignToNoOptional: assignee email for task creation step, e.g. 'dev@company.com'.
objectNameNoOptional: object name to use when goal references a D365 object (overrides name parsed from goal).
workItemIdNoOptional: work item ID to use when goal references 'WI #N' (overrides ID parsed from goal text).
descriptionNoOptional: additional description text to pass to task creation step.
Behavior5/5

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

Annotations only provide readOnlyHint: false. The description discloses critical behaviors beyond that: the chain stops on critical failure, maximum 5 steps, NL parsing is disabled (requiring explicit JSON), cost is $0, execution is in-process, and SSE progress events are emitted. This gives the agent a clear model of execution semantics and failure modes.

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 well-structured with clear sections for format, usage, and cost. It is concise yet comprehensive, with every sentence providing necessary information. Front-loads the core concept and required format, making it easy to scan.

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?

The tool is complex with no output schema, so the description should compensate. It covers input format, failure conditions, when to use, and cost. It does not explicitly describe the final return value or response shape, though SSE progress and chained tool results are implied. Minor gap prevents a perfect score.

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% with parameter descriptions, so baseline is 3. The description adds significant value by explaining that the 'goal' parameter can be either a natural language goal or a JSON array of explicit steps, and provides examples. It also clarifies that objectName and workItemId override parsed values from the goal, which adds semantic context beyond the schema.

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

Purpose5/5

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

The description clearly identifies the tool as a chain-of-tools planner that executes a multi-step JSON plan in one call. It specifies the exact input format and distinguishes itself from sibling tools by emphasizing its role as an orchestrator rather than a single-purpose tool. The verb+resource ('execute multi-step JSON plan') is specific and unambiguous.

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 contains explicit 'When to use' and 'When NOT to use' sections, clearly stating conditions such as knowing the exact sequence, independence of steps, and limits on step count. It also explicitly advises against using this tool for single tool calls or when intermediate user decisions are needed, providing a clear alternative (calling tools one at a time).

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

prepare_release_note_contextA
Read-only
Inspect

WHEN: building an AI-assisted D365 F&O upgrade release note (regressions + opportunities) for a specific client, and you (the calling assistant) want to do the reasoning yourself instead of the server calling its own LLM. Call resolve_client_profile FIRST -- if it finds a profile, OMIT v1/v2/customModelIds here and they will be auto-filled from it. If no profile exists, call list_release_note_inputs to get real values and pass them explicitly -- never guess them. Triggers: 'release note', 'upgrade impact for this client', 'what breaks for a client between these versions', 'regression risk', 'note de version'. Diffs two indexed D365FO versions (v1=older, v2=newer) and cross-references EVERY changed standard object against ALL the given custom models (a client can have several -- their own extensions AND a separate ISV vendor model, in which case pass both ids comma-separated) -- returning ONLY the subset of changes actually touched by the client's code (capped at 60, Removed > Modified > Added priority), each with old/new content and which custom object references it. Returns a JSON payload with an 'instructions' field telling you the EXACT schema to produce -- analyze the 'objects' array yourself, then call generate_release_note_document with your findings JSON to get the downloadable Word/PowerPoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
v1NoOlder/baseline D365FO version to compare FROM, e.g. "10.0.2527.109". Omit to auto-fill from the caller's resolved client profile (see resolve_client_profile).
v2NoNewer D365FO version to compare TO, e.g. "10.0.2645.32". Omit to auto-fill from the caller's resolved client profile.
customModelIdsNoComma-separated custom model id(s) from the Admin > Custom Models tab. Omit to auto-fill from the caller's resolved client profile. Pass several when a client combines their own extensions with a separate ISV vendor model.
businessContextNoOptional free-text business/functional context about the client (modules used, key customizations, priorities) to sharpen the opportunity/regression assessment.
Behavior5/5

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

The description discloses behavioral traits beyond the readOnlyHint: it caps results at 60, prioritizes Removed > Modified > Added, returns a JSON payload with instructions, and auto-fills parameters from a profile. This adds significant context about what to expect from the tool.

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

Conciseness4/5

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

The description is long but every section provides actionable guidance: WHEN, workflow, triggers, behavior, output. The use of all-caps 'WHEN' helps front-load the primary use case. It could be broken into bullets but remains readable and dense.

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?

With no output schema, the description explains the return format (JSON payload with 'instructions' field and 'objects' array). It also covers the cap, priority, and references to old/new content, making the tool's behavior and output sufficiently clear. It references sibling tools to complete the workflow.

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

Parameters4/5

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

The schema already covers all parameters with descriptions, so the baseline is 3. The description adds workflow-specific semantics such as 'omit to auto-fill from client profile' and 'pass multiple model ids comma-separated', enhancing the schema by explaining when to omit vs provide 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 clearly states the tool diffs two D365FO versions and cross-references custom models to return only changes touched by client code. It uses specific verbs like 'Diffs' and 'cross-references' and distinguishes itself from generate_release_note_document by positioning as the context-preparation 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?

The description explicitly states the context ('building an AI-assisted D365 F&O upgrade release note'), gives a prerequisite workflow (call resolve_client_profile first, fall back to list_release_note_inputs), and lists trigger keywords. It also tells when to omit parameters (auto-fill), which is exemplary guidance.

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

recommend_extension_strategyA
Read-onlyIdempotent
Inspect

WHEN: developer about to customise a standard D365 object asks 'should I use AxTableExtension, Chain of Command, EventHandler, or Delegate?'. Triggers: 'how to extend', 'best way to customise', 'extension strategy for', 'CoC ou event handler', 'comment etendre X'. Returns a ranked recommendation based on the target AOT type and the intent, with citations to the Microsoft Learn extensibility guide. Cloud-safe: pure KB lookup, no writes.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesPlain-language goal of the customisation. Examples: 'add a status field', 'change validateWrite logic', 'react to record insert', 'replace the posting logic', 'override the find method', 'extend the enum'.
objectNameYesTarget standard D365 object name, e.g. 'SalesTable', 'CustTable', 'SalesLineType', 'PurchFormLetter_Confirmation'.
Behavior5/5

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

Beyond the readOnlyHint and idempotentHint annotations, the description adds meaningful context: 'Cloud-safe: pure KB lookup, no writes', and explicitly states the output format (ranked recommendation with citations). This enhances transparency without contradicting annotations.

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

Conciseness5/5

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

The description is structured with clear labels (WHEN, Triggers, Returns, Cloud-safe) and is front-loaded. Each sentence contributes value, using about 60 words to cover usage, triggers, output, and safety without redundancy.

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 the tool's moderate complexity and no output schema, the description sufficiently explains the return value (ranked recommendation with citations) and the decision logic (based on object type and intent). It is complete for an AI agent to select and invoke correctly.

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

Parameters3/5

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

Schema coverage is 100% with both parameters already having clear descriptions and examples. The description maps 'target AOT type' to objectName and 'intent' to intent, but adds no additional semantic value beyond what the schema already provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Returns a ranked recommendation based on the target AOT type and the intent, with citations to the Microsoft Learn extensibility guide.' This is a specific verb+resource and uniquely distinguishes it from sibling tools focused on ADO, DMF, or other actions.

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 explicitly defines the WHEN clause: 'developer about to customise a standard D365 object asks...' and provides concrete trigger phrases. This gives clear guidance on when to use this tool and implicitly differentiates it from other tools in the sibling list.

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

resolve_client_profileA
Read-only
Inspect

WHEN: at the START of any release-note / upgrade-impact conversation -- call this BEFORE list_release_note_inputs to check whether a Client Profile already exists for the CURRENT caller's Azure DevOps org/project (auto-detected from DEVOPS_ORG_URL/DEVOPS_PROJECT MCP headers -- you don't pass anything). If found, it gives you the client's currentVersionTag, targetVersionTag, customModelIds (their own extensions AND any attached ISV/vendor models) and the latest diff snapshot in one call -- use those directly as v1/v2/customModelIds for prepare_release_note_context, no further discovery needed. If not found, fall back to list_release_note_inputs and/or save_client_profile.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior5/5

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

Annotations only declare readOnlyHint=true; the description adds that it auto-detects org/project from MCP headers, requires no parameters, and returns specific fields (currentVersionTag, targetVersionTag, customModelIds, diff snapshot). It also explains the conditional fallback behavior if no profile exists.

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

Conciseness5/5

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

The description is a single focused paragraph, front-loaded with the 'WHEN' instruction, and each clause provides necessary context: timing, alternative tools, and return-value usage. No redundant information.

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?

With no params and no output schema, the description fully covers the invocation context, expected return data, and how the output should be used with prepare_release_note_context, along with fallback instructions. Complete for the agent's decision-making.

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

Parameters5/5

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

The schema has zero parameters, so the baseline is already high. The description adds explanatory value by stating the caller needs to pass nothing and that detection is automatic from headers, which clarifies why there are no required params.

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 identifies the tool as a check for an existing Client Profile, using a specific verb ('check whether... exists') and resource, and distinguishes it from siblings by instructing to call before list_release_note_inputs and naming fallback 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?

Explicit 'WHEN' instruction states the tool should be called at the start of release-note/upgrade-impact conversations, before list_release_note_inputs, and provides fallback logic if the profile is not found, naming alternatives like save_client_profile.

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

resolve_workspace_rootsA
Read-onlyIdempotent
Inspect

WHEN: you need to know which folder(s) are configured as the workspace/project root for the current caller. Reads D365-Custom-Model-Path and D365-Standard-Model-Path from the request headers or environment variables. Use before any tool that accepts a customModelPath/standardModelPath parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior4/5

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

Annotations already declare read-only and idempotent behavior. Description adds that it reads from D365-Custom-Model-Path and D365-Standard-Model-Path headers/environment variables, providing extra behavioral context beyond annotations.

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

Conciseness5/5

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

Single, targeted sentence with a WHEN: prefix that front-loads the trigger condition. Every word earns its place; no redundancy or filler.

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

Completeness5/5

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

For a zero-parameter read-only tool with idempotent annotations, the description covers when to use it, what it reads, and why it matters (for subsequent tools). No output schema is expected for a simple value-returning 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?

Tool has zero parameters, so baseline is 4 as per guidelines. Description explains that data is sourced from headers/env vars rather than parameters, adding meaning beyond the empty 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 clearly states the tool resolves which folders are workspace/project roots by reading specific headers/env vars. Uses a specific verb 'know' and resource 'folder(s) configured as workspace/project root', distinguishing it from sibling tools like resolve_client_profile.

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?

Explicitly states 'Use before any tool that accepts a customModelPath/standardModelPath parameter', giving clear when-to-use guidance. The WHEN clause establishes the trigger condition, and the reference to dependent tools provides context for alternatives.

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

resync_devops_indexAInspect

WHEN: the user wants to force a full re-download and re-index of their Azure DevOps custom model. Triggers: 'resync', 'reindex', 'force sync', 'rebuild index', 'my model is stale', 'update index', 'mon index est vieux', 'rafraîchir l'index', 'relancer l'indexation'. Useful when the server's built-in PAT does not have access to the target DevOps organisation (e.g. a different Azure DevOps org or tenant). Pass a pat parameter to override the server PAT for this resync. The eviction + download runs in the background; returns status immediately. After calling, wait ~60 s then call healthcheck or any search tool to confirm the index is ready.

ParametersJSON Schema
NameRequiredDescriptionDefault
patNoOptional: Personal Access Token with Code (Read) permission for the target Azure DevOps org. Provide this when the server's built-in PAT lacks access (e.g. a different tenant, cross-org). Leave blank to reuse the session PAT or server env-var default.
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that the eviction and download run in the background, returns status immediately, and advises waiting ~60 seconds before verifying. It also mentions the PAT override for cross-org access. This covers the key behavioral aspects, though it could mention potential failure modes or side effects of eviction more explicitly.

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 slightly long due to the trigger phrase list, but every section serves a purpose: when to use, why, parameter semantics, and post-call behavior. It is well-structured and front-loaded with the key purpose, though it could be tightened without losing essential information.

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

Completeness4/5

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

Given the tool's complexity (background job, PAT override) and the lack of output schema or annotations, the description provides sufficient context: it explains the async behavior, return status, and the required follow-up step. Missing details about error handling or what exactly 'index ready' means, but overall it's complete enough for an agent to invoke and verify the tool.

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

Parameters5/5

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

The schema already provides 100% coverage for the single 'pat' parameter with a clear description. The tool description adds further context by explaining WHY you would override the PAT and WHEN it is needed (different org/tenant), which goes beyond the schema and enhances semantic understanding.

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: 'force a full re-download and re-index of their Azure DevOps custom model'. It uses a specific verb ('force', 're-download', 're-index') and names the resource (Azure DevOps custom model), distinguishing it from other sibling tools that query or analyze rather than resync the index.

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 begins with 'WHEN' and provides a comprehensive list of trigger phrases, giving clear context for when to use it. It also explains a specific scenario (server's built-in PAT lacks access to a different org) and instructs to call healthcheck afterward. However, it does not explicitly mention when NOT to use it or name alternative tools, so it falls short of a perfect score.

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

save_client_profileAInspect

WHEN: no profile was found by resolve_client_profile and the user wants one created (or updated) for their client, so future release-note requests never need v1/v2/customModelIds again. Creates or updates a Client Profile keyed by the CURRENT caller's ADO org/project (auto-detected from MCP headers -- not a parameter). Only the fields you pass are changed; omit a field to leave it untouched on an existing profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFriendly client name, e.g. "Acme Corp".
customModelIdsNoComma-separated custom model id(s) from the Custom Models tab -- the client's own extensions AND any separate ISV vendor models.
targetVersionTagNoThe version being evaluated for upgrade, e.g. "10.0.2645.32".
currentVersionTagNoThe client's current live D365FO version tag, e.g. "10.0.2527.109".
Behavior5/5

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

Annotations only declare readOnlyHint=false, and the description adds meaningful behavior: the profile is keyed by auto-detected org/project (not a parameter), and partial updates are supported ('Only the fields you pass are changed; omit a field to leave it untouched'). This goes beyond the schema and aligns with the write nature indicated by readOnlyHint=false.

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 moderately long but front-loaded with the WHEN condition and organized into three sentences, each providing distinct value (when to use, keying, update semantics). No redundancy with the schema descriptions, and the word choice is 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?

Given no output schema and a relatively simple create/update operation, the description explains the update semantics and auto-detection clearly. It does not describe return values or error cases, but the tool's simplicity, schema coverage, and clear usage trigger make this acceptable.

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 schema already provides 100% coverage with descriptions for all 4 parameters, so the baseline is 3. The description adds context for customModelIds (explaining the v1/v2/customModelIds problem) but does not fundamentally change parameter understanding. The auto-detection detail clarifies that 'name' is a friendly label, not the key, but individual parameter semantics are primarily handled by the schema.

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

Purpose5/5

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

The description states a specific verb-resource pair ('Creates or updates a Client Profile') and references the trigger condition (no profile found by resolve_client_profile), clearly distinguishing it from the sibling lookup tool. The scope is well-defined: keyed by the caller's ADO org/project, not a general-purpose save.

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?

Explicitly opens with 'WHEN: no profile was found by resolve_client_profile...' providing a clear precondition for use. It also explains the persistence benefit (avoiding future need for v1/v2/customModelIds) and notes that org/project is auto-detected. It doesn't explicitly state when not to use, but the 'WHEN' phrasing and reference to a resolving sibling make the context clear.

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

search_context_docsA
Read-onlyIdempotent
Inspect

WHEN: the user asks about business/functional context that lives OUTSIDE the D365 code KB -- specs, functional design docs, mapping sheets, contracts, meeting notes, screenshots' captions -- anything an admin uploaded via the admin portal's 'Context Documents' library (PDF, Word .docx, Excel .xlsx/.xlsm, CSV, plain text/Markdown/JSON). Does NOT search X++ code or AOT objects -- use search_d365_code / get_object_details for that. Triggers: 'what does the spec say about...', 'check the mapping document for...', 'cherche dans les documents de contexte', 'according to the functional design'.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNatural-language search query.
maxResultsNoMax distinct documents to return (1-20). Default 8.
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds meaningful behavioral context beyond those: it clarifies the search scope (admin uploaded documents in the Context Documents library), supported file formats, and explicitly excludes code/AOT objects. This informs the agent about the tool's boundaries without contradicting the annotations.

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

Conciseness4/5

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

The description is a single dense paragraph but front-loaded with 'WHEN:' and structured logically: scope, exclusions, examples. While it could be split into sections, each sentence conveys necessary information and there is no fluff. The trigger list adds length but is useful for an agent.

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 simplicity (2 parameters, no output schema), the description is remarkably complete: it defines the search domain, supported file types, exclusions, and usage triggers. It doesn't describe return format, but for a search tool with no output schema, the scope and exclusion guidance are the critical missing pieces, and those are well covered.

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% with clear descriptions for both query and maxResults. The description adds value by giving examples of natural-language queries that map to the query parameter, and by implying the result is a list of distinct documents (matching maxResults). This enriches the meaning beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool searches business/functional context documents outside the D365 code KB, listing specific document types (specs, FDDs, mapping sheets, contracts, meeting notes, screenshots' captions). It explicitly distinguishes itself from code search tools by naming search_d365_code and get_object_details as the alternatives, making its purpose unambiguous.

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 starts with 'WHEN:' and explicitly says what it does NOT search (X++ code, AOT objects) and directs users to sibling tools for those cases. It also provides concrete trigger examples ('what does the spec say about...', 'check the mapping document for...'), offering strong guidance on 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.

search_d365_codeA
Read-onlyIdempotent
Inspect

WHEN: object name is unknown, partial, or you need to find by concept/keyword. 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 call for ADO items (FDD, RDD, IDD, Bug, Task, PR, WorkItem, sprint, #1234) -- use ado_* tools 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'
scopeNoOptional routing override: 'auto' (default — session/custom first, standard fallback), 'custom' (session only — fails over to standard if nothing found), 'standard' (skip session entirely), 'both' (federated, no priority).
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.
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint, and the description adds valuable behavioral context: 'Returns ALL chunks (metadata, Declaration, methods) for the top-scoring objects so the LLM has complete context on the first call' and 'Lower-scoring results return a short preview'. It also states 'No follow-up get_object_details call is needed for top results' and warns against repeated calls, which goes beyond annotations.

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

Conciseness5/5

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

The description is front-loaded with the most important info (WHEN) and uses concise, high-signal sentences. Every clause either states a use case, an exclusion, a behavioral guarantee, or an alternative. The 'NEVER' and 'NOT' directives are direct and efficient, making the length justified.

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?

With no output schema, the description explains what the response will contain (full chunks vs preview) and clarifies that top results are self-sufficient. It also covers exclusions, alternatives, and call frequency. Given the tool's complexity and many sibling tools, this description is complete enough for an agent to select and invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 5 parameters with examples and defaults. The description does not add parameter-specific meaning beyond what the schema provides; it only relates topObjects to the return behavior, which is already described in the schema field. Thus baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly identifies the tool as a search over the D365 F&O knowledge base for X++ code and AOT objects, using natural language or partial names. It explicitly distinguishes from siblings: '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', and 'NOT for ADO items -- use ado_* tools 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?

The description opens with a 'WHEN' clause stating the appropriate use case, then provides explicit exclusions and alternatives for every non-ideal scenario. It also gives a strong directive: 'NEVER call search_d365_code twice in the same conversation turn' and points to batch_search for multi-concept queries, covering both when and when-not to use the tool.

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

search_labelsA
Read-onlyIdempotent
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 392K+ 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?

Annotations already declare readOnlyHint=true and idempotentHint=true, but the description adds valuable behavioral context: it normalizes both D365 label forms (@SYS124480 and @SYS:124480), searches 392K+ entries, and details lazy-loading of languages with specific performance implications. This goes beyond the annotations and informs the agent of latency and normalization behavior without contradiction.

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 information-dense but well-structured: it starts with the core purpose, gives examples, then a WORKFLOW callout, and finally a performance note. Every sentence earns its place—there's no fluff, and the use of 'WORKFLOW:' makes the integration guidance scannable.

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 read-only search tool, the description is complete: it covers bidirectional lookup (text→ID, ID→text), input formats and normalization, language scope and lazy-loading, scale (392K+), and the natural next step (find_references). Since there is no output schema, the description's mention of returning label IDs and translated texts is sufficient for the agent to understand the return value.

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% (all three parameters are described). The description adds extra meaning by explicitly explaining the query parameter accepts both text and label IDs, providing examples of both short and colon forms, and clarifying that normalization is automatic. It also elaborates on the language parameter's startup vs on-demand loading, which the schema only hints at with an example list. This exceeds the baseline, though the schema does most of the heavy lifting.

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 specific verb+resource: 'Search D365 F&O labels across all indexed languages.' It gives concrete bidirectional examples (text→label ID, label ID→text) and explicitly distinguishes itself from siblings by naming find_references as the follow-up tool for finding usages. This is a clear, non-tautological articulation of purpose.

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 workflow guidance: 'call search_labels first to resolve the label text, then call find_references with the same label ID to find ALL X++ objects.' It also warns about on-demand language loading causing a ~15s first call, which helps the agent decide when to invoke this tool. This is more than implied usage—it's a direct instruction.

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?

Beyond the readOnlyHint annotation, the description discloses that the tool 'Returns ranked candidate EDTs with their base type, label, and model,' which informs the agent of the output structure. It also implies a no-side-effect behavior consistent with readOnlyHint, adding useful context about ordering and output.

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 concise and well-structured, using clear labels (WHEN, Triggers, Returns) and a compact paragraph. Every sentence earns its place: it states the use case, triggers, best-practice rationale, timing, and return value.

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 explicitly states the return value (ranked candidate EDTs with base type, label, model). It also covers why the tool exists (D365 best practice), when to call it (before declaring primitive fields), and what it does. This is complete for the given complexity and available structured data.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are well-documented in the schema. The description itself does not add extra meaning to the parameters beyond the overall context of adding a field, but it reinforces the purpose of parameters like fieldName and purpose. This meets 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: 'find the best existing D365 EDT to extend' when adding a new field, and explicitly distinguishes it from using raw primitives. This is a specific verb+resource pair that differentiates it from other D365 tools like suggest_refactoring or validate_object_naming.

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 when-to-use guidance: 'WHEN: adding a new field to a table' and 'Call BEFORE declaring any field with a primitive type.' It also gives trigger phrases for user intent, which helps the agent recognize when this tool is applicable, though it does not name alternatives explicitly.

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 provide readOnlyHint=true, and the description does not contradict it. The description adds useful behavioral context beyond annotations: it only analyzes custom code (D365_CUSTOM_MODEL_PATH), covers specific refactoring patterns, and returns before/after code examples. This gives the agent a clear picture of what to expect.

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 somewhat long but every sentence adds value: it starts with usage context, then scope, then analysis categories, then return format. It is well-structured and front-loaded with the most important information. It could be slightly more compact, but it is not bloated.

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 and no output schema, the description does a good job: it explains return values (before/after code examples), limitations (custom code only), and analysis patterns. It could mention whether the tool works on an entire object or a single method, but the schema already clarifies the optional methodName parameter. Overall, it is nearly complete for a read-only analysis 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%, so parameters are already fully documented. The description adds no additional semantics for parameters beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb+resource: 'Suggest concrete refactoring actions for YOUR custom D365 F&O X++ code.' It clearly distinguishes from siblings by noting it only runs on custom/extension code, not standard Microsoft code. The mention of analysis patterns (long methods, deep nesting, etc.) further clarifies 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?

The description explicitly states when to use: 'WHEN: developer wants to improve code quality before a PR merge or code review' and provides trigger keywords. It also gives a when-not: 'Only runs on custom/extension code' and explains that standard code is not actionable. However, it does not name alternative tools, so it lacks explicit alternative guidance.

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

summarize_for_stakeholderA
Read-only
Inspect

WHEN: you have a large technical tool output (get_object_details, validate_best_practices, ado_analyze_workitem, detect_performance_issues...) and need it reframed for a non-technical audience. Calls the local Ollama instance (OLLAMA_HOST env var, default localhost:11434) to produce the summary. Model is configurable via ALMXPP_SUMMARIZE_MODEL (default: llama3.2).

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe technical text to summarize/explain -- typically the raw output of another tool call.
audienceNoTarget audience: 'executive', 'business-analyst', or 'developer'. Default 'business-analyst'.business-analyst
Behavior4/5

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

The description discloses an important behavioral trait not covered by annotations: it calls a local Ollama instance and depends on environment variables (OLLAMA_HOST, ALMXPP_SUMMARIZE_MODEL). This adds context about infrastructure requirements and configurability. It does not contradict the readOnly hint, but it omits potential failure modes (e.g., Ollama not running) or performance implications.

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 concise, front-loaded with a clear 'WHEN' clause, and every sentence contributes. It packs purpose, usage context, and configuration details into two sentences without redundancy or fluff.

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 simple summarization tool with no output schema, the description covers the essential context: input source, audience, external dependency, and configuration. It clearly implies the output is a summary reframed for a non-technical audience. The combination of annotations (readOnly) and description gives an agent sufficient information to select and invoke the tool correctly.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents both parameters. The description adds minimal extra meaning beyond confirming that 'text' is typically raw output from another tool, which the schema already states. It does not elaborate on the 'audience' parameter or its possible values beyond the schema's default and description, so no significant added value.

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: to reframe large technical tool output for a non-technical audience. It names specific example source tools (get_object_details, validate_best_practices, etc.), distinguishing it from analytical siblings. The verb 'summarize' and resource 'stakeholder' are explicit, leaving no ambiguity.

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?

It provides an explicit 'WHEN' condition: when you have large technical tool output and need it reframed for non-technical readers. It also references input tools by name, implying these are the typical sources. However, it does not explicitly state when not to use it or name alternative summarization tools, so it stops short of full exclusion guidance.

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

trace_field_lineageA
Read-onlyIdempotent
Inspect

WHEN: you need to understand the full data lifecycle of a D365 F&O table field: who writes it, who reads it, which forms display it, which reports use it, and which tables have FK relationships to its parent table. Triggers: 'where is field X set', 'qui écrit ce champ', 'data lineage', 'GDPR field audit', 'origin of field', 'what touches this field'. Requires XRef index for writer/reader analysis. Relation graph for forms and FKs. Examples: trace_field_lineage('CustTable','CreditMax') or trace_field_lineage('LedgerJournalTrans','AmountCurDebit').

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldNameYesField or property name, e.g. 'CreditMax'.
tableNameYesTable or class name, e.g. 'CustTable'.
maxPerCategoryNoMax results per category (default 15).
Behavior4/5

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

Annotations already declare the tool as read-only and idempotent. The description adds valuable behavioral context by specifying the dependency on an XRef index for writer/reader analysis and a relation graph for forms and FKs. It also describes the categories of results returned, which is useful beyond the annotation hints.

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 succinct yet information-dense. It is structured with clear sections (WHEN, Triggers, Requires, Examples), each earning its place without redundancy. Despite its length, every sentence contributes to understanding when and how to invoke the tool.

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 tool with no output schema, the description sufficiently explains the output scope (writers, readers, forms, reports, FKs) and prerequisites. It also includes trigger phrases and examples, making it well-rounded for selection and invocation. The combination of behavioral context and parameter examples makes it complete within this context.

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% with clear descriptions for tableName and fieldName, and a default for maxPerCategory. The description adds value by providing concrete usage examples (e.g., trace_field_lineage('CustTable','CreditMax')) and explaining context for how the parameters are used together, effectively reinforcing schema semantics.

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

Purpose5/5

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

The description clearly states the tool's purpose: to understand the full data lifecycle of a D365 F&O table field, enumerating specific aspects (writes, reads, forms, reports, FK relationships). This is a specific verb+resource scope that distinguishes it from sibling tools like find_references or get_relation_graph, as it uniquely combines these into a field-level lineage analysis.

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' guidance and trigger phrases such as 'where is field X set' and 'data lineage', plus examples. It also indicates prerequisites (XRef index, relation graph). However, it does not explicitly state when NOT to use this tool or name alternative tools, so it falls short of the highest level of usage 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-onlyIdempotent
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)
Behavior5/5

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

Despite annotations already indicating read-only and idempotent behavior, the description adds rich detail: it outputs a complete role tree, uses confidence levels, includes an optimization section with cost estimates, and provides license classifications with pricing. This goes well beyond annotations, giving agents clear expectations of the tool's behavior and output.

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 well-structured with 'WHEN', trigger phrases, output details, confidence levels, and pricing. Each sentence provides actionable guidance, and the front-loaded 'WHEN' helps quick scanning. Despite length, it is dense and useful, not 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?

With no output schema, the description fully compensates by detailing the output structure (Role -> Duties -> Privileges -> Entry Points), license classifications, confidence levels, and optimization section. It also mentions validation against the official guide and alternatives, making it self-sufficient for an agent.

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 covers 100% of parameters with descriptions for both roleName and maxEntryPoints. The description adds context about the roleName's impact (constructing tree) but does not elaborate on maxEntryPoints semantics or syntax beyond the schema. Given 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?

The description clearly states the tool 'Builds the COMPLETE tree for ONE role: Role -> Duties -> Privileges -> Entry Points' and classifies required D365 licenses. It explicitly contrasts with sibling 'trace_security_chain' for pure technical chains, uniquely positioning its purpose.

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 (security design, licence audit) and natural language triggers. It specifies when NOT to use it ('NOT for the pure technical duty/privilege/entry-point chain without licence inference') and directs to 'trace_security_chain' instead, plus guidance for multi-role scans.

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'
Behavior5/5

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

Annotations already mark readOnlyHint=true, and the description adds behavioral context without contradiction. It details the traversal path (Role -> Duties -> Privileges -> Entry Points -> Table/Form Permissions), explains the businessLanguage mode omits IDs, and clarifies what the tool does not do, enhancing transparency beyond the 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 lengthy due to extensive trigger lists, but it is structured in sections (WHEN, triggers, traversal, exclusions) and front-loaded with the core purpose. Each section serves a practical role, so it earns its place despite being 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?

Despite no output schema, the description covers all essential context: main purpose, when to use, trigger examples, traversal path, business language mode, and explicit non-goal. This is sufficient for an agent to select and invoke the tool correctly in both technical and business-language scenarios.

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 description coverage is 100%, so baseline is 3. The description adds value by providing an example for securityObjectName and clarifying that businessLanguage=true produces a capability list without Duty/Privilege IDs, which goes slightly beyond the schema schema descriptions.

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 function: tracing the technical security chain from Role/Duty/Privilege to Entry Points and Table/Form permissions, and optionally providing business-language role explanations. It explicitly distinguishes from the sibling tool trace_role_license_tree by stating what it is NOT for.

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 (security audit) and lists both technical and business-language triggers. It also states a clear exclusion: 'NOT for licence cost inference per entry point' and names the alternative tool trace_role_license_tree, giving direct usage guidance.

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-onlyIdempotent
Inspect

Run D365 best-practice audit on any AOT object (custom or standard). Returns violation table: severity (Critical/Warning), rule ID, code snippet, fix instruction. Critical violations block deployment. Checks: ISV prefix, security chain, ttsbegin/ttscommit, firstOnly on single-record selects, hardcoded strings (BP1001), CoC next() vs super(), EDT on fields (BP4570), form DataSource/TitleDataSource/InsertIfEmpty. For deep N+1 / row-by-row performance profiling use detect_performance_issues instead. [!] Auto-fixing Critical violations requires D365_CUSTOM_MODEL_PATH (custom code only).

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 already declare readOnlyHint and idempotentHint. The description adds valuable behavioral context beyond annotations, such as the return format (severity, rule ID, code snippet, fix instruction) and that critical violations block deployment. No contradiction with annotations.

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

Conciseness4/5

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

The description is front-loaded with its purpose and then provides a dense but informative list of checks and alternatives. It is somewhat long but every sentence earns its place, and it avoids unnecessary fluff.

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 explains the return structure and key implications (deployment blocking). It also covers alternatives and prerequisites, making it sufficiently complete for an agent to invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add meaning beyond what the schema provides; parameter details like methodName, objectName, and minSeverity are already well-documented in the schema.

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

Purpose5/5

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

The description clearly states the tool 'Run D365 best-practice audit on any AOT object (custom or standard).' This is a specific verb+resource+scope. It also distinguishes from sibling tools like detect_performance_issues and fix_best_practice_violations by explicitly naming an alternative for performance profiling.

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 guidance: 'For deep N+1 / row-by-row performance profiling use detect_performance_issues instead.' It also describes when critical violations matter, lists specific checks, and mentions the requirement for auto-fixing. 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.

validate_object_namingA
Read-onlyIdempotent
Inspect

WHEN: developer needs to check that a proposed object name follows D365 + ISV naming conventions, is unique against the indexed KB, and does not collide with a reserved or standard prefix. Triggers: 'is this a valid name', 'check naming', 'name conflict', 'valider le nommage'. Cloud-safe: KB read only, no writes.

ParametersJSON Schema
NameRequiredDescriptionDefault
aotTypeYesAOT type the name will live in: AxClass, AxTable, AxForm, AxEdt, AxEnum, AxTableExtension, AxFormExtension, AxClassExtension, etc.
isvPrefixYesISV prefix you must use, e.g. 'ALM'. Required for all custom objects.
proposedNameYesProposed name, e.g. 'ALMSalesLine.Extension', 'ALMCustomerTable', 'SalesLineALM_Extension'.
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description adds the 'Cloud-safe: KB read only, no writes' context, reinforcing safety. It also implies it performs a uniqueness check against an indexed KB, which is useful behavioral context. It doesn't detail failure modes or output format, but the annotations cover the safety profile.

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

Conciseness5/5

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

The description is compact and front-loaded with the WHEN clause, trigger phrases, and a cloud-safety note. Every sentence adds value without redundancy; it fits in a small paragraph and is easy to scan.

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 validation tool with 3 parameters, full schema coverage, and read-only/idempotent annotations, the description covers the purpose, usage triggers, and constraints. No output schema exists, but a validation tool's return format is implied as a boolean/result message, so description completeness is adequate.

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

Parameters4/5

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

The input schema already provides 100% coverage with rich descriptions and examples (e.g., 'ALMSalesLine.Extension'). The description reinforces the key input context ('isvPrefix' required for all custom objects) and mentions naming convention checks, which adds meaning beyond the schema.

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

Purpose5/5

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

The description uses a specific verb ('check') and clearly states the resource and scope: validating proposed object names against D365 + ISV naming conventions, the indexed KB, and reserved/standard prefixes. This distinguishes it from sibling tools like create_aot_object or validate_best_practices, which serve different purposes.

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 explicitly provides trigger phrases ('is this a valid name', 'check naming', 'name conflict', 'valider le nommage') and explains when to use this tool vs alternatives. It also states what the tool does not do ('no writes'), which clarifies boundaries.

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!

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables AI-assisted X++ development for Dynamics 365 Finance and Operations by pre-indexing the entire codebase and providing 54 specialized tools for metadata lookup, code generation, and best practice validation.
    23
    1,098
    132
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Exposes the full capabilities of Microsoft Dynamics 365 Finance & Operations to AI assistants through 49 comprehensive tools and standardized protocol interactions. It enables sophisticated workflows including OData operations, metadata discovery, and secure database analysis.
    49
    38
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to search and analyze Microsoft Dynamics 365 Finance & Operations artifacts, read local source code, and generate context-aware solutions through natural language.
    86
    11

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.