Give your coding agent direct access to Dynamics 365 / Dataverse metadata and web resources through a Model Context Protocol (MCP) server.
D365 MCP server exists for a simple reason — assistants are far more useful when they can act on D365 directly instead of describing what you should do. Give your coding agent direct access to Dynamics 365 / Dataverse metadata and web resources through a Model Context Protocol (MCP) server.
Installation goes through your MCP client rather than a global install: point it at pnpm on npm and it is fetched when the client starts. The copy-paste blocks for Claude Desktop, Claude Code and Cursor are further down this page.
Once D365 is connected, these are the calls the assistant has available:
search_entities — Search Dataverse tables by logical or display nameget_entity_plugins — List plugin steps registered for a specific entityfind_system_jobs — Find system jobs (async operations) with flexible filters (failed by default)health_check_environment — Run a quick environment health summary using system jobs and plugin tracessearch_webresources — Find web resources by name/display nameget_webresource_content — Read decoded web resource content by ID or nameTENANT_ID — CLIENT_IDCLIENT_SECRET — DYNAMICS_365_URL (example: https://orgname.crm.dynamics.com)Windows — The Windows tool exposed by this serverYou will need 7 environment variables: TENANT_ID, CLIENT_ID, CLIENT_SECRET, DYNAMICS_365_URL, YOUR_TENANT_ID, YOUR_CLIENT_ID, YOUR_CLIENT_SECRET. The server will not start without them, which is usually why the tools fail to appear on a first run. Keep credentials in your client's env block or a secrets manager rather than in a file you might commit.
TENANT_ID - CLIENT_ID - CLIENT_SECRET - DYNAMICS_365_URL (example: https://orgname.crm.dynamics.com) Optional logging variables: - MCP_LOG_FILE (defaultAmong the developer tooling options, the useful question is rarely "what can it do" but "what does it cost you to run" — permissions, credentials, and how much of your context its toolset consumes. D365's toolset — search_entities, get_entity_plugins, find_system_jobs and 6 more — is a fair guide to whether it matches your workflow. It is maintained by GitHub Actions; worth a glance at recent repository activity before you build anything load-bearing on it.
SyncDev reviews every entry in this directory against the project's own documentation before publishing, and revisits them as servers change.
| Tool | What it does |
|---|---|
| search_entities | Search Dataverse tables by logical or display name. |
| get_entity_plugins | List plugin steps registered for a specific entity. |
| find_system_jobs | Find system jobs (async operations) with flexible filters (failed by default). |
| health_check_environment | Run a quick environment health summary using system jobs and plugin traces. |
| search_webresources | Find web resources by name/display name. |
| get_webresource_content | Read decoded web resource content by ID or name. |
| TENANT_ID | CLIENT_ID |
| CLIENT_SECRET | DYNAMICS_365_URL (example: https://orgname.crm.dynamics.com) |
| Windows | The Windows tool exposed by this server. |
{
"mcpServers": {
"D365 Troubleshooter MCP": {
"command": "npx",
"args": ["-y", "d365-troubleshooter-mcp"],
"env": {
"TENANT_ID": "YOUR_TENANT_ID",
"CLIENT_ID": "YOUR_CLIENT_ID",
"CLIENT_SECRET": "YOUR_CLIENT_SECRET",
"DYNAMICS_365_URL": "https://orgname.crm.dynamics.com"
}
}
}
}Configuration as documented by the project. Restart the client after saving.
TENANT_ID - CLIENT_ID - CLIENT_SECRET - DYNAMICS_365_URL (example: https://orgname.crm.dynamics.com) Optional logging variables: - MCP_LOG_FILE (default| Variable | Description | Required |
|---|---|---|
| TENANT_ID | Configuration value read at startup. | Optional |
| CLIENT_ID | Configuration value read at startup. | Optional |
| CLIENT_SECRET | Credential the server authenticates with. | Yes |
| DYNAMICS_365_URL | Endpoint or connection string the server talks to. | Yes |
| YOUR_TENANT_ID | Configuration value read at startup. | Optional |
| YOUR_CLIENT_ID | Configuration value read at startup. | Optional |
| YOUR_CLIENT_SECRET | Credential the server authenticates with. | Yes |
Kill hallucinated APIs — version-accurate, up-to-date library documentation injected straight into context.
Microsoft's official browser automation server — drive a real browser through the accessibility tree, no screenshots needed.
GitHub's official server — repos, issues, pull requests, Actions and code security, straight from your assistant.
Issue tracking at the speed of conversation — Linear's official hosted server with OAuth and zero install.
Local repository surgery — status, diffs, commits, branches and history for any repo on disk.
Timezone sanity for AI — current time anywhere and correct conversions, without the model doing date math.