dataverse-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DATAVERSE_CLIENT_ID | Yes | Your app registration client ID | |
| DATAVERSE_TENANT_ID | Yes | Your Azure tenant ID | |
| DATAVERSE_ALLOW_DELETE | No | Optional flag to enable delete operations (set to 'true' to enable) | |
| DATAVERSE_RESOURCE_URL | Yes | Your Dataverse environment URL (e.g., https://your-org.crm.dynamics.com) | |
| DATAVERSE_CLIENT_SECRET | Yes | Your client secret | |
| DATAVERSE_ENTITY_PREFIX | No | Optional default prefix filter for list_entities | |
| DATAVERSE_SOLUTION_NAME | No | Optional default solution unique name for list_entities |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_entitiesA | List Dataverse tables (entities) with optional prefix and solution filters |
| list_solutionsB | List Dataverse solutions (uniquename is used to filter list_entities) |
| get_entity_schemaA | Get attributes (columns) of a specific Dataverse table. Choice-style columns (Choice, Status, State, MultiSelect) carry an option_set summary with is_global and option_count, so one dump shows which choice lists are shared org-wide. Read the option values per column with get_picklist_options. |
| query_recordsB | Query records from a Dataverse table with OData filters |
| get_recordA | Get a single record by ID from a Dataverse table |
| create_recordB | Create a new record in a Dataverse table |
| update_recordC | Update an existing record in a Dataverse table |
| delete_recordB | Delete a record from a Dataverse table (currently disabled for safety) |
| create_entityB | Create a new Dataverse table (entity) with specified attributes |
| add_attributeA | Add a column (attribute) to an existing Dataverse table |
| create_relationshipC | Create a relationship between two Dataverse tables |
| update_attributeA | Update metadata of an existing column: display name, description, required level, max length, min/max value, precision. Dataverse fixes a column's type and logical name at creation — to change either, add_attribute a new column, migrate the values with update_record, then delete_attribute the old one. |
| delete_attributeA | Delete a column from a Dataverse table (currently disabled for safety) |
| get_attribute_dependenciesA | List CRM components that reference a column — forms, views, workflows, business rules, plugins. Call this when delete_attribute fails with 0x8004f01f, or before any destructive change to a column. Component names are best-effort: resolved for common types, null otherwise. Backed by the Dataverse RetrieveDependenciesForDelete function. |
| list_entity_keysA | List alternate keys defined on a Dataverse table. Returns a flat array of { logical_name, schema_name, display_name, key_attributes, entity_key_index_status, metadata_id }. entity_key_index_status reflects the background index build (Pending → Active, or Failed) — alt keys are not usable for keyed-PATCH upserts until Active. |
| add_entity_keyA | Create an alternate key on a Dataverse table (composite supported via key_attributes). Use for race-safe upserts via keyed-PATCH or to enforce a uniqueness constraint that the primary key doesn't cover. NOTE: Dataverse builds the supporting unique index asynchronously — the key is not usable for keyed lookups until its EntityKeyIndexStatus becomes 'Active'. Poll with list_entity_keys. |
| delete_entity_keyA | Delete an alternate key from a Dataverse table (currently disabled for safety) |
| add_picklist_optionA | Add an option to an existing Local or Global OptionSet (Dataverse InsertOptionValue action). Requires Customizer or System Administrator role; HTTP 403 otherwise. |
| update_picklist_optionA | Update an existing option's label/description on a Local or Global OptionSet (Dataverse UpdateOptionValue action). Requires Customizer or System Administrator role. |
| delete_picklist_optionA | Remove an option from a Local or Global OptionSet (currently disabled for safety) |
| get_picklist_optionsA | Read a Local or Global OptionSet as { option_set: { name, is_global, metadata_id }, options: [{ value, label }] }. Use is_global to tell whether a column holds a local copy of the values or is bound to a shared Global OptionSet — matching values alone do not prove a binding. Works for Choice, Status, State and MultiSelect columns. |
| invoke_actionA | Invoke a Dataverse Web API action (POST) — bound or unbound. Use for operations that are not plain CRUD, e.g. PublishDuplicateRule (bound to a duplicaterule) or QualifyLead (bound to a lead), or UnpublishDuplicateRule (unbound, takes DuplicateRuleId). Whether an action is bound is defined in the Web API $metadata. Pass entity_set+id for bound actions, neither for unbound. parameters becomes the JSON request body. |
| invoke_functionA | Invoke a Dataverse Web API function (GET) — bound or unbound. Use for read-only operations exposed as functions, e.g. WhoAmI (unbound) or RetrieveDuplicates. Pass entity_set+id for bound functions, neither for unbound. parameters are inlined into the URL as OData function arguments. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rededis/dataverse-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server