Dataverse Plugin MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_environmentsA | List the authentication profiles (Dataverse environments) configured in the pac CLI. |
| select_environmentA | Set which authentication profile/Dataverse environment is active (index from list_environments). |
| create_plugin_projectA | Create a new C# Dataverse plug-in project (pac plugin init) under plugins/. Generates a .NET (net462) project with a sample Plugin1 class ready to edit. Does not register anything in Dataverse -- it only creates the code locally. name: must be a valid C# identifier (no hyphens/spaces) -- it becomes the project namespace. sign: defaults to True -- generates a .snk key and signs the assembly with a strong name (required by classic assembly registration). Use False (--skip-signing) only if the package bundles unsigned third-party dependent assemblies. |
| build_pluginC | Build the plug-in project with 'dotnet build' and return the build output. |
| open_registration_toolA | Open the Plugin Registration Tool (PRT) for the FIRST registration of a plug-in package. 'pac plugin push' only UPDATES a package that already exists in Dataverse (it needs the pluginId). The first-time registration of a new package still requires the PRT or the Visual Studio extension -- there is no CLI command to create the package from scratch. After registering it for the first time in the PRT, copy the package/assembly GUID shown there and use it in push_plugin_update() for every following update. |
| push_plugin_updateA | Rebuild and push (upload) a plug-in that is ALREADY REGISTERED in Dataverse. plugin_id: GUID of the PluginPackage (or PluginAssembly), obtained from the first registration via the PRT. environment: index, name, or URL from list_environments(); empty uses the pac active environment. item_type: 'Nuget' (package generated by pac plugin init, plugin_id = PluginPackage) or 'Assembly' (loose dll, plugin_id = PluginAssembly -- requires file_path pointing to the compiled .dll, e.g. bin/Debug/net462/ProjectName.dll). file_path: relative to project_path; required when item_type='Assembly'. WARNING: this replaces the code currently running in the given environment. |
| list_registered_pluginsB | List the plug-in packages (pluginpackages) and assemblies (pluginassemblies) registered in the environment. |
| list_plugin_typesA | List the plug-in classes (plugintypes) of an assembly, given the assembly's name or GUID. |
| list_stepsB | List the SDK message processing steps (message/entity/stage) of a plug-in class. |
| create_stepA | Register a new SDK message processing step, binding a plug-in class to a message/entity/stage. plugin_type_name_or_id: typename (Namespace.Class), friendlyname, or GUID of the plugintype -- use list_plugin_types() to find it. message: Dataverse message name, e.g. 'Create', 'Update', 'Delete'. entity: logical name of the table (e.g. 'account'); empty = all entities that support the message. stage: 'PreValidation', 'PreOperation', or 'PostOperation'. filtering_attributes: comma-separated list of columns (only meaningful for 'Update'). rank: execution order among steps in the same stage/message/entity (lower runs first). configuration: free text (unsecure configuration) passed to the plugin's constructor. impersonate_user_id: GUID of a systemuser to run the step as ("Run in User's Context"); empty = runs as the user who triggered the operation. WARNING: this creates a real record in the environment -- the plug-in starts executing for real. |
| update_stepA | Update properties of an existing SDK message processing step. Each optional parameter is only changed if provided (None/empty = keep the current value), except filtering_attributes and configuration: pass an explicit empty string to clear the field. |
| delete_stepA | Delete an SDK message processing step (its images are removed in cascade). WARNING: the plug-in stops executing for this message/entity/stage combination. |
| set_secure_configurationA | Set the Secure Configuration of a step (text only accessible to the plug-in, not shown in the PRT/UI). Creates the secure configuration record if the step doesn't have one yet, or updates the existing one. |
| toggle_stepB | Enable or disable an existing SDK message processing step. |
| create_step_imageA | Register a pre/post image on an existing step, so the plug-in can read values before/after the operation. step_id: GUID of the step (returned by create_step or list_steps). attributes: comma-separated list of columns to include (e.g. 'description,firstname'); empty = all columns. image_type: 'PreImage' (values before the operation), 'PostImage' (after), or 'Both'. Pre-Image is not available for the 'Create' message (the row does not exist yet); Post-Image is not available for 'Delete'. alias: name used in the C# code to access the image (e.g. localPluginContext.PluginExecutionContext.PreEntityImages["PreImage"]). Empty uses 'image_type' itself as the alias. |
| list_imagesC | List the pre/post images registered on an SDK message processing step. |
| update_imageA | "Update" the attributes, alias, or type of an already-registered pre/post image. The Dataverse Web API rejects direct PATCH on sdkmessageprocessingstepimages (it always returns the generic, undocumented 0x80040216 error -- confirmed by testing; it looks like an undocumented platform limitation for this table). So this tool recreates the image instead: it reads the current values, deletes it, and creates a new one with the merged fields, bound to the same step. The image 'id' changes -- use the value returned by this call. Leave a parameter out (None) to keep its current value. |
| delete_imageB | Delete a pre/post image from a step, without deleting the step itself. |
| delete_assemblyA | Delete a registered PluginAssembly (without a PluginPackage). Only works if no SDK message processing steps depend on classes from this assembly -- delete the steps first with delete_step(). Dataverse rejects the deletion otherwise. |
| delete_packageA | Delete a registered PluginPackage (Nuget package). WARNING: this also deletes every assembly, plug-in class, and step inside the package. |
| list_available_messagesA | List the Dataverse message names (Create, Update, Delete, Assign, ...) supported by a table. Useful to know what to pass as 'message' to create_step() before attempting to register it. |
| list_execution_logsA | Read the latest Plug-in Trace Log entries (Trace()/exception logs from the plug-in). plugin_type_name: filters by typename (e.g. 'MyFirstPlugin.Plugin1'); empty = all plug-ins. Requires tracing to be enabled in the environment -- see configure_tracing(). |
| configure_tracingA | Turn the environment's Plug-in Trace Log on/off (required for list_execution_logs to work). level: 'Off', 'Exception' (only logs when the plug-in throws an exception), or 'All' (always logs). Remember to switch back to 'Off' or 'Exception' after debugging -- logs consume the organization's storage space. |
| xray_assemblyA | Generate a complete report of a registered plug-in assembly, in a single call: assembly metadata, every class (plugintype), every step with ALL its configuration (message, entity, stage, mode, rank, filtering attributes, whether it has a configuration/secure configuration, impersonation user), and each step's images. include_logs: appends, per class, the last 5 Plug-in Trace Log entries (duration and error, if any). Only returns something if tracing is enabled -- see configure_tracing(). |
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/lucasjesus0311/dataverse-plugin-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server