这是一个用于 Microsoft Dynamics 365 Finance & Operations 开发的 Model Context Protocol (MCP) 服务器。此工具通过 MCP 标准支持 D365 对象的创建、修改和分析,允许与各种开发环境集成。
日期: 2025年9月18日
状态: 功能正常,与 VS2022 服务集成并增强了表单创建
2025年9月19日 - 安全对象删除功能:
2025年9月18日 - 数组修改及表单创建增强:
execute_object_modification 现在仅使用批处理格式进行一致操作此 MCP 服务器提供了 D365 F&O 开发能力包括:
系统由两个主要组件通过 Windows 命名管道通信:
mcp-xpp-d365-service架构使 D365 开发能够从各种 MCP 兼容客户端进行,同时保持与现有 D365 开发工作流程的兼容性。
服务器提供 10 个专用工具用于 D365 开发:
npm install.\tools\build-and-run.ps1 -Action setup.\tools\build-and-run.ps1 -Action build使用以下命令运行 MCP 服务器:
node build/index.js
服务器会自动检测来自您的 VS2022 安装的 D365 路径。对于手动配置,请使用:
node build/index.js --xpp-path "C:\path\to\PackagesLocalDirectory"
在 .vscode/mcp.json 中配置:
{
"servers": {
"mcp-xpp-server": {
"command": "node",
"args": ["./build/index.js"],
"cwd": "${workspaceFolder}",
"type": "stdio"
}
}
}
在 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 等) - 排除 AxFormlayer (字符串, 可选) - 应用层 (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')关键特性:
示例:
// 发现可用模式
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"
})
技术说明:
delete_xpp_object ✨ 新功能安全地删除 D365 F&O 对象,具有全面的依赖验证和缓存一致性。此工具通过验证依赖项来防止删除导致的破坏性更改。
参数:
objectName (字符串, 必需) - 要删除的 D365 对象的名称objectType (字符串, 必需) - D365 对象类型 (AxClass, AxTable, AxForm, AxEnum 等)cascadeDelete (布尔值, 可选) - 删除依赖对象 (默认: false)关键特性:
示例:
// 删除自定义类
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_objectcascadeDelete: 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')✅ 特性: