ALM X++
MCP server by alimbenhelal-pro
Search and analyze Dynamics 365 Finance & Operations X++ code, and work with Azure DevOps work items, wikis and pull requests.
Connect to ALM X++
ALM X++ needs an API key. Connect with its own URL and your key:
Send your key in the X-API-Key header. mcp.tc never sees or stores keys. Where to get a key
Share this server
Opens this page, with the URL and setup steps.
mcp.tc/i/alm-xAbout
ALM X++ answers D365 Finance & Operations questions from a prebuilt index of the standard codebase: over 200K AOT objects, 25M+ cross-references and label translations. Tools cover code search, object details, references and callers, change impact, extension strategy, best-practice checks, query generation and security reports. It also includes Azure DevOps tools for work items, wikis and X++ pull request review, plus Data Management Framework and OData import helpers.
It runs as a hosted streamable-http endpoint, or locally through the npx launcher almxppmcp. Both need an API token from almxpp.com, sent as the X-API-Key header or, for the npx launcher, in ALMXPPMCP_API_KEY. Azure DevOps tools need DEVOPS_ORG_URL and DEVOPS_PAT. Some tools write data or modify work items.
What you can do
- Search D365 F&O X++ code, tables, classes and forms by keyword or concept
- Get object details, relations and full context for an exact AOT object
- Find references, callers and change impact before editing an object
- Recommend extension strategy such as Chain of Command or event handlers
- Run best-practice audits and refactoring suggestions on X++ objects
- Query, update and analyze Azure DevOps work items and wiki pages
- Review X++ pull requests and analyze their impact
- Import data through DMF and OData upsert tools
Tools 90
validate_best_practicesRead-onlyRun an in-house best-practice audit on an AOT object from the indexed source.
find_extensionsRead-onlyFind extension objects, CoC classes and event handlers for a base object.
dmf_import_fileCan deleteBulk-import a CSV into a D365 F&O entity through the Data Management package API.
search_d365_codeRead-onlySearch the knowledge base for X++ code, tables, classes, forms and views.
dmf_transform_excelWritesTransform a multi-sheet Excel file into DMF-ready rows using a JSON mapping.
generate_queryRead-onlyGenerate X++ select or T-SQL for D365 tables with joins and filters.
ado_wiki_delete_pageCan deleteDelete an Azure DevOps wiki page and its sub-pages.
appinsights_diagnose_slownessRead-onlyDiagnose slow D365 environments using Application Insights telemetry.
ado_wiki_listRead-onlyList all wikis in an Azure DevOps project.
get_object_detailsRead-onlyGet details of a D365 object by its exact name.
ado_query_workitemsRead-onlyQuery Azure DevOps work items such as bugs, tasks, FDDs and user stories.
dmf_apply_entity_filterWritesApply a single-field value filter to an entity row of a DMF project.
Show 78 more tools
ado_update_workitemCan deleteUpdate fields on an existing Azure DevOps work item.
find_referencesRead-onlyScan the full index for all usages of an object, method, field or label.
ado_gap_fit_analysisRead-onlyClassify a requirement as standard, configuration, extension or gap.
batch_searchRead-onlyRun multiple D365 searches in parallel.
ado_read_attachmentRead-onlyRead the content of a file attached to an Azure DevOps work item.
trace_field_lineageRead-onlyTrace who writes and reads a table field, plus forms and reports using it.
plan_and_executeCan deleteExecute a multi-step JSON plan by chaining tools in one call.
find_similar_implementationsRead-onlyFind D365 objects structurally similar to a given one.
recommend_extension_strategyRead-onlyAdvise between table extension, Chain of Command, event handler or delegate.
diff_model_versionsRead-onlyCompare two knowledge base snapshots into a changelog.
find_related_objectsRead-onlyReturn outgoing relations and incoming back-references for an object.
ado_review_xpp_prRead-onlyProduce a structured review of a pull request that changes X++ objects.
dmf_create_data_projectWritesCreate or extend a DMF export or import data project through OData.
find_entity_for_tableRead-onlyFind the OData entity for a table, or generate an entity template.
summarize_for_stakeholderRead-onlyRewrite technical tool output for a chosen audience.
suggest_refactoringRead-onlySuggest refactorings for an X++ object or method before a PR merge.
resync_devops_indexCan deleteForce a full re-download and re-index of an Azure DevOps custom model.
ado_wiki_get_pageRead-onlyRead an Azure DevOps wiki page and its sub-page paths.
dmfWritesConsolidated Data Management Framework tool with an action parameter.
find_callersRead-onlyShow callers, callees, inheritance and overrides for a class or method.
healthcheckRead-onlyReport server status, loaded D365 version and index state.
ado_analyze_pr_impactRead-onlyAnalyze what changed in a pull request and its impact.
find_error_patternsRead-onlyExplain a D365 error message or exception and suggest causes.
suggest_edtRead-onlyFind the best existing extended data type for a new table field.
get_object_contextRead-onlyReturn structure, methods, relations and validation of an object in one call.
odata_upsert_rowsCan deleteIdempotently import rows into an entity via OData PATCH or POST.
find_change_impactRead-onlyBlast-radius report of callers and dependents for a planned change.
generate_security_reportRead-onlyReport roles, duties, privileges and license needs for indexed models.
ado_create_taskWritesWHEN: user asks to create a DevOps Task or start development on a Work Item.
appinsights_set_connectionWritesSecurely register the D365 F&O environment's Application Insights / Log Analytics connection for the CURRENT session.
dmf_get_job_statusRead-onlyPoll the status of a DMF import/export execution by its executionId (e.g.
detect_performance_issuesRead-onlyProfile an X++ object for N+1 queries, queries in loops, missing field lists, row-by-row inserts/updates, missing firstOnly.
get_relation_graphRead-onlyWHEN: you need the COMPLETE bidirectional relation graph for an object in ONE call.
d365fo_clear_connectionWritesRemoves the D365 F&O connection cached for the current session by d365fo_set_connection.
generate_xpp_templateRead-onlyWHEN: writing an extension or customization -- generates ready-to-use X++ code.
get_security_coverage_for_objectRead-onlyWHEN: developer/security architect needs to know WHICH ROLES can access a specific form, table, menu item or service operation.
get_output_pageRead-onlyRetrieve the NEXT page of a previously PAGINATED tool output.
ado_pr_dependency_mapRead-onlyPR 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.
generate_fddRead-onlyWHEN: user asks to write or generate a Functional Design Document, FDD, functional spec, CdC, or cahier des charges.
map_business_processRead-onlyWHEN: mapping the technical D365 objects behind a business process, or understanding which tables/forms implement a flow.
ado_post_commentWritesWHEN: user explicitly asks to post, add, or save a comment to an ADO Work Item.
get_data_entity_infoRead-onlyWHEN: 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.
compare_objectsRead-onlyCompare two D365 F&O objects side-by-side (fields, methods, signatures).
list_objectsRead-onlyWHEN: you need ALL objects of a given type or in a given model.
explain_workflowRead-onlyWHEN: user asks how an approval workflow works, who approves a document, what states it goes through, or what happens on submission/rejection.
trace_role_license_treeRead-onlyWHEN: security design, licence audit, or 'what licence does this role require?'.
prepare_release_note_contextRead-onlyWHEN: 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…
ado_analyze_workitemRead-onlyAZURE DEVOPS ONLY -- Fetch a Work Item and assemble ALL technical context needed for D365 F&O expert analysis.
ado_wiki_create_or_update_pageCan deleteAZURE DEVOPS ONLY -- Create a new wiki page, or OVERWRITE an existing one with new markdown content.
resolve_workspace_rootsRead-onlyWHEN: you need to know which folder(s) are configured as the workspace/project root for the current caller.
resolve_client_profileRead-onlyWHEN: 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…
generate_unit_testRead-onlyWHEN: developer needs to write or scaffold unit tests for a custom D365 object.
create_aot_objectRead-onlyGenerate a complete, ready-to-deploy D365 F&O AOT XML scaffold for any object type.
d365fo_set_connectionWritesSecurely register the D365 F&O connection (URL + Entra app-registration credentials) for the CURRENT session.
appinsights_clear_connectionWritesRemoves the Application Insights connection cached for the current session by appinsights_set_connection.
generate_data_entityRead-onlyWHEN: developer needs to CREATE a data entity (AxDataEntityView) AOT XML from a table for OData/DMF/data migration.
find_event_handlersRead-onlyFind all event handlers that subscribe to events on a D365 table or class.
generate_xpp_formRead-onlyGenerate a complete, compilable AxForm AOT XML with the CORRECT control serialization (<AxFormControl xmlns="" i:type="...">) for the requested pattern.
appinsights_queryRead-onlyRun a raw KQL (Kusto) query against the D365FO environment's Application Insights / Log Analytics workspace (read-only -- the query language has no mutation operators).
search_context_docsRead-onlyWHEN: 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…
trace_security_chainRead-onlyWHEN: security audit -- need the TECHNICAL chain from Role/Duty/Privilege to Entry Points and Table/Form permissions.
find_relation_pathRead-onlyWHEN: you need to know HOW two AOT objects are connected -- the chain of relations linking them.
ado_estimate_effortRead-onlyWHEN: user asks for an effort estimate, chiffrage, or development hours for a D365 Work Item.
ado_list_prsRead-only[~] 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…
validate_object_namingRead-onlyWHEN: 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.
generate_diagramRead-onlyWHEN: generating a visual diagram of D365 table relationships or security chains.
save_client_profileCan deleteWHEN: 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.
dmf_export_packageWritesTrigger a bulk export through the Data Management package REST API and return the download URL when complete.
ado_post_pr_commentWritesWHEN: user explicitly asks to post, add, or save a review comment to an ADO Pull Request.
list_release_note_inputsRead-onlyWHEN: 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.
federated_searchRead-onlyFan-out search across multiple ALM XPP MCP server instances in parallel and merge results using Reciprocal Rank Fusion (RRF).
search_labelsRead-onlySearch D365 F&O labels across all indexed languages.
odata_export_entityRead-onlyExport any D365 F&O data entity via OData (transactional, no DMF project required).
list_custom_model_objectsRead-onlyWHEN: developer wants to see what custom/extension objects exist in their model.
analyze_upgrade_impactRead-onlyWHEN: upgrading D365 F&O to a new version or applying a Microsoft update -- check if your custom code will break.
fix_best_practice_violationsRead-onlyWHEN: validate_best_practices returned violations and you want concrete X++ fix suggestions.
generate_release_note_documentWritesWHEN: 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.
get_menu_item_infoRead-onlyWHEN: developer needs to resolve a menu item -- find its target object (form / action / output), linked security privilege, label, and parameters.
Read from the live server on 7 Oct 2026. Read-only, Writes and Can delete are hints the server declares; your client decides whether to ask before running a tool.
Example prompts
Find all extensions of SalesTable and show the Chain of Command classes.
Generate an X++ select joining CustTable and CustTrans for one customer group.
What breaks if I change the method validateWrite on VendInvoiceJour?
Review Azure DevOps pull request 1234 for X++ impact.
Set up
Every client connects to api.almxpp.com. Pick yours; the page remembers your choice.
Claude Code
- Run this in a terminal, in your project folder:
claude mcp add --transport http alm-x https://api.almxpp.com/mcp --header "X-API-Key: <YOUR_API_KEY>"- Replace the placeholder with your key before you run it, then check it with
/mcpinside Claude Code.
Add --scope user to make it available in every project, not just this one.
Claude Desktop
- Use the
mcp-remotebridge, which keeps the key on this computer (a connector added on claude.ai with the key under Request headers also shows up here). Open Settings → Developer → Edit Config and add:
{
"mcpServers": {
"alm-x": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.almxpp.com/mcp",
"--header",
"X-API-Key: <YOUR_API_KEY>"
]
}
}
}- Replace the placeholder with your key and restart Claude Desktop.
The bridge needs Node.js on your computer.
claude.ai
- Open the connector form on claude.ai. This button fills in the name and URL for you:
Add to claude.ai (opens in a new tab)
- Check that the URL reads
https://api.almxpp.com/mcp. Under Request headers, addX-API-Key: <YOUR_API_KEY>with your key from alimbenhelal-pro, then click Add. - Turn it on in a chat from the tools menu.
Free plans allow one custom connector. On Team and Enterprise plans an owner adds it under Organization settings → Connectors.
Cursor
Add to Cursor (opens in a new tab)
Or add it by hand to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (this project):
{
"mcpServers": {
"alm-x": {
"url": "https://api.almxpp.com/mcp",
"headers": {
"X-API-Key": "<YOUR_API_KEY>"
}
}
}
}VS Code
Add it to .vscode/mcp.json. VS Code asks for the key the first time and stores it securely:
{
"servers": {
"alm-x": {
"type": "http",
"url": "https://api.almxpp.com/mcp",
"headers": {
"X-API-Key": "${input:x-api-key}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "x-api-key",
"description": "X-API-Key",
"password": true
}
]
}Devin Desktop
- Add it to
~/.config/devin/mcp_config.json(macOS and Linux) or%APPDATA%\devin\mcp_config.json(Windows):
{
"mcpServers": {
"alm-x": {
"serverUrl": "https://api.almxpp.com/mcp",
"headers": {
"X-API-Key": "<YOUR_API_KEY>"
}
}
}
}- Refresh the MCP server list in Cascade.
Devin Desktop is the new name for Windsurf. It reads serverUrl (or url) for remote servers.
Codex
codex mcp add alm-x --url https://api.almxpp.com/mcpcodex mcp add can’t set the X-API-Key header, so this step is required: put this entry in ~/.codex/config.toml instead of running the command, or add its env_http_headers line to the entry the command made:
[mcp_servers.alm-x]
url = "https://api.almxpp.com/mcp"
env_http_headers = { "X-API-Key" = "X_API_KEY" }Codex reads the header values from the environment variables named in env_http_headers.
Gemini CLI
gemini mcp add --transport http --header "X-API-Key: <YOUR_API_KEY>" alm-x https://api.almxpp.com/mcpThis adds it to the current project. Add -s user to use it everywhere.
Any client
Most clients accept this shape. Some name the URL field differently: serverUrl in Devin Desktop, httpUrl in Gemini CLI’s settings file.
{
"mcpServers": {
"alm-x": {
"type": "http",
"url": "https://api.almxpp.com/mcp",
"headers": {
"X-API-Key": "<YOUR_API_KEY>"
}
}
}
}Zed puts servers under context_servers in its settings. Cline needs "type": "streamableHttp", or it assumes SSE.
Client only starts local servers? Bridge it with npx -y mcp-remote https://api.almxpp.com/mcp.
Embed
Show ALM X++ in a README or on your site. Each embed links to this page, uses the server’s own URL, and sets no cookies. How embeds work
The card, the iframe and the JSON are in English. Add ?lang=it, fr, de or es to their address for another language.
README badge
[](https://mcp.tc/i/alm-x)<a href="https://mcp.tc/i/alm-x"><img src="https://mcp.tc/i/alm-x/badge.svg" alt="ALM X++ on mcp.tc" height="20"></a>It follows the reader’s light or dark mode. Add ?theme=light or ?theme=dark to fix it, or ?style=compact to show the mark without the word.
Website card
<script src="https://mcp.tc/w/alm-x.js" async></script>The card appears where the tag is. Add data-theme="dark" or data-size="compact" to the tag to change it. The file holds everything it needs, so it makes no other requests and sets no cookies.
iframe
<iframe src="https://mcp.tc/embed/alm-x" title="ALM X++ on mcp.tc" width="420" height="200" loading="lazy" allow="clipboard-write" style="border:0;border-radius:8px;max-width:100%"></iframe>Use it on pages that don’t allow scripts. Add ?theme=light or ?theme=dark to the address to fix the colors.
JSON
The listing as data for your own pages and tools: name, tagline, the server’s own URL, tools and the “Add to” links. Any site can read it (CORS is open).
https://mcp.tc/i/alm-x.jsonAI prompt
Paste this into an AI coding assistant, such as Claude Code or Cursor, and it adds the ALM X++ card to your site.
Add the mcp.tc card for ALM X++, an MCP server, to my website. It is one static script: no build step, no package to install, no cookies.
Put this tag where the card should appear. The card renders right before it:
```html
<script src="https://mcp.tc/w/alm-x.js" async></script>
```
To show the card somewhere else, put this placeholder there and load the same script once, for example before `</body>`. Keep the link inside: visitors without JavaScript see it.
```html
<div data-mcptc="alm-x"><a href="https://mcp.tc/i/alm-x">ALM X++ on mcp.tc</a></div>
```
Options:
- `data-theme="light"` or `"dark"` on the tag or the placeholder fixes the colors. Without it, the card follows the visitor’s light or dark mode.
- `data-size="compact"` gives a smaller card without the tagline.
- The CSS variable `--mcptc-max-width` on the placeholder or a parent sets the width (default `520px`).
- `?lang=` on the script URL sets the card’s language: `en`, `it`, `fr`, `de` or `es`.
If the site has a Content Security Policy, allow `script-src https://mcp.tc` and `img-src data:` (the icon is inline).
For a README or other Markdown docs, use the badge instead:
```markdown
[](https://mcp.tc/i/alm-x)
```
Reference: https://mcp.tc/embedChange history
We read this server’s tool list every 3 hours and record what changes. Last read 8 Oct 2026, 07:28 UTC.
FAQ
Can I paste mcp.tc/i/alm-x into my MCP client?
No. mcp.tc links are pages, not server addresses. Connect with https://api.almxpp.com/mcp, so your client talks to ALM X++ directly. Your key goes there too, never to mcp.tc. The quick link is for sharing: it opens this page, with setup steps for every client.
Does ALM X++ need an API key or a sign-in?
Yes. ALM X++ needs an API key, sent as the X-API-Key header. Get one from alimbenhelal-pro and keep it in your client’s config, never in a shared file.
Is ALM X++ a remote or a local server?
Remote. alimbenhelal-pro hosts it at https://api.almxpp.com/mcp, and it speaks Streamable HTTP. There’s nothing to install.
What can ALM X++ do?
It has 90 tools, including validate_best_practices, find_extensions and dmf_import_file. You can search D365 F&O X++ code, tables, classes and forms by keyword or concept, get object details, relations and full context for an exact AOT object and find references, callers and change impact before editing an object.
Which clients can use it?
Any client that supports remote MCP servers and can send your key: Claude Code, Cursor, VS Code, Devin Desktop, Codex, Gemini CLI, Zed and others. On claude.ai and Claude Desktop, add the key as a request header when you create the custom connector. ChatGPT can’t send a key, so it can’t use it.
Does mcp.tc track changes to ALM X++?
Yes. ALM X++’s History tab shows each change we find to its tools, down to descriptions and parameters, plus new versions and edits by its owner. Follow the listing to get an email when it changes.
Who wrote this page?
mcp.tc’s robot read ALM X++’s own metadata (its MCP handshake, tool list and public pages), and an AI model drafted the text from it. A person reviews anything the checks can’t confirm. The text can still be wrong, so if you spot a mistake, use Report this listing on this page.
mcp.tc isn’t affiliated with alimbenhelal-pro. This page was built from ALM X++’s public metadata, last checked on 7 Oct 2026, and an AI model wrote the description, so it can be wrong. Names and marks belong to their owners. Something off? Report this listing.