Query and manage Microsoft Dynamics 365 Finance & Operations via MCP
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
An MCP (Model Context Protocol) server that provides access to Microsoft Dynamics 365 Finance & Operations environments. Enables AI assistants like Claude to explore D365 metadata, query data, and perform write operations on non-production environments.
| Resource | URI | Purpose |
|---|---|---|
| Entities List | d365://entities?filter=<pattern> | List all entities with optional wildcard filtering |
| Entity Schema | d365://entity/{entityName} | Full schema for any entity (fields, keys, navigation properties) |
| Navigation Properties | d365://navigation/{entityName} | Entity relationships and navigation properties |
| Enum Definitions | d365://enums | All enum types with their values |
| Saved Queries | d365://queries | List saved query templates |
| Dashboard | d365://dashboard | JSON metrics for all environments (health, API stats, recent operations) |
All tools support an optional environment parameter to target specific D365 environments.
| Tool | Purpose |
|---|---|
list_environments | List all configured D365 environments with connection status |
set_environment | Set the working environment for the current session |
describe_entity | Quick schema lookup for an entity |
execute_odata | Execute raw OData paths (queries, single records, counts) |
aggregate | Perform aggregations (SUM, AVG, COUNT, MIN, MAX, COUNTDISTINCT, percentiles) on entity data |
get_related | Follow entity relationships to retrieve related records |
export | Export query results to CSV, JSON, or TSV format |
compare_periods | YoY, QoQ, MoM period comparisons with change calculations |
trending | Time series analysis with growth rates and moving averages |
save_query | Save reusable query templates with parameter support |
execute_saved_query | Execute saved query templates with parameter substitution |
delete_saved_query | Delete saved query templates |
join_entities | Cross-entity joins using $expand or client-side join |
batch_query | Execute multiple queries in parallel |
search_entity | Robust entity search with automatic fallback strategies |
analyze_customer | Comprehensive single-call customer analysis |
create_record | Create new records (non-production environments only) |
update_record | Update existing records (non-production environments only) |
delete_record | Delete records (non-production environments only) |
batch_crud | Execute multiple create/update/delete operations in a single batch request (non-production only) |
compare_schemas | Compare entity schemas between two environments to detect schema drift |
dashboard | Display environment dashboard with health status, API statistics, and recent operations |
Or install globally:
Run the interactive setup wizard:
The wizard will:
After setup, restart Claude Desktop (Cmd+Q then reopen on macOS, or Ctrl+Q on Windows) or start a new Claude Code session.
Create a d365-environments.json file in the project root or working directory:
Environment Types:
type: "production" - Read-only access (all write operations are blocked)type: "non-production" - Full read/write access (create, update, delete enabled)Copy d365-environments.example.json as a starting point.
The server also supports the following environment variables (fallback if no JSON config):
| Variable | Description |
|---|---|
D365_TENANT_ID | Azure AD tenant ID |
D365_CLIENT_ID | Azure AD application (client) ID |
D365_CLIENT_SECRET | Azure AD client secret |
D365_ENVIRONMENT_URL | D365 F&O environment URL (e.g., https://contoso.operations.dynamics.com) |
D365_ENVIRONMENT_TYPE | Optional: "production" or "non-production" (defaults to "production" for safety) |
Optional:
| Variable | Default | Description |
|---|---|---|
D365_TRANSPORT | stdio | Transport mode (stdio or http) |
D365_HTTP_PORT | 3000 | HTTP port (when using http transport) |
D365_LOG_LEVEL | info | Logging level |
D365_PAGINATION_TIMEOUT_MS | 60000 | Timeout (ms) for paginated requests on large datasets |
D365_CONFIG_FILE | Path to config file if not in default location |
CustomService.ReadWrite.AllImportant: This step must be done in each D365 environment (Production, UAT, Dev) you want to connect to.
In D365 F&O, navigate to: System Administration > Setup > Azure Active Directory applications
Click "New" to add a record:
| Field | Value |
|---|---|
| Client ID | The Application (client) ID from Azure AD |
| Name | Descriptive name (e.g., "MCP Server Integration") |
| User ID | A D365 user account for the app to run as |
The User ID determines what data the app can access:
Repeat for each environment you want to connect to
Note: If you skip this step, API calls will fail with 401 Unauthorized or 403 Forbidden errors even though Azure AD authentication succeeded.
Add to your Claude Desktop config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Add to ~/.claude/settings.json:
After adding the configuration, restart Claude Desktop or Claude Code.
When using multiple D365 environments, you can configure how they appear in Claude:
This option shows each environment as a separate MCP server in Claude's sidebar:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/d365fo-connector)<a href="https://allmcps.com/mcp/d365fo-connector"><img src="https://allmcps.com/api/badge/d365fo-connector?style=directory" alt="D365fo Connector on AllMCPs" /></a>