Skip to main content
Glama
Kenny-666

Dynamics 365 MCP Server

by Kenny-666

d365_plugin_step_register

Destructive

Registers a plugin step for an existing native plugin type, validates message/entity filters, detects duplicate signatures, and previews changes with dry_run before writing.

Instructions

Register a step for an existing native plugin type. Resolves message/entity filters, validates filtering fields and detects duplicate signatures. No write is automatically replayed. Optional secure configuration is allocated separately and bound in the step create; all phases report their IDs on failure. dry_run previews without writing.

Input Schema

NameRequiredDescriptionDefault
modeYes0/Synchronous or 1/Asynchronous. Async requires PostOperation.
nameNo
rankYes
stageYes10/PreValidation, 20/PreOperation, 40/PostOperation.
dryRunNoCompatibility alias for dry_run. Conflicting aliases are rejected.
dry_runNoRead-only preview of the environment, resolved target and changes. Configuration values are withheld. Default false.
messageYesExact SDK message name, for example Update.
pluginTypeNoCompatibility alias for plugin_type. Conflicting aliases are rejected.
descriptionNo
plugin_typeNo
primaryEntityNoCompatibility alias for primary_entity. Conflicting aliases are rejected.
conflictPolicyNoCompatibility alias for conflict_policy. Conflicting aliases are rejected.
primary_entityNoLogical table name. Omit for a global message registration.
conflict_policyNoDefault error. Multiple duplicates remain an error. update_existing preserves omitted optional fields/configuration.
filteringAttributesNoCompatibility alias for filtering_attributes. Conflicting aliases are rejected.
impersonatingUserIdNoCompatibility alias for impersonating_user_id. Conflicting aliases are rejected.
secureConfigurationNoCompatibility alias for secure_configuration. Conflicting aliases are rejected.
supportedDeploymentNoCompatibility alias for supported_deployment. Conflicting aliases are rejected.
filtering_attributesNoEntity-specific Update only. Deduplicated, lowercased, checked against metadata; primary key rejected. Empty array clears filtering.
secure_configurationNoOptional secret; never echoed by a write or preview. Uses a new secure configuration row.
supported_deploymentNoDeployment: 0/ServerOnly, 1/OfflineOnly, 2/Both; availability depends on the target platform.
impersonating_user_idNoRun as this system user; null restores calling-user context.
unsecureConfigurationNoCompatibility alias for unsecure_configuration. Conflicting aliases are rejected.
allowUnprotectedUpdateNoCompatibility alias for allow_unprotected_update. Conflicting aliases are rejected.
unsecure_configurationNoOptional unsecure configuration; never echoed by a write or preview.
allow_unprotected_updateNoDefault false. Explicitly allow an update with If-Match:* if table metadata does not confirm optimistic concurrency. Does not bypass a supplied ETag conflict.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.0.0

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=false, so the description's job is limited to adding context, and it does: no automatic replay of the write, secure configuration is allocated as a separate row and bound during create, and all phases report IDs on failure. That partial-failure/ID-reporting detail is genuinely useful and not derivable from the schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five tight sentences, front-loaded with the core action before the validation, configuration, and preview details. No filler, though the secure-configuration sentence is dense enough that a shorter phrasing would read faster.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 26-parameter mutation tool with no output schema, the description covers the important unknowns: dry_run as a non-writing preview, partial-failure ID reporting, and secure configuration handling. It does not say what a successful call returns (e.g. step ID/shape), which is the main remaining gap given the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 85% across 26 parameters, so the schema already carries the burden, including enums, aliases, and dry_run semantics. The description adds only the aggregate notion that message/entity filters are resolved and filtering fields validated, which explains behavior rather than individual parameters; specific parameter meaning is left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb and resource ("Register a step for an existing native plugin type"), which separates it from the query/update siblings by implication. It never names d365_plugin_steps_query or d365_plugin_step_update explicitly, so the differentiation relies on the reader inferring register-vs-read-vs-modify.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by "Register a step for an existing native plugin type" plus the note that dry_run previews without writing, which tells an agent how to do a safe rehearsal. There is no explicit when-not guidance, no mention of the update/query siblings, and no statement of prerequisites such as needing the plugin type to already exist in the target environment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools