MCP X++服务器
用于Microsoft Dynamics 365财务与运营开发的模型上下文协议(MCP)服务器。该工具支持通过MCP标准创建、修改和分析D365对象,允许与各种开发环境集成。
日期: 2025年9月18日\ 状态: 与VS2022服务集成并增强表单创建功能
最近的更新✨
2025年9月19日-安全对象删除功能:
- 🗑️ 新的delete_xpp_object工具:通过依赖验证和级联支持安全删除D365对象
- 🛡️ 依赖性保护:如果其他对象依赖于目标,则防止删除,避免破坏更改
- 🔄 缓存一致性:成功删除后自动更新搜索索引
- ⚡ 高性能:直接将元数据提供程序与ISingleKeyedMetadataProvider集成。删除
- 🌲 级联删除:可选删除子对象(表单部件、表关系等)
- ✅ 综合测试:跨对象类型的完整创建/删除循环验证
2025年9月18日-阵列修改和表单创建增强:
- 🚀 仅新数组修改:
execute_object_modification现在只使用批处理格式进行一致操作 - 🔄 强制批量处理:单个操作使用具有一个元素的数组-不再有连续的单独调用
- 📊 增强的响应跟踪:每次操作成功/失败报告,包括详细的时间和错误消息
- 📋 最佳实践文档:明确指导将同一对象的所有修改分组到单个调用中
- 🎯 新建表单工具:具有模式支持和数据源集成的专业表单创建
- 🔧 Details主模式已修复:通过智能现场控制创建解决了验证问题
- 🗄️ 增强的数据源支持:灵活的数据源处理(数组、字符串、逗号分隔)
- 📋 模式发现: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)
- 与微软的D365组件集成
- 通过VS2022 API处理对象创建和修改
- 为运行时对象发现提供动态反射
- 通过命名管道进行通信:
mcp-xpp-d365-service
该架构支持从各种MCP兼容客户端进行D365开发,同时保持与现有D365开发工作流程的兼容性。
可用工具
该服务器为D365开发提供了10个专用工具:
- 创建xpp_object -创建D365对象(类、表、枚举等)- *注意:表单使用create_form*
- create_form - ✨ 新 -具有模式支持和数据源集成的专业表单创建
- 删除xpp_object - ✨ 新 -通过依赖验证和缓存一致性安全删除D365对象
- 执行对象修改 - ✨ 增强 -基于数组的批处理对象修改- 最佳实践:将同一对象的所有修改分组
- 发现_修改_功能 -探索可用的修改方法
- findxPp_object -按名称/类型查找特定对象
- 搜索对象模式 -支持通配符的模式搜索
- inspectxpp_object -X++源代码提取的对象分析
- get_current配置 -系统配置和状态
- build_object_index -搜索性能的索引管理
先决条件
- Visual Studio 2022 (社区、专业或企业)
- Dynamics 365开发工具 适用于Visual Studio 2022
- Node.js (建议使用最新的LTS版本)
- .NET Framework 4.8 (通常包含在Windows中)
安装
- 克隆存储库
- 安装Node.js依赖项:
npm install - 运行安装程序以配置VS2022集成:
.\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"MCP客户端配置
VS代码
在中配置 .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(string)-D365对象的名称objectType(string)-对象类型(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(字符串,可选)-表单名称(当模式=“创建”时需要)patternName(字符串,可选)-要应用的D365表单模式(例如,“SimpleListDetails”、“DetailsMaster”、“Dialog”)patternVersion(字符串,可选)-模式版本(默认:'UX7 1.0')dataSources(array|string,可选)-表单数据源的表名modelName(字符串,可选)-D365型号/包名称(默认:“ApplicationSuite”)
主要特点:
- 🎯 模式感知:当模式需要时自动添加字段控件(例如,DetailsMaster)
- 🗄️ 灵活的数据源:支持数组、单个字符串或逗号分隔字符串
- 🔍 模式发现:列出所有36+可用的D365表格模式及其说明
- ✅ 增强验证:通过智能现场控制创建解决模式验证问题
示例:
// 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"
})技术说明:
- 当提供数据源时,DetailsMaster、SimpleListDetails和ListPage等模式会自动通过字段控件(RecId、Name、Description、Code)进行增强
- 模式验证已修复-根据模式要求,可以在有或没有数据源的情况下创建表单
- 该工具使用直接的VS2022服务集成,以实现最佳的D365兼容性
delete_xpp_object ✨ 新
通过全面的依赖验证和缓存一致性安全删除D365 F&O对象。此工具通过在删除之前验证依赖关系来防止破坏更改。
参数:
objectName(string,必填)-要删除的D365对象的名称objectType(字符串,必填)-D365对象类型(AxClass、AxTable、AxForm、AxEnum等)cascadeDelete(boolean,可选)-也删除依赖对象(默认值:false)
主要特点:
- 🛡️ 依赖性验证:如果其他对象依赖于目标,则防止删除
- 🗑️ 安全删除:使用D365的ISingleKeyedMetadataProvider。删除以进行适当的清理
- 🔄 缓存一致性:成功删除后自动更新搜索索引
- ⚡ 快速性能:直接集成元数据提供程序以获得最佳速度
- 🌲 级联支持:可选删除子对象(带零件/控件的表单等)
示例:
// 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"
})响应格式:
{
"success": true,
"message": "Successfully deleted object: 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(string,必填)-X++对象的名称objectType(字符串,可选)-按对象类型筛选model(字符串,可选)-按D365型号/包装名称筛选
search_objects_pattern
使用通配符模式搜索D365对象。
参数:
pattern(字符串,必填)-带通配符(\*,?)的搜索模式objectType(字符串,可选)-按对象类型筛选model(字符串,可选)-按D365型号/包装名称筛选limit(数字,可选)-最大结果(默认值:50)format(字符串,可选)-输出格式:“text”或“json”
inspect_xpp_object
使用多种检查模式分析D365对象。
参数:
objectName(string,必填)-X++对象的名称objectType(字符串,可选)-D365对象类型inspectionMode(字符串,可选)-检查级别:
- summary -快速查看收集数量 - properties -所有带有描述的对象属性 - collection -特定收藏项目(需要收藏名称) - xppcode -提取X++源代码(需要codeTarget)
collectionName(string,可选)-当inspectionMode=“collection”时需要codeTarget(string,可选)-当inspectionMode='xppcode'时需要:
- methods -提取所有方法源代码 - specific-method -单个方法(需要methodName) - event-handlers -仅限事件处理程序方法
methodName(字符串,可选)-当codeTarget='specific-method'时为必填项maxCodeLines(数量,可选)-限制每个方法的源代码行数filterPattern(字符串,可选)-结果的通配符筛选器
示例:
// 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"
})对象修改
execute_object_modification ✨ 通过批处理增强
使用基于数组的批处理对现有D365对象执行修改方法。 始终使用数组格式 -单个操作使用一个元素的数组。
📋 最佳实践:将同一对象的所有修改分组到一个调用中,而不是进行单独的调用。这提供了更好的性能、错误处理和事务完整性。
参数:
objectType(字符串,必填)-D365对象类型(例如,“AxTable”、“AxClass”、“AxForm”)objectName(string,必填)-要修改的现有对象的名称modifications(array,必填)-修改操作数组:
- methodName (string,必填)-要执行的修改方法 - parameters (对象,必填)-方法特定参数,包括: - concreteType (字符串,必填)-discover_modification_ability中的确切类型 - Name (string)-字段/对象名称(使用“name”而不是“fieldName”) - 所需的其他D365特定参数
✅ 特征:
- 每次操作跟踪:每个操作返回单独的成功/失败状态
- 详细的错误报告:清除失败操作的验证消息
- 顺序处理:操作按照时间信息的顺序执行
- 批量效率:单个服务调用中的多个操作
示例:
✅ 单字段(包含一个元素的数组):
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"
}
}
]
})⭐ 一批中有多个字段(首选):
execute_object_modification({
"objectType": "AxTable",
"objectName": "CustTable",
"modifications": [
{
"methodName": "AddField",
"parameters": {
"concreteType": "AxTableFieldString",
"Name": "CustomerCategory",
"Label": "Customer Category",
"HelpText": "Customer classification category",
"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"
}
},
{
"methodName": "AddField",
"parameters": {
"concreteType": "AxTableFieldInt",
"Name": "CustomerPriority",
"Label": "Customer Priority",
"HelpText": "Priority level for customer",
"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"
}
}
]
})📊 响应格式: 该工具返回详细的每次操作结果:
{
"summary": "2 succeeded, 1 failed (3 total)",
"targetObject": "AxTable:CustTable",
"operations": [
{
"methodName": "AddField",
"success": true,
"processingTime": "371ms",
"message": "Successfully executed AddField on AxTable:CustTable"
},
{
"methodName": "AddField",
"success": false,
"processingTime": "0ms",
"error": "Parameter validation failed: Missing required parameters"
}
]
}💡 提示:
- 使用
discover_modification_capabilities首先获得精确的参数要求 - 所有D365表格字段都需要以下参数
SaveContents,Mandatory等等。 - 将相关修改组合在一起以获得更好的性能
- 检查调试失败操作的单个操作结果
discover_modification_capabilities
发现D365对象类型的可用修改方法。
参数:
objectType(字符串,必填)-要分析的D365对象类型
系统管理
get_current_config
返回全面的服务器配置和状态信息。
build_object_index
构建或更新可搜索对象索引。
参数:
objectType(字符串,可选)-要索引的特定对象类型forceRebuild(布尔值,可选)-强制完成重建
支持的对象类型
支持的常见D365对象类型:
- AxClass -X++类
- AxTable -数据表
- AxForm -用户界面表单
- AxEnum -枚举
- AxEdt -扩展数据类型
- AxView -数据库视图
- AxQuery -数据查询
- AxReport -SSRS报告
- Ax菜单项显示 -菜单项
- AxDataEntityView -OData实体
系统共支持544+种对象类型。
生成脚本
这 build-and-run.ps1 脚本提供统一的项目管理:
# Setup VS2022 integration
.\tools\build-and-run.ps1 -Action setup
# Build both TypeScript and C# components
.\tools\build-and-run.ps1 -Action build
# Run the MCP server
.\tools\build-and-run.ps1 -Action run -Target mcp
# Run the C# service
.\tools\build-and-run.ps1 -Action run -Target csharp
# Run tests
.\tools\build-and-run.ps1 -Action test
# Clean builds
.\tools\build-and-run.ps1 -Action clean示例工作流
创建新类
# Create a custom class
create_xpp_object {
"objectName": "MyBusinessLogic",
"objectType": "AxClass",
"layer": "usr"
}
# Add a method to the class
execute_object_modification {
"objectType": "AxClass",
"objectName": "MyBusinessLogic",
"methodName": "AddMethod",
"parameters": {
"methodName": "processData",
"returnType": "void",
"source": "public void processData() { }"
}
}搜索和分析对象
# Find customer-related objects
search_objects_pattern {
"pattern": "Cust*",
"objectType": "AxTable",
"limit": 20
}
# Analyze a specific table
inspect_xpp_object {
"objectName": "CustTable",
"objectType": "AxTable",
"inspectionMode": "summary"
}
# Extract method source code
inspect_xpp_object {
"objectName": "CustTable",
"objectType": "AxTable",
"inspectionMode": "xppcode",
"codeTarget": "specific-method",
"methodName": "validateWrite"
}技术细节
性能特征
- 对象索引:在约30秒内处理70K+个对象
- 查询响应时间:大多数操作\<50ms
- 搜索操作:大型代码库的亚秒级响应
- 内存使用:优化了基于SQLite的缓存
文件类型支持
.xpp-X++源文件.xml-元数据和配置文件.json-配置文件- 其他D365开发文件
安全
- 路径验证阻止目录遍历
- 操作仅限于配置的D365代码库
- 资源管理的文件大小限制
- 所有参数的输入验证
故障排除
常见问题
“找不到VS2022扩展名”
- 确保VS2022中安装了Dynamics 365开发工具
- 运行安装脚本:
.\tools\build-and-run.ps1 -Action setup
“命名管道连接失败”
- 检查C#服务是否正在运行
- 验证Windows防火墙设置
- 确保。NET Framework 4.8已安装
“找不到对象”错误
- 构建对象索引:
build_object_index - 验证D365代码库路径配置
- 检查指定模型中是否存在该对象
表单的“模式验证失败”
- ✅ 已解决:此问题已在最新版本中修复
- 具有DetailsMaster等模式的表单现在自动包含必需的字段控件
- 使用
create_form工具而不是create_xpp_object为了更好地创建表单
“没有数据源的表单创建失败”
- 大多数模式在没有数据源的情况下都能正常工作(例如,DetailsMaster、Dialog模式)
- 使用
create_form随着"mode": "list_patterns"查看模式要求 - 对于大多数模式,数据源是可选的,但在提供时可以增强功能
获取帮助
- 检查
logs/详细错误信息文件夹 - 使用
get_current_config验证系统配置 - 报告GitHub存储库上的问题
贡献
该项目欢迎捐款。拜托:
- 分叉存储库
- 创建要素分支
- 通过适当的测试进行更改
- 提交拉取请求
请注意,API可能会随着项目的发展而变化。
许可证
MIT许可证-有关详细信息,请参阅许可证文件。
免责声明
本软件按“原样”提供,不提供保修。它仅用于研发目的,不用于生产用途。
重要提示:
- 需要Visual Studio 2022和D365开发工具
- 官方不支持与Microsoft API集成
- 功能可能会在版本之间更改或中断
- 仅在开发环境中使用,风险自负
通过GitHub存储库报告问题或贡献改进。
