<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Morten Laske</title><description>Two crafts, one blog: deep Microsoft Dynamics 365 Business Central / AL engineering, applied AI and LLM engineering, and the place where the two collide. Written from production, not slides.</description><link>https://mortenlaske.dev/</link><item><title>Your Business Central MCP server should be read-only until it can&apos;t be</title><link>https://mortenlaske.dev/blog/business-central-mcp-server-least-privilege/</link><guid isPermaLink="true">https://mortenlaske.dev/blog/business-central-mcp-server-least-privilege/</guid><description>The Business Central MCP server is GA-adjacent and the pitch writes itself: connect Claude or Copilot Studio, read and write ERP data in natural language, no custom API. The connection is the boring part. You&apos;ve just handed a promptable, nondeterministic actor a write path to your ledger — and the only thing standing between it and a posted document is how you configured it.</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><category>Business Central</category><category>AI</category><category>MCP</category><category>Security</category></item><item><title>When NOT to use an AI agent in Business Central</title><link>https://mortenlaske.dev/blog/when-not-to-use-an-ai-agent-in-business-central/</link><guid isPermaLink="true">https://mortenlaske.dev/blog/when-not-to-use-an-ai-agent-in-business-central/</guid><description>The built-in agents are GA and every partner is asking &apos;can an agent do this?&apos; That&apos;s the wrong question. For a large class of BC work, a deterministic codeunit beats an agent on cost, latency, and auditability — and picking the agent anyway is a downgrade dressed as innovation.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate><category>AI</category><category>Business Central</category><category>Copilot</category><category>Architecture</category></item><item><title>Your AI feature must run on a fresh tenant, or it doesn&apos;t run</title><link>https://mortenlaske.dev/blog/ai-features-must-run-on-a-fresh-tenant/</link><guid isPermaLink="true">https://mortenlaske.dev/blog/ai-features-must-run-on-a-fresh-tenant/</guid><description>The line between a demo and a product is whether it works on a clean Business Central environment with none of your developer setup. Five concrete things that separate &apos;works on my box&apos; from &apos;a customer can actually use it&apos;.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><category>Business Central</category><category>AI</category></item><item><title>Shipping a Copilot feature in Business Central that survives real users</title><link>https://mortenlaske.dev/blog/copilot-feature-that-survives-real-users/</link><guid isPermaLink="true">https://mortenlaske.dev/blog/copilot-feature-that-survives-real-users/</guid><description>A PromptDialog demo takes an afternoon. A Copilot feature real users won&apos;t switch off takes the other 90%: scoping, grounding, the generate–review–accept loop, and treating the model&apos;s output as a proposal that never silently touches data.</description><pubDate>Tue, 28 Apr 2026 00:00:00 GMT</pubDate><category>Business Central</category><category>Copilot</category><category>AI</category></item><item><title>The breaking changes you can&apos;t see coming (and how AppSourceCop saves you)</title><link>https://mortenlaske.dev/blog/appsourcecop-breaking-changes-you-cant-see/</link><guid isPermaLink="true">https://mortenlaske.dev/blog/appsourcecop-breaking-changes-you-cant-see/</guid><description>Renaming a field, hiding an action, deleting an unused procedure — harmless refactors in most codebases, all breaking changes in an AppSource extension. LC0034 catches them late. Here&apos;s the rule that keeps you clean.</description><pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate><category>Business Central</category><category>AppSource</category><category>AL</category></item><item><title>A 502 in your PDF-to-LLM pipeline is the gateway, not the model</title><link>https://mortenlaske.dev/blog/pdf-to-llm-502-is-the-gateway/</link><guid isPermaLink="true">https://mortenlaske.dev/blog/pdf-to-llm-502-is-the-gateway/</guid><description>Business Central sends a PDF through an AI gateway and gets a flat 502. The instinct is to blame the prompt. Don&apos;t — the model never saw your document. Here&apos;s how to bisect the pipeline and force a text-extraction path that works.</description><pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate><category>AI</category><category>Business Central</category><category>Integration</category></item><item><title>Route, don&apos;t call: why a model gateway belongs between you and the LLM</title><link>https://mortenlaske.dev/blog/model-gateways-route-dont-call/</link><guid isPermaLink="true">https://mortenlaske.dev/blog/model-gateways-route-dont-call/</guid><description>Calling a provider SDK directly is the fastest way to start and the slowest way to scale. A thin gateway turns the model into config — and buys you fallback, cost control, and observability you&apos;ll need the week after launch.</description><pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate><category>AI</category><category>Architecture</category><category>LLM</category></item><item><title>Your AppSource dependency is a live product, and AVS0118 is the proof</title><link>https://mortenlaske.dev/blog/appsource-core-is-a-live-product/</link><guid isPermaLink="true">https://mortenlaske.dev/blog/appsource-core-is-a-live-product/</guid><description>If your apps share a &apos;Core&apos; library, you may believe it&apos;s bundled or internal. AVS0118 says otherwise: Core is its own independently-live AppSource offer, and the fix for the error is not in your consumer app at all.</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><category>Business Central</category><category>AppSource</category></item><item><title>Calling AI from Business Central: the platform realities nobody warns you about</title><link>https://mortenlaske.dev/blog/service-to-service-ai-from-business-central/</link><guid isPermaLink="true">https://mortenlaske.dev/blog/service-to-service-ai-from-business-central/</guid><description>Your AL HttpClient call to an AI endpoint returns send=false and no error. It&apos;s not your code — it&apos;s three platform guardrails (the HttpClient flag, the anti-SSRF allowlist, and loopback hostnames) that fail silently. Here&apos;s the checklist.</description><pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate><category>Business Central</category><category>AI</category><category>Integration</category></item><item><title>Treat LLM output as untrusted input</title><link>https://mortenlaske.dev/blog/llm-output-is-untrusted-input/</link><guid isPermaLink="true">https://mortenlaske.dev/blog/llm-output-is-untrusted-input/</guid><description>The single mental shift that prevents a whole class of AI bugs and vulnerabilities: a model&apos;s response is not a value you computed, it&apos;s user input from a stranger — and you already know how to handle that.</description><pubDate>Tue, 25 Nov 2025 00:00:00 GMT</pubDate><category>AI</category><category>LLM</category><category>Architecture</category></item><item><title>AL&apos;s `and` / `or` are eager — your guard clause does not protect you</title><link>https://mortenlaske.dev/blog/al-and-or-are-eager/</link><guid isPermaLink="true">https://mortenlaske.dev/blog/al-and-or-are-eager/</guid><description>In most languages, a guard like `if x &lt;&gt; &apos;&apos; and Rec.Get(x)` short-circuits. In AL it does not: both sides are evaluated, the guard runs anyway, and you get the exception you thought you prevented.</description><pubDate>Mon, 03 Nov 2025 00:00:00 GMT</pubDate><category>AL</category><category>Business Central</category></item><item><title>Two crafts, one blog: why I write about AI and Business Central</title><link>https://mortenlaske.dev/blog/why-ai-and-business-central/</link><guid isPermaLink="true">https://mortenlaske.dev/blog/why-ai-and-business-central/</guid><description>I do two jobs that are quietly merging — ERP engineering on Business Central, and building with LLMs. This is the notebook where I work out loud on both, and on the seam between them.</description><pubDate>Tue, 14 Oct 2025 00:00:00 GMT</pubDate><category>Meta</category><category>AI</category><category>Business Central</category></item></channel></rss>