ALM X++ MCP Server
What this MCP does
Supports D365 Finance and Operations development with X++ and AOT search, code analysis, Azure DevOps workflows, telemetry queries, data management, and wiki operations.
Tools
Input schema
{'type': 'object', 'required': ['repositoryId', 'prId'], 'properties': {'prId': {'type': 'integer', 'description': 'Pull Request ID (integer), e.g. 42.'}, 'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}, 'maxFilesDeep': {'type': 'integer', 'default': 10, 'description': 'Max X++ files to fully analyse (default 10, max 20). Larger PRs get a summary for remaining files.'}, 'repositoryId': {'type': 'string', 'description': 'Git repository name or ID.'}, 'includeSource': {'type': 'boolean', 'default': True, 'description': 'Embed the un-merged SOURCE of each analysed file in the output so the reviewer can do a full semantic code review without a local git checkout. Default true.'}, 'includeWarnings': {'type': 'boolean', 'default': True, 'description': 'Include Warning-level violations in addition to Critical (default: true). Set false for Critical-only.'}, 'sourceCharsPerFile': {'type': 'integer', 'default': 8000, 'description': 'Max characters of source to embed per file when includeSource is true (1000-40000, default 8000). Larger files are truncated with a note.'}}}
Input schema
{'type': 'object', 'required': ['workItemId'], 'properties': {'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}, 'workItemId': {'type': 'integer', 'description': 'Work item ID (integer), e.g. 1234'}, 'maxComments': {'type': 'integer', 'default': 5, 'description': 'Number of recent comments to include (default 5, max 20). Use 3 for faster results.'}, 'focusObjects': {'type': ['string', 'null'], 'default': None, 'description': "Comma-separated D365 object names to force-include in KB analysis, e.g. 'SalesTable,CustTable'. Providing these speeds up analysis significantly."}, 'sourceBranch': {'type': 'string', 'default': 'main', 'description': "Git branch to read custom code from when no PR or commit is linked to the work item. Default: 'main'. Use this to point at the integration branch (e.g. 'develop', 'release/2025')."}, 'includeImages': {'type': 'boolean', 'default': False, 'description': 'Include image attachments as base64 data URIs for visual analysis by Copilot. Default: false. Set true only when screenshots are needed -- adds latency and token cost.'}}}
Input schema
{'type': 'object', 'required': ['workItemId'], 'properties': {'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}, 'areaPath': {'type': ['string', 'null'], 'default': None, 'description': "Optional: area path for the new task, e.g. 'MyProject\\SER'. Inherits from parent if omitted."}, 'assignTo': {'type': ['string', 'null'], 'default': None, 'description': "Optional: email address of the person to assign the task to, e.g. 'dev@company.com'."}, 'notifyList': {'type': ['string', 'null'], 'default': None, 'description': "Optional: comma-separated list of email addresses to notify (added to task description), e.g. 'lead@company.com,qa@company.com'."}, 'workItemId': {'type': 'integer', 'description': 'ID of the selected Work Item (parent, bug, issue, etc.) to base the task on.'}, 'description': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: additional description / acceptance criteria text to append to the task.'}, 'effortHours': {'type': ['integer', 'null'], 'default': None, 'description': 'Optional: estimated effort in hours (Original Estimate).'}, 'repositoryId': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Git repository name to create the branch in. If omitted, uses the first repository found.'}, 'sourceBranch': {'type': ['string', 'null'], 'default': None, 'description': "Optional: source branch to branch from (default: repo default branch, e.g. 'main')."}, 'iterationPath': {'type': ['string', 'null'], 'default': None, 'description': "Optional: iteration path for the new task, e.g. 'MyProject\\Sprint 5'. Inherits from parent if omitted."}}}
Input schema
{'type': 'object', 'required': ['workItemId'], 'properties': {'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}, 'workItemId': {'type': 'integer', 'description': 'Work Item ID to estimate, e.g. 6587.'}, 'focusObjects': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: comma-separated D365 object names to force-include in analysis (speeds up estimation).'}}}
Input schema
{'type': 'object', 'properties': {'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}, 'workItemId': {'type': ['integer', 'null'], 'default': None, 'description': 'Optional: Work Item ID to fetch the requirement from ADO (e.g. 6587). Leave empty to use requirementText.'}, 'requirements': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: comma-separated list of requirement sentences to analyse individually (overrides WI + requirementText).'}, 'requirementText': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: raw requirement text to analyse directly (when no WI ID is provided).'}}}
Input schema
{'type': 'object', 'properties': {'top': {'type': 'integer', 'default': 25, 'description': 'Max results to return (1-100, default 25).'}, 'author': {'type': ['string', 'null'], 'default': None, 'description': "Optional: filter by author display name (partial match), e.g. 'Alim'."}, 'status': {'type': 'string', 'default': 'Active', 'description': 'PR status filter: Active (default), Completed, Abandoned, All.'}, 'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}, 'repositoryId': {'type': ['string', 'null'], 'default': None, 'description': 'Git repository name or ID. If not known, leave empty to list all repos first.'}, 'targetBranch': {'type': ['string', 'null'], 'default': None, 'description': "Optional: filter by target branch, e.g. 'main', 'develop'."}}}
Input schema
{'type': 'object', 'required': ['workItemId', 'commentText'], 'properties': {'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}, 'workItemId': {'type': 'integer', 'description': 'Work item ID (integer), e.g. 1234'}, 'commentText': {'type': 'string', 'description': 'Markdown text to post. Use the ready-to-post block from `ado_analyze_workitem`.'}}}
Input schema
{'type': 'object', 'required': ['repositoryId', 'prId', 'commentText'], 'properties': {'prId': {'type': 'integer', 'description': 'Pull Request ID (integer), e.g. 42.'}, 'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}, 'filePath': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: file path for an inline comment. Leave empty for a top-level PR comment.'}, 'lineNumber': {'type': ['integer', 'null'], 'default': None, 'description': 'Optional: line number for an inline comment (used with filePath).'}, 'commentText': {'type': 'string', 'description': 'Markdown text to post. Use the ready-to-post block from `ado_analyze_pr_impact`.'}, 'repositoryId': {'type': 'string', 'description': 'Git repository name or ID.'}}}
Input schema
{'type': 'object', 'required': ['repositoryId'], 'properties': {'top': {'type': 'integer', 'default': 30, 'description': 'Maximum PRs to analyse (default: 30, max: 60).'}, 'status': {'type': 'string', 'default': 'Active', 'description': 'PR status filter: Active (default), Completed, Abandoned, All.'}, 'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}, 'repositoryId': {'type': 'string', 'description': 'Git repository name or ID.'}, 'targetBranch': {'type': ['string', 'null'], 'default': None, 'description': "Optional: filter by target branch, e.g. 'develop'."}}}
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'tag': {'type': ['string', 'null'], 'default': None, 'description': "Optional: filter by tag (partial match), e.g. 'D365' or 'hotfix'."}, 'query': {'type': 'string', 'description': "WIQL query, shortcut ('bugs', 'my bugs', 'recent', 'sprint'), title search, or '*' to use filters only."}, 'state': {'type': ['string', 'null'], 'default': None, 'description': "Optional: filter by state, e.g. 'Active', 'New', 'Resolved', 'Closed'."}, 'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}, 'areaPath': {'type': ['string', 'null'], 'default': None, 'description': "Optional: filter by area path (exact or under), e.g. 'MyProject\\SER'."}, 'priority': {'type': ['integer', 'null'], 'default': None, 'description': 'Optional: filter by priority level: 1 (Critical), 2 (High), 3 (Medium), 4 (Low).'}, 'assignedTo': {'type': ['string', 'null'], 'default': None, 'description': "Optional: filter by assignee display name or email (partial match), e.g. 'Alim' or 'alim@contoso.com'."}, 'whereClause': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: extra WHERE condition(s) for custom fields, appended with AND. Use the Field Reference Name, e.g. "[Custom.Extensionlifecyclestatus]=\'010. Registered\'". Multiple conditions: separate with \' AND \'.'}, 'changedSince': {'type': ['string', 'null'], 'default': None, 'description': "Optional: only return items changed since this date, e.g. '2025-01-01' or '7' (days ago)."}, 'workItemType': {'type': ['string', 'null'], 'default': None, 'description': "Optional: filter by work item type, e.g. 'Bug', 'Task', 'User Story', 'Feature'."}, 'iterationPath': {'type': ['string', 'null'], 'default': None, 'description': "Optional: filter by iteration/sprint path, e.g. 'MyProject\\Sprint 5'. Use 'current' for @CurrentIteration."}}}
Input schema
{'type': 'object', 'required': ['workItemId', 'fileName'], 'properties': {'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}, 'fileName': {'type': 'string', 'description': "Exact attachment file name as shown by ado_analyze_workitem, e.g. 'Field Mapping.xlsx'. Case-insensitive."}, 'sheetName': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: sheet name for .xlsx/.xlsm attachments. Defaults to the first sheet.'}, 'workItemId': {'type': 'integer', 'description': 'Work item ID, e.g. 1234'}}}
Input schema
{'type': 'object', 'required': ['prId'], 'properties': {'prId': {'type': 'integer', 'description': 'Pull Request ID to review.'}, 'project': {'type': ['string', 'null'], 'default': None, 'description': 'Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}, 'repositoryId': {'type': ['string', 'null'], 'default': None, 'description': 'Git repository name or ID.'}, 'maxDeepAnalysis': {'type': 'integer', 'default': 8, 'description': 'Max AOT objects to deeply analyse (1-20, default 8). Objects beyond this limit are listed but not deeply analysed.'}}}
Input schema
{'type': 'object', 'required': ['workItemId', 'fieldsJson'], 'properties': {'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name.'}, 'fieldsJson': {'type': 'string', 'description': 'JSON object mapping Field Reference Names to values. Examples: {"System.Description":"<p>New desc</p>"} or {"System.State":"Active","Custom.MyField":"value"}. Use HTML for Description/ReproSteps. Standard field refs: System.Title, System.State, System.AssignedTo (email), System.AreaPath, System.Tags, System.Description, Microsoft.VSTS.Common.Priority, Microsoft.VSTS.TCM.ReproSteps.'}, 'workItemId': {'type': 'integer', 'description': 'Work item ID to update.'}}}
Input schema
{'type': 'object', 'required': ['path', 'content'], 'properties': {'path': {'type': 'string', 'description': "Wiki page path, e.g. '/Home' or '/Architecture/Deployment'. Parent pages are created automatically if missing."}, 'content': {'type': 'string', 'description': 'Full markdown content for the page (replaces any existing content).'}, 'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}, 'wikiIdentifier': {'type': ['string', 'null'], 'default': None, 'description': "Wiki name or id. Omit to auto-resolve to the project's only/first wiki (call ado_wiki_list if there are several)."}}}
Input schema
{'type': 'object', 'required': ['path'], 'properties': {'path': {'type': 'string', 'description': "Wiki page path to delete, e.g. '/Architecture/Old-Design'."}, 'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}, 'wikiIdentifier': {'type': ['string', 'null'], 'default': None, 'description': "Wiki name or id. Omit to auto-resolve to the project's only/first wiki (call ado_wiki_list if there are several)."}}}
Input schema
{'type': 'object', 'required': ['path'], 'properties': {'path': {'type': 'string', 'description': "Wiki page path, e.g. '/Home' or '/Architecture/Deployment'."}, 'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}, 'wikiIdentifier': {'type': ['string', 'null'], 'default': None, 'description': "Wiki name or id. Omit to auto-resolve to the project's only/first wiki (call ado_wiki_list if there are several)."}, 'includeSubPages': {'type': 'boolean', 'default': False, 'description': 'Also list immediate sub-page paths under this page.'}}}
Input schema
{'type': 'object', 'properties': {'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}}}
Input schema
{'type': 'object', 'properties': {}}
Input schema
{'type': 'object', 'properties': {}}
Input schema
{'type': 'object', 'properties': {'top': {'type': 'integer', 'default': 15, 'description': 'Max rows per section (1-50). Default 15.'}, 'lookbackHours': {'type': 'integer', 'default': 24, 'description': 'How far back to analyze, in hours (1-720). Default 24.'}, 'minDurationMs': {'type': 'integer', 'default': 2000, 'description': "Minimum average duration (ms) for a custom event to be flagged as 'slow'. Default 2000."}}}
Input schema
{'type': 'object', 'required': ['kql'], 'properties': {'kql': {'type': 'string', 'description': 'KQL query text, e.g. "exceptions | where timestamp > ago(1h) | take 20". Do NOT include an explicit \'ago()\'/time-range filter for the primary time column -- use the lookbackHours parameter instead (applied as the query time range).'}, 'maxRows': {'type': 'integer', 'default': 100, 'description': 'Max rows to return (1-500). Default 100.'}, 'lookbackHours': {'type': 'integer', 'default': 24, 'description': 'How far back to query, in hours (1-720). Default 24.'}}}
Input schema
{'type': 'object', 'required': ['workspaceId', 'tenantId', 'clientId', 'clientSecret'], 'properties': {'clientId': {'type': 'string', 'description': 'App registration (client) id (GUID), granted Log Analytics Reader on the workspace.'}, 'tenantId': {'type': 'string', 'description': 'Entra (Azure AD) tenant id (GUID).'}, 'ttlMinutes': {'type': 'integer', 'default': 60, 'description': 'Minutes the connection stays cached for this session (1-480). Default 60.'}, 'workspaceId': {'type': 'string', 'description': 'Log Analytics workspace ID (GUID) behind the linked Application Insights resource.'}, 'clientSecret': {'type': 'string', 'description': 'App registration client secret. Encrypted in memory; never logged or persisted.'}}}
Input schema
{'type': 'object', 'required': ['queries'], 'properties': {'topK': {'type': 'integer', 'default': 5, 'description': 'Results per query (default: 5, max: 15)'}, 'queries': {'type': 'string', 'description': 'Newline-separated search queries (max 6). Example: "SalesTable\\nVendTable\\nvendor invoice posting"'}, 'topObjects': {'type': 'integer', 'default': 3, 'description': 'Full-chunk objects per query (default: 3, max: 8)'}}}
Input schema
{'type': 'object', 'required': ['objectNameA', 'objectNameB'], 'properties': {'objectNameA': {'type': 'string', 'description': "First object name, e.g. 'SalesTable'"}, 'objectNameB': {'type': 'string', 'description': "Second object name, e.g. 'PurchTable'"}}}
Input schema
{'type': 'object', 'required': ['aotType', 'name'], 'properties': {'name': {'type': 'string', 'description': "Object name -- must start with the ISV prefix, e.g. 'ALMMyTable', 'ABCSalesService'."}, 'aotType': {'type': 'string', 'description': "AOT type, e.g. 'AxTable', 'AxClass', 'AxForm', 'AxEnum', 'AxEdt', 'AxSecurityPrivilege', etc."}, 'options': {'type': ['object', 'null'], 'default': None, 'description': 'Key-value options dict. Provide only the keys relevant to your aotType.\nExample for AxTable:\n{\n "label": "My Table",\n "tableGroup": "Main",\n "fields": "MyId:String:MyIdEdt:My ID:mandatory,Description:String::Description",\n "indexes": "MyIdIdx:MyId:alternatekey",\n "relations": "CustTable:CustTable:CustAccount:AccountNum",\n "titleField1": "MyId",\n "generateFind": "true",\n "generateExist": "true",\n "generateValidateWrite": "true"\n}', 'additionalProperties': {'type': ['string', 'null']}}}}
Input schema
{'type': 'object', 'properties': {}}
Input schema
{'type': 'object', 'required': ['baseUrl', 'tenantId', 'clientId', 'clientSecret'], 'properties': {'baseUrl': {'type': 'string', 'description': 'F&O environment base URL, e.g. https://yourenv.cloudax.dynamics.com (https only).'}, 'clientId': {'type': 'string', 'description': 'App registration (client) id (GUID).'}, 'tenantId': {'type': 'string', 'description': 'Entra (Azure AD) tenant id (GUID).'}, 'ttlMinutes': {'type': 'integer', 'default': 60, 'description': 'Minutes the connection stays cached for this session (1-480). Default 60.'}, 'clientSecret': {'type': 'string', 'description': 'App registration client secret. Encrypted in memory; never logged or persisted.'}}}
Input schema
{'type': 'object', 'required': ['objectName'], 'properties': {'methodName': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: specific method to analyze. Analyzes all methods if not provided.'}, 'objectName': {'type': 'string', 'description': "Object name to analyze, e.g. 'SalesTable', 'CustInvoiceJour'"}}}
Input schema
{'type': 'object', 'required': ['action', 'path1'], 'properties': {'path1': {'type': 'string', 'description': "For 'compare': path to baseline cache file. For 'compare_caches': path to first cache. For 'save_baseline': output path for the baseline file."}, 'action': {'type': 'string', 'description': "Action: 'compare' (current vs baseline), 'compare_caches' (two cache files), or 'save_baseline' (save current state)"}, 'filterModel': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: filter to a specific model name'}, 'path2OrLabel': {'type': ['string', 'null'], 'default': None, 'description': "Optional: For 'compare_caches': path to second cache file. For 'compare'/'save_baseline': label for the baseline."}}}
Input schema
{'type': 'object', 'required': ['action'], 'properties': {'action': {'type': 'string', 'description': 'import | create_project | apply_filter | export | status'}, 'execute': {'type': 'boolean', 'default': True, 'description': 'import: execute after staging. Default true.'}, 'entities': {'type': ['string', 'null'], 'default': None, 'description': 'create_project: comma-separated DMF entity names.'}, 'filePath': {'type': ['string', 'null'], 'default': None, 'description': 'import: path to a .csv file on disk (or use csvContent).'}, 'fieldName': {'type': ['string', 'null'], 'default': None, 'description': "apply_filter: field to filter on, e.g. 'VendorAccountNumber'."}, 'overwrite': {'type': 'boolean', 'default': True, 'description': 'import: overwrite existing project definition. Default true.'}, 'reExecute': {'type': 'boolean', 'default': True, 'description': 'export: re-execute the project. Default true.'}, 'csvContent': {'type': ['string', 'null'], 'default': None, 'description': 'import: inline CSV content (or use filePath).'}, 'entityName': {'type': ['string', 'null'], 'default': None, 'description': "import: target DMF entity name, e.g. 'Customers V3'."}, 'sourceName': {'type': ['string', 'null'], 'default': None, 'description': 'create_project: existing DMF source data format name.'}, 'executionId': {'type': ['string', 'null'], 'default': None, 'description': 'status: the executionId returned by an import or export action.'}, 'filterValue': {'type': ['string', 'null'], 'default': None, 'description': 'apply_filter: value or wildcard to match.'}, 'legalEntity': {'type': ['string', 'null'], 'default': None, 'description': "import/export: legal entity / company id, e.g. 'USMF'."}, 'packageName': {'type': ['string', 'null'], 'default': None, 'description': 'export: optional package name.'}, 'projectName': {'type': ['string', 'null'], 'default': None, 'description': 'create_project/apply_filter: DMF project name.'}, 'aotEntityName': {'type': ['string', 'null'], 'default': None, 'description': "apply_filter: AOT entity name, e.g. 'VendVendorV2Entity'."}, 'entityRowName': {'type': ['string', 'null'], 'default': None, 'description': "apply_filter: entity row label, e.g. 'Vendors V2'."}, 'operationType': {'type': ['string', 'null'], 'default': None, 'description': "create_project: 'Export' (default) or 'Import'."}, 'definitionGroupId': {'type': ['string', 'null'], 'default': None, 'description': 'import/export: definitionGroupId (DMF project id).'}, 'pollTimeoutSeconds': {'type': 'integer', 'default': 300, 'description': 'import/export: max seconds to poll for completion. Default 300.'}}}
Input schema
{'type': 'object', 'required': ['projectName', 'entityRowName', 'aotEntityName', 'fieldName', 'filterValue'], 'properties': {'fieldName': {'type': 'string', 'description': "Entity field to filter on, e.g. 'VendorAccountNumber'."}, 'filterValue': {'type': 'string', 'description': "Value or wildcard to match, e.g. '1001' or '1001*'."}, 'projectName': {'type': 'string', 'description': 'Existing DMF project (definitionGroupId) in FO.'}, 'aotEntityName': {'type': 'string', 'description': "AOT entity name the kernel resolves, e.g. 'VendVendorV2Entity'."}, 'entityRowName': {'type': 'string', 'description': "Entity row label as shown on the project line, e.g. 'Vendors V2'."}}}
Input schema
{'type': 'object', 'required': ['projectName', 'entities', 'sourceName'], 'properties': {'entities': {'type': 'string', 'description': "Comma-separated DMF entity names, e.g. 'Customers V3,Released products V2'."}, 'sourceName': {'type': 'string', 'description': 'Existing DMF source data format name that defines the file format.'}, 'projectName': {'type': 'string', 'description': 'Name of the data project (definitionGroupId) to create or extend.'}, 'operationType': {'type': 'string', 'default': 'Export', 'description': "Operation type: 'Export' (default) or 'Import'."}}}
Input schema
{'type': 'object', 'required': ['definitionGroupId', 'legalEntity'], 'properties': {'reExecute': {'type': 'boolean', 'default': True, 'description': 'Re-execute the project (true) or reuse last staging (false). Default true.'}, 'legalEntity': {'type': 'string', 'description': "Legal entity / company id to export from, e.g. 'USMF'."}, 'packageName': {'type': ['string', 'null'], 'default': None, 'description': 'Optional package name. Default derived from the project id.'}, 'definitionGroupId': {'type': 'string', 'description': 'Existing DMF export project (definitionGroupId) in FO.'}, 'pollTimeoutSeconds': {'type': 'integer', 'default': 300, 'description': 'Max seconds to poll for completion. Default 300.'}}}
Input schema
{'type': 'object', 'required': ['executionId'], 'properties': {'executionId': {'type': 'string', 'description': 'The executionId returned by dmf_import_file or dmf_export_package.'}}}
Input schema
{'type': 'object', 'required': ['entityName', 'legalEntity'], 'properties': {'execute': {'type': 'boolean', 'default': True, 'description': 'Execute the import after staging (true) or stage only (false). Default true.'}, 'filePath': {'type': ['string', 'null'], 'default': None, 'description': 'Path to a .csv file on disk. Provide this OR csvContent.'}, 'overwrite': {'type': 'boolean', 'default': True, 'description': 'Overwrite an existing project definition with the same id. Default true.'}, 'csvContent': {'type': ['string', 'null'], 'default': None, 'description': 'Inline CSV content (header row + data). Provide this OR filePath.'}, 'entityName': {'type': 'string', 'description': "Target entity name as known to DMF (the entity, not the OData set), e.g. 'Customers V3'."}, 'legalEntity': {'type': 'string', 'description': "Legal entity / company id to import into, e.g. 'USMF'."}, 'definitionGroupId': {'type': ['string', 'null'], 'default': None, 'description': 'DMF definition group (data project) id. Default: auto-generated from entity + timestamp.'}, 'pollTimeoutSeconds': {'type': 'integer', 'default': 300, 'description': 'Max seconds to poll for completion before returning the executionId. Default 300.'}}}
Input schema
{'type': 'object', 'properties': {'format': {'type': 'string', 'default': 'csv', 'description': "Output format: 'csv' (default) or 'json'."}, 'filePath': {'type': ['string', 'null'], 'default': None, 'description': 'Local path to a .xlsx file. Provide one of sourceUrl/filePath/fileContentBase64.'}, 'sheetName': {'type': ['string', 'null'], 'default': None, 'description': 'Override the source sheet name. Empty = use mappingJson.sourceSheet, else the first sheet.'}, 'sourceUrl': {'type': ['string', 'null'], 'default': None, 'description': 'URL to the .xlsx (Blob/SharePoint SAS or Graph downloadUrl). Provide one of sourceUrl/filePath/fileContentBase64.'}, 'outputPath': {'type': ['string', 'null'], 'default': None, 'description': 'Optional file path to also write the full transformed result to.'}, 'mappingJson': {'type': ['string', 'null'], 'default': None, 'description': 'Mapping spec JSON (columnMappings, conditionalValues, staticValues, deduplicateOn, autoGeneratedFields, sourceSheet). Optional when listSheetsOnly=true.'}, 'listSheetsOnly': {'type': 'boolean', 'default': False, 'description': "If true, only list the workbook's sheet names (diagnostic). mappingJson not required."}, 'fileContentBase64': {'type': ['string', 'null'], 'default': None, 'description': 'Base64-encoded .xlsx content (inline upload, small files). Provide one of sourceUrl/filePath/fileContentBase64.'}}}
Input schema
{'type': 'object', 'required': ['objectName'], 'properties': {'objectName': {'type': 'string', 'description': "D365 object or workflow name, e.g. 'SalesTable', 'PurchTable', 'ALMDemandeAchatWorkflow'"}}}
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'topK': {'type': 'integer', 'default': 5, 'description': 'Number of results to return per server (default 5)'}, 'query': {'type': 'string', 'description': 'Natural language search query'}, 'peerApiKeys': {'type': ['string', 'null'], 'default': None, 'description': 'Optional MCP API keys for peer servers, comma-separated (same order as D365_FEDERATION_PEERS)'}}}
Input schema
{'type': 'object', 'required': ['methodKey'], 'properties': {'depth': {'type': 'integer', 'default': 2, 'description': 'Depth of caller chain to trace upward (default: 2, max: 4)'}, 'methodKey': {'type': 'string', 'description': "Object or method key. Format: 'ClassName.methodName' for methods, 'ClassName' for class-level queries."}, 'categories': {'type': 'string', 'default': 'all', 'description': "Categories to include: 'all' (default), or comma-separated subset: 'calls,inheritance,usage,interfaces,overrides,attributes'"}, 'maxResults': {'type': 'integer', 'default': 20, 'description': 'Maximum results per category (default: 20, max: 50)'}}}
Input schema
{'type': 'object', 'required': ['objectName'], 'properties': {'maxDepth': {'type': 'integer', 'default': 3, 'description': 'Max BFS depth (1-5). Default 3.'}, 'objectName': {'type': 'string', 'description': "Object or method to analyse, e.g. 'SalesLine' or 'SalesLine.insert'."}}}
Input schema
{'type': 'object', 'required': ['tableName'], 'properties': {'tableName': {'type': 'string', 'description': "Table name to find entities for, e.g. 'SalesTable', 'CustTable', 'VendInvoiceJour'"}, 'maxResults': {'type': 'integer', 'default': 15, 'description': 'Maximum results (default: 15, max: 30)'}, 'generateIfMissing': {'type': 'boolean', 'default': False, 'description': 'When true and no public entity is found, generates a new AxDataEntityView XML template for the table. Default: false.'}}}
Input schema
{'type': 'object', 'required': ['errorOrSymptom'], 'properties': {'audienceType': {'type': 'string', 'default': 'developer', 'description': "Audience type: 'developer' (default) for root-cause analysis, or 'business' for a plain-language explanation targeted at end users."}, 'errorOrSymptom': {'type': 'string', 'description': "Error message text or symptom description, e.g. 'update conflict', 'number sequence not set up', 'cannot create record outside tts'"}}}
Input schema
{'type': 'object', 'required': ['objectName'], 'properties': {'eventName': {'type': ['string', 'null'], 'default': None, 'description': "Optional: filter to a specific event name, e.g. 'OnInserted', 'OnUpdated', 'OnDeleted', 'OnValidatingWrite'."}, 'objectName': {'type': 'string', 'description': "Table or class name to find event handlers for, e.g. 'SalesTable', 'PurchTable'."}, 'handlerType': {'type': ['string', 'null'], 'default': None, 'description': "Optional: filter by handler type — 'DataEventHandler' or 'PrePostEventHandler'."}}}
Input schema
{'type': 'object', 'required': ['baseObjectName'], 'properties': {'baseObjectName': {'type': 'string', 'description': "The base object name, e.g. 'SalesTable', 'SalesFormLetter', 'VendTable'"}}}
Input schema
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': "The object or method name to find references to, e.g. 'SalesTable', 'validateWrite'"}, 'maxResults': {'type': 'integer', 'default': 500, 'description': 'Maximum referencing objects to return (default: 500, max: 2000)'}, 'locationsPerObject': {'type': 'integer', 'default': 6, 'description': 'Maximum number of call sites (methods/fields) to display per referencing object (default: 6, max: 20). Increase to see more usage locations.'}}}
Input schema
{'type': 'object', 'required': ['objectName'], 'properties': {'objectName': {'type': 'string', 'description': "The object name to find relationships for, e.g. 'SalesTable', 'VendInvoiceJour'"}}}
Input schema
{'type': 'object', 'required': ['source', 'target'], 'properties': {'source': {'type': 'string', 'description': "Start object name, e.g. 'SalesTable'"}, 'target': {'type': 'string', 'description': "Destination object name, e.g. 'CustTable'"}, 'maxDepth': {'type': 'integer', 'default': 4, 'description': 'Maximum hops to traverse (default: 4, max: 8). Higher = slower, more paths.'}, 'maxPaths': {'type': 'integer', 'default': 5, 'description': 'Maximum number of distinct paths to return (default: 5, max: 20).'}}}
Input schema
{'type': 'object', 'required': ['objectName'], 'properties': {'maxResults': {'type': 'integer', 'default': 15, 'description': 'Maximum results (default: 15, max: 30)'}, 'objectName': {'type': 'string', 'description': "Object name to find similar objects for, e.g. 'ALMERSftpConnectionTable', 'SalesTable'"}, 'filterAotType': {'type': ['string', 'null'], 'default': None, 'description': "Optional: filter to a specific AOT type, e.g. 'AxTable', 'AxClass'. If not set, uses the same type as the source object."}}}
Input schema
{'type': 'object', 'required': ['objectName'], 'properties': {'objectName': {'type': 'string', 'description': "Object or method to fix, e.g. 'SalesLine' or 'SalesLine.insert'."}, 'maxViolations': {'type': 'integer', 'default': 10, 'description': 'Max violations to process (1-20, default 10).'}, 'generatePatches': {'type': 'boolean', 'default': False, 'description': 'Generate X++ code patches via Ollama (requires OLLAMA_HOST). Default false.'}}}
Input schema
{'type': 'object', 'required': ['tableName', 'entityName'], 'properties': {'fields': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: specific fields to include (comma-separated). All fields if not specified.'}, 'isPublic': {'type': 'boolean', 'default': True, 'description': 'Whether the entity should be available via OData (default: true)'}, 'tableName': {'type': 'string', 'description': "Primary table name, e.g. 'SalesTable', 'CustTable'"}, 'entityName': {'type': 'string', 'description': "Desired entity name, e.g. 'ALMSalesOrderEntity'"}, 'joinTables': {'type': ['string', 'null'], 'default': None, 'description': "Optional: additional tables to join (comma-separated), e.g. 'CustTable,InventDim'"}, 'publicEntityName': {'type': ['string', 'null'], 'default': None, 'description': "Optional: OData collection name (e.g. 'SalesOrders'). Auto-generated if not provided."}}}
Input schema
{'type': 'object', 'required': ['diagramType', 'objectName'], 'properties': {'maxRelated': {'type': 'integer', 'default': 12, 'description': 'Optional: maximum related entities to show (default: 12, max: 20)'}, 'methodName': {'type': ['string', 'null'], 'default': None, 'description': 'Not used -- flow diagrams are disabled.'}, 'objectName': {'type': 'string', 'description': "Object name to diagram, e.g. 'SalesTable', 'SystemAdministrator'"}, 'diagramType': {'type': 'string', 'description': "Diagram type: 'er' (entity-relationship) or 'security' (security chain). 'flow' is disabled."}}}
Input schema
{'type': 'object', 'required': ['objectName'], 'properties': {'context': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: additional business context, requirements, or audience note to include in the header'}, 'language': {'type': 'string', 'default': 'en', 'description': "Optional: output language ('en', 'fr', 'nl', 'de'). Default: en"}, 'objectName': {'type': 'string', 'description': "D365 object or business process name, e.g. 'SalesTable', 'VendInvoiceInfoTable', 'ALMDemandeAchat'"}}}
Input schema
{'type': 'object', 'required': ['tableName'], 'properties': {'top': {'type': ['integer', 'null'], 'default': None, 'description': 'Optional: limit rows (1 = firstonly, N = top N)'}, 'fields': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: specific fields to select (comma-separated). All fields if not specified.'}, 'filters': {'type': ['string', 'null'], 'default': None, 'description': "Optional: WHERE filter expressions (comma-separated), e.g. 'CustAccount == 1001, SalesStatus == SalesStatus::Open'"}, 'orderBy': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: field to ORDER BY'}, 'tableName': {'type': 'string', 'description': "Primary table name, e.g. 'SalesTable', 'CustTable'"}, 'joinTables': {'type': ['string', 'null'], 'default': None, 'description': "Optional: tables to join (comma-separated), e.g. 'CustTable,SalesLine'"}, 'description': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: natural language description of the query. If provided, fields/joins/filters are auto-detected.'}, 'crossCompany': {'type': 'boolean', 'default': False, 'description': 'Whether to add crosscompany clause (default: false)'}}}
Input schema
{'type': 'object', 'required': ['v1', 'v2', 'customModelLabel', 'findingsJson', 'touchedAdded', 'touchedRemoved', 'touchedModified'], 'properties': {'v1': {'type': 'string', 'description': 'Older D365FO version (same value passed to prepare_release_note_context).'}, 'v2': {'type': 'string', 'description': 'Newer D365FO version (same value passed to prepare_release_note_context).'}, 'findingsJson': {'type': 'string', 'description': 'JSON array of your findings, one per object from prepare_release_note_context\'s \'objects\' array. Schema: [{"aotType":"...","objectName":"...","changeType":"Added|Removed|Modified","riskLevel":"Critical|Warning|Info|None","whatChanged":"...","documentedInMsLearn":true|false,"msLearnReference":"...","undocumentedReason":"...","regressionRisk":"...","opportunity":"...","recommendation":"..."}]'}, 'touchedAdded': {'type': 'integer', 'description': 'touchedAdded count returned by prepare_release_note_context.'}, 'touchedRemoved': {'type': 'integer', 'description': 'touchedRemoved count returned by prepare_release_note_context.'}, 'businessContext': {'type': ['string', 'null'], 'default': None, 'description': 'Optional business/functional context (same value passed to prepare_release_note_context), included in the Word document.'}, 'touchedModified': {'type': 'integer', 'description': 'touchedModified count returned by prepare_release_note_context.'}, 'customModelLabel': {'type': 'string', 'description': 'Custom model label(s) -- use the customModelLabel field returned by prepare_release_note_context.'}}}
Input schema
{'type': 'object', 'properties': {'filterModel': {'type': ['string', 'null'], 'default': None, 'description': "Optional: restrict the report to a single model name (e.g. 'ApplicationSuite', 'ContosoCustom'). Empty = all indexed models."}, 'maxRolesDetail': {'type': 'integer', 'default': 50, 'description': 'Maximum number of roles to expand in detail (default 50, max 200).'}}}
Input schema
{'type': 'object', 'required': ['objectName'], 'properties': {'methodName': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: specific method to test. If not provided, generates tests for all testable methods.'}, 'objectName': {'type': 'string', 'description': "Object name to generate tests for, e.g. 'ALMERSftpConnectionTable', 'ALMMyClass'"}, 'sampleValues': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: JSON object mapping field name to sample value used in each ARRANGE block, e.g. \'{"AccountNum":"C0001","Amount":1500.50}\'. Replaces the \'TODO: set up test data\' placeholders with concrete assignments.'}, 'testScenarios': {'type': ['string', 'null'], 'default': None, 'description': "Test scenarios provided by the functional consultant, e.g. 'Create a connection with valid SFTP host; Validate that empty host fails; Delete cleans up related records'. Separate scenarios with semicolons."}}}
Input schema
{'type': 'object', 'required': ['formPattern', 'formName'], 'properties': {'fields': {'type': ['string', 'null'], 'default': None, 'description': "Comma-separated field names to include in the grid/header, e.g. 'AccountNum,Name,Status'"}, 'formName': {'type': 'string', 'description': "PascalCase form name, e.g. 'ALMCustomerForm'"}, 'modelName': {'type': ['string', 'null'], 'default': None, 'description': "Model name for label prefix, e.g. 'ALMMyModel'"}, 'fieldTypes': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: comma-separated control type per field (aligned 1:1 with fields). Values: String, Int, Real, Date, DateTime, Enum, CheckBox, Reference. If omitted, all fields default to AxFormStringControl (current behavior).'}, 'formPattern': {'type': 'string', 'description': "Form pattern: 'SimpleList', 'DetailsMaster', 'DetailsTransaction', 'ListPage', 'Dialog', 'DropDialog', 'Workspace', 'Extension'"}, 'primaryTable': {'type': ['string', 'null'], 'default': None, 'description': "Primary/header table name, e.g. 'ALMCustomerTable'"}, 'secondaryTable': {'type': ['string', 'null'], 'default': None, 'description': "Secondary/joined table name (DetailsTransaction: lines table; ListPage: InnerJoin lookup table), e.g. 'SalesTable'"}}}
Input schema
{'type': 'object', 'required': ['templateType', 'objectName'], 'properties': {'methodName': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: specific method name for CoC or event handler templates'}, 'objectName': {'type': 'string', 'description': "The base object, e.g. 'SalesTable', 'VendInvoiceJour'"}, 'templateType': {'type': 'string', 'description': "Template type: 'coc', 'table_extension', 'event_handler', 'job', 'find_method'"}}}
Input schema
{'type': 'object', 'required': ['entityName'], 'properties': {'entityName': {'type': 'string', 'description': "Data entity name (AxDataEntityView), e.g. 'CustCustomerV3Entity', 'SalesOrderHeaderV2Entity'."}}}
Input schema
{'type': 'object', 'required': ['menuItemName'], 'properties': {'menuItemName': {'type': 'string', 'description': "Menu item name (without prefix), e.g. 'CustTable', 'SalesTableListPage', 'ALMMyMenuItem'."}, 'menuItemType': {'type': ['string', 'null'], 'default': None, 'description': "Optional: menu item type to disambiguate when multiple exist with the same name. 'Display', 'Action', or 'Output'. Default: try all."}}}
Input schema
{'type': 'object', 'required': ['objectName'], 'properties': {'aotType': {'type': ['string', 'null'], 'default': None, 'description': "Optional: AOT type to disambiguate, e.g. 'AxTable', 'AxClass', 'AxForm'."}, 'methodName': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: specific method name to include full body for.'}, 'objectName': {'type': 'string', 'description': "Exact object name, e.g. 'SalesTable', 'CustTable', 'VendInvoiceJour'"}, 'includeValidation': {'type': 'boolean', 'default': False, 'description': 'Include best-practice violations (default false -- adds latency for large objects).'}}}
Input schema
{'type': 'object', 'required': ['objectName'], 'properties': {'aotType': {'type': ['string', 'null'], 'default': None, 'description': "Optional: AOT type to disambiguate when several objects share the name, e.g. 'AxTable', 'AxForm', 'AxClass' (shorthand 'table'/'form'/'class'/'enum'/'edt'/'view'/'entity' also accepted). When omitted and the name is ambiguous, the primary type (Table/Class/Entity before Form) is returned with a note listing the others."}, 'methodName': {'type': ['string', 'null'], 'default': None, 'description': "Optional: specific method name to return full body for, e.g. 'send', 'run', 'validate'. When provided, returns the complete method source instead of the signature table."}, 'objectName': {'type': 'string', 'description': "The exact object name, e.g. 'SalesTable', 'VendInvoiceApprovalConfig', 'ALMAlternativeItemsTable'"}}}
Input schema
{'type': 'object', 'required': ['token'], 'properties': {'page': {'type': 'integer', 'default': 2, 'description': 'The page number to retrieve (the previous page footer tells you the next one). Defaults to 2.'}, 'token': {'type': 'string', 'description': "The pagination token from a paginated tool's footer, e.g. 'op_a1b2c3d4e5'."}}}
Input schema
{'type': 'object', 'required': ['objectName'], 'properties': {'maxEdges': {'type': 'integer', 'default': 200, 'description': 'Maximum edges to show per direction (default: 200, max: 500)'}, 'objectName': {'type': 'string', 'description': "The exact object name, e.g. 'SalesTable', 'CustTable', 'SalesFormLetter'"}, 'aotTypeFilter': {'type': ['string', 'null'], 'default': None, 'description': "Optional: filter edges by relation kind to reduce noise. Comma-separated. Examples: 'TableFK', 'DeleteAction', 'Extension', 'DataSource', 'Security'. Leave empty for all kinds."}}}
Input schema
{'type': 'object', 'required': ['objectName'], 'properties': {'maxRoles': {'type': 'integer', 'default': 30, 'description': 'Maximum roles to expand (default 30, max 100).'}, 'minGrant': {'type': 'string', 'default': 'Any', 'description': "Optional: minimum grant level to include in results. Values: 'Read', 'Update', 'Create', 'Delete', 'Correct', 'Any'. Default: 'Any'."}, 'objectName': {'type': 'string', 'description': "Object name to audit (form, table, menu item, service operation). Example: 'CustTable', 'SalesTableListPage', 'CustCustomerServiceMenu'."}}}
Input schema
{'type': 'object', 'properties': {}}
Output schema
{'type': 'object', 'required': ['result'], 'properties': {'result': {'type': 'string'}}}
Input schema
{'type': 'object', 'properties': {'customModelPath': {'type': ['string', 'null'], 'default': None, 'description': "Optional: path to the custom model directory (e.g. 'C:\\\\AOTExport\\\\MyModel'). Overrides the header and server-configured path."}}}
Input schema
{'type': 'object', 'properties': {'aotType': {'type': ['string', 'null'], 'default': None, 'description': 'Filter by AOT type: AxClass, AxTable, AxForm, AxView, AxEnum, AxEdt, AxDataEntityView, AxSecurityPrivilege, AxSecurityDuty, AxSecurityRole, AxQuery, AxReport, Documentation. Leave empty for all types.'}, 'modelName': {'type': ['string', 'null'], 'default': None, 'description': "Filter: matches BOTH package/module name (partial) AND object name (substring). Examples: 'ALM' (package), 'Cust' (any object containing 'Cust'), 'SalesTable'. Leave empty for all."}}}
Input schema
{'type': 'object', 'properties': {}}
Input schema
{'type': 'object', 'required': ['processName'], 'properties': {'processName': {'type': 'string', 'description': "Business process name (e.g. 'Order-to-Cash', 'Procure-to-Pay', 'sales', 'purchasing') or an object name to trace from. Use 'list' to see all known processes."}}}
Input schema
{'type': 'object', 'required': ['entitySet'], 'properties': {'filter': {'type': ['string', 'null'], 'default': None, 'description': 'Optional OData $filter expression.'}, 'format': {'type': 'string', 'default': 'csv', 'description': "Output format: 'csv' (default) or 'json'."}, 'select': {'type': ['string', 'null'], 'default': None, 'description': 'Optional $select (comma-separated fields). Empty = all fields.'}, 'maxRows': {'type': 'integer', 'default': 1000, 'description': 'Max rows to return (0/empty = no cap, follows all pages). Default 1000.'}, 'orderBy': {'type': ['string', 'null'], 'default': None, 'description': 'Optional $orderby expression.'}, 'entitySet': {'type': 'string', 'description': "OData public entity set name, e.g. 'CustomersV3', 'ReleasedProductsV2'."}, 'outputPath': {'type': ['string', 'null'], 'default': None, 'description': 'Optional file path to also write the full result to (e.g. C:\\temp\\export.csv).'}, 'crossCompany': {'type': 'boolean', 'default': False, 'description': 'Set true to query across all legal entities (adds cross-company=true).'}}}
Input schema
{'type': 'object', 'required': ['entitySet', 'rowsJson', 'keyFields'], 'properties': {'rowsJson': {'type': 'string', 'description': 'JSON array of row objects, e.g. [{"CustomerAccount":"C0001","Name":"Acme"}].'}, 'entitySet': {'type': 'string', 'description': "OData public entity set name, e.g. 'CustomersV3'."}, 'keyFields': {'type': 'string', 'description': "Comma-separated business key fields used to detect existing records, e.g. 'CustomerAccount' or 'dataAreaId,ItemNumber'."}, 'legalEntity': {'type': ['string', 'null'], 'default': None, 'description': 'Optional legal entity (dataAreaId) injected into each row when absent.'}, 'crossCompany': {'type': 'boolean', 'default': True, 'description': 'Set true to allow cross-company writes.'}}}
Input schema
{'type': 'object', 'required': ['goal'], 'properties': {'goal': {'type': 'string', 'description': "Natural language goal OR a JSON array of explicit steps. Examples: 'analyse WI #6587 and create a task', 'check best practices for ALMMyClass'."}, 'project': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: Azure DevOps project name. Falls back to DEVOPS_PROJECT env var.'}, 'assignTo': {'type': ['string', 'null'], 'default': None, 'description': "Optional: assignee email for task creation step, e.g. 'dev@company.com'."}, 'objectName': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: object name to use when goal references a D365 object (overrides name parsed from goal).'}, 'workItemId': {'type': ['integer', 'null'], 'default': None, 'description': "Optional: work item ID to use when goal references 'WI #N' (overrides ID parsed from goal text)."}, 'description': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: additional description text to pass to task creation step.'}}}
Input schema
{'type': 'object', 'properties': {'v1': {'type': ['string', 'null'], 'default': None, 'description': 'Older/baseline D365FO version to compare FROM, e.g. "10.0.2527.109". Omit to auto-fill from the caller\'s resolved client profile (see resolve_client_profile).'}, 'v2': {'type': ['string', 'null'], 'default': None, 'description': 'Newer D365FO version to compare TO, e.g. "10.0.2645.32". Omit to auto-fill from the caller\'s resolved client profile.'}, 'customModelIds': {'type': ['string', 'null'], 'default': None, 'description': "Comma-separated custom model id(s) from the Admin > Custom Models tab. Omit to auto-fill from the caller's resolved client profile. Pass several when a client combines their own extensions with a separate ISV vendor model."}, 'businessContext': {'type': ['string', 'null'], 'default': None, 'description': 'Optional free-text business/functional context about the client (modules used, key customizations, priorities) to sharpen the opportunity/regression assessment.'}}}
Input schema
{'type': 'object', 'required': ['objectName', 'intent'], 'properties': {'intent': {'type': 'string', 'description': "Plain-language goal of the customisation. Examples: 'add a status field', 'change validateWrite logic', 'react to record insert', 'replace the posting logic', 'override the find method', 'extend the enum'."}, 'objectName': {'type': 'string', 'description': "Target standard D365 object name, e.g. 'SalesTable', 'CustTable', 'SalesLineType', 'PurchFormLetter_Confirmation'."}}}
Input schema
{'type': 'object', 'properties': {}}
Input schema
{'type': 'object', 'properties': {}}
Input schema
{'type': 'object', 'properties': {'pat': {'type': ['string', 'null'], 'default': None, 'description': "Optional: Personal Access Token with Code (Read) permission for the target Azure DevOps org. Provide this when the server's built-in PAT lacks access (e.g. a different tenant, cross-org). Leave blank to reuse the session PAT or server env-var default."}}}
Input schema
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'Friendly client name, e.g. "Acme Corp".'}, 'customModelIds': {'type': ['string', 'null'], 'default': None, 'description': "Comma-separated custom model id(s) from the Custom Models tab -- the client's own extensions AND any separate ISV vendor models."}, 'targetVersionTag': {'type': ['string', 'null'], 'default': None, 'description': 'The version being evaluated for upgrade, e.g. "10.0.2645.32".'}, 'currentVersionTag': {'type': ['string', 'null'], 'default': None, 'description': 'The client\'s current live D365FO version tag, e.g. "10.0.2527.109".'}}}
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': 'Natural-language search query.'}, 'maxResults': {'type': 'integer', 'default': 8, 'description': 'Max distinct documents to return (1-20). Default 8.'}, 'includeImages': {'type': 'boolean', 'default': False, 'description': 'Attach the images embedded in the matched documents (Word only). Off by default because each picture is inlined as base64 and is far larger than the text around it.'}}}
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'topK': {'type': 'integer', 'default': 10, 'description': 'Maximum number of results to return (default: 10, max: 50)'}, 'query': {'type': 'string', 'description': "Natural language search query. Examples: 'vendor invoice approval', 'tables in ALM', 'SalesTable fields', 'security privileges for purchasing'"}, 'scope': {'type': ['string', 'null'], 'default': None, 'description': "Optional routing override: 'auto' (default — session/custom first, standard fallback), 'custom' (session only — fails over to standard if nothing found), 'standard' (skip session entirely), 'both' (federated, no priority)."}, 'domain': {'type': ['string', 'null'], 'default': None, 'description': "Optional: filter results to a specific AOT type. Examples: 'AxTable', 'AxClass', 'AxForm', 'AxEnum'. Leave empty for all types."}, 'topObjects': {'type': 'integer', 'default': 5, 'description': 'Number of top-scoring objects whose ALL chunks are returned (default: 5, max: 20). Increase to broaden coverage, decrease for tighter focus.'}}}
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': "Text to search for (e.g. 'Sales order', 'Invoice amount') or a label ID (e.g. '@SYS12345', '@AccountsReceivable:CustInvoice')"}, 'language': {'type': ['string', 'null'], 'default': None, 'description': "Optional: filter by language code (e.g. 'en-US', 'fr', 'de', 'nl'). Leave empty for all languages."}, 'maxResults': {'type': 'integer', 'default': 20, 'description': 'Maximum results (default: 20, max: 50)'}}}
Input schema
{'type': 'object', 'required': ['fieldName', 'purpose'], 'properties': {'topK': {'type': 'integer', 'default': 8, 'description': 'Number of EDT candidates to return (default: 8, max: 20)'}, 'purpose': {'type': 'string', 'description': "Purpose of the field in plain language, e.g. 'customer account number', 'approval status enum', 'invoice amount in transaction currency'"}, 'baseType': {'type': ['string', 'null'], 'default': None, 'description': "Optional: D365 primitive base type to filter by, e.g. 'str', 'int64', 'real', 'date', 'enum'. Leave empty to search all types."}, 'fieldName': {'type': 'string', 'description': "Field name or concept, e.g. 'AccountNum', 'vendorId', 'itemCode', 'approvalStatus'"}}}
Input schema
{'type': 'object', 'required': ['objectName'], 'properties': {'methodName': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: specific method to analyze.'}, 'objectName': {'type': 'string', 'description': "Object name to analyze, e.g. 'ALMMyClass', 'ALMMyTable'"}}}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The technical text to summarize/explain -- typically the raw output of another tool call.'}, 'audience': {'type': 'string', 'default': 'business-analyst', 'description': "Target audience: 'executive', 'business-analyst', or 'developer'. Default 'business-analyst'."}}}
Input schema
{'type': 'object', 'required': ['tableName', 'fieldName'], 'properties': {'fieldName': {'type': 'string', 'description': "Field or property name, e.g. 'CreditMax'."}, 'tableName': {'type': 'string', 'description': "Table or class name, e.g. 'CustTable'."}, 'maxPerCategory': {'type': 'integer', 'default': 15, 'description': 'Max results per category (default 15).'}}}
Input schema
{'type': 'object', 'required': ['roleName'], 'properties': {'roleName': {'type': 'string', 'description': "The exact security role name, e.g. 'SystemAdministrator', 'AccountsPayablePaymentsClerk', 'ALMMyCustomRole'"}, 'maxEntryPoints': {'type': 'integer', 'default': 20, 'description': 'Maximum entry points to show per privilege (default: 20, max: 100)'}}}
Input schema
{'type': 'object', 'required': ['securityObjectName'], 'properties': {'businessLanguage': {'type': 'boolean', 'default': False, 'description': 'When true, explains the role in plain business language (capabilities list) instead of the technical Role->Duty->Privilege chain. Default: false.'}, 'securityObjectName': {'type': 'string', 'description': "Security object name, e.g. 'SystemAdministrator', 'VendInvoiceApprovalConfig'"}}}
Input schema
{'type': 'object', 'required': ['objectName'], 'properties': {'methodName': {'type': ['string', 'null'], 'default': None, 'description': 'Optional: specific method to validate. Validates all methods if not provided.'}, 'objectName': {'type': 'string', 'description': "Object name to validate, e.g. 'SalesTable', 'CustInvoiceJour'"}, 'minSeverity': {'type': 'string', 'default': 'Warning', 'description': "Minimum severity: 'Info', 'Warning', 'Critical' (default: 'Warning')"}}}
Input schema
{'type': 'object', 'required': ['proposedName', 'aotType', 'isvPrefix'], 'properties': {'aotType': {'type': 'string', 'description': 'AOT type the name will live in: AxClass, AxTable, AxForm, AxEdt, AxEnum, AxTableExtension, AxFormExtension, AxClassExtension, etc.'}, 'isvPrefix': {'type': 'string', 'description': "ISV prefix you must use, e.g. 'ALM'. Required for all custom objects."}, 'proposedName': {'type': 'string', 'description': "Proposed name, e.g. 'ALMSalesLine.Extension', 'ALMCustomerTable', 'SalesLineALM_Extension'."}}}
Recent tool changes
Similar MCP servers
Enhanciar — company brain
Searches a company's ingested code, Slack and documentation, provides cited answers and dependency impact analysis, and proposes …
GQLTeam (Dan Podina)
Exposes a software architect's consulting services, case studies, articles, ventures, profile, and contact or booking details.
Stable Baseline
Manages company documents, knowledge graphs, whiteboards, projects, plans, tasks, teams, and improvement workflows.
shiply
Publishes and manages web applications with SQL databases, serverless functions, domains, email tests, client intake, contracts, …
cypher-mcp
Provides named Cypher graph queries and code-orientation tools for tracing capabilities, symbols, invariants, provenance, changes…
mcp
Manages Nestr workspaces, roles, circles, tensions, governance proposals, comments, daily plans, graph relationships, agents, and…
canton-ccpedia
Searches and explains Canton Network and Daml documentation, governance proposals, forums, code examples, APIs, releases, and eco…
Kaiku
Manages team issues, comments, attachments, projects, wiki pages, and related development workflows.