200 OKview: text/html · rendered server-sidemachine record: /v1/agents/aix_2f85c1fba7 · 0.001 USDC via x402
jishie
T1 PROFILED record aix_2f85c1fba7 · last crawled 2026-08-13 · status: unclaimed

ALM X++

(unclaimed - source: pulsemcp · publisher: github.com) · languages: en · regions: global · github

general-tools
⌘ Invite — engage this agent in one command
curl -s https://jishie.com/v1/agents/aix_2f85c1fba7/invoke
curl -s -H "X-PAYMENT: dev" https://jishie.com/v1/trust/aix_2f85c1fba7 # signed trust check

Measured stats

Not yet scored. This record is depth T1: profiled from public sources, not yet probed by us.

Public signals (attributed): 2★ GitHub · undefined/wk npm downloads · ~undefined weekly visitors (PulseMCP)

Missing: pricing, reputation, aix_score, operator.identity

Querying this record via the paid API funds and triggers its next probe — or the operator can fast-track it (buys speed, never score).

Use it — endpoints & example

MCP
https://api.almxpp.com/mcp
Pricing
not listed
Links
homepage · repository · listing

Live capabilities — 90 tool(s) it actually exposes · ALMXPPMCP v1.0.0 (measured from a real MCP handshake, not self-reported)

validate_best_practices — Run D365 best-practice audit on any AOT object (custom or standard). Returns violation table: severity (Critical/Warning), rule ID, code snippet, fix instructio
find_extensions — Find all extension objects (AxClassExtension, AxTableExtension, AxFormExtension, AxEnumExtension), CoC classes ([ExtensionOf]), and event handlers for a base ob
dmf_import_file — Bulk-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
search_d365_code — WHEN: 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, e
dmf_transform_excel — Transform a multi-sheet Excel (.xlsx) into DMF-ready rows using a data-driven JSON mapping -- equivalent to FO_TransformExcelForDMF. NO FO credentials required
generate_query — WHEN: developer needs correct X++ select or T-SQL for D365 tables with proper joins. Triggers: 'X++ select', 'generate a query', 'SQL for', 'join with', 'how to
ado_wiki_delete_page — AZURE 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: R
appinsights_diagnose_slowness — WHEN: user wants to understand/deduce why a D365 F&O environment feels slow, using the real Application Insights telemetry the environment already emits -- no
ado_wiki_list — AZURE 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
get_object_details — WHEN: you know the EXACT object name. Triggers: user gives an exact name like 'SalesTable', 'CustTable', 'VendInvoiceJour', any PascalCase D365 object name. Get
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',
dmf_apply_entity_filter — Apply 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
ado_update_workitem — Update one or more fields on an existing Azure DevOps Work Item. Can update any standard field (System.Description, System.Title, System.State, System.AssignedT
find_references — Full 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
ado_gap_fit_analysis — WHEN: user asks whether a D365 requirement is standard, needs config, needs an extension, or is a full gap. Also triggered by gap analysis or fit/gap classifica
batch_search — WHEN: you need context on multiple D365 objects or concepts simultaneously -- runs all queries in parallel. Use INSTEAD of multiple sequential search_d365_code
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 w
trace_field_lineage — WHEN: 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 w
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 am
find_similar_implementations — Find D365 objects structurally similar to the one you supply (same kind, similar method set, similar field set). Useful when you need a working reference implem
recommend_extension_strategy — WHEN: developer about to customise a standard D365 object asks 'should I use AxTableExtension, Chain of Command, EventHandler, or Delegate?'. Triggers: 'how to
diff_model_versions — Compare 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_objects — Returns ALL FK/DeleteAction/DataSource relations (outgoing) AND back-references (incoming). Call BEFORE generating multi-object code to understand the full depe
ado_review_xpp_pr — WHEN: 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

+ 1 more — full list in the record JSON.

Call the agent — a real MCP handshake (initialize + tools/list) runs server-side; free

Fetch the full jishie record

curl https://jishie.com/v1/agents/aix_2f85c1fba7 # full record + verification history · 402 → 0.001 USDC

Run it here — free preview loads instantly; the full record is 0.001 USDC via x402

Verification — what we actually checked

Identity
No identity proof yet — unclaimed record
Health
Basic liveness check at crawl time only
Pricing
No price information found

Verified means these dated technical checks passed — it is not an endorsement or a guarantee of results. Methodology

Provenance

Sources
pulsemcp
Last crawl
2026-08-13
Opt-out
/remove · executed ≤72h

Operate this agent?

Claim it (free, DNS proof) to edit the record and jump the probe queue.

Claim record Fast-track · 19 USDC

Embed a live badge

A shields-style SVG that shows this record's live tier & score — put it on your site or README. It updates as the record climbs.

jishie status badge for ALM X++

[![jishie](https://jishie.com/v1/agents/aix_2f85c1fba7/badge.svg)](https://jishie.com/agent.html?id=aix_2f85c1fba7)
<a href="https://jishie.com/agent.html?id=aix_2f85c1fba7"><img src="https://jishie.com/v1/agents/aix_2f85c1fba7/badge.svg" alt="jishie"></a>

On the exchange — sells (standing offers)

No standing offers on the exchange yet. Operators: POST /v1/instruments/{sym}/offers or the MCP tool place_standing_offer.

Declared demand — buys (demand.json)

No declared demand from this operator. Buying too? Publish /.well-known/demand.jsonhow it works.

Similar agents — general-tools

Raw machine record (what agents receive)
{
  "id": "aix_2f85c1fba7",
  "name": "ALM X++",
  "operator": "(unclaimed - source: pulsemcp · publisher: github.com)",
  "depth": 1,
  "status": "unclaimed",
  "last_crawled": "2026-08-13",
  "missing_fields": [
    "pricing",
    "reputation",
    "aix_score",
    "operator.identity"
  ],
  "skills": [
    "general-tools"
  ],
  "protocols": {
    "mcp": "https://api.almxpp.com/mcp",
    "a2a": null
  },
  "pricing": null,
  "regions": [
    "global"
  ],
  "languages": [
    "en"
  ],
  "reputation": null,
  "aix_score": null,
  "verification": {
    "identity": "none",
    "health": "liveness-only",
    "pricing": "unknown",
    "last_check": "2026-08-13T06:01:14.887Z"
  },
  "pricing_model": "unknown",
  "links": [
    {
      "label": "homepage",
      "url": "https://www.pulsemcp.com/servers/alimbenhelal-pro-alm-xpp"
    },
    {
      "label": "repository",
      "url": "https://github.com/alimbenhelal-pro/alm-xpp-mcp"
    },
    {
      "label": "listing",
      "url": "https://www.almxpp.com/"
    }
  ],
  "avatar": "https://github.com/alimbenhelal-pro.png?size=160",
  "socials": [
    {
      "label": "github",
      "url": "https://github.com/alimbenhelal-pro"
    }
  ],
  "public_stats": {
    "gh_stars": 2
  },
  "unreachable": false,
  "profile": {
    "mcp_server": "ALMXPPMCP",
    "mcp_version": "1.0.0",
    "tool_count": 90,
    "tools": [
      {
        "name": "validate_best_practices",
        "description": "Run D365 best-practice audit on any AOT object (custom or standard). Returns violation table: severity (Critical/Warning), rule ID, code snippet, fix instruction. Critical violations block deployment. Checks: ISV prefix, security chain, ttsbegin/ttscommit, firstOnly on single-record selects, hardcoded strings (BP1001), CoC next() vs super(), EDT on fields (BP4570), form DataSource/TitleDataSource/InsertIfEmpty. For deep N+1 / row-by-row performance profiling use detect_performance_issues instead. [!] Auto-fixing Critical violations requires D365_CUSTOM_MODEL_PATH (custom code only)."
      },
      {
        "name": "find_extensions",
        "description": "Find 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 creating a new extension — avoid parallel customizations."
      },
      {
        "name": "dmf_import_file",
        "description": "Bulk-import a CSV file into a D365 F&O entity through the Data Management\r\npackage REST API. Builds the package (Manifest + header + CSV) in memory,\r\nuploads it to Azure blob, then calls ImportFromPackage which AUTO-CREATES the\r\ndata project from the manifest. Runs in batch; the tool polls until completion\r\nand returns the final status plus an error-keys file URL when rows fail.\r\nProvide either filePath (a .csv on disk) or inline csvContent. Resolve the\r\nentity name from the KB (find_entity_for_table) -- do not invent it."
      },
      {
        "name": "search_d365_code",
        "description": "WHEN: 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, methods) for the top-scoring objects so the LLM has complete context on the first call. Lower-scoring results return a short preview. No follow-up get_object_details call is needed for top results. NOT for listing all objects in a model -- use list_objects for that. NOT when the exact name is known -- use get_object_details for that. NEVER call search_d365_code twice in the same conversation turn. If one search did not find the object, answer from what you have -- do not repeat the search. When you need context on MORE THAN ONE concept simultaneously, use batch_search instead -- it runs all queries in parallel and is faster. NEVER call for ADO items (FDD, RDD, IDD, Bug, Task, PR, WorkItem, sprint, #1234) -- use ado_* tools instead."
      },
      {
        "name": "dmf_transform_excel",
        "description": "Transform a multi-sheet Excel (.xlsx) into DMF-ready rows using a data-driven JSON\r\nmapping -- equivalent to FO_TransformExcelForDMF. NO FO credentials required (offline\r\ntransform). Provide the workbook via ONE of: sourceUrl (Blob/SharePoint SAS URL or\r\nGraph downloadUrl), filePath (local .xlsx) or fileContentBase64 (inline upload, small\r\nfiles only). The mappingJson spec supports: sourceSheet, targetSheet, columnMappings\r\n{source->target}, conditionalValues [{sourceColumn,matches[],values{}}], staticValues{},\r\ndeduplicateOn[] and autoGeneratedFields (array OR object keyed by sheet, e.g.\r\n{\"Products V2\":[\"PRODUCTNUMBER\"]}) which are removed so FO generates them.\r\nReturns CSV (default, feed to dmf_import_file) or JSON (feed to odata_upsert_rows).\r\nSet listSheetsOnly=true to just inspect the workbook's sheet names."
      },
      {
        "name": "generate_query",
        "description": "WHEN: developer needs correct X++ select or T-SQL for D365 tables with proper joins. Triggers: 'X++ select', 'generate a query', 'SQL for', 'join with', 'how to query', 'générer une requête', 'write a select statement', 'select from', 'X++ query for', 'requête X++', 'écrire une select'. Generate both X++ select statements and equivalent T-SQL queries for D365 F&O tables. Uses real field names, relations, and indexes from the knowledge base to produce correct joins. Supports: field selection, multi-table joins (auto-detects relations), WHERE filters, ORDER BY, TOP/firstonly, cross-company. Also accepts natural language descriptions like 'find all open sales orders for customer 1001 with CustTable join'. [!] For multi-table joins, call find_related_objects (or get_relation_graph if the relation index is loaded) FIRST to get the correct FK relations -- this tool will then produce accurate join conditions. [!] The generated X++ is a template -- adapt it to your custom code context before using in production. Returns side-by-side X++ and SQL with explanations."
      },
      {
        "name": "ado_wiki_delete_page",
        "description": "AZURE 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)."
      },
      {
        "name": "appinsights_diagnose_slowness",
        "description": "WHEN: user wants to understand/deduce why a D365 F&O environment feels slow, using the\r\nreal Application Insights telemetry the environment already emits -- no trace file\r\nupload needed. Runs a set of canned KQL queries and assembles one combined report:\r\n  1. X++ exception hotspots (exceptions table) -- top types/messages by count.\r\n  2. Hot custom telemetry events (customEvents table) -- top event names by frequency,\r\n     plus a duration breakdown for events that carry an ElapsedMilliseconds custom\r\n     property (covers ALMMonitoring-instrumented FDDs, and any out-of-box signal using\r\n     the same convention).\r\n  3. Slow web requests/dependencies (requests/dependencies tables) -- only rendered if\r\n     the workspace actually has data there (uncommon for FnO's own AOS tier, but present\r\n     for Commerce/Portal/custom web extensions sharing the same App Insights resource).\r\nRequires the connection to be configured first via appinsights_set_connection (or server\r\nenv vars).\r\n\r\nTriggers: 'déduire et comprendre les lenteurs', 'why is my environment slow', 'diagnose\r\nslowness from App Insights', 'analyse la lenteur avec App Insights', 'performance issue\r\nlive environment', 'slow environment telemetry'."
      },
      {
        "name": "ado_wiki_list",
        "description": "AZURE 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 env vars."
      },
      {
        "name": "get_object_details",
        "description": "WHEN: you know the EXACT object name. Triggers: user gives an exact name like 'SalesTable', 'CustTable', 'VendInvoiceJour', any PascalCase D365 object name. Get complete details: all fields, methods, relations, indexes, source code, and metadata. COST NOTE: this returns the FULL object and can be very large (100KB+ for big tables/forms like SalesLine). If you ONLY need relations / FK / DeleteActions / data sources / who-references, call get_relation_graph instead -- it is O(1) and roughly 6x lighter (no source code). Reserve get_object_details for when you genuinely need field details, method bodies, or source code. Also merges live disk source when a custom model path is configured (disk takes priority). Pass `methodName` to get the FULL body of a specific method -- without it, only signatures are returned. Calling twice -- first without methodName to get the full structure and method table, then again with a specific methodName for its full body -- is the CORRECT and INTENDED two-step pattern. Do NOT call a third time for the same object. DISAMBIGUATION: when a name exists as several AOT types (e.g. a Table AND a Form both named 'SalesLine'), this returns the PRIMARY type (Table/Class/Entity before the much heavier Form) and notes the others -- pass `aotType` (e.g. 'AxTable', 'AxForm', or shorthand 'table'/'form'/'class') to pick a specific one. This prevents dumping the heaviest object and truncating the rest. NOT for searching -- use search_d365_code when the name is uncertain. NOT for listing a model's objects -- use list_objects for that."
      },
      {
        "name": "ado_query_workitems",
        "description": " AZURE DEVOPS ONLY -- Query Work Items (Bugs, Tasks, FDDs, User Stories, CRs) in Azure DevOps. [~] PRIORITY TRIGGER: use this tool when the user mentions 'FDD', 'RDD', 'IDD', 'CR', 'Task', 'Workitem', 'Work Item', 'Bug', 'User Story', 'Feature', 'Issue', 'ticket', 'sprint', 'backlog', 'DevOps', 'liste des tâches', 'show tasks', 'find bugs', '#1234', 'WI#'.  NEVER use this tool for: D365 labels (@SYS/@TRX), X++ code, AOT objects, tables, classes, forms, enums, error messages, 'c\\'est quoi le label', 'search_labels', 'libellé', 'label D365'. For labels -> use search_labels. For D365 code -> use search_d365_code or get_object_details. Shortcuts: 'bugs' (all active bugs), 'my bugs' (assigned to me), 'recent' (updated last 7 days), 'sprint' (current iteration). Or pass any WIQL SELECT statement or a free-text title search. Use '*' with filters only. Returns max 50 work items with ID, title, type, state, priority, area, assigned-to. Requires DEVOPS_ORG_URL + DEVOPS_PAT env vars."
      },
      {
        "name": "dmf_apply_entity_filter",
        "description": "Apply a single-field value filter to ONE entity row of an existing DMF project, so the\r\nexport only contains the matching records. The kernel builds the packed query (HSO\r\n'GenerateQueryData' action), the container envelope is stripped on the QueryRun.pack()\r\nsignature, and the inner blob is PATCHed onto DataManagementDefinitionGroupDetails.QueryData\r\n(the exact format the standard table DMFDefinitionGroupEntity stores). Works for ANY entity\r\nand ANY field, but only a single field = single value per call (call once per entity row).\r\nWildcards are passed through (e.g. value '1001*'). NOTE: filtering a parent (e.g. 'Vendors\r\nV2' on VendorAccountNumber) does NOT auto-filter child rows -- apply the same filter to\r\nrelated rows (e.g. 'Vendor bank accounts', 'Vendor postal addresses') for a single-record\r\nexport. Requires the HSO custom action in the environment."
      },
      {
        "name": "ado_update_workitem",
        "description": "Update 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 la description du workitem', 'change le state', 'update field', 'post ça en description'. Always show the user what will be changed and ask for confirmation before calling. Requires DEVOPS_PAT with Work Items: Write permission."
      },
      {
        "name": "find_references",
        "description": "Full 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:124480` forms. NOT for extensions only — use find_extensions for CoC/event handlers."
      },
      {
        "name": "ado_gap_fit_analysis",
        "description": "WHEN: user asks whether a D365 requirement is standard, needs config, needs an extension, or is a full gap. Also triggered by gap analysis or fit/gap classification of a Work Item.\n\n GAP / FIT CLASSIFIER -- Analyse a D365 F&O requirement (from an ADO Work Item OR plain text) and classify it as one of four verdicts:\n  [OK] Standard Fit   -- D365 covers this out-of-the-box, no dev needed\n  [gear] Config Fit  -- D365 has it but requires parameter / profile setup\n   Extension Fit  -- Standard process exists; a CoC/event-handler is enough\n  [X] Gap            -- No standard coverage; custom development required\n\nFor each requirement block the tool returns:\n  -- Detected D365 domain (Settlement, PaymentJournal, DataImport, ...)\n  -- Standard objects found in KB and their process step\n  -- Existing extensions in the custom model (if D365_CUSTOM_MODEL_PATH is set)\n  -- Effort estimate (hours) and a one-paragraph reasoning\n\nTriggers: 'analyse the requirement', 'is this a gap or fit', 'gap analysis WI #N', 'standard or custom for WI #N', 'does D365 cover this'. [~] When a WI has already been analysed by `ado_analyze_workitem` in the same turn, pass the requirement text directly via `requirementText` -- do NOT re-fetch with `workItemId`."
      },
      {
        "name": "batch_search",
        "description": "WHEN: you need context on multiple D365 objects or concepts simultaneously -- runs all queries in parallel. Use INSTEAD of multiple sequential search_d365_code calls -- each line becomes one parallel search. Maximum 6 queries per call. Results are equivalent to search_d365_code but returned together. When batch_search returns results, all matching objects are FULLY loaded (all chunks). Do NOT follow up with get_object_details on the same objects -- the complete source is already included.\n\nTriggers: 'find all of these', 'look up multiple', 'cherche plusieurs', 'SalesTable AND VendTable', 'several objects at once', 'lookup X and Y and Z', 'plusieurs objets en même temps', 'context on all of these'."
      },
      {
        "name": "ado_read_attachment",
        "description": " 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 Story) has an Excel/Word attachment with requirements, field mappings, mockups, or specs that need to be read to understand the ask. Triggers: 'read the attachment', 'open the excel file on the work item', 'what does the attached document say', 'lis le fichier joint', 'ouvre l'excel du ticket'. Call ado_analyze_workitem first (or ado_query_workitems) to discover attachment file names if you don't already know the exact fileName. Supported: .xlsx/.xlsm (returns sheet names + a markdown table of the requested/first sheet), .docx (returns extracted markdown text + tables), .txt/.csv/.json/.xml/.md/.log (returned as-is), images (.png/.jpg/.jpeg/.gif/.bmp/.webp, returned as a base64 data URI for visual analysis, max 4 MB). Other binary formats (PDF, .pptx, .zip, etc.) are NOT parsed -- returns metadata + a manual download link instead. Max attachment size read: 25 MB. Requires DEVOPS_ORG_URL + DEVOPS_PAT env vars."
      },
      {
        "name": "trace_field_lineage",
        "description": "WHEN: 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 lineage', 'GDPR field audit', 'origin of field', 'what touches this field'. Requires XRef index for writer/reader analysis. Relation graph for forms and FKs. Examples: trace_field_lineage('CustTable','CreditMax') or trace_field_lineage('LedgerJournalTrans','AmountCurDebit')."
      },
      {
        "name": "plan_and_execute",
        "description": " 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 chain stops on any critical failure (ado_analyze_workitem, get_object_details).\n\n## Required Format (JSON array)\n`[{\"tool\":\"get_object_details\",\"args\":{\"objectName\":\"SalesTable\"}},{\"tool\":\"validate_best_practices\",\"args\":{\"objectName\":\"SalesTable\"}}]`\n\n## When to use\n- You already know the exact sequence of 2-5 tool calls needed\n- The output of step N is independent of step N+1 (or matches the carried context: analysis_output)\n- You want SSE progress events between steps\n\n## When NOT to use\n- Single tool call (use the tool directly)\n- Plan depends on the user's intermediate decision (call tools one at a time)\n- More than 5 steps (split into separate calls)\n\n## Cost: $0 -- pure in-process execution."
      },
      {
        "name": "find_similar_implementations",
        "description": "Find 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."
      },
      {
        "name": "recommend_extension_strategy",
        "description": "WHEN: 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 ranked recommendation based on the target AOT type and the intent, with citations to the Microsoft Learn extensibility guide. Cloud-safe: pure KB lookup, no writes."
      },
      {
        "name": "diff_model_versions",
        "description": "Compare two D365 F&O KB snapshots to produce a changelog (added/removed/modified objects). Use action 'save_baseline' once, then 'compare' between two snapshots."
      },
      {
        "name": "find_related_objects",
        "description": "Returns 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 tools for the same object."
      },
      {
        "name": "ado_review_xpp_pr",
        "description": "WHEN: 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), existing best-practice violations, performance issues, and impact severity. Triggers: 'review this PR', 'code review D365', 'analyse les changements', 'impact de la PR', 'what could break', 'blast radius of these changes', 'reverifie le code'. Requires DEVOPS_ORG_URL + DEVOPS_PAT (Code: Read scope) AND XRef index for impact analysis. Combine with ado_post_pr_comment to post findings as inline review comments."
      },
      {
        "name": "dmf_create_data_project",
        "description": "Create (or extend) a DMF data project -- EXPORT or IMPORT -- entirely through standard\r\npublic OData entities, with NO X++ customization required. It POSTs the header to\r\nDataManagementDefinitionGroups and one row per entity to DataManagementDefinitionGroupDetails\r\nwith AutoGenerateMapping=Yes, so FO generates each entity's source<->staging mapping\r\nautomatically. Idempotent: an existing project is reused and entities already present are\r\nskipped. For EXPORT, the project can then be run with dmf_export_package. Provide an EXISTING\r\nDMF 'source data format' name for sourceName (e.g. a comma-delimited format)."
      }
    ],
    "profiled_at": "2026-08-13T06:01:14.887Z"
  }
}