Skip to main content
Glama

d365fo_file

Destructive

Create, modify, delete, or undo D365FO AOT object files and manage Visual Studio projects with automatic project registration.

Instructions

D365FO AOT object files and VS projects. Choose an action: • create → write a NEW object file into PackagesLocalDirectory (auto-added to .rnrproj). THE WRITE STEP — incomplete until isError=false; ⚠️/❌ = failure. Extensions: objectName="Base.PrefixExtension". • project → VS project + .sln ops via params.operation: create|delete (confirm first)|add-object|remove-object. • modify → edit an EXISTING object. APPLIES IMMEDIATELY, no dry-run — confirm with the user first; revert with action="undo". Needs operation. • delete → remove an object's XML from disk AND un-register it from every .rnrproj listing it. IRREVERSIBLE — confirm with the user first. • undo → roll back filePath: git-tracked → git checkout HEAD, which discards ALL uncommitted changes to that file, not just the last edit; untracked → deleted; outside git, only if created this session. • generate → XML as TEXT only, no write (Azure/Linux fallback). Try create first. The rest need Windows. 📖 Parameters are NOT inlined here: get_knowledge(kind="op-spec", topic=""|"") returns its contract — pass its values nested in params (modify) / properties (create), along with any packageName/packagePath/solutionPath/workspacePath override. Model + prefix auto-applied.

Input Schema

NameRequiredDescriptionDefault
actionYes
paramsNo[modify|project] Operation-specific parameters as ONE nested object, per the op-spec lookup above. A missing/wrong one returns that COMPLETE spec — follow it, do not guess.
filePathNo[modify|delete] Absolute XML path — bypasses symbol-DB lookup. Use for objects just created. [undo] REQUIRED: the file to roll back.
modelNameNoTarget model — auto-detected. NEVER take it from search results (those are source models).
operationNo[modify] REQUIRED unless using operations[]. add-method also UPDATES in place; replace-code is the surgical oldCode→newCode path.
overwriteNoAllow overwriting — never rewrite via PowerShell.
objectNameNoBase name WITHOUT model prefix — the tool prepends it. Extension classes: "{Base}_Extension". NEVER hand-build the prefix.
objectTypeNoEach security/menu-item type is its own AOT folder — NEVER use security-privilege for duty or role. [modify]/[generate] cover the core families + their *-extension variants.
operationsNo[modify|create] PREFERRED for 2+ edits to the SAME object — ONE call, not one per edit. On create they run against the just-created object, under the name it actually got. Entries are {operation, …op-spec params}; objectType/objectName/modelName stay top-level. Applied in order, stopped at the first failure, per-operation results back.
propertiesNo[create] Per-objectType creation properties (label, fields[], extends, enumValues[], primaryTable, …) — per the op-spec lookup above.
sourceCodeNoX++ source. FOR CLASSES auto-split: <Declaration> = class line + member vars; <Methods> = each method after the closing }.
xmlContentNoComplete XML written verbatim (+overwrite=true rewrites an object).
projectPathNoPath to .rnrproj. Set if known, else auto-detected.
addToProjectNoAdd to the ACTIVE .rnrproj — keep the default.
createBackupNo[modify] Back up before modifying.
groundingTokenNoFrom prepare(change/create). Required for *-extension when GROUNDING_ENFORCE=true; object-bound.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv1.19.1
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "create",
      -  "modify",
      -  "delete",
      -  "undo",
      -  "generate"
      -]New value: +[
      +  "create",
      +  "project",
      +  "modify",
      +  "delete",
      +  "undo",
      +  "generate"
      +]
    • changedInput schema / properties / objectType / description
      Previous value: -"Each security/menu-item type is its own AOT folder — NEVER use security-privilege for duty or role. [modify]/[generate] cover the core families + their *-extension variants; [delete] takes the same enum as [create]."New value: +"Each security/menu-item type is its own AOT folder — NEVER use security-privilege for duty or role. [modify]/[generate] cover the core families + their *-extension variants."
    • changedInput schema / properties / objectType / enum
      Previous value: -[
      -  "class",
      -  "table",
      -  "enum",
      -  "form",
      -  "query",
      -  "view",
      -  "data-entity",
      -  "report",
      -  "edt",
      -  "table-extension",
      -  "class-extension",
      -  "form-extension",
      -  "enum-extension",
      -  "edt-extension",
      -  "data-entity-extension",
      -  "menu-item-display-extension",
      -  "menu-item-action-extension",
      -  "menu-item-output-extension",
      -  "menu-extension",
      -  "menu-item-display",
      -  "menu-item-action",
      -  "menu-item-output",
      -  "menu",
      -  "security-privilege",
      -  "security-duty",
      -  "security-role",
      -  "security-duty-extension",
      -  "security-role-extension",
      -  "ignore-diagnostic-list",
      -  "business-event",
      -  "tile",
      -  "kpi",
      -  "map",
      -  "service",
      -  "service-group",
      -  "macro",
      -  "configuration-key",
      -  "security-policy",
      -  "aggregate-measurement",
      -  "license-code"
      -]New value: +[
      +  "class",
      +  "table",
      +  "enum",
      +  "form",
      +  "query",
      +  "view",
      +  "data-entity",
      +  "report",
      +  "edt",
      +  "table-extension",
      +  "class-extension",
      +  "form-extension",
      +  "enum-extension",
      +  "edt-extension",
      +  "data-entity-extension",
      +  "menu-item-display-extension",
      +  "menu-item-action-extension",
      +  "menu-item-output-extension",
      +  "menu-extension",
      +  "menu-item-display",
      +  "menu-item-action",
      +  "menu-item-output",
      +  "menu",
      +  "security-privilege",
      +  "security-duty",
      +  "security-role",
      +  "security-duty-extension",
      +  "security-role-extension",
      +  "ignore-diagnostic-list",
      +  "model-descriptor",
      +  "business-event",
      +  "tile",
      +  "kpi",
      +  "map",
      +  "service",
      +  "service-group",
      +  "macro",
      +  "configuration-key",
      +  "security-policy",
      +  "aggregate-measurement",
      +  "license-code"
      +]
    • changedInput schema / properties / operation / enum
      Previous value: -[
      -  "add-method",
      -  "remove-method",
      -  "replace-code",
      -  "add-field",
      -  "modify-field",
      -  "rename-field",
      -  "replace-all-fields",
      -  "remove-field",
      -  "add-display-method",
      -  "add-table-method",
      -  "add-index",
      -  "remove-index",
      -  "add-full-text-index",
      -  "remove-full-text-index",
      -  "add-table-mapping",
      -  "remove-table-mapping",
      -  "add-relation",
      -  "remove-relation",
      -  "add-delete-action",
      -  "remove-delete-action",
      -  "add-field-group",
      -  "remove-field-group",
      -  "add-field-to-field-group",
      -  "add-field-modification",
      -  "add-data-source",
      -  "add-control",
      -  "remove-control",
      -  "add-entry-point",
      -  "remove-entry-point",
      -  "remove-diagnostic-suppression",
      -  "add-diagnostic-suppression",
      -  "add-enum-value",
      -  "modify-enum-value",
      -  "remove-enum-value",
      -  "add-menu-item-to-menu",
      -  "modify-property",
      -  "add-query-range",
      -  "remove-query-range",
      -  "report-design"
      -]New value: +[
      +  "add-method",
      +  "remove-method",
      +  "replace-code",
      +  "add-field",
      +  "modify-field",
      +  "rename-field",
      +  "replace-all-fields",
      +  "remove-field",
      +  "add-display-method",
      +  "add-table-method",
      +  "add-index",
      +  "remove-index",
      +  "add-full-text-index",
      +  "remove-full-text-index",
      +  "add-table-mapping",
      +  "remove-table-mapping",
      +  "add-relation",
      +  "remove-relation",
      +  "add-delete-action",
      +  "remove-delete-action",
      +  "add-field-group",
      +  "remove-field-group",
      +  "add-field-to-field-group",
      +  "add-field-modification",
      +  "add-data-source",
      +  "add-control",
      +  "remove-control",
      +  "add-entry-point",
      +  "remove-entry-point",
      +  "remove-diagnostic-suppression",
      +  "add-diagnostic-suppression",
      +  "add-module-reference",
      +  "remove-module-reference",
      +  "add-enum-value",
      +  "modify-enum-value",
      +  "remove-enum-value",
      +  "add-menu-item-to-menu",
      +  "modify-property",
      +  "add-query-range",
      +  "remove-query-range",
      +  "report-design"
      +]
    • changedInput schema / properties / params / description
      Previous value: -"[modify] Operation-specific parameters as ONE nested object, per the op-spec lookup above. A missing/wrong one returns that COMPLETE spec — follow it, do not guess."New value: +"[modify|project] Operation-specific parameters as ONE nested object, per the op-spec lookup above. A missing/wrong one returns that COMPLETE spec — follow it, do not guess."
    • changedInput schema / properties / properties / description
      Previous value: -"[create] Per-objectType creation properties (label, fields[], extends, enumValues[], primaryTable, …) — not in this schema; fetch yours with the op-spec lookup above."New value: +"[create] Per-objectType creation properties (label, fields[], extends, enumValues[], primaryTable, …) — per the op-spec lookup above."
  2. Changed1 schema field changedv1.17.3
    • changedInput schema / properties / operation / enum
      Previous value: -[
      -  "add-method",
      -  "remove-method",
      -  "replace-code",
      -  "add-field",
      -  "modify-field",
      -  "rename-field",
      -  "replace-all-fields",
      -  "remove-field",
      -  "add-display-method",
      -  "add-table-method",
      -  "add-index",
      -  "remove-index",
      -  "add-full-text-index",
      -  "remove-full-text-index",
      -  "add-table-mapping",
      -  "remove-table-mapping",
      -  "add-relation",
      -  "remove-relation",
      -  "add-delete-action",
      -  "remove-delete-action",
      -  "add-field-group",
      -  "remove-field-group",
      -  "add-field-to-field-group",
      -  "add-field-modification",
      -  "add-data-source",
      -  "add-control",
      -  "remove-control",
      -  "add-entry-point",
      -  "remove-entry-point",
      -  "remove-diagnostic-suppression",
      -  "add-diagnostic-suppression",
      -  "add-enum-value",
      -  "modify-enum-value",
      -  "remove-enum-value",
      -  "add-menu-item-to-menu",
      -  "modify-property",
      -  "add-query-range",
      -  "remove-query-range"
      -]New value: +[
      +  "add-method",
      +  "remove-method",
      +  "replace-code",
      +  "add-field",
      +  "modify-field",
      +  "rename-field",
      +  "replace-all-fields",
      +  "remove-field",
      +  "add-display-method",
      +  "add-table-method",
      +  "add-index",
      +  "remove-index",
      +  "add-full-text-index",
      +  "remove-full-text-index",
      +  "add-table-mapping",
      +  "remove-table-mapping",
      +  "add-relation",
      +  "remove-relation",
      +  "add-delete-action",
      +  "remove-delete-action",
      +  "add-field-group",
      +  "remove-field-group",
      +  "add-field-to-field-group",
      +  "add-field-modification",
      +  "add-data-source",
      +  "add-control",
      +  "remove-control",
      +  "add-entry-point",
      +  "remove-entry-point",
      +  "remove-diagnostic-suppression",
      +  "add-diagnostic-suppression",
      +  "add-enum-value",
      +  "modify-enum-value",
      +  "remove-enum-value",
      +  "add-menu-item-to-menu",
      +  "modify-property",
      +  "add-query-range",
      +  "remove-query-range",
      +  "report-design"
      +]
  3. Changed6 schema fields changedv1.16.2
    • removedInput schema / properties / action / description
      Removed value: -"One of the four modes described above."
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "create",
      -  "modify",
      -  "delete",
      -  "generate"
      -]New value: +[
      +  "create",
      +  "modify",
      +  "delete",
      +  "undo",
      +  "generate"
      +]
    • changedInput schema / properties / filePath / description
      Previous value: -"[modify|delete] Absolute XML path — bypasses symbol-DB lookup. Use for objects just created."New value: +"[modify|delete] Absolute XML path — bypasses symbol-DB lookup. Use for objects just created. [undo] REQUIRED: the file to roll back."
    • changedInput schema / properties / params / description
      Previous value: -"[modify] Operation-specific parameters as ONE nested object, per get_knowledge(kind=\"op-spec\", topic=\"<operation>\"). A missing/wrong one returns that COMPLETE spec — follow it, do not guess."New value: +"[modify] Operation-specific parameters as ONE nested object, per the op-spec lookup above. A missing/wrong one returns that COMPLETE spec — follow it, do not guess."
    • changedInput schema / properties / projectPath / description
      Previous value: -"Path to .rnrproj (auto-detected)."New value: +"Path to .rnrproj. Set if known, else auto-detected."
    • changedInput schema / properties / properties / description
      Previous value: -"[create] Per-objectType creation properties (label, fields[], extends, enumValues[], primaryTable, …) — NOT in this schema. Fetch yours: get_knowledge(kind=\"op-spec\", topic=\"<objectType>\")."New value: +"[create] Per-objectType creation properties (label, fields[], extends, enumValues[], primaryTable, …) — not in this schema; fetch yours with the op-spec lookup above."
  4. Changed3 schema fields changedv1.14.0
    • changedInput schema / properties / operation / description
      Previous value: -"[modify] REQUIRED unless using operations[]. add-method also UPDATES in place; replace-code is the surgical oldCode→newCode path. Parameters: get_knowledge(kind=\"op-spec\", topic=\"<operation>\")."New value: +"[modify] REQUIRED unless using operations[]. add-method also UPDATES in place; replace-code is the surgical oldCode→newCode path."
    • changedInput schema / properties / operation / enum
      Previous value: -[
      -  "add-method",
      -  "remove-method",
      -  "replace-code",
      -  "add-field",
      -  "modify-field",
      -  "rename-field",
      -  "replace-all-fields",
      -  "remove-field",
      -  "add-display-method",
      -  "add-table-method",
      -  "add-index",
      -  "remove-index",
      -  "add-full-text-index",
      -  "remove-full-text-index",
      -  "add-table-mapping",
      -  "remove-table-mapping",
      -  "add-relation",
      -  "remove-relation",
      -  "add-delete-action",
      -  "remove-delete-action",
      -  "add-field-group",
      -  "remove-field-group",
      -  "add-field-to-field-group",
      -  "add-field-modification",
      -  "add-data-source",
      -  "add-control",
      -  "remove-control",
      -  "remove-entry-point",
      -  "remove-diagnostic-suppression",
      -  "add-diagnostic-suppression",
      -  "add-enum-value",
      -  "modify-enum-value",
      -  "remove-enum-value",
      -  "add-menu-item-to-menu",
      -  "modify-property",
      -  "add-query-range",
      -  "remove-query-range"
      -]New value: +[
      +  "add-method",
      +  "remove-method",
      +  "replace-code",
      +  "add-field",
      +  "modify-field",
      +  "rename-field",
      +  "replace-all-fields",
      +  "remove-field",
      +  "add-display-method",
      +  "add-table-method",
      +  "add-index",
      +  "remove-index",
      +  "add-full-text-index",
      +  "remove-full-text-index",
      +  "add-table-mapping",
      +  "remove-table-mapping",
      +  "add-relation",
      +  "remove-relation",
      +  "add-delete-action",
      +  "remove-delete-action",
      +  "add-field-group",
      +  "remove-field-group",
      +  "add-field-to-field-group",
      +  "add-field-modification",
      +  "add-data-source",
      +  "add-control",
      +  "remove-control",
      +  "add-entry-point",
      +  "remove-entry-point",
      +  "remove-diagnostic-suppression",
      +  "add-diagnostic-suppression",
      +  "add-enum-value",
      +  "modify-enum-value",
      +  "remove-enum-value",
      +  "add-menu-item-to-menu",
      +  "modify-property",
      +  "add-query-range",
      +  "remove-query-range"
      +]
    • changedInput schema / properties / operations / description
      Previous value: -"[modify] PREFERRED for 2+ edits to the SAME object — ONE call, not one per edit. Entries are {operation, …op-spec params}; objectType/objectName/modelName stay top-level. Applied in order, stopped at the first failure, per-operation results back. 3 fields + their field groups + an index: 7 calls flat, 1 here."New value: +"[modify|create] PREFERRED for 2+ edits to the SAME object — ONE call, not one per edit. On create they run against the just-created object, under the name it actually got. Entries are {operation, …op-spec params}; objectType/objectName/modelName stay top-level. Applied in order, stopped at the first failure, per-operation results back."
  5. Changed1 schema field changedv1.13.0
    • changedInput schema / properties / operation / enum
      Previous value: -[
      -  "add-method",
      -  "remove-method",
      -  "replace-code",
      -  "add-field",
      -  "modify-field",
      -  "rename-field",
      -  "replace-all-fields",
      -  "remove-field",
      -  "add-display-method",
      -  "add-table-method",
      -  "add-index",
      -  "remove-index",
      -  "add-full-text-index",
      -  "remove-full-text-index",
      -  "add-table-mapping",
      -  "remove-table-mapping",
      -  "add-relation",
      -  "remove-relation",
      -  "add-delete-action",
      -  "remove-delete-action",
      -  "add-field-group",
      -  "remove-field-group",
      -  "add-field-to-field-group",
      -  "add-field-modification",
      -  "add-data-source",
      -  "add-control",
      -  "remove-control",
      -  "remove-entry-point",
      -  "remove-diagnostic-suppression",
      -  "add-diagnostic-suppression",
      -  "add-enum-value",
      -  "modify-enum-value",
      -  "remove-enum-value",
      -  "add-menu-item-to-menu",
      -  "modify-property"
      -]New value: +[
      +  "add-method",
      +  "remove-method",
      +  "replace-code",
      +  "add-field",
      +  "modify-field",
      +  "rename-field",
      +  "replace-all-fields",
      +  "remove-field",
      +  "add-display-method",
      +  "add-table-method",
      +  "add-index",
      +  "remove-index",
      +  "add-full-text-index",
      +  "remove-full-text-index",
      +  "add-table-mapping",
      +  "remove-table-mapping",
      +  "add-relation",
      +  "remove-relation",
      +  "add-delete-action",
      +  "remove-delete-action",
      +  "add-field-group",
      +  "remove-field-group",
      +  "add-field-to-field-group",
      +  "add-field-modification",
      +  "add-data-source",
      +  "add-control",
      +  "remove-control",
      +  "remove-entry-point",
      +  "remove-diagnostic-suppression",
      +  "add-diagnostic-suppression",
      +  "add-enum-value",
      +  "modify-enum-value",
      +  "remove-enum-value",
      +  "add-menu-item-to-menu",
      +  "modify-property",
      +  "add-query-range",
      +  "remove-query-range"
      +]
  6. Changed6 schema fields changedv1.12.0
    • changedInput schema / properties / action / description
      Previous value: -"One of the three modes described above."New value: +"One of the four modes described above."
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "create",
      -  "modify",
      -  "generate"
      -]New value: +[
      +  "create",
      +  "modify",
      +  "delete",
      +  "generate"
      +]
    • changedInput schema / properties / filePath / description
      Previous value: -"[modify] Absolute XML path — bypasses symbol-DB lookup. Use for objects just created."New value: +"[modify|delete] Absolute XML path — bypasses symbol-DB lookup. Use for objects just created."
    • changedInput schema / properties / objectType / description
      Previous value: -"Each security/menu-item type is its own AOT folder — NEVER use security-privilege for duty or role. [modify]/[generate] cover the core families + their *-extension variants."New value: +"Each security/menu-item type is its own AOT folder — NEVER use security-privilege for duty or role. [modify]/[generate] cover the core families + their *-extension variants; [delete] takes the same enum as [create]."
    • changedInput schema / properties / objectType / enum
      Previous value: -[
      -  "class",
      -  "table",
      -  "enum",
      -  "form",
      -  "query",
      -  "view",
      -  "data-entity",
      -  "report",
      -  "edt",
      -  "table-extension",
      -  "class-extension",
      -  "form-extension",
      -  "enum-extension",
      -  "edt-extension",
      -  "data-entity-extension",
      -  "menu-item-display-extension",
      -  "menu-item-action-extension",
      -  "menu-item-output-extension",
      -  "menu-extension",
      -  "menu-item-display",
      -  "menu-item-action",
      -  "menu-item-output",
      -  "menu",
      -  "security-privilege",
      -  "security-duty",
      -  "security-role",
      -  "security-duty-extension",
      -  "security-role-extension",
      -  "business-event",
      -  "tile",
      -  "kpi",
      -  "map",
      -  "service",
      -  "service-group",
      -  "macro",
      -  "configuration-key",
      -  "security-policy",
      -  "aggregate-measurement",
      -  "license-code"
      -]New value: +[
      +  "class",
      +  "table",
      +  "enum",
      +  "form",
      +  "query",
      +  "view",
      +  "data-entity",
      +  "report",
      +  "edt",
      +  "table-extension",
      +  "class-extension",
      +  "form-extension",
      +  "enum-extension",
      +  "edt-extension",
      +  "data-entity-extension",
      +  "menu-item-display-extension",
      +  "menu-item-action-extension",
      +  "menu-item-output-extension",
      +  "menu-extension",
      +  "menu-item-display",
      +  "menu-item-action",
      +  "menu-item-output",
      +  "menu",
      +  "security-privilege",
      +  "security-duty",
      +  "security-role",
      +  "security-duty-extension",
      +  "security-role-extension",
      +  "ignore-diagnostic-list",
      +  "business-event",
      +  "tile",
      +  "kpi",
      +  "map",
      +  "service",
      +  "service-group",
      +  "macro",
      +  "configuration-key",
      +  "security-policy",
      +  "aggregate-measurement",
      +  "license-code"
      +]
    • changedInput schema / properties / operation / enum
      Previous value: -[
      -  "add-method",
      -  "remove-method",
      -  "replace-code",
      -  "add-field",
      -  "modify-field",
      -  "rename-field",
      -  "replace-all-fields",
      -  "remove-field",
      -  "add-display-method",
      -  "add-table-method",
      -  "add-index",
      -  "remove-index",
      -  "add-full-text-index",
      -  "remove-full-text-index",
      -  "add-table-mapping",
      -  "remove-table-mapping",
      -  "add-relation",
      -  "remove-relation",
      -  "add-delete-action",
      -  "remove-delete-action",
      -  "add-field-group",
      -  "remove-field-group",
      -  "add-field-to-field-group",
      -  "add-field-modification",
      -  "add-data-source",
      -  "add-control",
      -  "add-enum-value",
      -  "modify-enum-value",
      -  "remove-enum-value",
      -  "add-menu-item-to-menu",
      -  "modify-property"
      -]New value: +[
      +  "add-method",
      +  "remove-method",
      +  "replace-code",
      +  "add-field",
      +  "modify-field",
      +  "rename-field",
      +  "replace-all-fields",
      +  "remove-field",
      +  "add-display-method",
      +  "add-table-method",
      +  "add-index",
      +  "remove-index",
      +  "add-full-text-index",
      +  "remove-full-text-index",
      +  "add-table-mapping",
      +  "remove-table-mapping",
      +  "add-relation",
      +  "remove-relation",
      +  "add-delete-action",
      +  "remove-delete-action",
      +  "add-field-group",
      +  "remove-field-group",
      +  "add-field-to-field-group",
      +  "add-field-modification",
      +  "add-data-source",
      +  "add-control",
      +  "remove-control",
      +  "remove-entry-point",
      +  "remove-diagnostic-suppression",
      +  "add-diagnostic-suppression",
      +  "add-enum-value",
      +  "modify-enum-value",
      +  "remove-enum-value",
      +  "add-menu-item-to-menu",
      +  "modify-property"
      +]
  7. Changed1 schema field changedv1.10.0
    • changedInput schema / properties / addToProject / description
      Previous value: -"Add to the .rnrproj — keep the default."New value: +"Add to the ACTIVE .rnrproj — keep the default."
  8. Changed20 schema fields changedv1.9.0
    • changedInput schema / properties / addToProject / description
      Previous value: -"Add the file to the .rnrproj project. Keep the default (true) unless explicitly asked otherwise."New value: +"Add to the .rnrproj — keep the default."
    • changedInput schema / properties / createBackup / description
      Previous value: -"[modify] Create backup before modification (default false)"New value: +"[modify] Back up before modifying."
    • changedInput schema / properties / filePath / description
      Previous value: -"[modify] Absolute path to the XML file — bypasses symbol-DB lookup. Use when the object was just created."New value: +"[modify] Absolute XML path — bypasses symbol-DB lookup. Use for objects just created."
    • changedInput schema / properties / groundingToken / description
      Previous value: -"Provenance token from prepare(change/create). Required for *-extension objectTypes when GROUNDING_ENFORCE=true; object-bound — only valid for the object it was issued for."New value: +"From prepare(change/create). Required for *-extension when GROUNDING_ENFORCE=true; object-bound."
    • changedInput schema / properties / modelName / description
      Previous value: -"Target model name — auto-detected from .mcp.json if omitted. NEVER guess or take model names from search results (source models)."New value: +"Target model — auto-detected. NEVER take it from search results (those are source models)."
    • changedInput schema / properties / objectName / description
      Previous value: -"Base name WITHOUT model prefix — the tool prepends EXTENSION_PREFIX (or modelName) and detects an existing prefix. Extension classes: pass \"{Base}_Extension\" with NO prefix infix. NEVER hand-build the prefix."New value: +"Base name WITHOUT model prefix — the tool prepends it. Extension classes: \"{Base}_Extension\". NEVER hand-build the prefix."
    • changedInput schema / properties / objectType / description
      Previous value: -"Each security/menu-item type maps to its own AOT folder — NEVER use security-privilege for duty or role. class-extension = [ExtensionOf] final class skeleton; business-event = BusinessEventsBase + Contract pair. [modify] supports class/table/form/enum/query/view/edt/data-entity/report + *-extension variants. [generate] supports class/table/enum/form/query/view/data-entity/report + table/form/enum/edt/data-entity-extension."New value: +"Each security/menu-item type is its own AOT folder — NEVER use security-privilege for duty or role. [modify]/[generate] cover the core families + their *-extension variants."
    • changedInput schema / properties / operation / description
      Previous value: -"[modify] REQUIRED. Modification to perform. Non-obvious ones:\nadd-method: adds OR updates in place if the name exists (position kept).\nreplace-code: surgical oldCode→newCode; preferred for rewriting a known method. Control overrides: methodName=\"Control.method\".\nrename-field: also fixes index DataField refs and TitleField1/2.\nreplace-all-fields: atomic rewrite of ALL fields.\nadd-display-method: display method with [SysClientCacheDataMethodAttribute].\nadd-table-method: canonical find/exist/findByRecId/validate*/initValue boilerplate.\nadd-field-modification: override base-table field label/mandatory in a table-extension.\nadd-delete-action: DeleteActions entry — deleteActionName + optional deleteActionTable/deleteActionType.\nadd-full-text-index/add-table-mapping: the <FullTextIndexes>/<Mappings> collections.\nmodify-property: any object-level property (TableGroup, TitleField1, Extends…) — see propertyPath; on an *-extension it becomes a PropertyModification."New value: +"[modify] REQUIRED unless using operations[]. add-method also UPDATES in place; replace-code is the surgical oldCode→newCode path. Parameters: get_knowledge(kind=\"op-spec\", topic=\"<operation>\")."
    • addedInput schema / properties / operations
      Added value: +{
      +  "description": "[modify] PREFERRED for 2+ edits to the SAME object — ONE call, not one per edit. Entries are {operation, …op-spec params}; objectType/objectName/modelName stay top-level. Applied in order, stopped at the first failure, per-operation results back. 3 fields + their field groups + an index: 7 calls flat, 1 here.",
      +  "items": {
      +    "additionalProperties": true,
      +    "type": "object"
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
    • changedInput schema / properties / overwrite / description
      Previous value: -"Allow overwriting an existing file (use with xmlContent to rewrite an object — never via PowerShell/create_file)."New value: +"Allow overwriting — never rewrite via PowerShell."
    • removedInput schema / properties / packageName
      Removed value: -{
      -  "description": "Package name — auto-resolved from model name; pass only if they differ.",
      -  "type": "string"
      -}
    • removedInput schema / properties / packagePath
      Removed value: -{
      -  "description": "Base package path (default: auto-detected PackagesLocalDirectory). [modify] also locates objects outside the default dir; for models outside bridge startup roots set D365FO_CUSTOM_PACKAGES_PATH or pass filePath.",
      -  "type": "string"
      -}
    • changedInput schema / properties / params / description
      Previous value: -"[modify] Operation-specific parameters as ONE object — NEST them here. Common shapes: add-method {methodName, sourceCode} · replace-code {oldCode, newCode, methodName?} · add-field {fieldName, fieldType(EDT), fieldBaseType?}; data-entity-ext {fieldName, dataField, dataSource} · rename-field {fieldName, fieldNewName} · add-index {indexName, indexFields[{fieldName}]} · add-relation {relationName, relatedTable, relationConstraints?} · add-field-group {fieldGroupName, fieldGroupFields?} · add-data-source {dataSourceName, dataSourceTable} · add-control {controlName, parentControl, controlDataSource?, controlDataField?} · enum ops {enumValueName, enumValueNewName?(modify-enum-value rename), enumValueLabel?, enumValueInt?} · add-menu-item-to-menu {menuItemToAdd} · modify-property {propertyPath, propertyValue} · add-table-method {tableMethodType, tableKeyField?} · add-display-method {methodName, displayMethodReturnEdt}. A missing/wrong parameter returns the COMPLETE spec for that operation — follow it instead of guessing."New value: +"[modify] Operation-specific parameters as ONE nested object, per get_knowledge(kind=\"op-spec\", topic=\"<operation>\"). A missing/wrong one returns that COMPLETE spec — follow it, do not guess."
    • changedInput schema / properties / projectPath / description
      Previous value: -"Path to .rnrproj file (needed for addToProject). Auto-detected from .mcp.json or workspace if omitted."New value: +"Path to .rnrproj (auto-detected)."
    • addedInput schema / properties / properties / additionalProperties
      Added value: +true
    • changedInput schema / properties / properties / description
      Previous value: -"Additional properties by objectType:\n• class: extends, implements, isFinal, isAbstract\n• table: label, tableGroup, tableType, titleField1/2, cacheLookup?, primaryIndex?, allowRowVersionChangeTracking? (dual-write), created/modifiedBy/DateTime?, fields[{name,type?|edt?|fieldType?,enumType?,label?,mandatory?}] — enum fields need enumType (+ optionally fieldType:\"AxTableFieldEnum\")\n• enum: label, useEnumValue, configurationKey, isExtensible, enumValues[{name,value?,label?,helpText?}]\n• enum-extension: enumValues[{name,label?,value?,countryRegionCodes?}]\n• table-extension: fields[{name,edt?,enumType?,label?,mandatory?,fieldType?}] — enum fields need fieldType:\"AxTableFieldEnum\" + enumType\n• edt: label, extends, edtType, stringSize\n• edt-extension: label?, helpText?, stringSize?, extends?, formHelp?, propertyModifications?[{name,value}] = the change\n• form: caption, formTemplate, dataSource\n• security-privilege: label, targetObject, objectType (MenuItemDisplay|Action|Output), accessLevel (view|maintain), dataEntity (grants perms)\n• security-duty: label, privileges[]\n• security-role: label, duties[], privileges[]\n• menu-item-*: label, object, objectType\n• data-entity: primaryTable, fields[{name,dataField?}], primaryKey?, primaryKeyFields?[], isPublic?, entityCategory?, dynamicFields?, allowRowVersionChangeTracking? (dual-write: set on the source TABLES too), dataManagementEnabled? (needs staging table)\n• map: label?, developerDocumentation?, fields[{name,type?,edt?,enumType?,stringSize?}], mappingTable?, mappings?[{mapField,mapFieldTo}] (one connection/field by default)\n• query: title?, dataSource (root table; table also works), dataSourceName?, fields?[{name,field?}]\n• view: query (existing AxQuery), fields[{name,dataField?}] — dataSource defaults to query\n• service: serviceClass (defaults to the service name), externalName?, namespace?, description?, operations[\"opName\"] or [{name?,method?,enableIdempotence?,subscriberAccessLevelRead?}]\n• service-group: autoDeploy? (Yes publishes at /api/services), description?, services[\"MyService\"] or [{name?,service?}]\n  ⚠ service/service-group CROSS-REFS (serviceClass, services[].service) are written VERBATIM — only objectName is prefixed. Pass the FINAL name (e.g. \"ContosoDemoNoteService\", not \"DemoNoteService\") or the group resolves to nothing; verbatim also lets it reference an unprefixed MS service."New value: +"[create] Per-objectType creation properties (label, fields[], extends, enumValues[], primaryTable, …) — NOT in this schema. Fetch yours: get_knowledge(kind=\"op-spec\", topic=\"<objectType>\")."
    • removedInput schema / properties / solutionPath
      Removed value: -{
      -  "description": "VS solution directory — used to find .rnrproj when projectPath unset.",
      -  "type": "string"
      -}
    • changedInput schema / properties / sourceCode / description
      Previous value: -"X++ source for the object. FOR CLASSES the content is auto-split: <Declaration> = the class line + ALL member variables inside the outer { }; <Methods> = each method AFTER the closing }."New value: +"X++ source. FOR CLASSES auto-split: <Declaration> = class line + member vars; <Methods> = each method after the closing }."
    • removedInput schema / properties / workspacePath
      Removed value: -{
      -  "description": "[modify] Workspace path for finding file",
      -  "type": "string"
      -}
    • changedInput schema / properties / xmlContent / description
      Previous value: -"Complete XML to write verbatim (with overwrite=true rewrites an existing object; Azure/Linux: pass XML from action=generate)."New value: +"Complete XML written verbatim (+overwrite=true rewrites an object)."
  9. First observedv1.8.0

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say destructiveHint=true and openWorldHint=false; the description adds the consequential detail an agent actually needs: create is incomplete until isError=false, modify has no dry-run, delete un-registers from every .rnrproj, and undo via git checkout discards ALL uncommitted changes rather than just the last edit, with bespoke untracked/out-of-git semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the resource and a 'Choose an action' frame, then terse bullets per action; nearly every line carries an actionable constraint. It is dense and long, and the ⚠️/❌ failure notation is slightly cryptic, but there is little filler to cut.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter, six-action, nested-object tool with no output schema, the description covers each action's write/confirm/rollback behavior, platform constraints, the parameter-contract lookup indirection, and that per-operation results are returned. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 94% so the baseline is 3, but the description adds real meaning: it explains that per-operation contracts live behind get_knowledge(kind="op-spec") and must be nested into params vs properties, and it states the naming convention objectName="Base.PrefixExtension" with the model prefix auto-prepended.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the resource (D365FO AOT object files and VS projects) and then defines each of the six actions with a distinct verb+object: create writes a new object file, modify edits an existing one, delete removes XML and .rnrproj registrations, undo rolls back a filePath. An agent can select the right action without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing rules per action: 'generate → XML as TEXT only... Try create first. The rest need Windows', and confirm-first instructions for modify (applies immediately, no dry-run) and delete (IRREVERSIBLE). It also names the alternative knowledge path (get_knowledge op-spec lookup) for parameters rather than guessing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.