这是一个提供对PowerPlatform/Dataverse实体和记录智能访问的Model Context Protocol (MCP)服务器。此工具提供了上下文感知的帮助、实体探索和元数据访问。
主要功能:
可以通过两种方式安装并运行此工具:
npm install -g powerplatform-mcp
然后运行:
powerplatform-mcp
无需安装即可运行:
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实体该服务器包括一个提示功能,提供关于PowerPlatform实体的格式化、信息丰富的上下文信息。
use-powerplatform-prompt工具支持以下提示类型:
// 示例客户端代码
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:00Zname 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提示与助手交互的例子:
你可以用自然语言询问助手关于实体的信息:
用户: "告诉我关于我们PowerPlatform环境中的Account实体"
响应:
[内部使用ENTITY_OVERVIEW提示]
这是我找到的关于Account实体的信息:
- 它是一个核心业务实体,代表客户和潜在客户
- 主要标识符是'accountid',主要名称字段是'name'
- 关键字段包括:
* name (账户名称)
* emailaddress1 (电子邮件)
* telephone1 (主电话)
* revenue (年收入)
- 它有42个一对多关系和8个多对多关系
你可以请求帮助构建查询:
用户: "帮我写一个查询来查找加利福尼亚州的活跃账户,年收入超过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. 按收入从高到低排序
你可以自然地探索实体之间的关系:
用户: "我们的系统中账户和联系人是如何关联的?"
响应:
[内部使用两个实体的RELATIONSHIP_MAP提示]
以下是账户和联系人之间的一些关键关系:
1. 主要联系人(一对多):
- account_primary_contact: 账户 (1) → 联系人 (N)
- 一个账户可以有多个联系人,但指定一个为主要联系人
2. 客户关系:
- contact_customer_accounts: 联系人 (N) ← 账户 (1)
- 联系人可以与客户账户关联
3. 其他关系:
- accountleads_association: 用于跟踪线索
- account_connections: 用于关系管理
你可以询问特定字段:
用户: "账户上的收入字段是什么类型的?"
响应:
[内部使用ATTRIBUTE_DETAILS提示]
账户上的收入字段是:
- 数据类型: 货币
- 格式: 货币
- 不必填写
- 可搜索: 是
- 用途: 跟踪账户的年收入
- 可用于高级查找和筛选视图
你可以获得数据建模决策的帮助:
用户: "我需要设计一个解决方案来跟踪产品评论。应该关联哪些实体?"
响应:
[内部使用多个ENTITY_OVERVIEW和RELATIONSHIP_MAP提示]
基于现有的数据模型,这里有一个建议的方法:
1. 产品(现有实体):
- 已经具有关系:
* 价格列表
* 产品类别
* 库存单位
2. 新评论实体应关联:
- 产品 (N:1) - 每条评论对应一个产品
- 联系人 (N:1) - 评论由联系人撰写
- 账户 (N:1) - 如果是B2B评论,可选链接到公司
这里是一个样本查找字段结构...
[继续详细的实施指导]
你可以获得故障排除的帮助:
用户: "为什么我在查询account.customertypecode时会得到'无效属性'?"
响应:
[内部使用ATTRIBUTE_DETAILS提示]
我发现问题所在。字段'customertypecode'实际上在你的环境中被命名为'customertype'。这里是正确的字段信息:
- 逻辑名称: customertype
- 类型: 选项值
- 有效值:
* 1 = 竞争对手
* 2 = 咨询师
* 3 = 客户
* 4 = 投资者
* 5 = 合作伙伴
* 6 = 影响者
尝试更新你的查询以使用'customertype'而不是'customertypecode'。
这些例子展示了AI助手如何利用MCP提示提供上下文感知、准确的帮助,用于PowerPlatform开发任务。AI了解你环境的具体配置,并可以帮助处理简单的查询和复杂的架构决策。
MIT