Server Details
50 AI tools for D365 F&O: X++ search, ADO integration, code gen, security tracing & upgrade impact.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- alimbenhelal-pro/ALM-XPP-MCP
- GitHub Stars
- 0
See and control every tool call
Available Tools
34 toolsado_analyze_pr_impactInspect
[~] PRIORITY TRIGGER: Use this tool when the user says 'analyse PR', 'review PR', 'check PR', 'PR #', 'impact du PR', 'analyse la PR', 'what changed in PR', 'D365 impact of PR', 'code review PR', 'violations in PR', 'PR review'. NEVER call search_d365_code when 'PR' or 'Pull Request' + a number is mentioned. Analyse the full D365 F&O code impact of a Pull Request. For every X++ class/table/form/extension modified in the PR: (1) Best Practice validation -- reports Critical and Warning violations. (2) Upgrade impact -- cross-references CoC targets, event handlers, and extensions against the D365 standard code. (3) Extension conflicts -- finds existing CoC/extensions that may conflict. (4) Produces a ready-to-post PR review comment addressed to the PR author. After reviewing, call ado_post_pr_comment to post the review (requires user confirmation). Requires DEVOPS_ORG_URL + DEVOPS_PAT (Code: Read).
| Name | Required | Description | Default |
|---|---|---|---|
| prId | Yes | Pull Request ID (integer), e.g. 42. | |
| project | No | Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var. | |
| maxFilesDeep | No | Max X++ files to fully analyse (default 10, max 20). Larger PRs get a summary for remaining files. | |
| repositoryId | Yes | Git repository name or ID. | |
| includeWarnings | No | Include Warning-level violations in addition to Critical (default: true). Set false for Critical-only. |
ado_analyze_workitemInspect
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:
Work item metadata (title, description, repro steps, acceptance criteria, comments)
D365 standard KB object details: fields, methods, code snippets for every matched object
Custom code on disk (Aprolis extension): existing CoC methods, extension bodies
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:
Compréhension du besoin -- résume ce que le client demande en 2-3 phrases claires
Analyse technique -- identifie la cause racine en croisant le besoin + les objets KB + le code custom
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
Estimation -- chiffrage en heures/jours selon la complexité détectée
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var. | |
| workItemId | Yes | Work item ID (integer), e.g. 1234 | |
| maxComments | No | Number of recent comments to include (default 5, max 20). Use 3 for faster results. | |
| focusObjects | No | Comma-separated D365 object names to force-include in KB analysis, e.g. 'SalesTable,CustTable'. Providing these speeds up analysis significantly. | |
| sourceBranch | No | Git 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 |
| includeImages | No | Include 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. |
ado_create_taskInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var. | |
| areaPath | No | Optional: area path for the new task, e.g. 'MyProject\SER'. Inherits from parent if omitted. | |
| assignTo | No | Optional: email address of the person to assign the task to, e.g. 'dev@company.com'. | |
| notifyList | No | Optional: comma-separated list of email addresses to notify (added to task description), e.g. 'lead@company.com,qa@company.com'. | |
| workItemId | Yes | ID of the selected Work Item (parent, bug, issue, etc.) to base the task on. | |
| description | No | Optional: additional description / acceptance criteria text to append to the task. | |
| effortHours | No | Optional: estimated effort in hours (Original Estimate). | |
| repositoryId | No | Optional: Git repository name to create the branch in. If omitted, uses the first repository found. | |
| sourceBranch | No | Optional: source branch to branch from (default: repo default branch, e.g. 'main'). | |
| iterationPath | No | Optional: iteration path for the new task, e.g. 'MyProject\Sprint 5'. Inherits from parent if omitted. |
ado_estimate_effortInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var. | |
| workItemId | Yes | Work Item ID to estimate, e.g. 6587. | |
| focusObjects | No | Optional: comma-separated D365 object names to force-include in analysis (speeds up estimation). |
ado_gap_fit_analysisInspect
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 ALM_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'.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var. | |
| workItemId | No | Optional: Work Item ID to fetch the requirement from ADO (e.g. 6587). Leave empty to use requirementText. | |
| requirements | No | Optional: comma-separated list of requirement sentences to analyse individually (overrides WI + requirementText). | |
| requirementText | No | Optional: raw requirement text to analyse directly (when no WI ID is provided). |
ado_list_prsInspect
[~] 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).
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Max results to return (1-100, default 25). | |
| author | No | Optional: filter by author display name (partial match), e.g. 'Alim'. | |
| status | No | PR status filter: Active (default), Completed, Abandoned, All. | Active |
| project | No | Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var. | |
| repositoryId | No | Git repository name or ID. If not known, leave empty to list all repos first. | |
| targetBranch | No | Optional: filter by target branch, e.g. 'main', 'develop'. |
ado_post_commentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var. | |
| workItemId | Yes | Work item ID (integer), e.g. 1234 | |
| commentText | Yes | Markdown text to post. Use the ready-to-post block from `ado_analyze_workitem`. |
ado_post_pr_commentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| prId | Yes | Pull Request ID (integer), e.g. 42. | |
| project | No | Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var. | |
| filePath | No | Optional: file path for an inline comment. Leave empty for a top-level PR comment. | |
| lineNumber | No | Optional: line number for an inline comment (used with filePath). | |
| commentText | Yes | Markdown text to post. Use the ready-to-post block from `ado_analyze_pr_impact`. | |
| repositoryId | Yes | Git repository name or ID. |
ado_query_workitemsInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Optional: filter by tag (partial match), e.g. 'D365' or 'hotfix'. | |
| query | Yes | WIQL query, shortcut ('bugs', 'my bugs', 'recent', 'sprint'), title search, or '*' to use filters only. | |
| state | No | Optional: filter by state, e.g. 'Active', 'New', 'Resolved', 'Closed'. | |
| project | No | Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var. | |
| areaPath | No | Optional: filter by area path (exact or under), e.g. 'MyProject\SER'. | |
| priority | No | Optional: filter by priority level: 1 (Critical), 2 (High), 3 (Medium), 4 (Low). | |
| assignedTo | No | Optional: filter by assignee display name or email (partial match), e.g. 'Alim' or 'alim@contoso.com'. | |
| changedSince | No | Optional: only return items changed since this date, e.g. '2025-01-01' or '7' (days ago). | |
| workItemType | No | Optional: filter by work item type, e.g. 'Bug', 'Task', 'User Story', 'Feature'. | |
| iterationPath | No | Optional: filter by iteration/sprint path, e.g. 'MyProject\Sprint 5'. Use 'current' for @CurrentIteration. |
analyze_upgrade_impactInspect
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 ALM_CUSTOM_MODEL_PATH.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
batch_searchInspect
WHEN: you need context on multiple D365 objects or concepts simultaneously -- runs all queries in parallel. Use INSTEAD of multiple sequential search_d365_code calls -- each line becomes one parallel search. Maximum 6 queries per call. Results are equivalent to search_d365_code but returned together.
Triggers: 'find all of these', 'look up multiple', 'cherche plusieurs', 'SalesTable AND VendTable', 'several objects at once', 'lookup X and Y and Z', 'plusieurs objets en même temps', 'context on all of these'.
| Name | Required | Description | Default |
|---|---|---|---|
| topK | No | Results per query (default: 5, max: 15) | |
| queries | Yes | Newline-separated search queries (max 6). Example: "SalesTable\nVendTable\nvendor invoice posting" | |
| topObjects | No | Full-chunk objects per query (default: 3, max: 8) |
detect_performance_issuesInspect
WHEN: slow query, performance review, or N+1 query check on ANY D365 F&O object (custom or standard). Triggers: 'performance', 'lent', 'slow', 'optimise', 'N+1', 'requête dans une boucle', 'query in loop', 'perf issues', 'slow query', 'requête lente', 'optimise ce code', 'missing firstonly', 'set-based'. Detects: N+1 queries, queries in loops, missing field lists, row-by-row inserts/updates, missing firstonly. [!] Auto-fixing is only possible on YOUR custom code (ALM_CUSTOM_MODEL_PATH). Standard D365 objects return issues as read-only analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| methodName | No | Optional: specific method to analyze. Analyzes all methods if not provided. | |
| objectName | Yes | Object name to analyze, e.g. 'SalesTable', 'CustInvoiceJour' |
explain_workflowInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| objectName | Yes | D365 object or workflow name, e.g. 'SalesTable', 'PurchTable', 'ALMDemandeAchatWorkflow' |
find_callersInspect
Find who calls a D365 F&O method/class AND get the full cross-reference profile from the compiled XRef DB. Covers ALL reference kinds: Call graph (who calls this method, what does it call), Usage (who references this type), Inheritance (base class chain, sub-classes), Interface (what interfaces implemented, what classes implement an interface), Overrides (which method is overridden, which sub-classes override it), Attributes (which decorators are applied). Requires xref_index.json.gz generated from DYNAMICSXREFDB by GenerateCache --xref-conn. Triggers: 'qui appelle', 'who calls', 'call chain', 'callers of', 'où est appelé', 'qui hérite', 'qui implémente', 'qui override', 'quels attributs'.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Depth of caller chain to trace upward (default: 2, max: 4) | |
| methodKey | Yes | Object or method key. Format: 'ClassName.methodName' for methods, 'ClassName' for class-level queries. | |
| categories | No | Categories to include: 'all' (default), or comma-separated subset: 'calls,inheritance,usage,interfaces,overrides,attributes' | all |
| maxResults | No | Maximum results per category (default: 20, max: 50) |
find_entity_for_tableInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tableName | Yes | Table name to find entities for, e.g. 'SalesTable', 'CustTable', 'VendInvoiceJour' | |
| maxResults | No | Maximum results (default: 15, max: 30) | |
| generateIfMissing | No | When true and no public entity is found, generates a new AxDataEntityView XML template for the table. Default: false. |
find_error_patternsInspect
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. Set audienceType='business' for a plain-language explanation targeted at end users instead of developers.
| Name | Required | Description | Default |
|---|---|---|---|
| audienceType | No | Audience type: 'developer' (default) for root-cause analysis, or 'business' for a plain-language explanation targeted at end users. | developer |
| errorOrSymptom | Yes | Error message text or symptom description, e.g. 'update conflict', 'number sequence not set up', 'cannot create record outside tts' |
find_extensionsInspect
WHEN: before modifying an object -- check existing customizations. Triggers: 'extensions de', 'CoC sur', 'qui étend', 'event handlers for', 'customizations of', 'avant de modifier'. Finds ALL extension objects (AxClassExtension, AxTableExtension, AxFormExtension), Chain of Command (CoC) classes, and event handlers for a base object. NOT for general references -- use find_references for that.
| Name | Required | Description | Default |
|---|---|---|---|
| baseObjectName | Yes | The base object name, e.g. 'SalesTable', 'SalesFormLetter', 'VendTable' |
find_referencesInspect
WHEN: impact analysis -- 'what breaks if I change X?', 'where is this used?'. Triggers: 'qui utilise', 'impact de la modification', 'what uses', 'where is X referenced', 'before deleting', 'où est utilisé', 'impact of changing', 'all usages of', 'qui appelle ce champ', 'find all references to', 'tout ce qui utilise'. Full index scan to find ALL objects that reference a given name in code or metadata. For label IDs (e.g. '@SYS124480' or '@SYS:124480'): automatically searches BOTH forms simultaneously -- the short form appears in X++ code, the colon form appears in metadata (Label: property). WORKFLOW for labels: (1) search_labels to get the label text, (2) find_references with the label ID to find all usages in forms/tables/classes/reports. NOT for extensions only -- use find_extensions for CoC/event handlers specifically.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The object or method name to find references to, e.g. 'SalesTable', 'validateWrite' | |
| maxResults | No | Maximum referencing objects to return (default: 500, max: 2000) | |
| locationsPerObject | No | Maximum number of call sites (methods/fields) to display per referencing object (default: 6, max: 20). Increase to see more usage locations. |
generate_diagramInspect
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). Note: 'flow' (execution flowchart) is disabled -- static call trees are misleading in D365 due to CoC and event handlers.
| Name | Required | Description | Default |
|---|---|---|---|
| maxRelated | No | Optional: maximum related entities to show (default: 12, max: 20) | |
| methodName | No | Not used -- flow diagrams are disabled. | |
| objectName | Yes | Object name to diagram, e.g. 'SalesTable', 'SystemAdministrator' | |
| diagramType | Yes | Diagram type: 'er' (entity-relationship) or 'security' (security chain). 'flow' is disabled. |
generate_fddInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | Optional: additional business context, requirements, or audience note to include in the header | |
| language | No | Optional: output language ('en', 'fr', 'nl', 'de'). Default: en | en |
| objectName | Yes | D365 object or business process name, e.g. 'SalesTable', 'VendInvoiceInfoTable', 'ALMDemandeAchat' |
generate_queryInspect
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'. [!] 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.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Optional: limit rows (1 = firstonly, N = top N) | |
| fields | No | Optional: specific fields to select (comma-separated). All fields if not specified. | |
| filters | No | Optional: WHERE filter expressions (comma-separated), e.g. 'CustAccount == 1001, SalesStatus == SalesStatus::Open' | |
| orderBy | No | Optional: field to ORDER BY | |
| tableName | Yes | Primary table name, e.g. 'SalesTable', 'CustTable' | |
| joinTables | No | Optional: tables to join (comma-separated), e.g. 'CustTable,SalesLine' | |
| description | No | Optional: natural language description of the query. If provided, fields/joins/filters are auto-detected. | |
| crossCompany | No | Whether to add crosscompany clause (default: false) |
generate_unit_testInspect
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 (ALM_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.
| Name | Required | Description | Default |
|---|---|---|---|
| methodName | No | Optional: specific method to test. If not provided, generates tests for all testable methods. | |
| objectName | Yes | Object name to generate tests for, e.g. 'ALMERSftpConnectionTable', 'ALMMyClass' | |
| testScenarios | No | Test 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. |
get_object_detailsInspect
WHEN: you know the EXACT object name. Triggers: user gives an exact name like 'SalesTable', 'CustTable', 'VendInvoiceJour', any PascalCase D365 object name. Get complete details: all fields, methods, relations, indexes, source code, and metadata. Also merges live disk source when a custom model path is configured (disk takes priority). Pass methodName to get the FULL body of a specific method -- without it, only signatures are returned. NOT for searching -- use search_d365_code when the name is uncertain. NOT for listing a model's objects -- use list_objects for that.
| Name | Required | Description | Default |
|---|---|---|---|
| methodName | No | Optional: 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. | |
| objectName | Yes | The exact object name, e.g. 'SalesTable', 'VendInvoiceApprovalConfig', 'ALMAlternativeItemsTable' |
list_custom_model_objectsInspect
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 X-Custom-Model-Path header in your .mcp.json (applies to all tool calls automatically).
| Name | Required | Description | Default |
|---|---|---|---|
| customModelPath | No | Optional: path to the custom model directory (e.g. 'C:\\AOTExport\\MyModel'). Overrides the header and server-configured path. |
list_objectsInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| aotType | No | Filter by AOT type: AxClass, AxTable, AxForm, AxView, AxEnum, AxEdt, AxDataEntityView, AxSecurityPrivilege, AxSecurityDuty, AxSecurityRole, AxQuery, AxReport, Documentation. Leave empty for all types. | |
| modelName | No | Filter by model/module name (partial match). Examples: 'ALM', 'ApplicationSuite'. Leave empty for all models. |
map_business_processInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| processName | Yes | Business 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. |
search_d365_codeInspect
WHEN: object name is unknown, partial, or you need to find by concept/keyword. Triggers: 'find', 'search', 'look for', 'chercher', 'trouver', 'où est', 'comment fonctionne', 'what is', 'show me'. Search the D365 F&O knowledge base for X++ code, tables, classes, forms, views, enums, EDTs, security objects using natural language or partial names. Returns matching code chunks ranked by relevance. 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 use this tool when the user mentions: 'FDD', 'RDD', 'IDD', 'Task', 'Workitem', 'Work Item', 'Bug', 'PR', 'Pull Request', 'ticket', 'DevOps', 'sprint', 'backlog', '#1234', 'WI#', 'analyse le workitem', 'analyse la tâche', 'analyse le FDD'. For those, always use ado_query_workitems, ado_analyze_workitem, ado_list_prs, or ado_analyze_pr_impact instead.
| Name | Required | Description | Default |
|---|---|---|---|
| topK | No | Maximum number of results to return (default: 10, max: 50) | |
| query | Yes | Natural language search query. Examples: 'vendor invoice approval', 'tables in ALM', 'SalesTable fields', 'security privileges for purchasing' | |
| domain | No | Optional: filter results to a specific AOT type. Examples: 'AxTable', 'AxClass', 'AxForm', 'AxEnum'. Leave empty for all types. | |
| topObjects | No | Number of top-scoring objects whose ALL chunks are returned (default: 5, max: 20). Increase to broaden coverage, decrease for tighter focus. |
search_labelsInspect
Search D365 F&O labels across all indexed languages. Given text (e.g. 'Sales order'), finds the matching label ID (@SYS12345). Given a label ID (e.g. '@SYS12345' or '@SYS:12345'), finds the text in all languages. Accepts both D365 short form (@SYS124480) and colon form (@SYS:124480) -- both are normalized automatically. Searches across 1 000 000+ label entries. WORKFLOW: call search_labels first to resolve the label text, then call find_references with the same label ID to find ALL X++ objects (forms, tables, classes, reports) that use it in their code or metadata. Languages: en-US and fr are loaded at startup. Other languages (de, nl, ar, es, zh...) are loaded on-demand -- first call ~15s, then instant.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Text to search for (e.g. 'Sales order', 'Invoice amount') or a label ID (e.g. '@SYS12345', '@AccountsReceivable:CustInvoice') | |
| language | No | Optional: filter by language code (e.g. 'en-US', 'fr', 'de', 'nl'). Leave empty for all languages. | |
| maxResults | No | Maximum results (default: 20, max: 50) |
suggest_edtInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topK | No | Number of EDT candidates to return (default: 8, max: 20) | |
| purpose | Yes | Purpose of the field in plain language, e.g. 'customer account number', 'approval status enum', 'invoice amount in transaction currency' | |
| baseType | No | Optional: D365 primitive base type to filter by, e.g. 'str', 'int64', 'real', 'date', 'enum'. Leave empty to search all types. | |
| fieldName | Yes | Field name or concept, e.g. 'AccountNum', 'vendorId', 'itemCode', 'approvalStatus' |
suggest_refactoringInspect
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 (ALM_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.
| Name | Required | Description | Default |
|---|---|---|---|
| methodName | No | Optional: specific method to analyze. | |
| objectName | Yes | Object name to analyze, e.g. 'ALMMyClass', 'ALMMyTable' |
trace_role_license_treeInspect
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 use generate_security_governance_report.
| Name | Required | Description | Default |
|---|---|---|---|
| roleName | Yes | The exact security role name, e.g. 'SystemAdministrator', 'AccountsPayablePaymentsClerk', 'ALMMyCustomRole' | |
| maxEntryPoints | No | Maximum entry points to show per privilege (default: 20, max: 100) |
trace_security_chainInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| businessLanguage | No | When true, explains the role in plain business language (capabilities list) instead of the technical Role->Duty->Privilege chain. Default: false. | |
| securityObjectName | Yes | Security object name, e.g. 'SystemAdministrator', 'VendInvoiceApprovalConfig' |
validate_best_practicesInspect
WHEN: code review, quality gate, or best-practice audit on ANY D365 F&O object (custom or standard). Triggers: 'vérifie les bonnes pratiques', 'check quality', 'code review', 'violations', 'best practices pour', 'audit du code', 'check this class', 'any issues in', 'vérifie cette classe', 'quality check', 'bonnes pratiques sur'. Checks: security vulnerabilities, performance issues, transaction problems, error handling, code quality. NOT for deep performance profiling (N+1 queries, row-by-row inserts) -- use detect_performance_issues for that. [!] Auto-fixing violations is only possible on YOUR custom code (ALM_CUSTOM_MODEL_PATH). Standard D365 objects return read-only violation analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| methodName | No | Optional: specific method to validate. Validates all methods if not provided. | |
| objectName | Yes | Object name to validate, e.g. 'SalesTable', 'CustInvoiceJour' | |
| minSeverity | No | Minimum severity: 'Info', 'Warning', 'Critical' (default: 'Warning') | Warning |
Verify Ownership
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [
{
"email": "your-email@example.com"
}
]
}The email address must match the email associated with your Glama account. Once verified, the connector will appear as claimed by you.
Last verification attempt failed.
Failed to fetch .well-known/glama.json: HTTP 405
Control your server's listing on Glama, including description and metadata
Receive usage reports showing how your server is being used
Get monitoring and health status updates for your server
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Your Connectors
Sign in to create a connector for this server.