Dynamics 365 MCP server

Prebuilt SnapLogic agentic-tool pipelines that let an LLM read from and act on Dynamics 365, callable as MCP tools via Pipeline Execute. Published in the SnapLogic pattern catalog.

Overview

This pack covers three Dynamics 365 back ends through one MCP server: Business Central for financials and SMB operations, Dataverse for Sales for CRM records such as accounts and opportunities, and Finance and Supply Chain Management for the FinOps data-entity layer. Each back end offers the same describe, search, read, create, update, and delete verbs using entity-generic tools, so the agent names the target entity at call time and uses the appropriate family for each Dynamics app.

For setup instructions, see SnapLogic MCP Server quickstart.

Example Prompts

  • Add a new Business Central customer called New Customer Corp with email [email protected]
  • Create a vendor record for Nordic Supplies in CRONUS USA, Inc.
  • Set up a new item in Business Central named 'Desk Lamp'
  • Register a new customer for me and tell me the id you got back
  • Delete the Business Central customer I just created
  • Remove the duplicate vendor record with id 00000000-0000-0000-0000-000000000001
  • Clean up that test item in CRONUS USA, Inc.
  • What fields does the Business Central customers entity have?
  • Show me the shape of a salesInvoice record in CRONUS USA, Inc.
  • Before I filter on vendors, show me what a vendor record looks like

Tools

Tool Name Functions
MSDynamics365BusinessCentralCreate Create a Business Central record from a field map.
MSDynamics365BusinessCentralCreateChild MS Dynamics365Business Central Create Child
MSDynamics365BusinessCentralDelete Delete a Business Central record by primary key.
MSDynamics365BusinessCentralDeleteChild MS Dynamics365Business Central Delete Child
MSDynamics365BusinessCentralDescribe Inspect a Business Central entity's fields by sampling one record.
MSDynamics365BusinessCentralRead Retrieve a Business Central record by its primary key.
MSDynamics365BusinessCentralSearch Query Business Central records with an OData filter, select and sort.
MSDynamics365BusinessCentralUpdate Patch fields on an existing Business Central record.
MSDynamics365BusinessCentralUpdateChild MS Dynamics365Business Central Update Child
MSDynamics365FinanceandSCMCreate Create a Finance and SCM record from a field map.
MSDynamics365FinanceandSCMCreateChild MS Dynamics365Financeand SCM Create Child
MSDynamics365FinanceandSCMDelete Delete a Finance and SCM record by primary key.
MSDynamics365FinanceandSCMDeleteChild MS Dynamics365Financeand SCM Delete Child
MSDynamics365FinanceandSCMDescribe Inspect a Finance and SCM data entity by sampling one record.
MSDynamics365FinanceandSCMRead Retrieve a Finance and SCM record by its primary key.
MSDynamics365FinanceandSCMSearch Query Finance and SCM entities with an OData filter, optionally across companies.
MSDynamics365FinanceandSCMUpdate Patch fields on an existing Finance and SCM record.
MSDynamics365FinanceandSCMUpdateChild MS Dynamics365Financeand SCM Update Child
MSDynamics365ForSalesCreate Create a Dataverse record from a field map.
MSDynamics365ForSalesCreateChild MS Dynamics365For Sales Create Child
MSDynamics365ForSalesDelete Delete a Dataverse record by GUID.
MSDynamics365ForSalesDeleteChild MS Dynamics365For Sales Delete Child
MSDynamics365ForSalesDescribe List a Dataverse table's attributes, types and write eligibility.
MSDynamics365ForSalesExecute Issue a raw GET against any Dataverse Web API path.
MSDynamics365ForSalesRead Retrieve a Dataverse record by GUID.
MSDynamics365ForSalesSearch Query Dataverse records with an OData filter, select and sort.
MSDynamics365ForSalesUpdate Patch fields on an existing Dataverse record by GUID.
MSDynamics365ForSalesUpdateChild MS Dynamics365For Sales Update Child

Set up the MCP Server tools

  1. Download dynamics365_tools.zip.
  2. In SnapLogic Designer, open the target project space (or create one), then choose Import Project / Import Pipelines and select the downloaded dynamics365_tools.zip. Designer unpacks each pipeline into the project.
  3. Attach the required account to the connectivity snaps (see Connection Setup).
  4. Expose the project as an MCP server — each pipeline becomes a tool named after its label. New to this? Start with the MCP quickstart, then use the MCP Server Pipeline Builder to generate the server from the imported pipelines.

Configure account

Attach the Microsoft Dynamics 365 account matching the sub-pack in use (Business Central, Finance & SCM, or For Sales) in Designer after import.

These pipelines ship without credentials by design — attach a valid account in Designer before the tools will execute.

See the SnapLogic account documentation for this connector: Dynamics 365 For Sales Account.

Important: These pipelines ship without credentials by design — attach a valid account in Designer before the tools will execute. Credentials live in the SnapLogic account store, never in the pipeline JSON.

MSDynamics365BusinessCentralCreate

Creates a new record in any Business Central entity from a field map and returns the new id. Use it to add customers, vendors, items, or any other Business Central entity row.

Parameter Type Default Description
entity* string

Business Central entity set to act on, e.g. customers, vendors, items, salesInvoices.

company string

Business Central company the entity is read from or written to, e.g. CRONUS USA, Inc. Omit to use the connection's default company.

record* object

Field map posted as the new record's body, e.g. {displayName, email}.

* Required parameter.

Try asking:

  • Add a new Business Central customer called New Customer Corp with email [email protected]
  • Create a vendor record for Nordic Supplies in CRONUS USA, Inc.
  • Set up a new item in Business Central named 'Desk Lamp'
  • Register a new customer for me and tell me the id you got back

MSDynamics365BusinessCentralCreateChild

Lets the LLM ms dynamics365business central create child, exposed as an MCP tool callable via Pipeline Execute.

Parameter Type Default Description
entity string customers

company string

MSDynamics365BusinessCentralDelete

Deletes a specific Business Central record by primary key and returns a confirmation. Use it only when the user names a specific record, such as a test or duplicate row to clean up.

Parameter Type Default Description
entity* string

Business Central entity set to act on, e.g. customers, vendors, items, salesInvoices.

company string

Business Central company the entity is read from or written to, e.g. CRONUS USA, Inc. Omit to use the connection's default company.

primary_key_json* string

Primary key as a JSON list of key/value objects; only the first entry is used, e.g. [{"key": "id", "value": "00000000-0000-0000-0000-000000000001"}].

* Required parameter.

Try asking:

  • Delete the Business Central customer I just created
  • Remove the duplicate vendor record with id 00000000-0000-0000-0000-000000000001
  • Clean up that test item in CRONUS USA, Inc.

MSDynamics365BusinessCentralDeleteChild

Lets the LLM ms dynamics365business central delete child, exposed as an MCP tool callable via Pipeline Execute.

Parameter Type Default Description
entity string customers

company string

MSDynamics365BusinessCentralDescribe

Shows the shape of a Business Central entity by returning a single sample record, so the agent can see available field names before filtering, creating, or updating. Use it when working with an unfamiliar entity or when a guessed field name returns no results.

Parameter Type Default Description
entity* string

Business Central entity to sample one record from, e.g. customers or salesInvoices.

company string

Business Central company the entity is read from or written to, e.g. CRONUS USA, Inc. Omit to use the connection's default company.

* Required parameter.

Try asking:

  • What fields does the Business Central customers entity have?
  • Show me the shape of a salesInvoice record in CRONUS USA, Inc.
  • Before I filter on vendors, show me what a vendor record looks like
  • Which fields can I use on the items entity in Business Central?

MSDynamics365BusinessCentralRead

Fetches a specific Business Central record by primary key and returns its fields, optionally scoped to a company and field selection. Use it when the user has identified a record and wants its details.

Parameter Type Default Description
entity* string

Business Central entity set to act on, e.g. customers, vendors, items, salesInvoices.

company string

Business Central company the entity is read from or written to, e.g. CRONUS USA, Inc. Omit to use the connection's default company.

primary_key_json string

Primary key as a JSON list of key/value objects; only the first entry is used, e.g. [{"key": "id", "value": "00000000-0000-0000-0000-000000000001"}]. Omit to read the entity's records up to the page size.

select_fields string

Comma-separated fields to return via $select, e.g. displayName,email,phoneNumber. Omit to return all fields.

page_size integer 100

Records fetched per page when no primary key is supplied (default 100).

* Required parameter.

Try asking:

  • Pull up Business Central customer 00000000-0000-0000-0000-000000000001
  • Show me the email and phone number for that customer record
  • Get the full detail of this sales invoice in CRONUS USA, Inc.
  • Read the item record for the id you just returned

MSDynamics365BusinessCentralSearch

Queries any Business Central entity with an optional OData filter, field selection, and sort order, returning matching records. Use it for open-ended questions like 'which customers owe money' or 'list unpaid invoices' before a specific record is identified.

Parameter Type Default Description
entity* string

Business Central entity set to act on, e.g. customers, vendors, items, salesInvoices.

company string

Business Central company the entity is read from or written to, e.g. CRONUS USA, Inc. Omit to use the connection's default company.

filter string

OData $filter expression applied to the query, e.g. balanceDue gt 0. Omit to return unfiltered records.

select_fields string

Comma-separated fields to return via $select, e.g. displayName,email,balanceDue. Omit to return all fields.

orderby string

OData $orderby clause, e.g. displayName asc.

page_size integer 100

Records fetched per page (default 100).

max_page integer 1

Maximum number of pages to retrieve (default 1).

* Required parameter.

Try asking:

  • List Business Central customers with a balance due, sorted by name
  • Which sales invoices in CRONUS USA, Inc. are still open?
  • Show me the top 50 items with their number, description and unit price
  • Find vendors whose name starts with 'Nordic' and give me their email and phone
  • Get purchase invoices posted this month, newest first

MSDynamics365BusinessCentralUpdate

Patches specific fields on an existing Business Central record and returns a confirmation. Use it for corrections and status changes such as a new email, contact name, or credit limit.

Parameter Type Default Description
entity* string

Business Central entity set to act on, e.g. customers, vendors, items, salesInvoices.

company string

Business Central company the entity is read from or written to, e.g. CRONUS USA, Inc. Omit to use the connection's default company.

primary_key_json* string

Primary key as a JSON list of key/value objects; only the first entry is used, e.g. [{"key": "id", "value": "00000000-0000-0000-0000-000000000001"}].

fields* object

Field map of values to change; only these fields are sent, e.g. {email: '[email protected]'}.

* Required parameter.

Try asking:

  • Change the email on Business Central customer 00000000-0000-0000-0000-000000000001 to [email protected]
  • Update that vendor's phone number in CRONUS USA, Inc.
  • Correct the display name on the customer record you just created
  • Bump the unit price on this item to 49.99

MSDynamics365BusinessCentralUpdateChild

Lets the LLM ms dynamics365business central update child, exposed as an MCP tool callable via Pipeline Execute.

Parameter Type Default Description
entity string customers

company string

MSDynamics365FinanceandSCMCreate

Creates a record in a Finance and Supply Chain data entity from a field map and returns a confirmation. Run the describe tool first to identify required fields, as FinOps entities enforce mandatory fields and natural keys.

Parameter Type Default Description
entity* string

Finance and Supply Chain data entity the record is created in, e.g. CustomersV3.

record* object

Field map posted as the new record's body, including the entity's key fields, e.g. {CustomerAccount, CustomerName, CustomerGroupId}.

* Required parameter.

Try asking:

  • Create a customer in CustomersV3 with account US-999, name 'Test Customer', group 10
  • Add a new vendor record in Finance and Operations
  • Set up a released product with the item number and name I gave you
  • Create a customer record and confirm it went through

MSDynamics365FinanceandSCMCreateChild

Lets the LLM ms dynamics365financeand scm create child, exposed as an MCP tool callable via Pipeline Execute.

Parameter Type Default Description
entity string CustomersV3

MSDynamics365FinanceandSCMDelete

Deletes a Finance and Supply Chain record by primary key and returns a confirmation. Use it only for records the user explicitly names, such as test data created earlier in the session.

Parameter Type Default Description
entity* string

Finance and Supply Chain data entity the record belongs to, e.g. CustomersV3.

primary_key_json* string

Primary key as a JSON list of key/value objects; only the first entry is used, e.g. [{"key": "CustomerAccount", "value": "US-999"}].

* Required parameter.

Try asking:

  • Delete customer account US-999 from CustomersV3
  • Remove the test customer I created a moment ago
  • Delete that duplicate vendor record in Finance and Operations

MSDynamics365FinanceandSCMDeleteChild

Lets the LLM ms dynamics365financeand scm delete child, exposed as an MCP tool callable via Pipeline Execute.

Parameter Type Default Description
entity string CustomersV3

MSDynamics365FinanceandSCMDescribe

Shows the shape of a Finance and Supply Chain data entity by returning a single sample record, so the agent can learn field names before filtering or writing. Use it first, as FinOps entity and field names are versioned and guessing them is unreliable.

Parameter Type Default Description
entity* string

Finance and Supply Chain data entity to sample one record from, e.g. CustomersV3.

* Required parameter.

Try asking:

  • What fields does the CustomersV3 entity have?
  • Show me the shape of a SalesOrderHeadersV2 record
  • I need to filter vendors in Finance and Operations — what are the field names?
  • Sample one record from the released products entity

MSDynamics365FinanceandSCMRead

Fetches a Finance and Supply Chain record by primary key and returns its fields, with optional field selection and a cross-company flag. Use it once a search or the user has identified the specific record.

Parameter Type Default Description
entity* string

Finance and Supply Chain data entity the record belongs to, e.g. CustomersV3.

primary_key_json string

Primary key as a JSON list of key/value objects; only the first entry is used, e.g. [{"key": "CustomerAccount", "value": "US-001"}]. Omit to read the entity's records up to the page size.

select_fields string

Comma-separated fields to return via $select, e.g. CustomerAccount,CustomerName. Omit to return all fields.

cross_company boolean false

Pass the string 'true' to read a record held in another legal entity; any other value reads only the default company (default false).

page_size integer 100

Records fetched per page when no primary key is supplied (default 100).

* Required parameter.

Try asking:

  • Look up customer account US-001 in Finance and Operations
  • Show me the name and group for CustomersV3 record US-001
  • Read that sales order header by its order number
  • Get customer US-001 even though it sits in a different legal entity

MSDynamics365FinanceandSCMSearch

Queries any Finance and Supply Chain data entity with an OData filter, field selection, and sort order, with an option to search across all legal entities. Use it for open-ended finance and supply-chain questions before drilling into a specific record.

Parameter Type Default Description
entity* string

Finance and Supply Chain data entity to query, e.g. CustomersV3 or SalesOrderHeadersV2.

filter string

OData $filter expression applied to the query, e.g. CustomerGroupId eq 10. Omit to return unfiltered records.

select_fields string

Comma-separated fields to return via $select, e.g. CustomerAccount,CustomerName,CustomerGroupId. Omit to return all fields.

orderby string

OData $orderby clause, e.g. CustomerName asc.

cross_company boolean false

Pass the string 'true' to search across every legal entity; any other value searches only the default company (default false).

page_size integer 100

Records fetched per page (default 100).

max_page integer 1

Maximum number of pages to retrieve (default 1).

* Required parameter.

Try asking:

  • List customers in customer group 10 across all companies
  • Show me open sales orders with their order number and customer account
  • Which vendors have invoices posted this month?
  • Get the first 50 released products with item number and name, sorted by name
  • Find customers whose name contains 'Contoso' in every legal entity

MSDynamics365FinanceandSCMUpdate

Patches specific fields on a Finance and Supply Chain record by primary key and returns a confirmation. Use it for mid-conversation corrections such as renaming a customer or changing a group assignment.

Parameter Type Default Description
entity* string

Finance and Supply Chain data entity the record belongs to, e.g. CustomersV3.

primary_key_json* string

Primary key as a JSON list of key/value objects; only the first entry is used, e.g. [{"key": "CustomerAccount", "value": "US-001"}].

fields* object

Field map of values to change; only these fields are sent, e.g. {CustomerName: 'Updated Customer Name'}.

* Required parameter.

Try asking:

  • Rename customer account US-001 to 'Updated Customer Name'
  • Change the customer group on US-001 in Finance and Operations
  • Update the record we just created with the corrected name
  • Adjust that vendor's payment terms field

MSDynamics365FinanceandSCMUpdateChild

Lets the LLM ms dynamics365financeand scm update child, exposed as an MCP tool callable via Pipeline Execute.

Parameter Type Default Description
entity string CustomersV3

MSDynamics365ForSalesCreate

Creates a record in a Dataverse object type from a field map and returns the new record id. Use it to add accounts, contacts, leads, or opportunities; field names must be Dataverse logical names.

Parameter Type Default Description
object_type* string

Dataverse entity set the record is created in, e.g. accounts.

record* object

Field map posted as the new record's body, keyed by Dataverse logical names, e.g. {name, revenue, industrycode}.

* Required parameter.

Try asking:

  • Create a Dataverse account for Contoso Ltd with revenue 5,000,000
  • Add a new contact for Jane Meyer at Contoso
  • Log a new lead from the trade show and give me its id
  • Create an opportunity against the account we just made

MSDynamics365ForSalesCreateChild

Lets the LLM ms dynamics365for sales create child, exposed as an MCP tool callable via Pipeline Execute.

Parameter Type Default Description
object_type string accounts

MSDynamics365ForSalesDelete

Deletes a Dataverse record by GUID and returns a confirmation. Use it only for records the user explicitly identifies, such as test data or a confirmed duplicate.

Parameter Type Default Description
object_type* string

Dataverse entity set the record belongs to, e.g. accounts.

id* string

GUID of the record to delete, e.g. 00000000-0000-0000-0000-000000000001.

* Required parameter.

Try asking:

  • Delete the Dataverse account I just created
  • Remove the duplicate contact with id 00000000-0000-0000-0000-000000000001
  • Clean up that test lead

MSDynamics365ForSalesDeleteChild

Lets the LLM ms dynamics365for sales delete child, exposed as an MCP tool callable via Pipeline Execute.

Parameter Type Default Description
object_type string accounts

MSDynamics365ForSalesDescribe

Returns declared attribute metadata for a Dataverse table, including each field's logical name, type, and whether it is writable. Use it before creating or updating records to confirm required field names and types.

Parameter Type Default Description
object_type* string

Singular Dataverse logical entity name whose attribute metadata is read, e.g. account, contact, opportunity.

* Required parameter.

Try asking:

  • What fields does the Dataverse account table have?
  • Which attributes on the opportunity entity are required when creating a record?
  • Show me the field types on contact so I know what to send
  • Can I set statuscode on an account update? Check the metadata

MSDynamics365ForSalesExecute

Issues a raw GET against any Dataverse Web API path and returns the response, covering scenarios the typed tools do not handle such as $expand, $apply, and metadata endpoints. Treat this as read-only; use the create, update, and delete tools for writes.

Parameter Type Default Description
url_path* string

Web API path and query string appended to the tenant URL, e.g. accounts?$select=name,revenue&$top=5.

http_method string GET

HTTP method requested (default GET); the underlying snap is pinned to GET, so this value is not applied.

body string

Request body passed to the snap's HTTP entity; leave empty for GET calls.

* Required parameter.

Try asking:

  • Run the raw Dataverse query accounts?$select=name,revenue&$top=5
  • Fetch contacts expanded with their parent account in one call
  • Get an aggregated count of opportunities by status using $apply
  • Hit the Dataverse Web API path for WhoAmI and show me the response

MSDynamics365ForSalesRead

Fetches a single Dataverse record by GUID and returns its fields, optionally narrowed to a field selection. Use it after a search or when the user provides a GUID directly.

Parameter Type Default Description
object_type* string

Dataverse entity set the record belongs to, e.g. accounts.

id* string

GUID of the record to retrieve, e.g. 00000000-0000-0000-0000-000000000001.

select_fields string

Comma-separated logical names to return via $select, e.g. name,revenue,industrycode. Omit to return all fields.

page_size integer 100

Records fetched per page (default 100).

* Required parameter.

Try asking:

  • Open Dataverse account 00000000-0000-0000-0000-000000000001
  • Show me the name, revenue and industry for that account
  • Read the full contact record for the id from the last search
  • Pull up the opportunity with this GUID

MSDynamics365ForSalesSearch

Queries Dataverse accounts, contacts, leads, or opportunities with an OData filter, field selection, and sort order. Use it for CRM questions where the record is not yet identified; pair it with the describe tool when field names are unclear.

Parameter Type Default Description
object_type* string

Dataverse entity set to query, e.g. accounts, contacts, leads, opportunities.

filter string

OData $filter expression applied to the query, e.g. revenue gt 1000000. Omit to return unfiltered records.

select_fields string

Comma-separated logical names to return via $select, e.g. name,revenue,industrycode. Omit to return all fields.

orderby string

OData $orderby clause, e.g. name asc.

page_size integer 100

Records fetched per page (default 100).

max_page integer 1

Maximum number of pages to retrieve (default 1).

* Required parameter.

Try asking:

  • Find Dataverse accounts with revenue over a million, sorted by name
  • List open opportunities with their estimated value and close date
  • Which contacts belong to Contoso Ltd?
  • Show me the 50 most recently created leads
  • Get accounts in the manufacturing industry with their name and revenue

MSDynamics365ForSalesUpdate

Patches specific fields on a Dataverse record by GUID and returns a confirmation. Resolve the record's GUID with search or read first, then use this tool for corrections such as updating revenue or changing an owner.

Parameter Type Default Description
object_type* string

Dataverse entity set the record belongs to, e.g. accounts.

id* string

GUID of the record to update, e.g. 00000000-0000-0000-0000-000000000001.

fields* object

Field map of values to change; only these fields are written, e.g. {revenue: 7500000, description: '...'}.

* Required parameter.

Try asking:

  • Update the revenue on Dataverse account 00000000-0000-0000-0000-000000000001 to 7,500,000
  • Add a description to that account saying it was updated by the agent
  • Change this contact's job title to Head of Procurement
  • Revise the estimated value on the opportunity you just found

MSDynamics365ForSalesUpdateChild

Lets the LLM ms dynamics365for sales update child, exposed as an MCP tool callable via Pipeline Execute.

Parameter Type Default Description
object_type string accounts