Monday, 9 February 2026

Understanding AI Agents and MCP (BLOG 1 OF 4)

 What They Are and Why They Matter for Business Central


Introduction

The world of enterprise software is being reshaped by AI agents. Imagine telling your ERP system, in plain English, to look up a customer, check inventory levels, or create a sales order. No clicking through menus, no memorizing page names, just a natural conversation that gets work done.

In this first post of our four-part series, we cover the foundational concepts: what AI agents are, how the Model Context Protocol (MCP) works, and why these matter for anyone working with Dynamics 365 Business Central.


What Are AI Agents?

An AI agent is a software program powered by a large language model (LLM) that can understand instructions, reason about tasks, and take actions on your behalf. Unlike a simple chatbot that only generates text, an agent can interact with external systems, call APIs, retrieve data, and execute workflows autonomously or semi-autonomously.


Key Characteristics

        Reasoning: They understand natural language, maintain context across a conversation, and can break complex requests into smaller steps.

        Tool Use: They can call external tools, APIs, databases, and services to perform real work, not just talk about it.

        Planning: They decompose a high-level goal (e.g., “create a sales order”) into sub-tasks (find customer, find item, create header, add line).

        Human-in-the-Loop: For sensitive actions like creating or deleting records, agents ask for explicit user confirmation before proceeding.


Agents vs. Chatbots vs. Copilots

 

Chatbot

Copilot

Agent

Interaction

Q&A only

Suggests & assists

Plans & executes

Tool Access

None

Limited

Full (APIs, DBs)

Autonomy

None

Low

High (with guardrails)

Example

FAQ bot

GitHub Copilot

BC MCP Agent

 

Why Agents Matter for Business Central

Business Central is a powerful ERP, but navigating its rich feature set often requires training and familiarity. AI agents lower the barrier by letting users interact with BC through conversation. A project manager can ask for a budget-vs-actual report, a warehouse worker can check stock levels, and a finance lead can review outstanding invoices, all without opening a single BC page.

The critical enabler for this is a standardized way for agents to discover and call BC’s capabilities. That is exactly what the Model Context Protocol provides.


What Is the Model Context Protocol (MCP)?

MCP is an open API standard, originally championed by Anthropic, that defines how AI applications discover, describe, and invoke operations on external services. Think of it as a universal adapter between any AI client (Claude, Copilot, a custom agent) and any backend system (Business Central, GitHub, Salesforce, etc.).

How MCP Works

The protocol follows a four-step pattern:

1.    Discovery – The AI client connects to an MCP server and asks: “What tools do you offer?”

2.    Description – The MCP server responds with a list of tools, their parameters, and plain-English descriptions.

3.    Invocation – Based on the user’s request, the AI selects the right tool, fills in parameters, and calls it.

4.    Response – The MCP server executes the operation and returns the result to the AI client.

This self-describing, plug-and-play architecture means agents do not need hardcoded knowledge of every API endpoint. They dynamically learn what is available and how to use it at runtime.


MCP vs. Traditional API Integration

Aspect

Traditional API

MCP

Discovery

Manual documentation

Auto-discovery of tools

Integration

Custom code per system

Standardized protocol

AI Compatibility

Requires wrapper logic

Native LLM support

Operations

Fixed endpoints

Dynamic tool listing

Security

API keys / OAuth

Delegated auth + config

 

✅ Key Takeaway

MCP eliminates the need to write custom integration code for every AI client. Once a system exposes an MCP server, any MCP-compatible agent can work with it out of the box.






What’s Next?

Now that you understand agents and MCP, you are ready for Blog 2, where we dive into the Business Central MCP Server itself, what it exposes, how to enable it, and the role of the BcMCPProxy in connecting non-Copilot-Studio clients.

 

Blog Series Navigation

▶ Blog 1: Understanding AI Agents and MCP (You are here)

   Blog 2: The Business Central MCP Server

   Blog 3: Building BcMCPProxy.exe and Connecting to Claude Desktop

   Blog 4: Testing Scenarios and Best Practices

Wednesday, 3 September 2025

Business Central 2025 Wave 2 Preview is Now Available

 Microsoft has officially released the preview version of Dynamics 365 Business Central 2025 Wave 2, and this is the perfect time for partners, customers, and consultants to start exploring what’s new.

Why the Preview Matters

The preview gives you early access to upcoming features before general availability. This allows you to:

  • Test the new functionality in a sandbox environment.
  • Validate how the changes will affect your extensions, integrations, and business processes.
  • Provide feedback directly to Microsoft, helping them fine-tune the product.
  • Prepare training and documentation ahead of time for a smoother adoption when the release goes live.

How to Get Started

1.      Create a Sandbox Environment – Log in to your Business Central Admin Center and spin up a sandbox using the 2025 Wave 2 Preview build.

2.      Explore New Features – Review what’s new in areas such as productivity improvements, AI/Copilot enhancements, and reporting capabilities.

3.      Share Your Feedback – Report any issues or suggestions through Microsoft’s feedback channels.

https://aka.ms/bcpreviewbug

Why You Should Test Now

Early testing ensures that you’re not caught by surprise when the update becomes generally available. It also gives your team a head start in training and adopting new features.

 


Sunday, 31 August 2025

Resolving Business Central Extension Upload Error (AVS0109)

 Today, while working on a Business Central environment, I encountered an interesting issue while trying to upload an extension (.app file). The extension installation failed with the following error:

Error Message:

Package validation failed due to the following error(s): Error AVS0109: The per-tenant extension (or one of its dependencies) cannot be deployed as it has missing dependencies or the dependencies are conflicting with currently installed apps. Check if these dependencies are installed.


At first glance, the error message wasn't very clear—it looked like a dependency conflict, but there wasn’t any direct information about which dependency was missing or conflicting.

Root Cause

When I googled for Error AVS0109, I came across the official Microsoft Learn documentation: https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/avs-diagnostics/diagnostic-avs0109


The key remark there was:

A common reason for this error is that a build already has been published directly from Visual Studio Code in DEV scope.

This matched exactly with my situation. I had previously published the extension from VS Code in Dev scope, and later tried to upload the same app as a PTE.

Solution

The fix was straightforward:

1.      Go to Installed Extensions page in Business Central.

2.      Identify the extension that is published in Dev scope.

3.      Uninstall the Dev scope extension.

4.      Upload and deploy the .app file again.

After uninstalling the Dev scope version, I retried uploading the .app file, and this time the installation succeeded without any issues.



Key Takeaway

If you encounter Error AVS0109 while uploading a Business Central extension, check if the same extension is already installed in Dev scope. If yes, uninstall it first before uploading the packaged app file. This will prevent conflicts and allow smooth deployment.

 



Tuesday, 22 April 2025

Boost String Number Handling in AL with the New IncStr Parameter

You've probably used the IncStr method to increment numbers embedded in string variables, especially when dealing with number series. Traditionally, IncStr was limited to increasing or decreasing the number by 1. For anything beyond that, you'd have to roll up your sleeves and build some custom logic. Not anymore!

🆕 What’s New?

The IncStr method now supports an optional increments parameter, allowing you to change a number inside a string by any integer value, not just 1.

Whether you're jumping ahead in a number series or stepping back, this update simplifies your code and makes it easier to work with strings that contain numbers.


Feature Highlights

  • New overload: IncStr(Text, [Increment: Integer])
  • Flexible: Supports any positive or negative integer.

💡 Use Case Example

Let’s say you have a string:

'Account no. 99 does not balance.'

You want to change 99 to 109. Previously, you'd have to parse and replace the number manually.

Now, you can do it in one line:

ResultAccount := IncStr(Account, 10);

Here’s a full AL code example:

codeunit 50111 MyAccountCodeunit

{

    procedure MyIncStr()

    var

        Account: Text[60];

        ResultAccount: Text[60];

        AText: TextConst ENU = 'Account no. 99 does not balance.';

    begin

        Account := AText;

        ResultAccount := IncStr(Account, 10); // Increases 99 → 109

    end;

}

 


Monday, 7 April 2025

Extending CardPageId on List and ListPart Pages in Business Central

In Microsoft Dynamics 365 Business Central, developers often want to customize the page that opens when a user double-clicks on a record in a list or listpart page. This is controlled by the CardPageId property. Previously, it was not possible to modify this property via pageextension.

Microsoft has enabled CardPageId extensibility in the latest release.


You can now override the CardPageId on list and listpart pages via AL pageextension objects.

  • If the base page defines a CardPageId, you can override it.
  • If multiple extensions modify it, the last applied extension wins (per-tenant extensions override AppSource ones).

Example: Extend Customer List to Use Custom Card Page

Let’s say you’ve created a new Customer Card page named "My Custom Customer Card" and you want the Customer List to open this custom card on double-click.

Here’s how you do it:

pageextension 50100 CustomerListExt extends "Customer List"

{

    CardPageId = "My Custom Customer Card";

}

That’s it!

Now when a user opens the Customer List and double-clicks on any customer, your custom card page opens instead of the standard one.




  • Race conditions: If multiple extensions set the CardPageId, the last loaded extension wins. This typically won't be a problem, but you can control precedence using a per-tenant extension.
  • Applies only to list and listpart pages.

If you attempt to set this property with a Runtime of less than 15 in app.json, you will encounter this error.



Monday, 24 March 2025

Reopen Finished Production Orders in Business Central

In manufacturing, accuracy in production records is crucial for maintaining correct inventory levels and cost calculations. However, mistakes can happen even after a production order is marked as Finished. Missing consumption entries or incorrect item tracking can lead to discrepancies in inventory and financial records. To address such issues, Business Central allows you to reopen finished production orders, enabling necessary corrections and ensuring accurate data.


Reopening a finished production order provides flexibility and control over production processes. However, to maintain data integrity, certain restrictions apply:

  • You can reopen finished production orders only one time.
  • You can reopen finished production orders if they don't have output, and cost WIP is written off to your inventory adjustment account.


How to Reopen a Finished Production Order

Follow these simple steps to reopen a finished production order in Business Central:

1.      Navigate to the Finished Production Orders page.

2.      Select the production order you need to edit.

3.      Click the Reopen action.

4.      A confirmation dialog will appear asking, Do you want to reopen the production order?

5.      Click Yes to proceed.

 

 

A screenshot of a computer

AI-generated content may be incorrect.