返回市场
动力平台-MCP

动力平台-MCP

作者:michsob21 星标更新:2025-03-18

项目介绍

PowerPlatform MCP Server

这是一个提供对PowerPlatform/Dataverse实体和记录智能访问的Model Context Protocol (MCP)服务器。此工具提供了上下文感知的帮助、实体探索和元数据访问。

主要功能:

  • 通过格式化、上下文感知的提示进行丰富的实体元数据探索
  • 支持高级OData查询及智能过滤
  • 全面的关系映射和可视化
  • 通过AI代理辅助查询构建和数据建模
  • 完整访问实体属性、关系和全局选项集

安装

可以通过两种方式安装并运行此工具:

方案1:全局安装

npm install -g powerplatform-mcp

然后运行:

powerplatform-mcp

方案2:直接使用npx运行

无需安装即可运行:

npx powerplatform-mcp

配置

在运行之前,请设置以下环境变量:

# PowerPlatform/Dataverse连接详情
POWERPLATFORM_URL=https://yourenvironment.crm.dynamics.com
POWERPLATFORM_CLIENT_ID=your-azure-app-client-id
POWERPLATFORM_CLIENT_SECRET=your-azure-app-client-secret
POWERPLATFORM_TENANT_ID=your-azure-tenant-id

使用

这是一个设计用于与兼容MCP客户端(如Cursor、Claude App和GitHub Copilot)配合工作的MCP服务器。运行后,它将提供检索PowerPlatform实体元数据和记录的工具。

可用工具

  • get-entity-metadata: 获取关于PowerPlatform实体的元数据
  • get-entity-attributes: 获取PowerPlatform实体的属性/字段
  • get-entity-attribute: 获取特定的PowerPlatform实体属性/字段
  • get-entity-relationships: 获取PowerPlatform实体的关系
  • get-global-option-set: 获取全局选项集定义
  • get-record: 根据实体名称和ID获取特定记录
  • query-records: 使用OData过滤表达式查询记录
  • use-powerplatform-prompt: 使用预定义的提示模板针对PowerPlatform实体

MCP提示

该服务器包括一个提示功能,提供关于PowerPlatform实体的格式化、信息丰富的上下文信息。

可用提示类型

use-powerplatform-prompt工具支持以下提示类型:

  1. ENTITY_OVERVIEW: 实体的综合概述
  2. ATTRIBUTE_DETAILS: 特定实体属性的详细信息
  3. QUERY_TEMPLATE: 实体的OData查询模板,带有示例过滤器
  4. RELATIONSHIP_MAP: 实体关系的可视化图

示例

实体概述提示

// 示例客户端代码
await mcpClient.invoke("use-powerplatform-prompt", {
  promptType: "ENTITY_OVERVIEW",
  entityName: "account"
});

输出:

## Power Platform 实体: account

这是Microsoft Power Platform/Dataverse中'account'实体的概述:

### 实体详情
- 显示名称: 账户
- 架构名称: Account
- 描述: 表示客户或潜在客户的业务
- 主键: accountid
- 主要名称: name

### 关键属性
- name: 字符串 (账户名称)
- emailaddress1: 字符串 (电子邮件)
- telephone1: 字符串 (主电话)
- address1_city: 字符串 (城市)
- statecode: 状态 (状态)
- accountnumber: 字符串 (账户编号)
- industrycode: 选项值 (行业)
- revenue: 货币 (年收入)
- ownerid: 所有者 (所有者)
- createdon: 日期时间 (创建于)

### 关系
- 一对多关系: 42
- 多对多关系:  8

您可以使用OData过滤器针对复数名称查询此实体。

属性详情提示

await mcpClient.invoke("use-powerplatform-prompt", {
  promptType: "ATTRIBUTE_DETAILS",
  entityName: "account",
  attributeName: "revenue"
});

输出:

## 属性: revenue

关于'account'实体的'revenue'属性的详细信息:

- 显示名称: 年收入
- 描述: 账户的年收入
- 类型: 货币
- 格式: 货币
- 是否必填: 否
- 是否可搜索: 是

### 使用说明
- 数据类型: 货币
- 必填: 否
- 最大长度: 不适用

查询模板提示

await mcpClient.invoke("use-powerplatform-prompt", {
  promptType: "QUERY_TEMPLATE",
  entityName: "account"
});

输出:

## accounts的OData查询模板

使用此模板构建针对accounts实体的查询:
accounts?$select=name,emailaddress1,telephone1, address1_city,statecode&$filter=name eq 'Example'&$orderby=name asc&$top=50

常见过滤器示例

  • 等于: name eq 'Contoso'
  • 包含: contains(name, 'Contoso')
  • 日期大于: createdon gt 2023-01-01T00:00:00Z
  • 多个条件: name eq 'Contoso' and statecode eq 0

#### 关系图提示

```javascript
await mcpClient.invoke("use-powerplatform-prompt", {
  promptType: "RELATIONSHIP_MAP",
  entityName: "contact"
});

输出:

## contact的关系图

这显示了'contact'实体的所有关系:

### 作为主要的一对多关系
- contact_activity_parties: contact (1) → activityparty (N)
- contact_connections1: contact (1) → connection (N)
- contact_connections2: contact (1) → connection (N)
- contact_customer_contacts: contact (1) → contact (N)
- contact_master_contact: contact (1) → contact (N)

### 作为相关的多对一关系
- account_primary_contact: account (1) → contact (N)
- customer_contacts: customer (1) → contact (N)
- system_user_contacts: systemuser (1) → contact (N)

### 多对多关系
- contactleads_association: contact (N) ↔ lead (N)
- contactopportunities_association: contact (N) ↔ opportunity (N)
- contactquotes_association: contact (N) ↔ quote (N)

提示示例

这里有一些如何使用PowerPlatform MCP提示与助手交互的例子:

1. 实体理解

你可以用自然语言询问助手关于实体的信息:

用户: "告诉我关于我们PowerPlatform环境中的Account实体"

响应:
[内部使用ENTITY_OVERVIEW提示]

这是我找到的关于Account实体的信息:
- 它是一个核心业务实体,代表客户和潜在客户
- 主要标识符是'accountid',主要名称字段是'name'
- 关键字段包括:
  * name (账户名称)
  * emailaddress1 (电子邮件)
  * telephone1 (主电话)
  * revenue (年收入)
- 它有42个一对多关系和8个多对多关系

2. 构建查询

你可以请求帮助构建查询:

用户: "帮我写一个查询来查找加利福尼亚州的活跃账户,年收入超过100万美元"

响应:
[内部使用QUERY_TEMPLATE提示]

你需要的OData查询如下:
accounts?$select=name,revenue,statecode,address1_stateorprovince
&$filter=statecode eq 0 
    and revenue gt 1000000 
    and address1_stateorprovince eq 'California'
&$orderby=revenue desc

这个查询:
1. 选择相关字段
2. 过滤活跃账户(statecode eq 0)
3. 检查年收入 > 100万美元
4. 过滤加利福尼亚州位置
5. 按收入从高到低排序

3. 理解关系

你可以自然地探索实体之间的关系:

用户: "我们的系统中账户和联系人是如何关联的?"

响应:
[内部使用两个实体的RELATIONSHIP_MAP提示]

以下是账户和联系人之间的一些关键关系:

1. 主要联系人(一对多):
   - account_primary_contact: 账户 (1) → 联系人 (N)
   - 一个账户可以有多个联系人,但指定一个为主要联系人

2. 客户关系:
   - contact_customer_accounts: 联系人 (N) ← 账户 (1)
   - 联系人可以与客户账户关联

3. 其他关系:
   - accountleads_association: 用于跟踪线索
   - account_connections: 用于关系管理

4. 字段/属性调查

你可以询问特定字段:

用户: "账户上的收入字段是什么类型的?"

响应:
[内部使用ATTRIBUTE_DETAILS提示]

账户上的收入字段是:
- 数据类型: 货币
- 格式: 货币
- 不必填写
- 可搜索: 是
- 用途: 跟踪账户的年收入
- 可用于高级查找和筛选视图

5. 复杂的数据建模

你可以获得数据建模决策的帮助:

用户: "我需要设计一个解决方案来跟踪产品评论。应该关联哪些实体?"

响应:
[内部使用多个ENTITY_OVERVIEW和RELATIONSHIP_MAP提示]

基于现有的数据模型,这里有一个建议的方法:

1. 产品(现有实体):
   - 已经具有关系:
     * 价格列表
     * 产品类别
     * 库存单位

2. 新评论实体应关联:
   - 产品 (N:1) - 每条评论对应一个产品
   - 联系人 (N:1) - 评论由联系人撰写
   - 账户 (N:1) - 如果是B2B评论,可选链接到公司

这里是一个样本查找字段结构...
[继续详细的实施指导]

6. 调试协助

你可以获得故障排除的帮助:

用户: "为什么我在查询account.customertypecode时会得到'无效属性'?"

响应:
[内部使用ATTRIBUTE_DETAILS提示]

我发现问题所在。字段'customertypecode'实际上在你的环境中被命名为'customertype'。这里是正确的字段信息:
- 逻辑名称: customertype
- 类型: 选项值
- 有效值:
  * 1 = 竞争对手
  * 2 = 咨询师
  * 3 = 客户
  * 4 = 投资者
  * 5 = 合作伙伴
  * 6 = 影响者

尝试更新你的查询以使用'customertype'而不是'customertypecode'。

这些例子展示了AI助手如何利用MCP提示提供上下文感知、准确的帮助,用于PowerPlatform开发任务。AI了解你环境的具体配置,并可以帮助处理简单的查询和复杂的架构决策。

许可证

MIT