D365 F&O: 90 AI tools over 200K+ objects, 25M+ cross-refs, 24M+ label translations.
Connect Remote server
claude mcp add --transport http alm-xpp-mcp https://api.almxpp.com/mcp
{
"mcpServers": {
"alm-xpp-mcp": {
"url": "https://api.almxpp.com/mcp"
}
}
}
{
"servers": {
"alm-xpp-mcp": {
"type": "http",
"url": "https://api.almxpp.com/mcp"
}
}
}
Settings > Connectors > Add custom connector
URL: https://api.almxpp.com/mcp
Tools 80 found in our last check
validate_best_practicesRun an in-house best-practice audit on any AOT object (custom or standard), from the indexed source -- NOT the Microsoft BP checker. Rules are this server's own: SEC (security chain), PERF (firstOnly, set-based, N+1), TXN (ttsbegin/ttscommit pairing), ERR (error handling), COC (…
find_extensionsFind 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 cr…
ado_create_bug_from_testWHEN: a test case failed and the failure must become a Bug in Azure DevOps. Triggers: 'open a bug for this failed test', 'crée le bug depuis le test', 'file the defect'. Builds the Bug from the test case: its steps become the reproduction steps, `observed` is what actually happe…
dmf_import_fileBulk-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 to…
search_d365_codeWHEN: 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, method…
dmf_transform_excelTransform 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), filePat…
generate_queryWHEN: 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…
ado_wiki_delete_pageAZURE 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).
appinsights_diagnose_slownessWHEN: 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…
ado_wiki_listAZURE 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 e…
get_object_detailsWHEN: 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…
ado_query_workitemsAZURE 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', 'back…
dmf_apply_entity_filterApply 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…
ado_update_workitemUpdate 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 l…
find_referencesFull 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:…
ado_gap_fit_analysisWHEN: 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 c…
batch_searchWHEN: 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…
ado_read_attachmentAZURE 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 sp…
erp_read_sessionWHEN: to READ from the ERP through form tools, where several calls must share ONE ERP session: open a form, filter its grid, read its values. Each separate erp_read / erp_call starts a new ERP session, so a form opened by one call is gone at the next; this tool runs the steps in…
trace_field_lineageWHEN: 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 li…
plan_and_executeCHAIN-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).…
find_similar_implementationsFind 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.
recommend_extension_strategyWHEN: 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 rank…
diff_model_versionsCompare two D365 F&O KB snapshots to produce a changelog (added/removed/modified objects). Use action 'save_baseline' once, then 'compare' between two snapshots.
find_related_objectsReturns ALL FK/DeleteAction/DataSource relations (outgoing) AND back-references (incoming). Call BEFORE generating multi-object code to understand the full dependency graph. When the relation index is loaded, delegates to get_relation_graph (O(1)) internally — do NOT call both t…
ado_review_xpp_prWHEN: 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), best-practice violations found in the PR's own source (fetched from the source branch; falls bac…
lesson_saveWHEN: a problem has just been solved, or a convention or procedure was agreed, and it should not need explaining again. Triggers: 'keep this', 'retiens ça', 'save this lesson', 'note this for next time', 'capitalise'. Propose it to the user first and save only with their agreeme…
dmf_create_data_projectCreate (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 AutoGenerat…
find_entity_for_tableWHEN: 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', 'D…
summarize_for_stakeholderWHEN: 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 pro…
ado_create_regression_suiteWHEN: the test cases of some touched objects should be grouped in one suite of an existing test plan, to replay them. Triggers: 'create the regression suite', 'suite de non-régression pour la PR N', 'group the tests of these objects'. Creates a query-based (dynamic) suite that g…
suggest_refactoringWHEN: 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 run…
resync_devops_indexWHEN: 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 whe…
erp_list_toolsWHEN: after erp_list_instances, to discover which tools the ERP MCP server of ONE instance exposes (name, description, input schema, read-only hint) before calling erp_call. Results are cached for 5 minutes.
ado_wiki_get_pageAZURE 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.
dmfConsolidated 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 /…
find_callersFull 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.
healthcheckWHEN: 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.
ado_analyze_pr_impact[~] 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 Req…
find_error_patternsWHEN: 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', 'o…
suggest_edtWHEN: 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 E…
get_object_contextWHEN: 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 o…
odata_upsert_rowsIdempotent 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_…
find_change_impactWHEN: 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).…
generate_security_reportGenerate 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.
ado_create_taskWHEN: 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 DevO…
appinsights_set_connectionSecurely 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_slownes…
erp_list_instancesWHEN: first step whenever the user wants to read from or act on a Dynamics 365 F&O (ERP) environment through this server. Lists the F&O instances you may use (alias, label, whether it is protected like PROD, whether it is readOnly, and whether the user has already connected it).…
dmf_get_job_statusPoll 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.
detect_performance_issuesProfile 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. [!] A…
get_relation_graphWHEN: 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…
d365fo_clear_connectionRemoves the D365 F&O connection cached for the current session by d365fo_set_connection.
ado_find_tests_for_objectsWHEN: a change touched some D365 objects (a pull request, a hotfix) and you need the test cases to replay. Triggers: 'which tests cover SalesLine', 'quels tests rejouer', 'regression tests for PR N', 'couverture de test des objets'. Finds the Test Case work items tagged obj:<obj…
generate_xpp_templateWHEN: 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 signature…
lesson_searchWHEN: BEFORE investigating a problem, designing a change or answering a question about how a client's D365 F&O works: check whether it was already solved. Returns the lessons learned that best match, with their problem, cause and solution. Triggers: 'did we already see this', 'a…
get_security_coverage_for_objectWHEN: 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 b…
get_output_pageRetrieve 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 con…
ado_pr_dependency_mapPR 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…
generate_fddWHEN: 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…
map_business_processWHEN: 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', 'fl…
ado_post_commentWHEN: 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…
get_data_entity_infoWHEN: 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-saf…
compare_objectsCompare 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.
list_objectsWHEN: 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,…
explain_workflowWHEN: 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…
ado_test_statusWHEN: the user asks whether a feature is tested and what the results are: 'is WI N tested', 'where are we on the tests', 'état des tests de la story', 'what failed'. Lists the test cases tied to a work item with their latest outcome in its test plan suite (Passed, Failed, Blocke…
trace_role_license_treeWHEN: 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 ro…
prepare_release_note_contextWHEN: 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 profil…
ado_analyze_workitemAZURE 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', '#…
erp_call_sessionWHEN: to run several ERP tools in ONE ERP session, in order, when the steps depend on each other: open a form, click New, set field values, save, close. Each separate erp_call starts a new ERP session, so a form opened by one call is gone at the next; this tool keeps them togeth…
ado_wiki_create_or_update_pageAZURE 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. Aut…
erp_readWHEN: to READ from ONE Dynamics 365 F&O instance, as the signed-in user (their own F&O roles and legal entities apply): look up entities, query data, open a form to read it. Same arguments as erp_call, but it refuses every tool that could change data, on every instance, so it ne…
resolve_workspace_rootsWHEN: 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/standardMod…
resolve_client_profileWHEN: 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 -- y…
generate_unit_testWHEN: 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…
create_aot_objectGenerate 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…
d365fo_set_connectionSecurely 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…
appinsights_clear_connectionRemoves the Application Insights connection cached for the current session by appinsights_set_connection.
generate_data_entityWHEN: 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é…
find_event_handlersFind 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. 'OnInser…
Details
| Endpoint | https://api.almxpp.com/mcp (Streamable HTTP) |
| Package | [email protected] (NPM, stdio) |
| First published | 21 Aug 2026 |
| Last updated | 21 Aug 2026 |
| Registry name | io.github.alimbenhelal-pro/alm-xpp-mcp |
More developer tools servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
