首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
首页
学习
活动
专区
圈层
工具
MCP广场
MCP广场 >详情页
powerplatform-mcp2025-05-210分享
github
提供对 PowerPlatform/Dataverse 实体和记录智能访问的模型上下文协议(MCP)服务器。此工具提供上下文感知辅助、实体探索和元数据访问。
By michsob
2025-05-210
github
详情内容

PowerPlatform MCP 服务器

一个提供智能访问 PowerPlatform/Dataverse 实体和记录的模型上下文协议 (MCP) 服务器。此工具提供上下文感知的帮助、实体探索和元数据访问。

主要功能:

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

安装

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

选项 1:全局安装

npm install -g powerplatform-mcp

然后运行它:

powerplatform-mcp

选项 2:直接使用 npx 运行

无需安装即可运行:

npx powerplatform-mcp

配置

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

# PowerPlatform/Dataverse connection details
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

使用

这是一个设计用于与 Cursor、Claude App 和 GitHub Copilot 等兼容 MCP 的客户端一起工作的 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:实体关系的可视化地图

示例

实体概述提示

// Example client code
await mcpClient.invoke("use-powerplatform-prompt", {
  promptType: "ENTITY_OVERVIEW",
  entityName: "account"
});

输出:

## Power Platform Entity: account

This is an overview of the 'account' entity in Microsoft Power Platform/Dataverse:

### Entity Details
- Display Name: Account
- Schema Name: Account
- Description: Business that represents a customer or potential customer
- Primary Key: accountid
- Primary Name: name

### Key Attributes
- name: String (Account Name)
- emailaddress1: String (Email)
- telephone1: String (Main Phone)
- address1_city: String (City)
- statecode: Status (Status)
- accountnumber: String (Account Number)
- industrycode: OptionSetValue (Industry)
- revenue: Money (Annual Revenue)
- ownerid: Owner (Owner)
- createdon: DateTime (Created On)

### Relationships
- One-to-Many Relationships: 42
- Many-to-Many Relationships: 8

You can query this entity using OData filters against the plural name.

属性详情提示

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

输出:

## Attribute: revenue

Details for the 'revenue' attribute of the 'account' entity:

- Display Name: Annual Revenue
- Description: Annual revenue for the account
- Type: Money
- Format: Currency
- Is Required: No
- Is Searchable: true

### Usage Notes
- Data Type: Money
- Required: No
- Max Length: N/A

查询模板提示

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

输出:

## OData Query Template for accounts

Use this template to build queries against the accounts entity:
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

#### Relationship Map Prompt

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

输出:

## Relationship Map for contact

This shows all relationships for the 'contact' entity:

### One-to-Many Relationships (contact as Primary)
- 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)

### One-to-Many Relationships (contact as Related)
- account_primary_contact: account (1) → contact (N)
- customer_contacts: customer (1) → contact (N)
- system_user_contacts: systemuser (1) → contact (N)

### Many-to-Many Relationships
- contactleads_association: contact (N) ↔ lead (N)
- contactopportunities_association: contact (N) ↔ opportunity (N)
- contactquotes_association: contact (N) ↔ quote (N)

提示示例

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

1. 实体理解

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

User: "Tell me about the Account entity in our PowerPlatform environment"

Response:
[uses ENTITY_OVERVIEW prompt internally]

Here's what I found about the Account entity:
- It's a core business entity representing customers and potential customers
- The primary identifier is 'accountid' and the primary name field is 'name'
- Key fields include:
  * name (Account Name)
  * emailaddress1 (Email)
  * telephone1 (Main Phone)
  * revenue (Annual Revenue)
- It has 42 one-to-many relationships and 8 many-to-many relationships

2. 构建查询

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

User: "Help me write a query to find active accounts with revenue over $1M in California"

Response:
[uses QUERY_TEMPLATE prompt internally]

Here's the OData query you need:
accounts?$select=name,revenue,statecode,address1_stateorprovince
&$filter=statecode eq 0 
    and revenue gt 1000000 
    and address1_stateorprovince eq 'California'
&$orderby=revenue desc

This query:
1. Selects relevant fields
2. Filters for active accounts (statecode eq 0)
3. Checks revenue > $1M
4. Filters for California location
5. Orders by revenue highest to lowest

3. 理解关系

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

User: "How are Accounts and Contacts related in our system?"

Response:
[uses RELATIONSHIP_MAP prompt for both entities internally]

Here are the key relationships between Accounts and Contacts:

1. Primary Contact (One-to-Many):
   - account_primary_contact: Account (1) → Contact (N)
   - An account can have many contacts, but one designated as primary

2. Customer Relationship:
   - contact_customer_accounts: Contact (N) ← Account (1)
   - Contacts can be associated with customer accounts

3. Additional Relationships:
   - accountleads_association: For lead tracking
   - account_connections: For relationship management

4. 字段/属性调查

你可以询问特定的字段:

User: "What kind of field is the revenue field on Account?"

Response:
[uses ATTRIBUTE_DETAILS prompt internally]

The revenue field on Account is:
- Data Type: Money
- Format: Currency
- Not required
- Searchable: Yes
- Used for: Tracking annual revenue for the account
- Can be used in advanced find and filtered views

5. 复杂的数据建模

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

User: "I need to design a solution for tracking product reviews. Which entities should I relate to?"

Response:
[uses multiple ENTITY_OVERVIEW and RELATIONSHIP_MAP prompts internally]

Based on the existing data model, here's a suggested approach:

1. Product (existing entity):
   - Already has relationships with:
     * Price lists
     * Product categories
     * Inventory units

2. New Review entity should relate to:
   - Product (N:1) - Each review is for one product
   - Contact (N:1) - Reviews are written by contacts
   - Account (N:1) - Optional link to company if B2B review

Here's a sample lookup field structure...
[continues with detailed implementation guidance]

6. 调试帮助

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

User: "Why am I getting 'invalid property' when querying account.customertypecode?"

Response:
[uses ATTRIBUTE_DETAILS prompt internally]

I see the issue. The field 'customertypecode' is actually named 'customertype' in your environment. Here's the correct field information:
- Logical Name: customertype
- Type: OptionSetValue
- Valid Values:
  * 1 = Competitor
  * 2 = Consultant
  * 3 = Customer
  * 4 = Investor
  * 5 = Partner
  * 6 = Influencer

Try updating your query to use 'customertype' instead of 'customertypecode'.

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

许可证

MIT

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档