Greg.Xrm.Mcp
MCP Server(s) for Power Platform Development
Links
README
From the repo.
🚀 Greg.Xrm.Mcp
A Comprehensive Framework for Building Model Context Protocol (MCP) Servers for Microsoft Dataverse
👁️ Vision
Transform your Dataverse development experience with AI-powered tools that understand your business context. Greg.Xrm.Mcp is a foundational framework designed to revolutionize how developers interact with Microsoft Dataverse through intelligent MCP-enabled AI assistants (VS Code Copilot MCP extension, Claude Desktop, and other MCP clients).
▶️ Check-out this video showcasing the tool in action.
🏗️ Framework Architecture
At its core, Greg.Xrm.Mcp provides a robust foundation for building specialized MCP servers that seamlessly integrate with Dataverse ecosystems:
Greg.Xrm.Mcp.Core - The Foundation
- 🔐 Unified Authentication: Standardized Dataverse connection and token management
- 🔧 Common Services: Reusable components for metadata, queries, and operations
- 🔌 MCP Integration: Built-in Model Context Protocol server capabilities (stdio-based and sse-based)
- 🛡️ Error Handling: Comprehensive error management and structured logging
- ⚡ Performance: Optimized for real-time AI assistant interactions
✅ Current Capabilities (AppMaker Server)
The flagship implementation Greg.Xrm.Mcp.AppMaker currently offers:
- 🛠️ Tools
- 📦 Dataverse Metadata Access:
- 📂 List all tables in a given environment
- 📂 List all columns of a given table
- 📦 System Form Manipulation:
- 📂 Form Inventory: List all forms for a Dataverse table (formatted text or JSON)
- 🧬 Form Definition Retrieval: Fetch form definition (XML or JSON) with metadata
- 🧹 Form Updater: Updates the structure of a form using AI-generated layout (LLM-assisted, non-deterministic)
- ✅ FormXML Validation: Validate FormXML structure and report issues
- 📦 Saved Query (view) Management:
- 📂 Saved Query Inventory: List all saved queries for a table (formatted text or JSON)
- 🧬 Saved Query Definition Retrieval: Fetch saved query definition (both FetchXML and LayoutXML)
- 🧹 Saved Query Updater: Updates the structure of a view using AI-generated layout and filters (LLM-assisted, non-deterministic)
- 🧹 Saved Query Maker: Creates new views using AI-generated layout and filters (LLM-assisted, non-deterministic)
- 📝 Saved Query Renamer: Allows to change the name of an existing view
- 📦 AppModules and Sitemaps
- 🧭 App Module Inventory: Enumerate all model-driven apps with version, managed status, default flag, configuration XML, and associated security roles
- ➕ Add/Remove App Components: Adds or removes table definitions from an app.
- 🧹 Create new AppModules: Creates new Apps, with tables and sitemap.
- ✅ AppModule Validation: Validate the structure and contents of given AppModule and report issues
- 🧬 Sitemap Definition Retrieval: retrieves the XML defining the structure of a given app Sitemap
- 🧹 Sitemap Updater: Updates the structure of a form using AI-generated layout (LLM-assisted, non-deterministic)
- 📦 Dataverse Metadata Access:
- 📄 Resources
docs://instructions_for_formxml: Instructions to be aware of when manipulating Dataverse FormXmlschema://formxml: Returns a set of Xml schemas defining the structure of Dataverse forms.schema://layoutxml: Returns the XML schema describing the structure of Dataverse views in terms of columns.schema://fetchxml: Returns the XML schema of the query that runs Dataverse views.schema://sitemapxml: Returns a set of Xml schemas defining the structure of Dataverse sitemap (navigation bar), and instructions on how to properly generate a SiteMap XML document.
🔌 MCP Usage
The server runs as a Model Context Protocol (stdio) endpoint. You can connect via:
- VS Code (GitHub Copilot MCP extension)
- Claude Desktop (custom MCP server config)
Installation
dotnet tool install --global Greg.Xrm.Mcp.AppMaker
VS Code (.vscode/mcp.json snippet)
{
"servers": {
"AppMaker": {
"command": "Greg.Xrm.Mcp.AppMaker",
"args": [
"--dataverseUrl",
"https://yourorg.crm.dynamics.com"
],
"cwd": "${workspaceFolder}"
}
}
}
Claude Desktop (config fragment)
{
"mcpServers": {
"AppMaker": {
"command": "Greg.Xrm.Mcp.AppMaker",
"args": [
"--dataverseUrl",
"https://yourorg.crm.dynamics.com"
],
}
}
}
🔐 Authentication
The tool uses OAuth authentication to connect to Dataverse. You can simply provide your Dataverse URL as a command-line argument, as described above.
The tool will then prompt you to authenticate via a browser window. The authentication is managed by official Microsoft.PowerPlatform.Dataverse.Client library.
Authentication tokens are cached locally for reuse.
🤝 Contributing
We welcome contributions:
- 🐛 Bug reports & feature requests
- 🧩 New specialized MCP servers
- 📖 Documentation improvements
- 🛠️ Core enhancements / performance tuning
🏷️ License
This project is licensed under the terms specified in the LICENSE file.
🏳️ Important Disclaimer 🏳️
- The toolset is in preview and provided as-is.
- Always export / backup solutions before applying modifications.
- LLM-assisted operations (form editing/cleanup) are inherently non-deterministic.
- Read-only tools (listing & inspection) are safe for production observation.
- The author is not responsible for misuse leading to unintended customization changes.
Made with ❤️ for the Power Platform community.
Collected info
- ★ 20 stars
- ⎇ 4 forks
- Language: C#
- Source updated: 7/22/2026
Config for your environment
Replace {MCP_ENDPOINT_URL} with this MCP’s endpoint URL (from its repo or docs above). No API key — you connect directly.
Tool
OS
Config file: ~/.cursor/mcp.json
{
"mcpServers": {
"mcp-server": {
"url": "{MCP_ENDPOINT_URL}"
}
}
}Paste into mcpServers in the config file. Restart Cursor after saving.
If this MCP is also published on mcpchannel.ai, you can subscribe from Browse and use the gateway config there instead.