dataverse_whoamiLABSCO SUMMARY
Managed identity is the mode that makes this deployable.
Most Dataverse integrations ask for a client secret. Here the Azure-hosted path uses managed identity with no secret at all, and the local path caches an encrypted device-code token — so the credential story scales from a laptop to a pipeline without downgrading. Everything about the tool design points the same way: {summary, data, suggestions} on every response, atomic tools rather than one god-tool, and confirmation required before anything destructive.
What it is
An MCP server that gives an agent live access to a Microsoft Dataverse environment so it stops guessing at schema, column names and OData syntax. Coverage runs from metadata and queries through to security roles, environment variables and plugin trace logs. Every tool name is prefixed dataverse_, every response returns {summary, data, suggestions}, and destructive operations require explicit confirmation.
What you get
- Real schema instead of guesses: tables, table metadata, relationships, option sets and entity keys —
dataverse_list_tables,dataverse_get_table_metadata,dataverse_get_relationships,dataverse_list_global_option_sets,dataverse_get_option_set,dataverse_resolve_entity_name - Three ways to read: OData query, FetchXML, and paged retrieval —
dataverse_query,dataverse_execute_fetchxml,dataverse_retrieve_multiple_with_paging - Record operations including upsert and ownership assignment —
dataverse_get,dataverse_create,dataverse_update,dataverse_delete,dataverse_upsert,dataverse_assign - Relationships managed directly, in bulk where it matters —
dataverse_associate,dataverse_associate_bulk,dataverse_disassociate,dataverse_query_associations - Actions and functions invoked, bound or unbound, with dependency checks before a delete —
dataverse_execute_action,dataverse_execute_function,dataverse_execute_bound_action,dataverse_execute_bound_function,dataverse_list_dependencies,dataverse_retrieve_dependencies_for_delete - Security worked properly: users, their roles, role privileges, team and record-level access —
dataverse_list_users,dataverse_get_user_roles,dataverse_list_roles,dataverse_assign_role_to_user,dataverse_get_role_privileges,dataverse_check_record_access,dataverse_grant_access,dataverse_revoke_access - Schema written as well as read —
dataverse_create_table,dataverse_create_relationship,dataverse_create_attribute,dataverse_update_attribute,dataverse_create_lookup_attribute,dataverse_publish_customizations - Diagnostics you would otherwise open the maker portal for: plugin and workflow trace logs, the audit log, batch execution, change detection and duplicate detection —
dataverse_get_plugin_trace_logs,dataverse_get_workflow_trace_logs,dataverse_get_audit_log,dataverse_batch_execute,dataverse_change_detection,dataverse_detect_duplicates - Four resources including a template for any table's schema and relationships —
dataverse://tables,dataverse://server/instructions,dataverse://tables/{tableName}/schema,dataverse://tables/{tableName}/relationships - Five guided prompts —
analyze-org-health,data-quality-check,schema-review,security-audit,analyze-workflow
Requirements
Node.js 20+ and npx mcp-dataverse install, an interactive wizard that configures the environment, registers the server in VS Code and signs you in. Three authentication modes depending on where it runs: device code for local development (interactive Microsoft sign-in, token cached on disk), client credentials for CI/CD and Docker via an App Registration, and managed identity for Azure-hosted with no secrets at all. Cached tokens are encrypted with AES-256-GCM and never logged. MCP_CONFIG_PATH points at a config.json that overrides the other variables, and DATAVERSE_ENV_URL names your environment. npx mcp-dataverse update re-checks the setup without a reconfigure.
Setup effort
One command — npx mcp-dataverse install
USE CASES
Stopping an agent from inventing column names
Have it read the table metadata and relationships first, so the query it writes uses fields that exist.
Getting an answer out of a complex query
Use FetchXML where OData will not express it, and paged retrieval when the result set is large.
Auditing who can see what
List users and their roles, read the privileges those roles carry, and check access on a specific record.
Debugging a plugin that fires wrongly
Pull the plugin and workflow trace logs directly instead of hunting through the maker portal.
Adding a column and publishing it
Create the attribute, add the lookup if the relationship needs one, then publish the customisation — with the dependency check available before anything is removed.
Checking the data is any good
Run the data-quality prompt over a table for nullity rates, duplicates and a completeness score, and the duplicate detector where you suspect it.
79 tools
Listed in project docs. Your client may show a different list.
dataverse_list_tablesdataverse_get_table_metadatadataverse_get_relationshipsdataverse_list_global_option_setsdataverse_get_option_setdataverse_get_entity_keydataverse_get_attribute_option_setdataverse_update_entitydataverse_resolve_entity_namedataverse_querydataverse_execute_fetchxmldataverse_retrieve_multiple_with_pagingdataverse_getdataverse_createdataverse_updatedataverse_deletedataverse_upsertdataverse_assigndataverse_associatedataverse_associate_bulkdataverse_disassociatedataverse_query_associationsdataverse_execute_actiondataverse_execute_functiondataverse_execute_bound_actiondataverse_execute_bound_functiondataverse_list_dependenciesdataverse_retrieve_dependencies_for_deletedataverse_batch_executedataverse_change_detectiondataverse_publish_customizationsdataverse_create_sitemapdataverse_impersonatedataverse_list_custom_actionsdataverse_list_plugin_stepsdataverse_set_workflow_statedataverse_list_connection_referencesdataverse_get_environment_variabledataverse_set_environment_variabledataverse_create_environment_variabledataverse_environment_capabilitiesdataverse_get_plugin_trace_logsdataverse_get_workflow_trace_logsdataverse_searchdataverse_get_audit_logdataverse_detect_duplicatesdataverse_get_annotationsdataverse_create_annotationdataverse_list_usersdataverse_get_user_rolesdataverse_list_rolesdataverse_assign_role_to_userdataverse_remove_role_from_userdataverse_assign_role_to_teamdataverse_get_role_privilegesdataverse_add_role_privilegesdataverse_replace_role_privilegesdataverse_list_viewsdataverse_upload_file_columndataverse_download_file_columndataverse_list_business_unitsdataverse_list_teamsdataverse_list_workflowsdataverse_get_workflowdataverse_list_guidesdataverse_get_guidedataverse_suggest_toolsdataverse_list_tool_tagsdataverse_create_attributedataverse_update_attributedataverse_delete_attributedataverse_create_lookup_attributedataverse_create_tabledataverse_create_relationshipdataverse_check_record_accessdataverse_grant_accessdataverse_revoke_accessdataverse_merge_recordsBEFORE YOU INSTALL
What to know first
Tools you get
79 tools named in the project's documentation.
Requires
npx on PATH
INSTALLATION
Connect your client
Server setup
npx mcp-dataverse installMCP Clients
VS Code
{
"servers": {
"mcp-dataverse": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"mcp-dataverse"
],
"env": {
"DATAVERSE_ENV_URL": "https://<YOUR_ORG>.crm.dynamics.com"
}
}
}
}Claude Desktop, Cursor, Windsurf, Gemini CLI
{
"mcpServers": {
"mcp-dataverse": {
"command": "npx",
"args": [
"-y",
"mcp-dataverse"
],
"env": {
"DATAVERSE_ENV_URL": "https://<YOUR_ORG>.crm.dynamics.com"
}
}
}
}Claude Code
claude mcp add --transport stdio --scope user \
mcp-dataverse \
-e DATAVERSE_ENV_URL=https://<YOUR_ORG>.crm.dynamics.com \
-- npx -y mcp-dataverseCodex
[mcp_servers.mcp-dataverse]
command = "npx"
args = ["-y", "mcp-dataverse"]
[mcp_servers.mcp-dataverse.env]
DATAVERSE_ENV_URL = "https://<YOUR_ORG>.crm.dynamics.com"