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.

Needs an API key (Needs an API key from the vendor)Streamable HTTP

Connect to ALM X++

ALM X++ needs an API key. Connect with its own URL and your key:

https://api.almxpp.com/mcp

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

About

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

    Run an in-house best-practice audit on an AOT object from the indexed source.

  • find_extensionsRead-only

    Find extension objects, CoC classes and event handlers for a base object.

  • dmf_import_fileCan delete

    Bulk-import a CSV into a D365 F&O entity through the Data Management package API.

  • search_d365_codeRead-only

    Search the knowledge base for X++ code, tables, classes, forms and views.

  • dmf_transform_excelWrites

    Transform a multi-sheet Excel file into DMF-ready rows using a JSON mapping.

  • generate_queryRead-only

    Generate X++ select or T-SQL for D365 tables with joins and filters.

  • ado_wiki_delete_pageCan delete

    Delete an Azure DevOps wiki page and its sub-pages.

  • appinsights_diagnose_slownessRead-only

    Diagnose slow D365 environments using Application Insights telemetry.

  • ado_wiki_listRead-only

    List all wikis in an Azure DevOps project.

  • get_object_detailsRead-only

    Get details of a D365 object by its exact name.

  • ado_query_workitemsRead-only

    Query Azure DevOps work items such as bugs, tasks, FDDs and user stories.

  • dmf_apply_entity_filterWrites

    Apply a single-field value filter to an entity row of a DMF project.

Show 78 more tools
  • ado_update_workitemCan delete

    Update fields on an existing Azure DevOps work item.

  • find_referencesRead-only

    Scan the full index for all usages of an object, method, field or label.

  • ado_gap_fit_analysisRead-only

    Classify a requirement as standard, configuration, extension or gap.

  • batch_searchRead-only

    Run multiple D365 searches in parallel.

  • ado_read_attachmentRead-only

    Read the content of a file attached to an Azure DevOps work item.

  • trace_field_lineageRead-only

    Trace who writes and reads a table field, plus forms and reports using it.

  • plan_and_executeCan delete

    Execute a multi-step JSON plan by chaining tools in one call.

  • find_similar_implementationsRead-only

    Find D365 objects structurally similar to a given one.

  • recommend_extension_strategyRead-only

    Advise between table extension, Chain of Command, event handler or delegate.

  • diff_model_versionsRead-only

    Compare two knowledge base snapshots into a changelog.

  • find_related_objectsRead-only

    Return outgoing relations and incoming back-references for an object.

  • ado_review_xpp_prRead-only

    Produce a structured review of a pull request that changes X++ objects.

  • dmf_create_data_projectWrites

    Create or extend a DMF export or import data project through OData.

  • find_entity_for_tableRead-only

    Find the OData entity for a table, or generate an entity template.

  • summarize_for_stakeholderRead-only

    Rewrite technical tool output for a chosen audience.

  • suggest_refactoringRead-only

    Suggest refactorings for an X++ object or method before a PR merge.

  • resync_devops_indexCan delete

    Force a full re-download and re-index of an Azure DevOps custom model.

  • ado_wiki_get_pageRead-only

    Read an Azure DevOps wiki page and its sub-page paths.

  • dmfWrites

    Consolidated Data Management Framework tool with an action parameter.

  • find_callersRead-only

    Show callers, callees, inheritance and overrides for a class or method.

  • healthcheckRead-only

    Report server status, loaded D365 version and index state.

  • ado_analyze_pr_impactRead-only

    Analyze what changed in a pull request and its impact.

  • find_error_patternsRead-only

    Explain a D365 error message or exception and suggest causes.

  • suggest_edtRead-only

    Find the best existing extended data type for a new table field.

  • get_object_contextRead-only

    Return structure, methods, relations and validation of an object in one call.

  • odata_upsert_rowsCan delete

    Idempotently import rows into an entity via OData PATCH or POST.

  • find_change_impactRead-only

    Blast-radius report of callers and dependents for a planned change.

  • generate_security_reportRead-only

    Report roles, duties, privileges and license needs for indexed models.

  • ado_create_taskWrites

    WHEN: user asks to create a DevOps Task or start development on a Work Item.

  • appinsights_set_connectionWrites

    Securely register the D365 F&O environment's Application Insights / Log Analytics connection for the CURRENT session.

  • dmf_get_job_statusRead-only

    Poll the status of a DMF import/export execution by its executionId (e.g.

  • detect_performance_issuesRead-only

    Profile an X++ object for N+1 queries, queries in loops, missing field lists, row-by-row inserts/updates, missing firstOnly.

  • get_relation_graphRead-only

    WHEN: you need the COMPLETE bidirectional relation graph for an object in ONE call.

  • d365fo_clear_connectionWrites

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

  • generate_xpp_templateRead-only

    WHEN: writing an extension or customization -- generates ready-to-use X++ code.

  • get_security_coverage_for_objectRead-only

    WHEN: developer/security architect needs to know WHICH ROLES can access a specific form, table, menu item or service operation.

  • get_output_pageRead-only

    Retrieve the NEXT page of a previously PAGINATED tool output.

  • ado_pr_dependency_mapRead-only

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

  • generate_fddRead-only

    WHEN: user asks to write or generate a Functional Design Document, FDD, functional spec, CdC, or cahier des charges.

  • map_business_processRead-only

    WHEN: mapping the technical D365 objects behind a business process, or understanding which tables/forms implement a flow.

  • ado_post_commentWrites

    WHEN: user explicitly asks to post, add, or save a comment to an ADO Work Item.

  • get_data_entity_infoRead-only

    WHEN: developer building an OData / DMF integration needs a quick rundown of a specific data entity: its public OData name, datasources, key fields, and IsPublic status.

  • compare_objectsRead-only

    Compare two D365 F&O objects side-by-side (fields, methods, signatures).

  • list_objectsRead-only

    WHEN: you need ALL objects of a given type or in a given model.

  • explain_workflowRead-only

    WHEN: 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-only

    WHEN: security design, licence audit, or 'what licence does this role require?'.

  • prepare_release_note_contextRead-only

    WHEN: building an AI-assisted D365 F&O upgrade release note (regressions + opportunities) for a specific client, and you (the calling assistant) want to do the reasoning yourself instead of the…

  • ado_analyze_workitemRead-only

    AZURE DEVOPS ONLY -- Fetch a Work Item and assemble ALL technical context needed for D365 F&O expert analysis.

  • ado_wiki_create_or_update_pageCan delete

    AZURE DEVOPS ONLY -- Create a new wiki page, or OVERWRITE an existing one with new markdown content.

  • resolve_workspace_rootsRead-only

    WHEN: you need to know which folder(s) are configured as the workspace/project root for the current caller.

  • resolve_client_profileRead-only

    WHEN: at the START of any release-note / upgrade-impact conversation -- call this BEFORE list_release_note_inputs to check whether a Client Profile already exists for the CURRENT caller's Azure…

  • generate_unit_testRead-only

    WHEN: developer needs to write or scaffold unit tests for a custom D365 object.

  • create_aot_objectRead-only

    Generate a complete, ready-to-deploy D365 F&O AOT XML scaffold for any object type.

  • d365fo_set_connectionWrites

    Securely register the D365 F&O connection (URL + Entra app-registration credentials) for the CURRENT session.

  • appinsights_clear_connectionWrites

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

  • generate_data_entityRead-only

    WHEN: developer needs to CREATE a data entity (AxDataEntityView) AOT XML from a table for OData/DMF/data migration.

  • find_event_handlersRead-only

    Find all event handlers that subscribe to events on a D365 table or class.

  • generate_xpp_formRead-only

    Generate a complete, compilable AxForm AOT XML with the CORRECT control serialization (<AxFormControl xmlns="" i:type="...">) for the requested pattern.

  • appinsights_queryRead-only

    Run a raw KQL (Kusto) query against the D365FO environment's Application Insights / Log Analytics workspace (read-only -- the query language has no mutation operators).

  • search_context_docsRead-only

    WHEN: the user asks about business/functional context that lives OUTSIDE the D365 code KB -- specs, functional design docs, mapping sheets, contracts, meeting notes, screenshots' captions…

  • trace_security_chainRead-only

    WHEN: security audit -- need the TECHNICAL chain from Role/Duty/Privilege to Entry Points and Table/Form permissions.

  • find_relation_pathRead-only

    WHEN: you need to know HOW two AOT objects are connected -- the chain of relations linking them.

  • ado_estimate_effortRead-only

    WHEN: 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-only

    WHEN: developer needs to check that a proposed object name follows D365 + ISV naming conventions, is unique against the indexed KB, and does not collide with a reserved or standard prefix.

  • generate_diagramRead-only

    WHEN: generating a visual diagram of D365 table relationships or security chains.

  • save_client_profileCan delete

    WHEN: no profile was found by resolve_client_profile and the user wants one created (or updated) for their client, so future release-note requests never need v1/v2/customModelIds again.

  • dmf_export_packageWrites

    Trigger a bulk export through the Data Management package REST API and return the download URL when complete.

  • ado_post_pr_commentWrites

    WHEN: user explicitly asks to post, add, or save a review comment to an ADO Pull Request.

  • list_release_note_inputsRead-only

    WHEN: ALWAYS call this FIRST, before prepare_release_note_context -- it discovers the exact D365FO version strings and custom model ids actually indexed on THIS server, which you cannot guess.

  • federated_searchRead-only

    Fan-out search across multiple ALM XPP MCP server instances in parallel and merge results using Reciprocal Rank Fusion (RRF).

  • search_labelsRead-only

    Search D365 F&O labels across all indexed languages.

  • odata_export_entityRead-only

    Export any D365 F&O data entity via OData (transactional, no DMF project required).

  • list_custom_model_objectsRead-only

    WHEN: developer wants to see what custom/extension objects exist in their model.

  • analyze_upgrade_impactRead-only

    WHEN: upgrading D365 F&O to a new version or applying a Microsoft update -- check if your custom code will break.

  • fix_best_practice_violationsRead-only

    WHEN: validate_best_practices returned violations and you want concrete X++ fix suggestions.

  • generate_release_note_documentWrites

    WHEN: you have already called prepare_release_note_context and analyzed its 'objects' array yourself, producing a findings JSON array per the 'instructions' field it returned.

  • get_menu_item_infoRead-only

    WHEN: 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

  1. 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>"
  1. Replace the placeholder with your key before you run it, then check it with /mcp inside Claude Code.

Add --scope user to make it available in every project, not just this one.

Claude Desktop

  1. Use the mcp-remote bridge, 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:
claude_desktop_config.json
{
  "mcpServers": {
    "alm-x": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://api.almxpp.com/mcp",
        "--header",
        "X-API-Key: <YOUR_API_KEY>"
      ]
    }
  }
}
  1. Replace the placeholder with your key and restart Claude Desktop.

The bridge needs Node.js on your computer.

claude.ai

  1. Open the connector form on claude.ai. This button fills in the name and URL for you:
  1. Check that the URL reads https://api.almxpp.com/mcp. Under Request headers, add X-API-Key: <YOUR_API_KEY> with your key from alimbenhelal-pro, then click Add.
  2. 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

Or add it by hand to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (this project):

mcp.json
{
  "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:

.vscode/mcp.json
{
  "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

  1. Add it to ~/.config/devin/mcp_config.json (macOS and Linux) or %APPDATA%\devin\mcp_config.json (Windows):
mcp_config.json
{
  "mcpServers": {
    "alm-x": {
      "serverUrl": "https://api.almxpp.com/mcp",
      "headers": {
        "X-API-Key": "<YOUR_API_KEY>"
      }
    }
  }
}
  1. 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/mcp

codex 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:

config.toml
[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/mcp

This 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

Badge preview, lightBadge preview, dark
Markdown
[![ALM X++ on mcp.tc](https://mcp.tc/i/alm-x/badge.svg)](https://mcp.tc/i/alm-x)
HTML
<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

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

HTML
<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.json

What each field means

AI prompt

Paste this into an AI coding assistant, such as Claude Code or Cursor, and it adds the ALM X++ card to your site.

Markdown
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
[![ALM X++ on mcp.tc](https://mcp.tc/i/alm-x/badge.svg)](https://mcp.tc/i/alm-x)
```

Reference: https://mcp.tc/embed

Change history

We read this server’s tool list every 3 hours and record what changes. Last read 8 Oct 2026, 07:28 UTC.

Follow ALM X++ and we’ll email you when something changes.

  1. , Automatic check

    Tracking started: 90 tools.

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.