Skip to main content
Glama

create_aot_object

Read-only
Generate a complete, ready-to-deploy D365 F&O AOT XML scaffold for any object type.
Returns the XML + the correct file path inside the model -- the calling client (VS Extension,
Cursor, Copilot Chat) is responsible for writing the result to disk. This tool is fully
read-only on the server: it never writes to the filesystem, never mutates external state,
and is safe to expose from the cloud MCP.
When the knowledge base is available the scaffold is auto-enriched with real metadata
(existing field EDTs, related-table validation, auto-detected grid fields, etc.).

  Supported aotType values ----------------------------------------------
AxTable       . AxClass     . AxForm       . AxEnum
    AxEdt      . AxView            . AxQuery           . AxDataEntityView
    AxMenuItemDisplay . AxMenuItemAction  . AxMenuItemOutput
    AxSecurityPrivilege . AxSecurityDuty . AxSecurityRole . AxSecurityPolicy
    AxReport          . AxFormExtension  . AxTableExtension  . AxClassExtension
    AxEnumExtension   . AxEdtExtension   . AxQueryExtension  . AxWorkflow

     Common options (all types) --------------------------------------------
label - human-readable label shown in the UI

developerDoc - developer documentation string (tables/classes)

     AxTable --------------------------------------------------------------------------
    tableGroup     - Main | WorksheetHeader | WorksheetLine | Transaction | Parameter | Group
    cacheLookup  - None | Found | FoundAndEmpty | NotInTTS | EntireTable
  fields         - csv  "Name:Type[:EDT[:Label[:mandatory]]]"

Types: String Int Int64 Real Date DateTime Enum Container Guid indexes - csv "IndexName:field1+field2[:unique|:alternatekey]" relations - csv "RelName:RelatedTable:Field:RelatedField" titleField1/2 - field names for the lookup title createdBy / modifiedBy - true | false (default true) generateFind / generateExist / generateValidateWrite / generateInitValue - true | false

AxClass -------------------------------------------------------------------------- extends - base class name implements - csv of interfaces abstract / final - true | false pattern - SysOperation | RunBase | Service | EventHandler | none (default) methods - csv of additional method names to stub

     AxForm ----------------------------------------------------------------------------
    dataSourceTable - primary data-source table name
    pattern  - SimpleList | DetailsTransaction | DetailsMaster | ListPage | Dialog
    gridFields      - csv of field names for the grid (auto-detected from KB if omitted)
    detailFields    - csv of field names for the detail group
  methods      - csv of form method names to stub

     AxEnum ----------------------------------------------------------------------------
    style - Ordinary | ComboBox | Radio | CheckBox

values - csv "Name[:Label[:intValue]]" e.g. "Draft:Draft:0,Posted:Posted:1"

     AxEdt -----------------------------------------------------------------------------
    extends        - base EDT (e.g. Name, Description, Amount)

stringSize - integer enumType - base enum for enum EDTs referenceTable - table that provides the lookup

     AxView ----------------------------------------------------------------------------
    dataSources    - csv  "Table[:Alias]"
    fields    - csv  "DataSource.Field[:Alias]"

     AxQuery -------------------------------------------------------------------------
dataSources    - csv  "Table[:Alias[:JoinMode]]"

     AxDataEntityView -----------------------------------------------------------
    primaryTable    - root table

joinTables - csv of additional tables publicEntityName - OData collection name (pluralised entity name) isPublic - true | false (default true) fields - csv "Table.Field[:PublicName]" (auto-detected from KB if omitted)

     AxMenuItemDisplay / Action / Output ------------------------------------------
    objectName     - target form / class / report name
    runOn       - Server | Client | Called from  (default Server)

helpText - tooltip string

     AxSecurityPrivilege -----------------------------------------------------------
    entryPoints    - csv  "MenuItemName[:ObjectType[:Grant]]"
    ObjectType: MenuItemDisplay | MenuItemAction | MenuItemOutput

Grant: NoAccess | Read | Update | Create | Delete

AxSecurityDuty --------------------------------------------------------------------- privileges - csv of privilege names to include

AxSecurityRole ---------------------------------------------------------------------- duties - csv of duty names privileges - csv of privilege names (direct assignment -- avoid if possible)

     AxReport -------------------------------------------------------------------------

query- AxQuery name driving the dataset dataSourceTable - alternative: direct table name (if no query)

   AxFormExtension -----------------------------------------------------------------
    baseForm   - name of the standard form to extend
    fields  - csv  "ControlName[:EDT]"

AxTableExtension --------------------------------------------------------------------- baseTable - name of the standard table to extend fields - csv "Name:Type[:EDT[:Label[:mandatory]]]" indexes - csv "IndexName:field1+field2[:unique|:alternatekey]"

AxClassExtension (Chain of Command) ------------------------------------------- baseClass - name of the standard class/table/form to wrap baseType - class | table | form (default class) methods - csv of method names to wrap with CoC

     AxEnumExtension ---------------------------------------------------------------
    baseEnum       - name of the standard enum to extend
    values         - csv  "Name[:Label[:intValue]]"  IMPORTANT: start from value 10 or higher
                     to avoid conflicts with standard values (D365 extension contract)

     AxEdtExtension ----------------------------------------------------------------
    baseEdt        - name of the standard EDT to extend
    stringSize     - new StringSize (must be <= base EDT limit; omit to inherit)
    label          - override label for this extension

     AxQueryExtension --------------------------------------------------------------
    baseQuery      - name of the standard query to extend
    dataSources    - csv  "Table[:Alias[:JoinMode]]"  (add extra data sources)
    ranges         - csv  "DataSource.Field:value"  (add filter ranges)

     AxSecurityPolicy  (Row Level Security) ----------------------------------------
    constrainedTable - primary table this policy restricts
    query           - AxQuery name that defines the allowed rows
    operation       - Select | Update | Create | Delete | Insert (default Select)
    enabled         - true | false  (default true)

     AxWorkflow ---------------------------------------------------------------------
    category       - category name (links to a module/table)
    documentTable  - table the workflow operates on
    documentMenuItem - menu item that opens the record

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesObject name -- must start with the ISV prefix, e.g. 'ALMMyTable', 'ABCSalesService'.
aotTypeYesAOT type, e.g. 'AxTable', 'AxClass', 'AxForm', 'AxEnum', 'AxEdt', 'AxSecurityPrivilege', etc.
optionsNoKey-value options dict. Provide only the keys relevant to your aotType. Example for AxTable: { "label": "My Table", "tableGroup": "Main", "fields": "MyId:String:MyIdEdt:My ID:mandatory,Description:String::Description", "indexes": "MyIdIdx:MyId:alternatekey", "relations": "CustTable:CustTable:CustAccount:AccountNum", "titleField1": "MyId", "generateFind": "true", "generateExist": "true", "generateValidateWrite": "true" }

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description explicitly states 'fully read-only on the server: it never writes to the filesystem, never mutates external state, and is safe to expose from the cloud MCP.' This goes beyond the annotation by explaining side effects, caller responsibility for writing to disk, and the returned artifact. No contradiction exists between the annotations and prose.

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

Conciseness5/5

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

The description is long, but this is justified by the polymorphic nature of the tool with 20+ supported aotTypes. It front-loads the core result and read-only guarantee, then organizes options in clear type-specific sections. The structure lets an agent find exactly the relevant option block without unneeded prose.

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?

Given the tool's complexity, the description covers what an agent needs to invoke it correctly: supported aotTypes, per-type option syntax, defaults, constraints, and return shape ('XML + the correct file path'). The output schema is absent, but the description supplies the essential output contract. No critical invocation requirement appears missing.

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

Parameters5/5

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

Schema coverage is 100%, and the description adds substantial semantics: exhaustive aotType-specific options, CSV syntax, defaults, enum values, constraints (e.g., extension values starting at 10), and examples. The description explains the meaning of option keys far beyond the schema's generic 'Key-value options dict'.

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?

The description opens with a specific verb and resource: 'Generate a complete, ready-to-deploy D365 F&O AOT XML scaffold for any object type.' It clearly states what the tool does and distinguishes it from the broad sibling set through the unique 'AOT XML scaffold' scope. It also clarifies the boundary with 'the calling client is responsible for writing the result to disk.'

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

Usage Guidelines4/5

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

The intended usage is clear: when an agent needs a ready-to-deploy D365 F&O AOT scaffold for a supported aotType. The description does not explicitly name alternatives or formulate when-not-to-use conditions, but the highly specific purpose makes the usage context obvious. A fully explicit routing to sibling tools would be needed for a 5.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.1/5.0
Disambiguation4/5

Most tools have distinct purposes and clear triggers, reducing ambiguity. For example, PR-related tools are separated into analysis, listing, commenting, and dependency mapping. However, some overlap exists between find_references, find_extensions, and find_callers, which could confuse an agent without careful descriptions.

Naming Consistency4/5

Tool names follow a consistent snake_case pattern with verb_noun structure within subgroups (e.g., ado_*, find_*, search_*, generate_*). There is no mixing of camelCase or other styles, though the variety of prefixes slightly reduces predictability.

Tool Count3/5

With 38 tools, the server feels slightly over-scoped for its domain. While each tool has a specific function, the number is high compared to typical well-scoped servers (10-15 tools). Some tools like find_references and find_callers could be consolidated.

Completeness4/5

The tool set covers a broad range of D365 F&O development and DevOps tasks, including code search, analysis, security, performance, upgrades, and work item management. Minor gaps exist, such as the absence of direct object modification or batch job management, but the core workflows are well covered.