AgentStack
MCP verified MIT Self-run

Mcp Xpp

mcp-ccampora-mcp-xpp · by ccampora

Experimental MCP server for Dynamics 365 F&O X++ development. Provides object creation, modification, and codebase navigation through the Model Context Protocol. Includes VS2022 service integration for D365 object handling.

No reviews yet
0 installs
7 views
0.0% view→install

Install

$ agentstack add mcp-ccampora-mcp-xpp

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Mcp Xpp? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

MCP X++ Server

A Model Context Protocol (MCP) server for Microsoft Dynamics 365 Finance & Operations development. This tool enables D365 object creation, modification, and analysis through the MCP standard, allowing integration with various development environments.

Date: September 18, 2025 Status: Functional with VS2022 service integration and enhanced form creation

Recent Updates ✨

September 19, 2025 - Safe Object Deletion Feature:

  • 🗑️ NEW deletexppobject Tool: Safe D365 object deletion with dependency validation and cascade support
  • 🛡️ Dependency Protection: Prevents deletion if other objects depend on target, avoiding breaking changes
  • 🔄 Cache Consistency: Automatic search index updates after successful deletions
  • High Performance: Direct metadata provider integration with ISingleKeyedMetadataProvider.Delete
  • 🌲 Cascade Deletion: Optional deletion of child objects (form parts, table relations, etc.)
  • Comprehensive Testing: Full create/delete cycle validation across object types

September 18, 2025 - Array Modifications & Form Creation Enhancements:

  • 🚀 NEW Array-Only Modifications: execute_object_modification now exclusively uses batch format for consistent operations
  • 🔄 Enforced Bulk Processing: Single operations use array with one element - no more consecutive separate calls
  • 📊 Enhanced Response Tracking: Per-operation success/failure reporting with detailed timing and error messages
  • 📋 Best Practice Documentation: Clear guidance to group all modifications for same object into single call
  • 🎯 NEW create_form Tool: Specialized form creation with pattern support and datasource integration
  • 🔧 DetailsMaster Pattern Fixed: Resolved validation issues through intelligent field control creation
  • 🗄️ Enhanced DataSource Support: Flexible datasource handling (arrays, strings, comma-separated)
  • 📋 Pattern Discovery: 36 filtered form patterns with descriptions and requirements
  • Pattern Validation: Automatic field control creation for patterns requiring them

Overview

This MCP server provides D365 F&O development capabilities including:

  • Object Creation: Support for D365 classes, tables, forms, enums, and 544+ other object types
  • Form Creation: ✨ Enhanced - Specialized form creation with pattern validation and datasource integration
  • Object Deletion: ✨ NEW - Safe object deletion with dependency validation and cascade support
  • Object Modification: Add methods, fields, and other components to existing objects
  • Object Inspection: Analyze D365 objects and extract X++ source code
  • Codebase Search: Browse and search through D365 codebases with pattern matching
  • MCP Protocol: Compatible with Claude Desktop, VS Code, and other MCP clients

Architecture

The system consists of two main components communicating through Windows Named Pipes:

MCP X++ Server (Node.js/TypeScript)

  • Implements the Model Context Protocol (STDIO)
  • Handles object creation, modification, and search operations
  • Provides file browsing and codebase indexing
  • Compatible with MCP clients like Claude Desktop and VS Code

D365 Metadata Service (C# .NET 4.8)

  • Integrates with Microsoft's D365 assemblies
  • Handles object creation and modification through VS2022 APIs
  • Provides dynamic reflection for runtime object discovery
  • Communicates via Named Pipe: mcp-xpp-d365-service

The architecture enables D365 development from various MCP-compatible clients while maintaining compatibility with existing D365 development workflows.

Available Tools

The server provides 10 specialized tools for D365 development:

  1. createxppobject - Create D365 objects (classes, tables, enums, etc.) - Note: Use create_form for forms
  2. create_form - ✨ NEW - Specialized form creation with pattern support and datasource integration
  3. deletexppobject - ✨ NEW - Safe D365 object deletion with dependency validation and cache consistency
  4. executeobjectmodification - ✨ ENHANCED - Array-based object modification with batch processing - BEST PRACTICE: Group all modifications for same object
  5. discovermodificationcapabilities - Explore available modification methods
  6. findxppobject - Find specific objects by name/type
  7. searchobjectspattern - Pattern search with wildcard support
  8. inspectxppobject - Object analysis with X++ source code extraction
  9. getcurrentconfig - System configuration and status
  10. buildobjectindex - Index management for search performance

Prerequisites

  • Visual Studio 2022 (Community, Professional, or Enterprise)
  • Dynamics 365 Development Tools for Visual Studio 2022
  • Node.js (latest LTS version recommended)
  • .NET Framework 4.8 (typically included with Windows)

Installation

  1. Clone the repository
  2. Install Node.js dependencies: npm install
  3. Run setup to configure VS2022 integration: .\tools\build-and-run.ps1 -Action setup
  4. Build the project: .\tools\build-and-run.ps1 -Action build

Usage

Starting the Server

Run the MCP server using:

node build/index.js

The server automatically detects D365 paths from your VS2022 installation. For manual configuration, use:

node build/index.js --xpp-path "C:\path\to\PackagesLocalDirectory"

MCP Client Configuration

VS Code

Configure in .vscode/mcp.json:

{
  "servers": {
    "mcp-xpp-server": {
      "command": "node",
      "args": ["./build/index.js"],
      "cwd": "${workspaceFolder}",
      "type": "stdio"
    }
  }
}
Claude Desktop

Add to Claude Desktop configuration file:

{
  "mcpServers": {
    "mcp-xpp-server": {
      "command": "node",
      "args": ["path/to/mcp_xpp/build/index.js"]
    }
  }
}

Tool Reference

Object Creation

create_xpp_object

Creates D365 F&O objects using VS2022 service integration.

⚠️ Important: For creating forms, use the dedicated create_form tool instead as it provides specialized pattern support and datasource integration.

Parameters:

  • objectName (string) - Name of the D365 object
  • objectType (string) - Object type (AxClass, AxTable, AxEnum, etc.) - Excludes AxForm
  • layer (string, optional) - Application layer (usr, cus, var)
  • outputPath (string, optional) - Output directory (default: "Models")
  • publisher (string, optional) - Company name (default: "YourCompany")
  • version (string, optional) - Version number (default: "1.0.0.0")
  • dependencies (array, optional) - Model dependencies
  • properties (object, optional) - Object-specific configuration

Example:

create_xpp_object({
  "objectName": "MyCustomClass",
  "objectType": "AxClass",
  "layer": "usr"
})
create_formNEW

Specialized tool for creating D365 forms with advanced pattern support and datasource integration. This tool combines form creation and pattern discovery in one interface.

Parameters:

  • mode (string, required) - Operation mode:
  • "create" - Create a new form with patterns and datasources
  • "list_patterns" - Discover available D365 form patterns
  • formName (string, optional) - Form name (required when mode='create')
  • patternName (string, optional) - D365 form pattern to apply (e.g., 'SimpleListDetails', 'DetailsMaster', 'Dialog')
  • patternVersion (string, optional) - Pattern version (default: 'UX7 1.0')
  • dataSources (array|string, optional) - Table names for form datasources
  • modelName (string, optional) - D365 model/package name (default: 'ApplicationSuite')

Key Features:

  • 🎯 Pattern-Aware: Automatically adds field controls when patterns require them (e.g., DetailsMaster)
  • 🗄️ Flexible DataSources: Supports arrays, single strings, or comma-separated strings
  • 🔍 Pattern Discovery: Lists all 36+ available D365 form patterns with descriptions
  • Enhanced Validation: Resolves pattern validation issues through intelligent field control creation

Examples:

// Discover available patterns
create_form({"mode": "list_patterns"})

// Create simple list form with datasource
create_form({
  "mode": "create",
  "formName": "MyCustomerListForm", 
  "patternName": "SimpleListDetails",
  "dataSources": ["CustTable"]
})

// Create DetailsMaster form with multiple datasources
create_form({
  "mode": "create",
  "formName": "MySalesOrderForm",
  "patternName": "DetailsMaster",
  "patternVersion": "UX7 1.0", 
  "dataSources": ["SalesTable", "SalesLine", "CustTable"],
  "modelName": "MyCustomModel"
})

// Create dialog form without datasources
create_form({
  "mode": "create",
  "formName": "MyConfirmationDialog",
  "patternName": "Dialog"
})

Technical Notes:

  • Patterns like DetailsMaster, SimpleListDetails, and ListPage automatically get enhanced with field controls (RecId, Name, Description, Code) when datasources are provided
  • Pattern validation has been fixed - forms can be created with or without datasources depending on pattern requirements
  • The tool uses direct VS2022 service integration for optimal D365 compatibility
delete_xpp_objectNEW

Safely deletes D365 F&O objects with comprehensive dependency validation and cache consistency. This tool prevents breaking changes by validating dependencies before deletion.

Parameters:

  • objectName (string, required) - Name of the D365 object to delete
  • objectType (string, required) - D365 object type (AxClass, AxTable, AxForm, AxEnum, etc.)
  • cascadeDelete (boolean, optional) - Delete dependent objects too (default: false)

Key Features:

  • 🛡️ Dependency Validation: Prevents deletion if other objects depend on the target
  • 🗑️ Safe Deletion: Uses D365's ISingleKeyedMetadataProvider.Delete for proper cleanup
  • 🔄 Cache Consistency: Automatically updates search index after successful deletion
  • Fast Performance: Direct metadata provider integration for optimal speed
  • 🌲 Cascade Support: Optional deletion of child objects (forms with parts/controls, etc.)

Examples:

// Delete a custom class
delete_xpp_object({
  "objectName": "MyCustomClass",
  "objectType": "AxClass"
})

// Delete a table with cascade (removes dependent field groups, relations, etc.)
delete_xpp_object({
  "objectName": "MyTestTable", 
  "objectType": "AxTable",
  "cascadeDelete": true
})

// Delete a form (will fail if dependencies exist without cascade)
delete_xpp_object({
  "objectName": "MyCustomForm",
  "objectType": "AxForm"
})

Response Format:

{
  "success": true,
  "message": "Successfully deleted object: MyCustomClass (AxClass)",
  "objectName": "MyCustomClass",
  "objectType": "AxClass",
  "cascadeDelete": false,
  "dependenciesRemoved": [],
  "cacheUpdate": "Success",
  "performance": "156ms"
}

⚠️ Safety Notes:

  • HIGH RISK OPERATION: Deletion is permanent and cannot be undone
  • Always verify dependencies with find_xpp_object before deletion
  • Use cascadeDelete: false (default) for maximum safety
  • Test deletions in development environments first
  • Tool will fail safely if dependencies exist without cascade flag
  • Cache updates ensure immediate search consistency after deletion

Common Object Types:

  • AxClass - X++ classes and business logic
  • AxTable - Data tables and schema
  • AxForm - User interface forms
  • AxEnum - Enumerations and value lists
  • AxEdt - Extended data types
  • AxView - Database views
  • AxQuery - Data queries
  • AxReport - SSRS reports

Object Discovery

find_xpp_object

Locates X++ objects by name with optional filtering.

Parameters:

  • objectName (string, required) - Name of the X++ object
  • objectType (string, optional) - Filter by object type
  • model (string, optional) - Filter by D365 model/package name
search_objects_pattern

Searches D365 objects using wildcard patterns.

Parameters:

  • pattern (string, required) - Search pattern with wildcards (*, ?)
  • objectType (string, optional) - Filter by object type
  • model (string, optional) - Filter by D365 model/package name
  • limit (number, optional) - Maximum results (default: 50)
  • format (string, optional) - Output format: 'text' or 'json'
inspect_xpp_object

Analyzes D365 objects with multiple inspection modes.

Parameters:

  • objectName (string, required) - Name of the X++ object
  • objectType (string, optional) - D365 object type
  • inspectionMode (string, optional) - Inspection level:
  • summary - Fast overview with collection counts
  • properties - All object properties with descriptions
  • collection - Specific collection items (requires collectionName)
  • xppcode - Extract X++ source code (requires codeTarget)
  • collectionName (string, optional) - Required when inspectionMode='collection'
  • codeTarget (string, optional) - Required when inspectionMode='xppcode':
  • methods - Extract all method source code
  • specific-method - Single method (requires methodName)
  • event-handlers - Event handler methods only
  • methodName (string, optional) - Required when codeTarget='specific-method'
  • maxCodeLines (number, optional) - Limit lines of source code per method
  • filterPattern (string, optional) - Wildcard filter for results

Examples:

// Get object summary
inspect_xpp_object({"objectName": "CustTable", "inspectionMode": "summary"})

// Extract specific method source code
inspect_xpp_object({
  "objectName": "SalesLine", 
  "objectType": "AxTable", 
  "inspectionMode": "xppcode", 
  "codeTarget": "specific-method", 
  "methodName": "validateWrite"
})

Object Modification

execute_object_modificationENHANCED WITH BATCH PROCESSING

Executes modification methods on existing D365 objects with array-based batch processing. Always use array format - single operations use array with one element.

📋 BEST PRACTICE: Group ALL modifications for the same object into ONE call instead of making separate calls. This provides better performance, error handling, and transactional integrity.

Parameters:

  • objectType (string, required) - D365 object type (e.g., 'AxTable', 'AxClass', 'AxForm')
  • objectName (string, required) - Name of existing object to modify
  • modifications (array, required) - Array of modification operations:
  • methodName (string, required) - Modification method to execute
  • parameters (object, required) - Method-specific parameters including:
  • concreteType (string, required) - Exact type from discovermodificationcapabilities
  • Name (string) - Field/object name (use 'Name' not 'fieldName')
  • Other D365-specific parameters as required

✅ Features:

  • Per-operation tracking: Each operation returns individual success/failure status
  • Detailed error reporting: Clear validation messages for failed operations
  • Sequential processing: Operations execute in order with timing information
  • Batch efficiency: Multiple operations in single service call

Examples:

Single field (array with one element):

execute_object_modification({
  "objectType": "AxTable",
  "objectName": "CustTable",
  "modifications": [
    {
      "methodName": "AddField",
      "parameters": {
        "concreteType": "AxTableFieldString",
        "Name": "MyCustomField",
        "Label": "My Custom Field",
        "HelpText": "Custom field description",
        "SaveContents": "Yes",
        "Mandatory": "No",
        "AllowEditOnCreate": "Yes",
        "AllowEdit": "Yes",
        "Visible": "Yes",
        "AosAuthorization": "None",
        "MinReadAccess": "Auto",
        "IgnoreEDTRelation": "No",
        "Null": "Yes",
        "IsSystemGenerated": "No",
        "IsManuallyUpdated": "No",
        "IsObsolete": "No",
        "GeneralDataProtectionRegulation": "None",
        "SysSharingType": "Duplicate"

…

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [ccampora](https://github.com/ccampora)
- **Source:** [ccampora/mcp_xpp](https://github.com/ccampora/mcp_xpp)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.