d365-dmf-mcp
MCP server that imports CSV files into Dynamics 365 F&O via Data Management (DMF). It runs locally and authenticates as the user signed in to the Azure CLI.
Setup on Windows
-
winget install astral-sh.uv Microsoft.AzureCLI
-
Sign in with the account that has access to D365 (if there is no
azsession, the server falls back to an interactive browser login):az login --tenant <entra-tenant-id>
-
Register the server with Claude Code (runs the published package via
uvx; see.mcp.json.example):claude mcp add d365-dmf ` -e DMF_AZURE_TENANT_ID=<entra-tenant-id> ` -e DMF_BASE_URL=https://<env>.sandbox.operations.eu.dynamics.com ` -- uvx d365-dmf-mcp
Other MCP clients: copy the block from
.mcp.json.exampleinto the client's MCP config. To run from a local checkout instead, useuvx --from C:\path\to\d365-dmf-mcp d365-dmf-mcp.
Tools
Only the tenant and environment URL are config. Everything else is passed per call.
import_data(definition_group, company, files, format="CSV"): import one or more files into a data project and wait for the result.filesis a list of{entity, file_path};entityis the DMF entity name as shown in D365 (e.g.Customer groups) and the file (.csvor.xlsx) has the entity's field names (e.g.CUSTOMERGROUPID) in its first row. The server generates the package manifest, looks up each entity's target and the dependency order from D365, and creates the data project if it doesn't exist.formatis free text (CSV,EXCEL, or any CSV/Excel-based D365 source format on the environment, e.g.CSV-Unicode).export_data(output_dir, definition_group, company): run an existing export data project and save its files.create_data_project(name, description=""): create an empty import data project (optional;import_datadoes this itself).list_data_projects(name_filter="", operation_type=""): browse existing data projects.list_project_entities(definition_group): the entities in a project, with format and execution order.search_entities(query, limit=50): search the DMF entity catalogue by name, target entity or module.get_entity_fields(entity): the column names (data file header), types, lengths and required flags for an entity.get_execution_status(execution_id): check the status of an execution, with errors if it failed.
Notes
- Composite and XML-based entities are not supported.
- Optional env vars:
DMF_POLL_INTERVAL_SECONDS(default 5),DMF_POLL_TIMEOUT_SECONDS(default 300).
Metadata
Release files for d365-dmf-mcp 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| d365_dmf_mcp-0.2.0.tar.gz | 91.2 kB | Without provenance | Details for d365_dmf_mcp-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| d365_dmf_mcp-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for d365_dmf_mcp-0.2.0-py3-none-any.whl |
Total release size: 101.8 kB
Release files / d365_dmf_mcp-0.2.0.tar.gz
| Download URL | d365_dmf_mcp-0.2.0.tar.gz |
|---|---|
| Size | 91.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f9cfc46c1e295eb9e56c3fe6004da2b95d5ba4b9b9376a1f1bf0d057b7b5d7de
|
|
BLAKE2b-256 checksum How to use checksums |
b16bb1ff5af7ceeac60bc69330482da358390bfcea28858207ba54f1a9f711ff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / d365_dmf_mcp-0.2.0-py3-none-any.whl
| Download URL | d365_dmf_mcp-0.2.0-py3-none-any.whl |
|---|---|
| Size | 10.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bbbe16611c7af82c3bd943ec7aa19e94416188c64ca3704addd373849362371b
|
|
BLAKE2b-256 checksum How to use checksums |
d0de8f53976e954cbac2a634fe9a4d997aabba0e2eed2f4acfa7cf65cc1fdf5a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for d365-dmf-mcp 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.