Skip to main content
Glama
Kenny-666

Dynamics 365 MCP Server

by Kenny-666

associate_records

Destructive

Links a record to a related record through a validated Dataverse navigation property, handling single-valued lookups and collection membership with optional dry-run preview and ETag controls.

Instructions

Associate records using a validated native navigation property. Single-valued lookup uses conditional PATCH; collection membership uses $ref and requires explicit allow_unprotected_write because parent ETags do not guarantee membership concurrency.

Input Schema

NameRequiredDescriptionDefault
idYes
dryRunNoCompatibility alias for dry_run. Conflicting aliases are rejected.
dry_runNoRead-only preview of environment, target, changes and write blockers. Default false; sensitive fields are masked.
ifMatchNoCompatibility alias for if_match. Conflicting aliases are rejected.
if_matchNoSpecific ETag from a prior read/preview. Without it, reads the current record ETag when the table supports concurrency.
relatedIdNoCompatibility alias for related_id. Conflicting aliases are rejected.
related_idNo
collectionNameNoCompatibility alias for collection_name. Conflicting aliases are rejected.
collection_nameNoNative EntitySetName, such as accounts. Validated against table metadata.
navigationPropertyNoCompatibility alias for navigation_property. Conflicting aliases are rejected.
navigation_propertyNoNative navigation property, resolved from relationship metadata to the specified related table.
allowUnprotectedWriteNoCompatibility alias for allow_unprotected_write. Conflicting aliases are rejected.
relatedCollectionNameNoCompatibility alias for related_collection_name. Conflicting aliases are rejected.
allow_unprotected_writeNoDefault false. Explicitly allow an unprotected write if table concurrency is unconfirmed, or for collection relationship membership. Does not bypass a supplied ETag conflict.
related_collection_nameNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.0.0

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=false; the description goes further by explaining the write mechanism per cardinality and why the collection path needs allow_unprotected_write (parent ETags don't guarantee membership concurrency). It omits that a single-valued association overwrites the prior lookup value, which is the main destructive consequence an agent should know.

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

Conciseness5/5

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

Two sentences, zero filler, and the core action is front-loaded before the mechanism detail. Dense technical vocabulary is used only where it carries information.

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 destructive, non-idempotent mutation with 15 parameters and no output schema, the description covers the two execution paths, the required safety flag, and the concurrency rationale. Remaining gaps are return shape and overwrite semantics, which are moderate but not fatal given the annotations.

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 80%, so the schema already documents collection_name, navigation_property, if_match, dry_run, and allow_unprotected_write, making 3 the baseline. The description adds real value by tying navigation_property cardinality to which write path and which flag are required, but adds nothing about the undocumented related_collection_name or the alias-conflict behavior.

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?

States a specific verb and resource ('Associate records') plus a constraint that scopes it to 'a validated native navigation property', which separates it from generic update tools like update_existing_record. It stops short of naming the obvious sibling disassociate_records or any alternative, so sibling differentiation is implied rather than explicit.

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

Usage Guidelines4/5

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

Clearly routes between the tool's two modes: single-valued lookup goes through a conditional PATCH, collection membership goes through $ref and requires allow_unprotected_write. It does not say when to prefer this over update_existing_record or disassociate_records, so there is context but no exclusions.

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