# Dataverse Mcp

> A Model Context Protocol (MCP) server for Microsoft Dataverse that enables schema operations including creating and updating tables, columns, relationships, and option sets using the Dataverse Web API.

- **Type:** MCP server
- **Install:** `agentstack add mcp-mwhesse-dataverse-mcp`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [mwhesse](https://agentstack.voostack.com/s/mwhesse)
- **Installs:** 0
- **Category:** [Integrations](https://agentstack.voostack.com/c/integrations)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [mwhesse](https://github.com/mwhesse)
- **Source:** https://github.com/mwhesse/dataverse-mcp

## Install

```sh
agentstack add mcp-mwhesse-dataverse-mcp
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Dataverse MCP Server

A Model Context Protocol (MCP) server for Microsoft Dataverse that enables schema operations including creating and updating tables, columns, relationships, and option sets using the Dataverse Web API.

## 🚀 Key Features

✅ **Manage Tables & Columns** - Create, update, delete, and list custom tables with all column types (String, Integer, Boolean, DateTime, Picklist, Lookup, AutoNumber, etc.)

✅ **Manage Relationships** - Create One-to-Many and Many-to-Many relationships between entities with proper cascade behaviors

✅ **Manage Option Sets** - Create and manage global option sets with custom options, colors, and values

✅ **Solution-Based Architecture** - Enterprise-grade solution management with persistent context and automatic customization prefixes

✅ **Security & Access Control** - Complete security role management, team operations, and business unit hierarchy management

✅ **WebAPI Call Generator** - Generate ready-to-use HTTP requests, cURL commands, and JavaScript code for any Dataverse operation

✅ **PowerPages WebAPI Generator** - Generate PowerPages-specific WebAPI calls using the `/_api/[logicalEntityName]` format with React examples

✅ **PowerPages Configuration Management** - Manage table permissions and WebAPI site settings for PowerPages Code Sites with YAML file automation

✅ **Schema Export & Visualization** - Export complete solution schemas to JSON with advanced filtering, then generate professional Mermaid ERD diagrams with relationship visualization

✅ **Mermaid Diagram Generation** - Convert exported schemas into professional Entity Relationship Diagrams with enhanced column markers, lookup target display, and unlimited table support

✅ **AutoNumber Column Management** - Create and manage AutoNumber columns with customizable format patterns for automatic serial numbers, reference codes, and unique identifiers

✅ **Professional Integration** - OAuth2 authentication, comprehensive error handling, and enterprise-ready deployment

✅ **Production Ready** - Comprehensive testing completed with 7 critical bugs found and fixed, 100% tool coverage achieved

## Table of Contents

- [Features](#features)
  - [Table Operations](#table-operations)
  - [Column Operations](#column-operations)
  - [AutoNumber Column Operations](#autonumber-column-operations)
  - [Relationship Operations](#relationship-operations)
  - [Option Set Operations](#option-set-operations)
  - [Solution & Publisher Operations](#solution--publisher-operations)
  - [Security Role Operations](#security-role-operations)
  - [Team Operations](#team-operations)
  - [Business Unit Operations](#business-unit-operations)
  - [Schema Export Operations](#schema-export-operations)
  - [WebAPI Call Generator](#webapi-call-generator)
  - [PowerPages WebAPI Generator](#powerpages-webapi-generator)
  - [PowerPages Configuration Management](#powerpages-configuration-management)
- [Solution-Based Architecture](#solution-based-architecture)
  - [Key Benefits](#key-benefits)
  - [Solution Workflow](#solution-workflow)
  - [Example: XYZ Organization Setup](#example-xyz-organization-setup)
  - [Persistent Solution Context](#persistent-solution-context)
- [Supported Column Types](#supported-column-types)
  - [Column Type Details](#column-type-details)
  - [Tested Column Scenarios](#tested-column-scenarios)
  - [Column Operations Status](#column-operations-status)
- [Testing & Quality Assurance](#testing--quality-assurance)
- [Prerequisites](#prerequisites)
- [Setup](#setup)
  - [1. Azure App Registration](#1-azure-app-registration)
  - [2. Create Client Secret](#2-create-client-secret)
  - [3. Create Application User in Dataverse](#3-create-application-user-in-dataverse)
  - [4. Get Required Information](#4-get-required-information)
- [Installation](#installation)
- [Configuration](#configuration)
  - [Windows MCP Configuration](#windows-mcp-configuration)
  - [Option 1: Using .env file (Recommended for MCP Server Development)](#option-1-using-env-file-recommended-for-mcp-server-development)
  - [Option 2: Using MCP environment variables (Recommended for Normal Usage)](#option-2-using-mcp-environment-variables-recommended-for-normal-usage)
  - [Option 3: Hybrid Configuration](#option-3-hybrid-configuration)
- [Usage Examples](#usage-examples)
  - [Creating a Custom Table](#creating-a-custom-table)
  - [Adding Columns to a Table](#adding-columns-to-a-table)
  - [Creating AutoNumber Columns](#creating-autonumber-columns)
  - [Creating Relationships](#creating-relationships)
  - [Managing Option Sets](#managing-option-sets)
  - [Managing Security Roles](#managing-security-roles)
  - [Managing Teams](#managing-teams)
  - [Managing Business Units](#managing-business-units)
  - [Exporting Solution Schema](#exporting-solution-schema)
  - [Mermaid Diagram Generation](#mermaid-diagram-generation)
  - [WebAPI Call Generator](#webapi-call-generator)
  - [PowerPages WebAPI Generator](#powerpages-webapi-generator)
  - [PowerPages Configuration Management](#powerpages-configuration-management)
- [Authentication](#authentication)
- [Error Handling](#error-handling)
- [Security Considerations](#security-considerations)
- [Troubleshooting](#troubleshooting)
  - [Common Issues](#common-issues)
  - [Debug Mode](#debug-mode)
- [API Reference](#api-reference)
- [Solution Management Best Practices](#solution-management-best-practices)
  - [Publisher Configuration](#publisher-configuration)
  - [Solution Context Management](#solution-context-management)
  - [Environment Promotion](#environment-promotion)
  - [Git Integration](#git-integration)
- [Developer Notebook](#developer-notebook)
  - [MCP Configuration Recommendations](#mcp-configuration-recommendations)
  - [Read-Only Tools for alwaysAllow Configuration](#read-only-tools-for-alwaysallow-configuration)
  - [Benefits of This Configuration](#benefits-of-this-configuration)
  - [Common Development Workflows](#common-development-workflows)
  - [Developer Security Considerations](#developer-security-considerations)
  - [Advanced Configuration Tips](#advanced-configuration-tips)
- [Contributing](#contributing)
- [Releasing](#releasing)
  - [Creating a Release](#creating-a-release)
  - [Automated GitHub Releases](#automated-github-releases)
  - [Manual Release Process](#manual-release-process)
- [Changelog](#changelog)
- [License](#license)
- [Support](#support)

## Features

This MCP server provides comprehensive tools for Dataverse schema management:

### Table Operations
- **create_dataverse_table** ✅ **Fully Tested** - **Create Dataverse Table**: Creates a new custom table in Dataverse with the specified configuration. Use this when you need to create a new entity to store business data. Requires a solution context to be set first.
- **get_dataverse_table** ✅ **Fully Tested** - **Get Dataverse Table**: Retrieves detailed information about a specific Dataverse table including its metadata, properties, and configuration. Use this to inspect table definitions and understand table structure.
- **update_dataverse_table** ✅ **Fully Tested** - **Update Dataverse Table**: Updates the properties and configuration of an existing Dataverse table. Use this to modify table settings like display names, descriptions, or feature enablement (activities, notes, auditing, etc.). Changes are published automatically.
- **delete_dataverse_table** ✅ **Fully Tested** - **Delete Dataverse Table**: Permanently deletes a custom table from Dataverse. WARNING: This action cannot be undone and will remove all data in the table. Use with extreme caution and only for tables that are no longer needed.
- **list_dataverse_tables** ✅ **Fully Tested** - **List Dataverse Tables**: Retrieves a list of tables in the Dataverse environment with filtering options. Use this to discover available tables, find custom tables, or get an overview of the data model. Supports filtering by custom/system tables and managed/unmanaged status.

### Column Operations
- **create_dataverse_column** ✅ **Fully Tested** - **Create Dataverse Column**: Creates a new column (field) in a Dataverse table with the specified data type and configuration. Supports various column types including text, numbers, dates, lookups, and choice lists. Use this to add new fields to store specific data in your tables. Requires a solution context to be set first.
- **get_dataverse_column** ✅ **Fully Tested** - **Get Dataverse Column**: Retrieves detailed information about a specific column in a Dataverse table, including its data type, properties, and configuration settings. Use this to inspect column definitions and understand field structure.
- **update_dataverse_column** ✅ **Fully Tested** - **Update Dataverse Column**: Updates the properties and configuration of an existing column in a Dataverse table. Use this to modify column settings like display names, descriptions, required levels, or audit settings. Note that data type cannot be changed after creation.
- **delete_dataverse_column** ✅ **Fully Tested** - **Delete Dataverse Column**: Permanently deletes a column from a Dataverse table. WARNING: This action cannot be undone and will remove all data stored in this column. Use with extreme caution and only for columns that are no longer needed.
- **list_dataverse_columns** ✅ **Fully Tested** - **List Dataverse Columns**: Retrieves a list of columns in a specific Dataverse table with filtering options. Use this to discover available fields in a table, find custom columns, or get an overview of the table structure. Supports filtering by custom/system columns and managed/unmanaged status.

### AutoNumber Column Operations
- **create_autonumber_column** ✅ **Fully Tested** - **Create AutoNumber Column**: Creates a new AutoNumber column in a Dataverse table with specified format. AutoNumber columns automatically generate alphanumeric strings using sequential numbers, random strings, and datetime placeholders. Requires a solution context to be set first.
- **update_autonumber_format** ✅ **Fully Tested** - **Update AutoNumber Format**: Updates the AutoNumberFormat of an existing AutoNumber column. This changes how future values will be generated but does not affect existing records.
- **set_autonumber_seed** ✅ **Fully Tested** - **Set AutoNumber Seed**: Sets the seed value for an AutoNumber column's sequential segment using the SetAutoNumberSeed action. This controls the starting number for future records. Note: Seed values are environment-specific and not included in solutions.
- **get_autonumber_column** ✅ **Fully Tested** - **Get AutoNumber Column**: Retrieves detailed information about an AutoNumber column including its current format, properties, and configuration.
- **list_autonumber_columns** ✅ **Fully Tested** - **List AutoNumber Columns**: Lists all AutoNumber columns in a specific table or across all tables in the environment. Helps identify existing AutoNumber implementations.
- **convert_to_autonumber** ✅ **Fully Tested** - **Convert to AutoNumber**: Converts an existing text column to an AutoNumber column by adding an AutoNumberFormat. The column must be a String type with Text format and should be empty or contain compatible data.

### Relationship Operations
- **create_dataverse_relationship** ✅ **Fully Tested** - **Create Dataverse Relationship**: Creates a relationship between two Dataverse tables. Supports One-to-Many relationships (parent-child with lookup field) and Many-to-Many relationships (junction table). Use this to establish data connections between tables, enable navigation, and maintain referential integrity.
- **get_dataverse_relationship** ✅ **Fully Tested** - **Get Dataverse Relationship**: Retrieves detailed information about a specific relationship between Dataverse tables, including its configuration, cascade settings, and menu behavior. Use this to inspect relationship definitions and understand table connections.
- **delete_dataverse_relationship** ✅ **Fully Tested** - **Delete Dataverse Relationship**: Permanently deletes a relationship between Dataverse tables. WARNING: This action cannot be undone and will remove the connection between tables, including any lookup fields for One-to-Many relationships. Use with extreme caution.
- **list_dataverse_relationships** ✅ **Fully Tested** - **List Dataverse Relationships**: Retrieves a list of relationships in the Dataverse environment with filtering options. Use this to discover table connections, find custom relationships, or get an overview of the data model relationships. Supports filtering by entity, relationship type, and managed/unmanaged status.

### Option Set Operations
- **create_dataverse_optionset** ✅ **Fully Tested** - **Create Dataverse Option Set**: Creates a new global option set (choice list) in Dataverse with predefined options. Use this to create reusable choice lists that can be used across multiple tables and columns. Option sets provide consistent data entry options and improve data quality.
- **get_dataverse_optionset** ✅ **Fully Tested** - **Get Dataverse Option Set**: Retrieves detailed information about a specific option set including its metadata, options, and configuration. Use this to inspect option set definitions and understand available choices.
- **update_dataverse_optionset** ✅ **Fully Tested** - **Update Dataverse Option Set**: Updates an existing option set by modifying its properties and managing its options. Use this to add new choices, update existing ones, remove obsolete options, or change the option set's display name and description. Changes affect all columns using this option set.
- **delete_dataverse_optionset** ✅ **Fully Tested** - **Delete Dataverse Option Set**: Permanently deletes an option set from Dataverse. WARNING: This action cannot be undone and will fail if the option set is being used by any columns. Ensure no columns reference this option set before deletion.
- **list_dataverse_optionsets** ✅ **Fully Tested** - **List Dataverse Option Sets**: Retrieves a list of option sets in the Dataverse environment with filtering options. Use this to discover available choice lists, find custom option sets, or get an overview of reusable options. Supports filtering by custom/system and managed/unmanaged status.
- **get_dataverse_optionset_options** ✅ **Fully Tested** - **Get Dataverse Option Set Options**: Retrieves all options (choices) within a specific option set, including their values, labels, descriptions, and colors. Use this to inspect the available choices in an option set and understand their configuration.

### Solution & Publisher Operations
- **create_dataverse_publisher** ✅ **Fully Tested** - **Create Dataverse Publisher**: Creates a new publisher in Dataverse. Publishers are required for creating solutions and provide customization prefixes for schema names. Use this to establish a publisher identity before creating solutions and custom components.
- **get_dataverse_publisher** ✅ **Fully Tested** - **Get Dataverse Publisher**: Retrieves detailed information about a specific publisher including its customization prefix, option value prefix, and configuration. Use this to inspect publisher properties and understand customization settings.
- **list_dataverse_publishers** ✅ **Fully Tested** - **List Dataverse Publishers**: Retrieves a list of publishers in the Dataverse environment with filtering options. Use this to discover available publishers, find custom publishers for solution creation, or get an overview of publisher configurations including customization prefixes.
- **create_dataverse_solution** ✅ **Fully Tested** - **Create Dataverse Solution**: Creates a new unmanaged solution in Dataverse. Solutions are containers for customizations and allow you to package, deploy, and manage custom components. Use this to create a solution before adding tables, columns, and other customizations.
- **get_dataverse_solution** ✅ **Fully Tested** - **Get Dataverse Solution**: Retrieves detailed information about a specific solution

…

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [mwhesse](https://github.com/mwhesse)
- **Source:** [mwhesse/dataverse-mcp](https://github.com/mwhesse/dataverse-mcp)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** yes
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-mwhesse-dataverse-mcp
- Seller: https://agentstack.voostack.com/s/mwhesse
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
