- Home
- MCP servers
- DataverseDevTools
DataverseDevTools
- other
1
GitHub Stars
other
Language
6 months ago
First Indexed
2 months ago
Catalog Refreshed
Documentation & install
Readme and setup notes from the catalogue, plus a client-ready config you can copy for your MCP host.
Installation
Add the following to your MCP client configuration file.
Configuration
View docs{
"mcpServers": {
"vignaesh01-dataversedevtoolsmcpserver": {
"command": "dataversedevtoolsmcpserver",
"args": [
"--environmentUrl",
"https://yourorg.crm.dynamics.com"
],
"env": {
"HTTP_PROXY": "http://<username@domain.com>:<password>@<proxy.domain.com>:8080",
"HTTPS_PROXY": "http://<username@domain.com>:<password>@<proxy.domain.com>:8080"
}
}
}
}DataverseDevTools MCP Server is a Model Context Protocol (MCP) server that exposes ready-to-use Dataverse tools for user and security administration, data operations, metadata exploration, and troubleshooting. You stay in your workflow by running these tools directly from MCP-enabled clients inside your development environment, such as Visual Studio or VS Code, without switching to separate admin consoles.
How to use
You access the server through an MCP-enabled client. Start the server locally or run it from your development environment, then connect your client by configuring an MCP server entry. Once connected, you can perform common Dataverse tasks via natural prompts. The client will map your prompts to the appropriate tool calls, enabling actions like managing users, roles, data records, and metadata without leaving your IDE.
How to install
Prerequisites you need before installing the MCP server are a modern .NET environment and access to a Dataverse instance. Make sure you have the .NET 8.0 SDK or later installed on your machine.
Install the MCP server as a global .NET tool.
dotnet tool install --global vignaesh01.dataversedevtoolsmcpserver
Additional configuration and usage notes
Configure your MCP client to connect to the local or remote MCP server. You can start simple with the global tool and the environment URL of your Dataverse organization. If you work behind a corporate proxy or require service principals, you can supply additional authentication and proxy-related arguments in your client configuration.
Example configurations for popular MCP clients are shown in the following code snippets. Use the exact command and arguments as shown.
Examples of MCP client configurations
{
"servers": {
"dvmcp": {
"type": "stdio",
"command": "dataversedevtoolsmcpserver",
"args": [
"--environmentUrl",
"https://yourorg.crm.dynamics.com"
]
}
}
}
{
"servers": {
"dvmcp": {
"type": "stdio",
"command": "dataversedevtoolsmcpserver",
"args": [
"--environmentUrl",
"https://yourorg.crm.dynamics.com",
"--tenantId",
"your-tenant-id",
"--clientId",
"your-client-id",
"--clientSecret",
"your-client-secret"
]
}
}
}
{
"servers": {
"dvmcp": {
"type": "stdio",
"command": "dataversedevtoolsmcpserver",
"args": [
"--environmentUrl",
"https://yourorg.crm.dynamics.com"
],
"env":{
"HTTP_PROXY": "http://<username@domain.com>:<password>@<proxy.domain.com>:8080",
"HTTPS_PROXY": "http://<username@domain.com>:<password>@<proxy.domain.com>:8080"
}
}
}
}
More examples for Explorers and cloned repos
{
"servers": {
"dvmcp": {
"type": "stdio",
"command": "dotnet",
"args": [
"run",
"--project",
"C:/Projects/DataverseDevToolsMcpServer/DataverseDevToolsMcpServer/DataverseDevToolsMcpServer.csproj",
"--environmentUrl",
"https://yourorg.crm.dynamics.com"
]
}
}
}
{
"servers": {
"dvmcp": {
"type": "stdio",
"command": "dotnet",
"args": [
"run",
"--project",
"C:/Projects/DataverseDevToolsMcpServer/DataverseDevToolsMcpServer/DataverseDevToolsMcpServer.csproj",
"--environmentUrl",
"https://yourorg.crm.dynamics.com",
"--tenantId",
"your-tenant-id",
"--clientId",
"your-client-id",
"--clientSecret",
"your-client-secret"
]
}
}
}
Notes on usage and capabilities
-
You can prompt the MCP client with natural language to perform actions across User Management, Security Management, Data Management, Entity Metadata, Custom Actions & Custom APIs, and Troubleshooting. The client maps your prompts to the corresponding tools under the hood.
-
The MCP server supports paging for long lists and returns paging tokens when more results are available. For Web API based tools, use the appropriate entity set names and follow standard Web API conventions for lookups and relationships.
Troubleshooting
If you encounter connection or authentication issues, verify that the environment URL is correct, any Azure AD app registrations are properly configured, and the client has the required permissions in Dataverse. If you are behind a proxy, ensure the proxy settings are correctly applied in your MCP client configuration.
Security and prerequisites
Ensure you have appropriate Dataverse permissions for the requested operations. If you plan to use plugin tracing, enable Plugin Trace Log in the environment to capture detailed logs for troubleshooting.
Tools overview
The server exposes a comprehensive set of tools across categories: User/Team/Queue Management, Security Management, Data Management, Entity Metadata, Custom Actions & Custom APIs, and Troubleshooting. Each tool is designed to perform a specific action against Dataverse data or metadata and can be invoked via natural-language prompts in an MCP-enabled client.
Manage .Net Tool
Update the MCP server tool, if needed, with: dotnet tool update -g vignaesh01.dataversedevtoolsmcpserver. To remove it, run: dotnet tool uninstall -g vignaesh01.dataversedevtoolsmcpserver. You can verify installed tools with: dotnet tool list -g.
Notes
- Many search operations support paging via Page Number, Number of records per page, and Paging Cookie. When more records are available, the tool returns the next page token. - For Web API tools, use entity set names (plural schema names) and use proper lookup bindings with odata conventions.
Available tools
GetCurrentUser
Get details of the current logged-in user
GetUserById
Get user details by user ID
SearchUsersByKeyword
Search users where fullname contains a keyword (with paging)
GetUserQueues
List queues for a user (with paging)
GetUserTeams
List teams for a user (with paging)
GetUserRoles
List security roles for a user
SearchBUByKeyword
Search BUs by keyword (with paging)
GetRootBU
Get the root BU
SearchRolesByKeywordAndBU
Search roles by keyword in a BU (with paging)
AssignRoleToUser
Assign role to user
RemoveRoleFromUser
Remove role from user
ChangeUserBU
Change user’s BU
SearchQueuesByKeyword
Search queues by keyword (with paging)
AddUserToQueue
Add user to queue
RemoveUserFromQueue
Remove user from queue
SearchTeamsByKeyword
Search teams by keyword (with paging)
AddUserToTeam
Add user to team
RemoveUserFromTeam
Remove user from team
AssignRoleToTeam
Assign role to team
RemoveRoleFromTeam
Remove role from team
ChangeTeamBU
Change team’s BU
GetRolesByTeamId
List roles assigned to a team
GetEntityPrivByRoleId
Privileges a role has on a specific entity
GetAllPrivByRoleId
All privileges for a role
ListRolesByPrivId
Roles having a specific privilege ID
ExecuteFetchXml
Run a FetchXML query (supports paging-cookie)
ExecuteWebApi
Execute raw Dataverse Web API requests
CreateRecord
Create a record (Web API)
UpdateRecord
Update by ID (Web API)
UpsertRecord
Upsert using alternate keys (Web API)
DeleteRecord
Delete by ID (Web API)
FindEntityLogicalNameUsingKeyword
Find entities by keyword
ListAllEntities
List all entities
GetEntityMetadata
Entity metadata information only
GetFields
Attributes/fields metadata with pagination
GetRelationships
Relationships metadata with pagination
GetOptionSetValuesForEntityField
OptionSet values for a field
FindGlobalOptionSet
Find global OptionSets
GetGlobalOptionSetValues
Values of a global OptionSet
ListAllGlobalOptionSets
List all global OptionSets
GetEntityPrivileges
Privileges defined on an entity
FindCustomActionUsingKeyword
Find custom actions by keyword
GetCustomActionMetadata
Get custom action metadata with Web API usage info
FindCustomApiUsingKeyword
Find custom APIs by keyword
GetCustomApiMetadata
Get metadata for custom APIs with request/response parameters
GetPluginTracesByName
Plugin trace logs by type name (with paging)
GetPluginTracesByCorrId
Plugin trace logs by correlation ID (with paging)