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)."