Skip to main content
Glama
ahaugerud

d365-dmf-mcp

by ahaugerud

import_data

Imports CSV or Excel files into Dynamics 365 Finance & Operations data projects through DMF, handling multiple entities, dependency order, validation, and optional wait for results.

Instructions

Import one or more data files into D365 through a DMF data project, as the signed-in user.

definition_group is the data project name (created automatically if it doesn't exist), company the legal entity id (e.g. USMF). files lists {entity, file_path} pairs: entity is the DMF entity name as shown in D365 (e.g. "Customer groups"; find it with search_entities), file_path a .csv or .xlsx whose first row holds the entity's field names (staging column names, e.g. CUSTOMERGROUPID; list them with get_entity_fields). Several entities can be imported in one call; D365 decides the order from their dependencies. format is the file format in the package, free text and case-insensitive: "CSV" (default) and "EXCEL" are the common ones; other CSV/Excel-based source formats on the environment (e.g. "CSV-Unicode") also work. An unknown value returns the available ones. Composite and XML-based entities are not supported. With wait=True, polls until the import finishes (or the timeout); otherwise returns the execution id to check with get_execution_status. dry_run only validates and builds the package.

Input Schema

NameRequiredDescriptionDefault
waitNo
filesYes
formatNoCSV
companyYes
dry_runNo
definition_groupYes

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.2.0

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full load and does well: it discloses that the data project is created automatically if absent, that D365 determines import order from dependencies, that an unknown format value returns the available ones, and that dry_run only validates and builds the package. It stops short of failure semantics (partial-import behavior, rollback, idempotency on re-run), which matters for a bulk write tool.

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?

Front-loaded with the core action, then parameter-by-parameter, then the wait/dry_run execution modes — a logical order with no filler sentences. The format paragraph is somewhat long-winded for a single optional string parameter, but every clause still conveys usable information.

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

Completeness5/5

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

For a 6-parameter bulk-write tool with no annotations, the description covers prerequisites, file shape, entity lookup, supported formats, unsupported entity types, and both sync and async execution paths. Return values need not be explained since an output schema exists, and the description still points at the execution-id follow-up correctly.

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

Parameters5/5

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

Schema coverage is 0%, so the description must compensate and does: definition_group, company (with a USMF example), files (both entity and file_path, including that the first row holds staging column names and must be .csv/.xlsx), format (free text, case-insensitive, CSV default, EXCEL, CSV-Unicode), wait, and dry_run are all explained. This is meaningfully richer than the bare schema.

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

Purpose5/5

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

States a specific verb and resource: importing data files into D365 via a DMF data project. It is immediately distinguishable from siblings like export_data and create_data_project, and it names the mechanism (data project) that would otherwise be ambiguous.

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

Usage Guidelines5/5

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

Explicitly covers when to use wait=True (poll to completion) vs. the async path (returns an execution id to check with get_execution_status), and what dry_run does. It also routes the agent to search_entities and get_entity_fields for the lookups needed before calling, and states the exclusion that composite and XML-based entities are not supported.

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