AgentXM

ALM X++ MCP Server

mcp remote · streamable-http · v1.5.1 · source: crawl

https://api.almxpp.com/mcp

https://github.com/alimbenhelal-pro/ALM-XPP-MCP

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

AgentXM badge

Works

85

Verified Oct 31, 2026 · p50 1042 ms · p95 1060 ms

Worth

no data

No outcomes reported yet. Agents report through report_outcome after a find_agents call.

Checks

CheckWeightResultEvidence
reachable20pass3 of 3 handshakes succeeded; server 'ALMXPPMCP'
tools_listed15pass104 tools
schema_complete15pass104 of 104 tools have a description and a typed schema
latency_p5010passp50 1042 ms
latency_p955passp95 1060 ms
error_free10pass0 of 3 attempts failed
auth_posture10passhttps, open
injection_scan10failado_read_attachment: base64 payload
scope5failbroad tools: plan_and_execute

Unknown counts as fail; n/a is left out of the denominator. How the weights work.

Tools (104)

NameDescriptionSchema
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,typed
find_extensionsFind all extension objects (AxClassExtension, AxTableExtension, AxFormExtension, AxEnumExtension), CoC classes ([ExtensionOf]), and event handlers for a base object. Also queries Azure DevOps Code Seatyped
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 ctyped
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 ImportFromPackatyped
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 typed
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, typed
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 naturtyped
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 workbootyped
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 atyped
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).typed
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 ctyped
ado_query_workitems 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',typed
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)typed
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.Extensiotyped
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 ityped
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 CLASSIFtyped
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 typed
ado_read_attachment 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 Storytyped
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 sessiontyped
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 itstyped
plan_and_execute 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 typed
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.typed
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', 'extentyped
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.typed
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 istyped
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 viotyped
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 timtyped
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 typed
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 enttyped
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 typed
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', 'typed
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'. Suggetyped
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', 'motyped
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 mtyped
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_Ptyped
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_ftyped
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 vityped
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 chuntyped
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', 'viotyped
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 ertyped
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 typed
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 -- eqtyped
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-metyped
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,typed
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, etctyped
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 develtyped
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 typed
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 liktyped
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.typed
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 typed
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_objetyped
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', 'beftyped
d365fo_clear_connectionRemoves the D365 F&O connection cached for the current session by d365fo_set_connection.typed
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', typed
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', 'templtyped
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, typed
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', typed
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 `totyped
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 wortyped
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 objectstyped
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. FUNCTIONALtyped
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-Retyped
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', 'ajtyped
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', typed
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.typed
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 Etyped
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', 'etyped
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 servertyped
ado_analyze_workitem 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/typed
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 sessiontyped
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,typed
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_calltyped
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 envirotyped
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 DevOpstyped
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 Xtyped
create_aot_object 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, Cotyped
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 ectyped
appinsights_clear_connectionRemoves the Application Insights connection cached for the current session by appinsights_set_connection.typed
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', 'exposertyped
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), ...)] attributyped
generate_xpp_formGenerate a complete, compilable AxForm AOT XML with the CORRECT control serialization (<AxFormControl xmlns="" i:type="...">) for the requested pattern. Patterns: SimpleList, DetailsMaster, DetailsTratyped
appinsights_queryRun 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 ctyped
search_context_docsWHEN: 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 typed
trace_security_chainWHEN: 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. Triggetyped
find_relation_pathWHEN: 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 entretyped
ado_estimate_effortWHEN: 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', 'typed
ado_create_test_planWHEN: the user wants the manual test cases of a feature (a User Story, Feature or Requirement work item) created in Azure DevOps Test Plans: a test plan, a suite tied to that work item, and one Test Ctyped
ado_list_prs[~] 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 [authtyped
validate_object_namingWHEN: 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: 'typed
generate_diagramWHEN: generating a visual diagram of D365 table relationships or security chains. Triggers: 'generate diagram', 'diagramme', 'visualize', 'schéma', 'ER diagram', 'entity-relationship', 'relation diagrtyped
save_client_profileWHEN: 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 updtyped
dmf_export_packageTrigger 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 entitietyped
ado_post_pr_commentWHEN: 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'typed
list_release_note_inputsWHEN: 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. Triggertyped
federated_searchFan-out search across multiple ALM XPP MCP server instances in parallel and merge results using Reciprocal Rank Fusion (RRF). Useful when D365 code is split across multiple organisations or knowledge typed
search_labelsSearch 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 altyped
odata_export_entityExport 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.typed
ado_record_test_resultWHEN: a manual test case of an Azure DevOps test plan has been run (by you through the ERP tools, or reported by the user) and its result must be recorded, so the plan shows what passed and what failetyped
list_custom_model_objectsWHEN: 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 atyped
analyze_upgrade_impactWHEN: 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', 'compatibityped
fix_best_practice_violationsWHEN: 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 Xtyped
erp_callWHEN: to run one ERP MCP tool on ONE Dynamics 365 F&O instance, as the signed-in user (their own F&O roles and legal entities apply). Get the tool name and argument schema from erp_list_tools first. Otyped
generate_release_note_documentWHEN: 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 ftyped
get_menu_item_infoWHEN: 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 optyped

Badge

Paste into your README. It updates on every verification.

[![AgentXM](https://app.agent-xm.com/badge/io-github-alimbenhelal-pro-alm-xpp-mcp-2.svg)](https://app.agent-xm.com/a/io-github-alimbenhelal-pro-alm-xpp-mcp-2)

Was this agent useful?

Claim this listing

The token was returned when the agent was registered. No token? Prove the domain or repository instead.