PowerPlatform MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PowerPlatform MCP Server What are the attributes of the account entity?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
PowerPlatform MCP Server
A Model Context Protocol (MCP) server that provides intelligent access to PowerPlatform/Dataverse entities and records. This tool offers context-aware assistance, entity exploration and metadata access.
Key features:
Rich entity metadata exploration with formatted, context-aware prompts
Advanced OData query support with intelligent filtering
Comprehensive relationship mapping and visualization
AI-assisted query building and data modeling through AI agent
Full access to entity attributes, relationships, and global option sets
Installation
You can install and run this tool in two ways:
Option 1: Install globally
npm install -g powerplatform-mcpThen run it:
powerplatform-mcpOption 2: Run directly with npx
Run without installing:
npx powerplatform-mcpRelated MCP server: MCP Dataverse Server
Configuration
Before running, set the following environment variables:
# 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-idUsage
This is an MCP server designed to work with MCP-compatible clients like Cursor, Claude App and GitHub Copilot. Once running, it will expose tools for retrieving PowerPlatform entity metadata and records.
Available Tools
get-entity-metadata: Get metadata about a PowerPlatform entityget-entity-attributes: Get attributes/fields of a PowerPlatform entityget-entity-attribute: Get a specific attribute/field of a PowerPlatform entityget-entity-relationships: Get relationships for a PowerPlatform entityget-global-option-set: Get a global option set definitionget-record: Get a specific record by entity name and IDquery-records: Query records using an OData filter expressionuse-powerplatform-prompt: Use pre-defined prompt templates for PowerPlatform entities
MCP Prompts
The server includes a prompts feature that provides formatted, context-rich information about PowerPlatform entities.
Available Prompt Types
The use-powerplatform-prompt tool supports the following prompt types:
ENTITY_OVERVIEW: Comprehensive overview of an entity
ATTRIBUTE_DETAILS: Detailed information about a specific entity attribute
QUERY_TEMPLATE: OData query template for an entity with example filters
RELATIONSHIP_MAP: Visual map of entity relationships
Examples
Entity Overview Prompt
// Example client code
await mcpClient.invoke("use-powerplatform-prompt", {
promptType: "ENTITY_OVERVIEW",
entityName: "account"
});Output:
## 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.Attribute Details Prompt
await mcpClient.invoke("use-powerplatform-prompt", {
promptType: "ATTRIBUTE_DETAILS",
entityName: "account",
attributeName: "revenue"
});Output:
## 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/AQuery Template Prompt
await mcpClient.invoke("use-powerplatform-prompt", {
promptType: "QUERY_TEMPLATE",
entityName: "account"
});Output:
## 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=50Common Filter Examples
Equals:
name eq 'Contoso'Contains:
contains(name, 'Contoso')Greater than date:
createdon gt 2023-01-01T00:00:00ZMultiple conditions:
name eq 'Contoso' and statecode eq 0
#### Relationship Map Prompt
```javascript
await mcpClient.invoke("use-powerplatform-prompt", {
promptType: "RELATIONSHIP_MAP",
entityName: "contact"
});Output:
## 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)Prompt Examples
Here are some examples of how you can interact with assistant using the PowerPlatform MCP prompts:
1. Entity Understanding
You can ask assistant about entities in natural language:
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 relationships2. Building Queries
You can ask for help constructing queries:
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 lowest3. Understanding Relationships
You can explore entity relationships naturally:
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 management4. Field/Attribute Investigation
You can ask about specific fields:
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 views5. Complex Data Modeling
You can get help with data modeling decisions:
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. Debugging Assistance
You can get help troubleshooting:
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'.These examples show how AI assistant can leverage the MCP prompts to provide context-aware, accurate assistance for PowerPlatform development tasks. The AI understands your environment's specific configuration and can help with both simple queries and complex architectural decisions.
License
MIT
Available Tools
8 toolsget-entity-attributeB
Get a specific attribute/field of a PowerPlatform entity
Inputs: entityName (required), attributeName (required).
get-entity-attributesB
Get attributes/fields of a PowerPlatform entity
Inputs: entityName (required).
get-entity-metadataC
Get metadata about a PowerPlatform entity
Inputs: entityName (required).
get-entity-relationshipsA
Get relationships (one-to-many and many-to-many) for a PowerPlatform entity
Inputs: entityName (required).
get-global-option-setA
Get a global option set definition by name
Inputs: optionSetName (required).
get-recordA
Get a specific record by entity name (plural) and ID
Inputs: recordId (required), entityNamePlural (required).
query-recordsB
Query records using an OData filter expression
Inputs: filter (required), entityNamePlural (required), maxRecords.
use-powerplatform-promptC
Use a predefined prompt template for PowerPlatform entities
Inputs: entityName (required), promptType (required), attributeName.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 8 tools
Each tool targets a distinct resource or operation: entity metadata, attributes (list vs. single), relationships, option sets, records by ID, querying, and prompt usage. Even get-entity-attributes vs get-entity-attribute are clearly list vs. get, so no ambiguity.
All tool names follow a consistent lowercase hyphenated verb-noun pattern (get-*, query-records, use-*). The verbs are clear and nouns are specific, making the set predictable and easy to navigate.
With 8 tools, the server is well-scoped for a PowerPlatform metadata and query assistant. Each tool addresses a distinct need without redundancy or bloat, fitting comfortably within the ideal 3-15 range.
The set covers metadata retrieval (entity, attributes, relationships, option sets) and record querying, but lacks critical operations like listing all entities or creating/updating/deleting records. For a read-only explorer it's decent, but the missing list-entities and lifecycle operations create notable gaps.
Maintenance
Related MCP Connectors
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Governed BI MCP. Ask questions of live company data and list workspace sources via OAuth.
Build and run AI workflows, agents, data tables and 1000+ API integrations from any MCP client.
Related MCP Servers
- AlicenseBqualityCmaintenanceA Model Context Protocol (MCP) server that provides intelligent access to PowerPlatform/Dataverse entities and records. This tool offers context-aware assistance, entity exploration and metadata access.3893 npm45MIT
- FlicenseNot gradedqualityDmaintenanceEnables CRUD operations and schema exploration on Microsoft Dataverse databases using service principal authentication. It allows users to query records with OData filters, manage table entries, and retrieve metadata through a standardized MCP interface.-
- AlicenseAqualityBmaintenanceEnables AI agents to query, inspect, and manage Microsoft Dataverse records, metadata, schema, forms, views, and Power Platform environments via the Dataverse OData Web API.9720 PyPI3MIT
- AlicenseNot gradedqualityAmaintenanceEnables interaction with Microsoft Dataverse and Dynamics 365 data through natural language, including CRUD operations, metadata exploration, and saved views.MIT