返回市场
MCP扩展插件

MCP扩展插件

作者:ccampora14 星标更新:2025-09-19

项目介绍

MCP X++ 服务器

这是一个用于 Microsoft Dynamics 365 Finance & Operations 开发的 Model Context Protocol (MCP) 服务器。此工具通过 MCP 标准支持 D365 对象的创建、修改和分析,允许与各种开发环境集成。

日期: 2025年9月18日
状态: 功能正常,与 VS2022 服务集成并增强了表单创建

最近更新 ✨

2025年9月19日 - 安全对象删除功能:

  • 🗑️ 新工具 delete_xpp_object: 安全删除 D365 对象,具有依赖验证和级联支持
  • 🛡️ 依赖保护: 如果其他对象依赖于目标对象,则防止删除,避免破坏性更改
  • 🔄 缓存一致性: 成功删除后自动更新搜索索引
  • 高性能: 直接集成元数据提供者 ISingleKeyedMetadataProvider.Delete
  • 🌲 级联删除: 可选删除子对象(表单部分、表关系等)
  • 全面测试: 跨对象类型的完整创建/删除周期验证

2025年9月18日 - 数组修改及表单创建增强:

  • 🚀 新数组仅修改: execute_object_modification 现在仅使用批处理格式进行一致操作
  • 🔄 强制批量处理: 单个操作使用一个元素的数组 - 不再有连续的单独调用
  • 📊 增强响应跟踪: 操作成功/失败报告,带有详细的计时和错误消息
  • 📋 最佳实践文档: 清晰指导将同一对象的所有修改分组到单次调用中
  • 🎯 新工具 create_form: 具有模式支持和数据源集成的专用表单创建
  • 🔧 DetailsMaster 模式修复: 通过智能字段控制创建解决验证问题
  • 🗄️ 增强数据源支持: 灵活的数据源处理(数组、字符串、逗号分隔)
  • 📋 模式发现: 36个过滤表单模式及其描述和要求
  • 模式验证: 自动创建所需模式的字段控制

概述

此 MCP 服务器提供了 D365 F&O 开发能力包括:

  • 对象创建: 支持 D365 类、表、表单、枚举以及超过 544 种其他对象类型
  • 表单创建: ✨ 增强 - 具有模式验证和数据源集成的专用表单创建
  • 对象删除: ✨ 新功能 - 具有依赖验证和级联支持的安全对象删除
  • 对象修改: 向现有对象添加方法、字段和其他组件
  • 对象检查: 分析 D365 对象并提取 X++ 源代码
  • 代码库搜索: 使用模式匹配浏览和搜索 D365 代码库
  • MCP 协议: 兼容 Claude Desktop、VS Code 和其他 MCP 客户端

架构

系统由两个主要组件通过 Windows 命名管道通信:

MCP X++ 服务器 (Node.js/TypeScript)

  • 实现模型上下文协议 (STDIO)
  • 处理对象创建、修改和搜索操作
  • 提供文件浏览和代码库索引
  • 兼容 Claude Desktop 和 VS Code 等 MCP 客户端

D365 元数据服务 (C# .NET 4.8)

  • 集成 Microsoft 的 D365 组件
  • 通过 VS2022 API 处理对象创建和修改
  • 提供运行时对象发现的动态反射
  • 通过命名管道通信: mcp-xpp-d365-service

架构使 D365 开发能够从各种 MCP 兼容客户端进行,同时保持与现有 D365 开发工作流程的兼容性。

可用工具

服务器提供 10 个专用工具用于 D365 开发:

  1. create_xpp_object - 创建 D365 对象(类、表、枚举等)- 注意:使用 create_form 创建表单
  2. create_form - ✨ 新功能 - 具有模式支持和数据源集成的专用表单创建
  3. delete_xpp_object - ✨ 新功能 - 具有依赖验证和缓存一致性的安全 D365 对象删除
  4. execute_object_modification - ✨ 增强 - 基于数组的对象修改,批量处理 - 最佳实践:将同一对象的所有修改分组到一次调用中
  5. discover_modification_capabilities - 探索可用的修改方法
  6. find_xpp_object - 通过名称/类型查找特定对象
  7. search_objects_pattern - 带通配符支持的模式搜索
  8. inspect_xpp_object - 对象分析,提取 X++ 源代码
  9. get_current_config - 系统配置和状态
  10. build_object_index - 搜索性能的索引管理

预备条件

  • Visual Studio 2022 (社区版、专业版或企业版)
  • Dynamics 365 开发工具 for Visual Studio 2022
  • Node.js (推荐最新 LTS 版本)
  • .NET Framework 4.8 (通常随 Windows 一起安装)

安装

  1. 克隆仓库
  2. 安装 Node.js 依赖项: npm install
  3. 运行设置以配置 VS2022 集成: .\tools\build-and-run.ps1 -Action setup
  4. 构建项目: .\tools\build-and-run.ps1 -Action build

使用

启动服务器

使用以下命令运行 MCP 服务器:

node build/index.js

服务器会自动检测来自您的 VS2022 安装的 D365 路径。对于手动配置,请使用:

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

MCP 客户端配置

VS Code

.vscode/mcp.json 中配置:

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

Claude Desktop

在 Claude Desktop 配置文件中添加:

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

工具参考

对象创建

create_xpp_object

使用 VS2022 服务集成创建 D365 F&O 对象。

⚠️ 重要提示: 创建表单时,请使用专用的 create_form 工具,因为它提供了高级模式支持和数据源集成。

参数:

  • objectName (字符串) - D365 对象的名称
  • objectType (字符串) - 对象类型 (AxClass, AxTable, AxEnum 等) - 排除 AxForm
  • layer (字符串, 可选) - 应用层 (usr, cus, var)
  • outputPath (字符串, 可选) - 输出目录 (默认: "Models")
  • publisher (字符串, 可选) - 公司名称 (默认: "YourCompany")
  • version (字符串, 可选) - 版本号 (默认: "1.0.0.0")
  • dependencies (数组, 可选) - 模型依赖项
  • properties (对象, 可选) - 对象特定配置

示例:

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

create_form新功能

专门用于创建具有高级模式支持和数据源集成的 D365 表单的工具。此工具结合了表单创建和模式发现于一体。

参数:

  • mode (字符串, 必需) - 操作模式:
    • "create" - 使用模式和数据源创建新的表单
    • "list_patterns" - 发现可用的 D365 表单模式
  • formName (字符串, 可选) - 表单名称 (当 mode='create' 时必需)
  • patternName (字符串, 可选) - 要应用的 D365 表单模式 (例如,'SimpleListDetails', 'DetailsMaster', 'Dialog')
  • patternVersion (字符串, 可选) - 模式版本 (默认: 'UX7 1.0')
  • dataSources (数组 | 字符串, 可选) - 表单数据源的表名
  • modelName (字符串, 可选) - D365 模型/包名 (默认: 'ApplicationSuite')

关键特性:

  • 🎯 模式感知: 当模式需要时自动添加字段控件 (例如,DetailsMaster)
  • 🗄️ 灵活的数据源: 支持数组、单个字符串或逗号分隔的字符串
  • 🔍 模式发现: 列出所有 36+ 可用的 D365 表单模式及其描述
  • 增强验证: 通过智能字段控件创建解决模式验证问题

示例:

// 发现可用模式
create_form({"mode": "list_patterns"})

// 创建带数据源的简单列表表单
create_form({
  "mode": "create",
  "formName": "MyCustomerListForm", 
  "patternName": "SimpleListDetails",
  "dataSources": ["CustTable"]
})

// 创建带多个数据源的 DetailsMaster 表单
create_form({
  "mode": "create",
  "formName": "MySalesOrderForm",
  "patternName": "DetailsMaster",
  "patternVersion": "UX7 1.0", 
  "dataSources": ["SalesTable", "SalesLine", "CustTable"],
  "modelName": "MyCustomModel"
})

// 创建不带数据源的对话框表单
create_form({
  "mode": "create",
  "formName": "MyConfirmationDialog",
  "patternName": "Dialog"
})

技术说明:

  • 模式如 DetailsMaster, SimpleListDetails 和 ListPage 在提供数据源时会自动增强字段控件 (RecId, Name, Description, Code)
  • 模式验证已修复 - 表单可以创建,无论是否有数据源取决于模式需求
  • 此工具使用直接 VS2022 服务集成以实现最佳 D365 兼容性

delete_xpp_object新功能

安全地删除 D365 F&O 对象,具有全面的依赖验证和缓存一致性。此工具通过验证依赖项来防止删除导致的破坏性更改。

参数:

  • objectName (字符串, 必需) - 要删除的 D365 对象的名称
  • objectType (字符串, 必需) - D365 对象类型 (AxClass, AxTable, AxForm, AxEnum 等)
  • cascadeDelete (布尔值, 可选) - 删除依赖对象 (默认: false)

关键特性:

  • 🛡️ 依赖验证: 如果其他对象依赖于目标对象,则防止删除
  • 🗑️ 安全删除: 使用 D365 的 ISingleKeyedMetadataProvider.Delete 进行适当的清理
  • 🔄 缓存一致性: 成功删除后自动更新搜索索引
  • 快速性能: 通过直接元数据提供者集成实现最佳速度
  • 🌲 级联支持: 可选删除子对象 (带部分/控件的表单等)

示例:

// 删除自定义类
delete_xpp_object({
  "objectName": "MyCustomClass",
  "objectType": "AxClass"
})

// 删除表及其依赖项 (移除依赖字段组、关系等)
delete_xpp_object({
  "objectName": "MyTestTable", 
  "objectType": "AxTable",
  "cascadeDelete": true
})

// 删除表单 (如果存在依赖项且未启用级联则会失败)
delete_xpp_object({
  "objectName": "MyCustomForm",
  "objectType": "AxForm"
})

响应格式:

{
  "success": true,
  "message": "成功删除对象: MyCustomClass (AxClass)",
  "objectName": "MyCustomClass",
  "objectType": "AxClass",
  "cascadeDelete": false,
  "dependenciesRemoved": [],
  "cacheUpdate": "Success",
  "performance": "156ms"
}

⚠️ 安全注意事项:

  • 高风险操作: 删除是永久的且无法撤销
  • 删除前始终验证依赖项 find_xpp_object
  • 使用 cascadeDelete: false (默认) 以确保最大安全性
  • 首先在开发环境中测试删除
  • 如果存在依赖项且未启用级联标志,工具将安全失败
  • 缓存更新确保删除后立即搜索一致性

常见对象类型:

  • AxClass - X++ 类和业务逻辑
  • AxTable - 数据表和模式
  • AxForm - 用户界面表单
  • AxEnum - 枚举和值列表
  • AxEdt - 扩展数据类型
  • AxView - 数据库视图
  • AxQuery - 数据查询
  • AxReport - SSRS 报告

对象发现

find_xpp_object

按名称查找 X++ 对象,可选过滤。

参数:

  • objectName (字符串, 必需) - X++ 对象的名称
  • objectType (字符串, 可选) - 按对象类型过滤
  • model (字符串, 可选) - 按 D365 模型/包名过滤

search_objects_pattern

使用通配符模式搜索 D365 对象。

参数:

  • pattern (字符串, 必需) - 带通配符的搜索模式 (*, ?)
  • objectType (字符串, 可选) - 按对象类型过滤
  • model (字符串, 可选) - 按 D365 模型/包名过滤
  • limit (数字, 可选) - 最大结果数 (默认: 50)
  • format (字符串, 可选) - 输出格式: 'text' 或 'json'

inspect_xpp_object

使用多种检查模式分析 D365 对象。

参数:

  • objectName (字符串, 必需) - X++ 对象的名称
  • objectType (字符串, 可选) - D365 对象类型
  • inspectionMode (字符串, 可选) - 检查级别:
    • summary - 快速概览,带有集合计数
    • properties - 所有对象属性及其描述
    • collection - 特定集合项 (需要 collectionName)
    • xppcode - 提取 X++ 源代码 (需要 codeTarget)
  • collectionName (字符串, 可选) - 当 inspectionMode='collection' 时必需
  • codeTarget (字符串, 可选) - 当 inspectionMode='xppcode' 时必需:
    • methods - 提取所有方法源代码
    • specific-method - 单个方法 (需要 methodName)
    • event-handlers - 事件处理器方法
  • methodName (字符串, 可选) - 当 codeTarget='specific-method' 时必需
  • maxCodeLines (数字, 可选) - 每个方法的源代码行限制
  • filterPattern (字符串, 可选) - 结果的通配符过滤器

示例:

// 获取对象概览
inspect_xpp_object({"objectName": "CustTable", "inspectionMode": "summary"})

// 提取特定方法的源代码
inspect_xpp_object({
  "objectName": "SalesLine", 
  "objectType": "AxTable", 
  "inspectionMode": "xppcode", 
  "codeTarget": "specific-method", 
  "methodName": "validateWrite"
})

对象修改

execute_object_modification增强,带批量处理

对现有 D365 对象执行修改方法,使用基于数组的批量处理。始终使用数组格式 - 单个操作使用一个元素的数组。

📋 最佳实践: 将同一对象的所有修改分组到一次调用中,而不是进行多次调用。这提供了更好的性能、错误处理和事务完整性。

参数:

  • objectType (字符串, 必需) - D365 对象类型 (例如,'AxTable', 'AxClass', 'AxForm')
  • objectName (字符串, 必需) - 要修改的现有对象的名称
  • modifications (数组, 必需) - 修改操作数组:
    • methodName (字符串, 必需) - 要执行的修改方法
    • parameters (对象, 必需) - 方法特定参数,包括:
      • concreteType (字符串, 必需) - 从 discover_modification_capabilities 获取的确切类型
      • Name (字符串) - 字段/对象名称 (使用 'Name' 而不是 'fieldName')
      • 其他所需的 D365 特定参数

✅ 特性:

  • 每个操作跟踪: 每