<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shakar Bisetty</title>
    <description>The latest articles on DEV Community by Shakar Bisetty (@thasha).</description>
    <link>https://dev.to/thasha</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3783981%2F7124d594-3898-4f92-ac8d-ec2882dc48de.png</url>
      <title>DEV Community: Shakar Bisetty</title>
      <link>https://dev.to/thasha</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thasha"/>
    <language>en</language>
    <item>
      <title>Bonus: Your MuleSoft APIs are already most of an MCP server</title>
      <dc:creator>Shakar Bisetty</dc:creator>
      <pubDate>Mon, 12 Oct 2026 03:33:53 +0000</pubDate>
      <link>https://dev.to/thasha/bonus-your-mulesoft-apis-are-already-most-of-an-mcp-server-4iag</link>
      <guid>https://dev.to/thasha/bonus-your-mulesoft-apis-are-already-most-of-an-mcp-server-4iag</guid>
      <description>&lt;p&gt;&lt;em&gt;Bonus · Building an Agentic Change-Approval MVP on MuleSoft&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The main series finished with &lt;a href="https://dev.to/thasha/part-10-lessons-learned-and-a-reusable-blueprint-for-agentic-approval-flows-3pj"&gt;Part 10&lt;/a&gt;. This bonus post answers the question I got most often along the way: &lt;em&gt;"We've done API-led on MuleSoft for years. How much work is it to make that usable by agents?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Less than most teams expect. If you have a healthy API-led estate, you already have most of an MCP server. What's missing is a thin layer and some writing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftkd7hj3zwa6pvxdydcg9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftkd7hj3zwa6pvxdydcg9.png" alt="Your APIs are already most of an MCP server" width="799" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What you already have
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;RAML or OAS specs.&lt;/strong&gt; Every Process API already has typed inputs and outputs. They translate into the input and output schemas of an MCP tool, so the agent gets the same contract your other consumers use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Process APIs.&lt;/strong&gt; This is where your business rules live, such as "no SAP import without an approval". In our MVP, that one check in a Process API is what kept the agents safe, as described in the &lt;a href="https://dev.to/thasha/human-in-the-loop-is-a-design-feature-enforcing-approval-gates-for-ai-agents-on-mulesoft-3eee"&gt;human-in-the-loop post&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exchange.&lt;/strong&gt; A catalogue of what exists, who owns it and which version is current. That's exactly what you need when deciding which APIs become tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gateway policies.&lt;/strong&gt; Client IDs, rate limits and access control are already in place for every API. Agent traffic sits on top of the same governance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MUnit.&lt;/strong&gt; Tests for the behaviour agents will rely on, including the error cases.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What you add
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;An MCP server app.&lt;/strong&gt; A Mule app using the MCP Connector, with one Tool Listener per tool, each calling a Process API. &lt;a href="https://dev.to/thasha/part-4-turning-mule-apis-into-mcp-tools-with-the-mcp-connector-39oa"&gt;Part 4&lt;/a&gt; walks through it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Descriptions written for an agent.&lt;/strong&gt; Not the API's summary line. Say when to use the tool, what it needs first and what it returns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Named errors.&lt;/strong&gt; &lt;code&gt;APPROVAL_MISSING&lt;/code&gt; tells an agent what to do next. A generic 400 makes it guess, or retry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent policies.&lt;/strong&gt; Tool allow-lists per agent, PII detection and token limits in Omni Gateway, as in &lt;a href="https://dev.to/thasha/part-5-governing-agent-traffic-with-omni-gateway-policies-5edp"&gt;Part 5&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Expose Process APIs, never System APIs
&lt;/h2&gt;

&lt;p&gt;This is the one rule worth repeating. A System API is a thin wrapper over a system of record. If an agent can call it directly, every business rule you built in the Process layer is bypassed. In our MVP, a git pre-commit hook rejected any tool that called a System API, so the rule couldn't drift.&lt;/p&gt;

&lt;h2&gt;
  
  
  Picking your first tool
&lt;/h2&gt;

&lt;p&gt;Good first tools have three things in common:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Read-only.&lt;/strong&gt; A lookup, such as "get transport status", can't do damage while you learn how agents use it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Well documented.&lt;/strong&gt; A clean spec and clear error codes make a good tool description almost write itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Used a lot by people today.&lt;/strong&gt; If analysts look it up twenty times a day, an agent that can do it saves real time.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Write actions come later, behind a Process API that checks approvals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three mistakes to avoid
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mapping every endpoint to a tool.&lt;/strong&gt; Agents choose worse with more tools. Expose the handful a task needs, and give each agent only its own.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copying the API description.&lt;/strong&gt; "Retrieves transport details" is written for developers. An agent needs "Use this before importing a transport, to confirm it's released and not locked".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skipping the error design.&lt;/strong&gt; Most agent loops we saw came from errors the agent couldn't act on.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A checklist for one API
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Pick a Process API, not a System API.&lt;/li&gt;
&lt;li&gt;Translate its request and response types into the tool's input and output schemas.&lt;/li&gt;
&lt;li&gt;Write the tool description: when to use it, what it needs first, what it returns.&lt;/li&gt;
&lt;li&gt;Map each failure to a named error.&lt;/li&gt;
&lt;li&gt;Add MUnit tests for the happy path and each named error.&lt;/li&gt;
&lt;li&gt;Add the tool to the right agent's allow-list in Omni Gateway.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a well-specified API, that can be an afternoon, not a project.&lt;/p&gt;

&lt;p&gt;Which of your Process APIs would make the best first tool?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This series describes a reference model built on a fictional company. Product capabilities are based on MuleSoft documentation as of October 2026; check current docs before you build.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mulesoft</category>
      <category>mcp</category>
      <category>ai</category>
      <category>api</category>
    </item>
    <item>
      <title>Part 10: Lessons learned and a reusable blueprint for agentic approval flows</title>
      <dc:creator>Shakar Bisetty</dc:creator>
      <pubDate>Sun, 11 Oct 2026 08:02:07 +0000</pubDate>
      <link>https://dev.to/thasha/part-10-lessons-learned-and-a-reusable-blueprint-for-agentic-approval-flows-3pj</link>
      <guid>https://dev.to/thasha/part-10-lessons-learned-and-a-reusable-blueprint-for-agentic-approval-flows-3pj</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 10 of 10 · Building an Agentic Change-Approval MVP on MuleSoft&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is the last part. Over nine posts we took one painful process, promoting an SAP change from development to production, and built an agentic MVP for it on MuleSoft: from the &lt;a href="https://dev.to/thasha/the-21-step-change-nobody-wants-to-own-why-sap-change-promotion-is-an-agentic-use-case-4mpo"&gt;21-step process&lt;/a&gt; and the &lt;a href="https://dev.to/thasha/not-every-step-should-be-an-agent-a-2x2-for-deciding-what-to-automate-2np6"&gt;2x2 that decides what to automate&lt;/a&gt;, through the &lt;a href="https://dev.to/thasha/part-2-the-reference-architecture-for-an-agentic-change-approval-mvp-on-mulesoft-on-one-page-1917"&gt;architecture&lt;/a&gt;, the &lt;a href="https://dev.to/thasha/part-3-designing-the-agent-network-and-what-the-brokers-graph-actually-looks-like-jap"&gt;agent network&lt;/a&gt;, &lt;a href="https://dev.to/thasha/part-4-turning-mule-apis-into-mcp-tools-with-the-mcp-connector-39oa"&gt;MCP tools&lt;/a&gt;, &lt;a href="https://dev.to/thasha/part-5-governing-agent-traffic-with-omni-gateway-policies-5edp"&gt;gateway policies&lt;/a&gt;, &lt;a href="https://dev.to/thasha/part-6-building-it-with-mulesoft-vibes-skills-rules-workflows-and-hooks-215k"&gt;Vibes&lt;/a&gt;, &lt;a href="https://dev.to/thasha/part-7-testing-an-agentic-flow-munit-evaluations-and-the-evidence-auditors-ask-for-3d5g"&gt;testing&lt;/a&gt;, &lt;a href="https://dev.to/thasha/part-8-deploying-agent-networks-cicd-with-the-anypoint-cli-lce"&gt;CI/CD&lt;/a&gt; and &lt;a href="https://dev.to/thasha/part-9-supporting-an-agentic-flow-in-production-observability-runbooks-and-failure-modes-3kep"&gt;production support&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This part pulls it together: what worked, what we'd change, and a blueprint you can reuse for your own process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five things that worked
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Starting with the process, not the agents.&lt;/strong&gt; We mapped all 21 steps before writing a single prompt, and sorted each one into rules, agent or person. Most steps didn't need an agent at all. That map is still the most useful artifact in the project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Enforcing human gates in code.&lt;/strong&gt; Every approval is checked by a Process API before anything touches SAP, as in the &lt;a href="https://dev.to/thasha/human-in-the-loop-is-a-design-feature-enforcing-approval-gates-for-ai-agents-on-mulesoft-3eee"&gt;human-in-the-loop post&lt;/a&gt;. The agent can't skip a gate, however it's prompted, because the gate isn't in the prompt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Exposing Process APIs as tools, never System APIs.&lt;/strong&gt; The business rules the integration team had already built became the safety layer for the agents. We reused far more than we wrote.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Letting deterministic checks decide.&lt;/strong&gt; The AI proposes a package, a risk class, a transport order. Schemas, Process APIs, gateway policies and people decide whether it goes ahead. The same rule applied to the AI developer: Vibes proposes code, hooks and CI decide.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Testing exactly wherever we could.&lt;/strong&gt; Only the LLM steps get scored. Everything else gets an exact test, which kept the test suite ordinary, fast and trusted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five things we'd do differently
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Write tool descriptions and named errors first.&lt;/strong&gt; Most of the agent problems we debugged, including loops, came from tools that didn't say when to use them or what to do after an error. Next time we'd write those before any agent prompt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Build the golden set before the first agent.&lt;/strong&gt; We built it after the first version worked. Having it from day one would have made every early prompt change measurable instead of a judgement call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Set token budgets from the start.&lt;/strong&gt; We added the LLM rate-limit policy after a prompt change multiplied token use. A budget per agent from day one is cheap and catches that immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Keep agents smaller.&lt;/strong&gt; One of our first agents had too many tools and made poor choices between them. Splitting it into two agents with a few tools each fixed more than any prompt rewrite.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Plan support before go-live.&lt;/strong&gt; The correlation ID, the dashboard, the runbooks and the pause switch from Part 9 all came late. They should be part of the first release, not the first incident.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fldhph38e0hxbcdpcehgo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fldhph38e0hxbcdpcehgo.png" alt="A reusable blueprint for agentic approval flows" width="799" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The blueprint
&lt;/h2&gt;

&lt;p&gt;If you want to apply this to your own process, this is the order we'd follow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Map the process.&lt;/strong&gt; List every step and sort each one: rules, agent or person.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Find the gates.&lt;/strong&gt; Enforce every approval in a Process API, not in a prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expose tools.&lt;/strong&gt; MCP tools over Process APIs, with descriptions written for an agent and named errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design the network.&lt;/strong&gt; Small agents with few tools each, and a broker graph with loop limits and escalation to a person.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Govern traffic.&lt;/strong&gt; Tool allow-lists, PII detection and token budgets in Omni Gateway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build with standards.&lt;/strong&gt; Skills, rules and workflows for the AI developer in Vibes; hooks and CI to check the result.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test, ship and run.&lt;/strong&gt; Exact tests plus a golden set, one versioned release for Mule apps and the agent network, and a runbook for each failure mode.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Steps 1 and 2 are the ones teams want to skip, and they're the ones that make the rest safe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where else it fits
&lt;/h2&gt;

&lt;p&gt;Nothing in the blueprint is specific to SAP. The same shape works for any multi-step process where people approve and systems execute: access requests, vendor onboarding, configuration promotion in Salesforce or Workday, or release management in general. If your process has a checklist, a few approvers and a system of record at the end, it's a candidate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thank you
&lt;/h2&gt;

&lt;p&gt;Thanks for reading along, and to everyone who commented and asked questions. All ten parts stay together in the &lt;a href="https://dev.to/thasha/series/44642"&gt;series&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What process in your organisation would you put through this blueprint first? And what should the next series cover?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This series describes a reference model built on a fictional company. Product capabilities are based on MuleSoft documentation as of October 2026; check current docs before you build.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mulesoft</category>
      <category>ai</category>
      <category>architecture</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Part 9: Supporting an agentic flow in production: observability, runbooks and failure modes</title>
      <dc:creator>Shakar Bisetty</dc:creator>
      <pubDate>Fri, 09 Oct 2026 17:14:54 +0000</pubDate>
      <link>https://dev.to/thasha/part-9-supporting-an-agentic-flow-in-production-observability-runbooks-and-failure-modes-3kep</link>
      <guid>https://dev.to/thasha/part-9-supporting-an-agentic-flow-in-production-observability-runbooks-and-failure-modes-3kep</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 9 of 10 · Building an Agentic Change-Approval MVP on MuleSoft&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/thasha/part-8-deploying-agent-networks-cicd-with-the-anypoint-cli-lce"&gt;Part 8&lt;/a&gt; shipped the system. This part is about the day after go-live: what the support team watches, what actually breaks, and what they do about it. An agentic flow fails differently from a normal integration. Most failures don't throw an error. The agent just does something slightly wrong, or nothing at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  One trace per change request
&lt;/h2&gt;

&lt;p&gt;The first decision paid for itself many times over: &lt;strong&gt;the change request number is the correlation ID&lt;/strong&gt;, end to end. It's set when the ITSM ticket arrives and passed through the broker, every agent, every MCP tool call, the Process APIs and the SAP System API.&lt;/p&gt;

&lt;p&gt;That means a support engineer can answer "what happened to CR-1042?" with a single search across the logs, instead of piecing together five applications by timestamp. Every log line is structured JSON with the CR number, the agent name, the tool name and the step in the broker's graph.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F49tfwe0sa1hy70rzs60e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F49tfwe0sa1hy70rzs60e.png" alt="Six failure modes, and how we catch each one" width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch four groups of signals
&lt;/h2&gt;

&lt;p&gt;We kept the production dashboard deliberately small. Four groups, one row each:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flow health.&lt;/strong&gt; Requests in flight, time spent in each stage of the broker's graph, and the escalation rate to a person. A rising escalation rate is usually the first sign that something upstream changed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool layer.&lt;/strong&gt; Calls per tool and named errors per tool. A spike in &lt;code&gt;APPROVAL_MISSING&lt;/code&gt; is worth a look: it often means approvers are being chased before the approval request was sent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gateway.&lt;/strong&gt; Denials per agent, PII detections and rate-limit responses from the Omni Gateway policies in &lt;a href="https://dev.to/thasha/part-5-governing-agent-traffic-with-omni-gateway-policies-5edp"&gt;Part 5&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM.&lt;/strong&gt; Tokens per request per agent, and the trend of the quality scores from the judge LLM introduced in &lt;a href="https://dev.to/thasha/part-7-testing-an-agentic-flow-munit-evaluations-and-the-evidence-auditors-ask-for-3d5g"&gt;Part 7&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each alert on this dashboard points to one of the failure modes below, and each one has a runbook.&lt;/p&gt;

&lt;h2&gt;
  
  
  The six failure modes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. The agent loops.&lt;/strong&gt; The same tool is called with the same input three or more times for one request. The broker's graph caps retries at two and escalates to a person, so the request doesn't get stuck. The alert exists so someone finds out &lt;em&gt;why&lt;/em&gt;: usually a tool description that doesn't say what to do after an error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. A tool isn't found.&lt;/strong&gt; After a deployment, an agent reports it can't complete a step, and the trace shows zero tool calls for that stage. This is almost always deployment order (agents deployed before their tools, as described in Part 8). We now run a smoke check after every deployment that lists each agent's tools and compares them with the access matrix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The token budget is hit.&lt;/strong&gt; The LLM rate-limit policy returns 429s for one agent. The request waits and resumes, so nothing is lost. The real question is why: in our case it was a prompt change that pulled the full transport history into every call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. An SAP transport is locked.&lt;/strong&gt; &lt;code&gt;TRANSPORT_LOCKED&lt;/code&gt; errors come back from SAP. The Process API retries with backoff. The agent never retries on its own, because an agent retrying a locked import is how you get duplicate imports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Quality drifts.&lt;/strong&gt; The judge scores fall slowly over a few weeks with no change on our side. This can happen when the model provider updates a model behind the same name. We rerun the golden set, pin a specific model version, and treat any model change as a release, as in Part 8.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Policy denials spike.&lt;/strong&gt; One agent suddenly gets 403s from the gateway. We compare its live tool list with the access matrix and check the most recent policy change. So far it has always been configuration, never an agent misbehaving.&lt;/p&gt;

&lt;h2&gt;
  
  
  Runbooks with four sections
&lt;/h2&gt;

&lt;p&gt;Every runbook has the same shape, so the person on call doesn't need to learn a new format at 2 a.m.:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Symptom:&lt;/strong&gt; what the alert or the user report looks like.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check:&lt;/strong&gt; the exact log search or dashboard panel, filtered by CR number.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Act:&lt;/strong&gt; the safe actions, in order. Resubmit the request, reassign it to a person, or pause intake.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escalate:&lt;/strong&gt; who owns it. The integration team for tools, the agent team for prompts and evaluations, the platform team for gateways.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The runbook for "the agent loops" is the most used. The fix is almost never in the agent's prompt. It's in the tool description, or in a named error that the agent can't act on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pause intake: the kill switch
&lt;/h2&gt;

&lt;p&gt;Every agentic system needs a way to stop safely. Ours is a single switch that stops the broker from accepting new requests. Requests already in flight finish their current step and park. New tickets go to the manual queue.&lt;/p&gt;

&lt;p&gt;This only works because &lt;strong&gt;the manual process never went away&lt;/strong&gt;. It's documented, and the change analysts still know it. We tested the switch in production in a planned window before go-live, and again after the first month.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who supports what
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Service desk (L1):&lt;/strong&gt; request status by CR number, and the pause switch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration team (L2):&lt;/strong&gt; MCP tools, Process and System APIs, SAP errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent team (L2):&lt;/strong&gt; prompts, the broker's graph, golden-set reruns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform team:&lt;/strong&gt; Omni Gateway, Agent Fabric, credentials and deployments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once a week, the agent team reviews ten completed requests by hand, the judge score trend and the token spend per agent. It takes an hour and it has caught every slow drift so far.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Part 10&lt;/strong&gt;, the last part, covers the lessons learned and a reusable blueprint you can take to your own change process.&lt;/p&gt;

&lt;p&gt;What's the first runbook you'd write for an agent in production?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This series describes a reference model built on a fictional company. Product capabilities are based on MuleSoft documentation as of October 2026; check current docs before you build.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mulesoft</category>
      <category>ai</category>
      <category>devops</category>
      <category>observability</category>
    </item>
    <item>
      <title>Part 8: Deploying agent networks: CI/CD with the Anypoint CLI</title>
      <dc:creator>Shakar Bisetty</dc:creator>
      <pubDate>Thu, 08 Oct 2026 14:16:08 +0000</pubDate>
      <link>https://dev.to/thasha/part-8-deploying-agent-networks-cicd-with-the-anypoint-cli-lce</link>
      <guid>https://dev.to/thasha/part-8-deploying-agent-networks-cicd-with-the-anypoint-cli-lce</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 8 of 10 · Building an Agentic Change-Approval MVP on MuleSoft&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/thasha/part-7-testing-an-agentic-flow-munit-evaluations-and-the-evidence-auditors-ask-for-3d5g"&gt;Part 7&lt;/a&gt; built the evidence. This part ships it. An agentic system has more moving parts than a normal integration release: Mule apps, gateway policies, prompts, a model choice and the agent network itself. If they don't move through environments together, you end up testing one combination and running another in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two pipelines, one release
&lt;/h2&gt;

&lt;p&gt;We run two pipelines, released together under one version number:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The Mule pipeline&lt;/strong&gt; builds and deploys the MCP server app and the Process and System APIs. It's the same Maven-based pipeline the integration team already used, publishing to Exchange and deploying to CloudHub 2.0.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The agent network pipeline&lt;/strong&gt; builds and deploys the agents and the broker, using the Anypoint CLI Agent Fabric plugin.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv57he6rosnf5sz3ordgs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv57he6rosnf5sz3ordgs.png" alt="The release pipeline, from commit to production" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The agent network pipeline
&lt;/h2&gt;

&lt;p&gt;The Agent Fabric plugin for the Anypoint CLI covers the whole lifecycle with a handful of commands. A project created with &lt;code&gt;agent-network:project:create&lt;/code&gt; contains an &lt;code&gt;agent-network.yaml&lt;/code&gt; that describes the network. In CI, the steps are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# once per target space, before the first deployment&lt;/span&gt;
anypoint-cli-agent-fabric-plugin agent-network:setup:gateways

&lt;span class="c"&gt;# every release&lt;/span&gt;
anypoint-cli-agent-fabric-plugin agent-network:project:build    &lt;span class="c"&gt;# validate, generate artifacts&lt;/span&gt;
anypoint-cli-agent-fabric-plugin agent-network:project:publish  &lt;span class="c"&gt;# assets to Exchange&lt;/span&gt;
anypoint-cli-agent-fabric-plugin agent-network:project:deploy   &lt;span class="c"&gt;# to the target environment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Credentials come from the CI secret store as &lt;code&gt;ANYPOINT_CLIENT_ID&lt;/code&gt; and &lt;code&gt;ANYPOINT_CLIENT_SECRET&lt;/code&gt;, never from the repo. The environment is chosen with &lt;code&gt;--environment&lt;/code&gt;, and values that differ per environment are passed at deploy time with &lt;code&gt;--property name:value&lt;/code&gt;. The plugin needs Node 20+ and Java 17+ on the build agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy in dependency order
&lt;/h2&gt;

&lt;p&gt;Agents depend on tools, and tools depend on gateway policies. So the order inside each environment is fixed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Mule apps first.&lt;/strong&gt; The Process and System APIs, then the MCP server with its tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gateway policies next.&lt;/strong&gt; The allow-list and ABAC rules from &lt;a href="https://dev.to/thasha/part-5-governing-agent-traffic-with-omni-gateway-policies-5edp"&gt;Part 5&lt;/a&gt;, applied from configuration in the same repo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The agent network last.&lt;/strong&gt; Only once every tool it expects is reachable and governed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Deploying agents before their tools exist doesn't fail loudly. The agents simply can't find the tools, and the first symptom is a confused answer in testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Promote the same thing, not a rebuild
&lt;/h2&gt;

&lt;p&gt;Every release has one version, set as the asset version (the GAV coordinates) in the agent network project and matched in the Mule apps. Sandbox, test and production all get the &lt;strong&gt;same built artifacts&lt;/strong&gt;; only the environment and its properties change.&lt;/p&gt;

&lt;p&gt;The gates between environments are the layers from Part 7:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Into test:&lt;/strong&gt; MUnit and gateway policy tests pass in sandbox.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Into production:&lt;/strong&gt; graph scenarios pass, the golden-set scores are no worse than the current production version, and the business owners have signed the UAT record.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A prompt change or a model change is a new version, with the same gates as a code change. That rule caught more regressions for us than any other.&lt;/p&gt;

&lt;h2&gt;
  
  
  The system approves its own changes
&lt;/h2&gt;

&lt;p&gt;This is a change-approval system, so its own production releases go through change approval. The production deploy job waits for an approved change record, the same way an SAP import waits for an &lt;code&gt;approval_id&lt;/code&gt;. It's a small thing to build, and it's the first question an auditor asks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rolling back an agent
&lt;/h2&gt;

&lt;p&gt;Rollback is a redeploy of the previous version, not an edit in production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent network:&lt;/strong&gt; check out the previous release tag and run &lt;code&gt;build&lt;/code&gt; and &lt;code&gt;deploy&lt;/code&gt; again. Keep the previous version published in Exchange until the new one has been stable for a while.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mule apps:&lt;/strong&gt; redeploy the previous application version.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teardown order matters.&lt;/strong&gt; If you ever remove a version, run &lt;code&gt;undeploy&lt;/code&gt; before &lt;code&gt;unpublish&lt;/code&gt;, so nothing running still points at a deleted Exchange asset.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We rehearse a rollback in the test environment before every production release. If the rehearsal takes more than a few minutes, the release waits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who owns what
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Integration team:&lt;/strong&gt; the Mule pipeline and the tool deployment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent team:&lt;/strong&gt; the agent network project, its version and the golden-set gate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform team:&lt;/strong&gt; target spaces, gateways, CI credentials and the policy deployment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change board:&lt;/strong&gt; the production approval, like any other change.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Part 9&lt;/strong&gt; covers running it in production: observability, runbooks and the failure modes we actually saw.&lt;/p&gt;

&lt;p&gt;How do you version prompts in your team today?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This series describes a reference model built on a fictional company. CLI commands are from the Anypoint CLI Agent Fabric plugin documentation as of October 2026; check current docs before you build.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mulesoft</category>
      <category>ai</category>
      <category>devops</category>
      <category>cicd</category>
    </item>
    <item>
      <title>Part 7: Testing an agentic flow: MUnit, evaluations and the evidence auditors ask for</title>
      <dc:creator>Shakar Bisetty</dc:creator>
      <pubDate>Wed, 07 Oct 2026 13:28:31 +0000</pubDate>
      <link>https://dev.to/thasha/part-7-testing-an-agentic-flow-munit-evaluations-and-the-evidence-auditors-ask-for-3d5g</link>
      <guid>https://dev.to/thasha/part-7-testing-an-agentic-flow-munit-evaluations-and-the-evidence-auditors-ask-for-3d5g</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 7 of 10 · Building an Agentic Change-Approval MVP on MuleSoft&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/thasha/part-6-building-it-with-mulesoft-vibes-skills-rules-workflows-and-hooks-215k"&gt;Part 6&lt;/a&gt; covered how the team builds the tools. This part covers how we test them, and how we test the agents that call them. In a regulated change process, "it worked in the demo" isn't evidence. The quality team will ask what was tested, how, against which version, and who signed off.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test deterministic things deterministically
&lt;/h2&gt;

&lt;p&gt;The single most useful rule we followed: &lt;strong&gt;anything that should always give the same answer gets an exact test, and only the LLM steps get scored.&lt;/strong&gt; That splits the system cleanly, and it means most of the test suite is ordinary integration testing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F44l6ouqfw004jhcjfuub.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F44l6ouqfw004jhcjfuub.png" alt="A test pyramid for an agentic flow" width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 1: MUnit for the tool layer
&lt;/h2&gt;

&lt;p&gt;Every MCP tool flow from &lt;a href="https://dev.to/thasha/part-4-turning-mule-apis-into-mcp-tools-with-the-mcp-connector-39oa"&gt;Part 4&lt;/a&gt; gets MUnit tests, generated by the &lt;code&gt;/new-mcp-tool&lt;/code&gt; workflow and finished by hand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The happy path, with the Process API mocked.&lt;/li&gt;
&lt;li&gt;One test per named error, such as &lt;code&gt;APPROVAL_MISSING&lt;/code&gt; and &lt;code&gt;TRANSPORT_LOCKED&lt;/code&gt;, checking the error code the agent will see.&lt;/li&gt;
&lt;li&gt;Schema tests: malformed input is rejected before any call goes out.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most important test in the whole suite is a negative one. For &lt;code&gt;import_transport_to_qa&lt;/code&gt;, we call the Process API with no valid approval and assert two things: the result is &lt;code&gt;APPROVAL_MISSING&lt;/code&gt;, and the SAP System API mock was called &lt;strong&gt;zero&lt;/strong&gt; times (MUnit's verify-call with &lt;code&gt;times&lt;/code&gt; set to 0). That one test proves the approval gate from the &lt;a href="https://dev.to/thasha/human-in-the-loop-is-a-design-feature-enforcing-approval-gates-for-ai-agents-on-mulesoft-3eee"&gt;human-in-the-loop post&lt;/a&gt; holds in code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 2: policy tests at the gateway
&lt;/h2&gt;

&lt;p&gt;The Omni Gateway rules from &lt;a href="https://dev.to/thasha/part-5-governing-agent-traffic-with-omni-gateway-policies-5edp"&gt;Part 5&lt;/a&gt; are configuration, and configuration drifts. So we test them in the test environment with a small script:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For each agent identity, list the tools it can see and compare with the access matrix.&lt;/li&gt;
&lt;li&gt;For each agent, try one tool it should &lt;em&gt;not&lt;/em&gt; have and expect a denial.&lt;/li&gt;
&lt;li&gt;Send a prompt with planted test PII and confirm the PII policies catch it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These run after every gateway change, not just at release.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 3: scenario tests on the broker graph
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://dev.to/thasha/part-3-designing-the-agent-network-and-what-the-brokers-graph-actually-looks-like-jap"&gt;broker's graph&lt;/a&gt; has branches, loops and gates, and each one gets a scenario with fixed inputs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An incomplete request loops back to the requester twice, then escalates to a person.&lt;/li&gt;
&lt;li&gt;A rejected approval closes the request with a reason and never reaches &lt;code&gt;create_sap_change_doc&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A complete, approved request reaches the stage 4 hand-off with a full record.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We're testing the routing here, not the quality of the agents' reasoning, so the inputs are chosen to make the agents' decisions obvious.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 4: evaluations for the agents
&lt;/h2&gt;

&lt;p&gt;This is the only layer where answers vary. We built a golden set of 40 historical change requests, anonymised, with the answers a senior analyst gave: completeness, risk class and the transport sequence.&lt;/p&gt;

&lt;p&gt;Each agent version runs against the full set:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Structured fields are checked exactly.&lt;/strong&gt; Risk class must match; the transport sequence must respect every dependency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free-text output is scored.&lt;/strong&gt; The A2A Quality Evaluation policy in Omni Gateway sends each response to a judge LLM and returns a yes/no on whether the request was addressed, a 1–3 quality score and an explanation, as response headers and metrics. It doesn't block anything, so we collect the scores and set our own release threshold.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A new prompt or model version only ships if it matches or beats the previous version on the golden set. The scores per version go into the evidence pack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 5: human sign-off
&lt;/h2&gt;

&lt;p&gt;Before go-live, business owners run a sample of real-shaped requests in the test environment and sign off on the packages the Approval agent builds. This is the same human gate the process has always had, applied to the system itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test data without touching production
&lt;/h2&gt;

&lt;p&gt;All of this runs against a non-production SAP client with synthetic transports, a test ITSM instance and test approvers. Production systems never appear in a test, and the gateway's prompt guard blocks production system names even if someone tries.&lt;/p&gt;

&lt;h2&gt;
  
  
  The evidence pack
&lt;/h2&gt;

&lt;p&gt;What we hand the quality team for each release:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;MUnit results for every tool and Process API, including the zero-call SAP test.&lt;/li&gt;
&lt;li&gt;Gateway policy test results against the access matrix.&lt;/li&gt;
&lt;li&gt;Graph scenario results.&lt;/li&gt;
&lt;li&gt;Golden-set scores for each agent, compared with the previous version.&lt;/li&gt;
&lt;li&gt;Signed UAT records from the business owners.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Who owns what
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Integration team:&lt;/strong&gt; MUnit and the Process API tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform team:&lt;/strong&gt; gateway policy tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent team:&lt;/strong&gt; graph scenarios, the golden set and evaluation thresholds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality and business owners:&lt;/strong&gt; the sign-off.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Part 8&lt;/strong&gt; covers deployment: CI/CD for the Mule apps and the agent network, promoting through environments, and how to roll back an agent.&lt;/p&gt;

&lt;p&gt;What would you put in your golden set first?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This series describes a reference model built on a fictional company. Product capabilities are based on MuleSoft documentation as of October 2026; check current docs before you build.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mulesoft</category>
      <category>ai</category>
      <category>testing</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Part 6: Building it with MuleSoft Vibes: skills, rules, workflows and hooks</title>
      <dc:creator>Shakar Bisetty</dc:creator>
      <pubDate>Tue, 06 Oct 2026 00:53:50 +0000</pubDate>
      <link>https://dev.to/thasha/part-6-building-it-with-mulesoft-vibes-skills-rules-workflows-and-hooks-215k</link>
      <guid>https://dev.to/thasha/part-6-building-it-with-mulesoft-vibes-skills-rules-workflows-and-hooks-215k</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 6 of 10 · Building an Agentic Change-Approval MVP on MuleSoft&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Parts &lt;a href="https://dev.to/thasha/part-4-turning-mule-apis-into-mcp-tools-with-the-mcp-connector-39oa"&gt;4&lt;/a&gt; and &lt;a href="https://dev.to/thasha/part-5-governing-agent-traffic-with-omni-gateway-policies-5edp"&gt;5&lt;/a&gt; covered what the integration team builds: MCP tool flows with strict contracts, behind a governed gateway. This part covers how they build it. We used MuleSoft Vibes in Anypoint Code Builder, and the interesting part wasn't the code it wrote. It was how we taught it our standards so every tool came out the same way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three ways to teach Vibes your standards
&lt;/h2&gt;

&lt;p&gt;Vibes gives you three building blocks, and each one solves a different problem:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;When it applies&lt;/th&gt;
&lt;th&gt;What we used it for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rules&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Natural-language constraints&lt;/td&gt;
&lt;td&gt;Every message (global or workspace)&lt;/td&gt;
&lt;td&gt;Standards that never change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Skills&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Instruction packs with optional files&lt;/td&gt;
&lt;td&gt;Only when a request matches the skill&lt;/td&gt;
&lt;td&gt;How to build one kind of thing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workflows&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Named multi-step tasks&lt;/td&gt;
&lt;td&gt;When you run them as a slash command&lt;/td&gt;
&lt;td&gt;Repeatable sequences&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The difference matters because of context. Rules are always loaded, so they should be short. Skills load only when relevant, so they can carry detail, templates and examples without crowding out everything else.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsfdtyzuvkgnoz4bj6686.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsfdtyzuvkgnoz4bj6686.png" alt="How rules, skills, workflows and guardrails fit together" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Rules: the things that are always true
&lt;/h2&gt;

&lt;p&gt;Our workspace rules are a short list. Each one is something we never want to explain twice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tool flows never call a System API directly. They call a Process API.&lt;/li&gt;
&lt;li&gt;Every flow has an error handler that returns a named error code.&lt;/li&gt;
&lt;li&gt;Tool names are snake_case and start with a business verb (&lt;code&gt;create_&lt;/code&gt;, &lt;code&gt;read_&lt;/code&gt;, &lt;code&gt;request_&lt;/code&gt;, &lt;code&gt;import_&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;No credentials, hostnames or client names in code. Use properties and secure properties.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a rule needs a paragraph of explanation, it probably belongs in a skill instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skills: how to build one kind of thing
&lt;/h2&gt;

&lt;p&gt;Workspace skills live in &lt;code&gt;.a4drules/skills/&lt;/code&gt;, one folder per skill, committed with the project. Each folder has a &lt;code&gt;SKILL.md&lt;/code&gt; and can carry &lt;code&gt;references/&lt;/code&gt;, &lt;code&gt;assets/&lt;/code&gt; and &lt;code&gt;scripts/&lt;/code&gt;. Vibes loads a skill only when a request matches its description.&lt;/p&gt;

&lt;p&gt;We wrote one skill per kind of artifact. The most-used one teaches Vibes how to build an MCP tool flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.a4drules/skills/mcp-tool-flow/
├── SKILL.md
└── references/
    ├── tool-listener-template.xml
    ├── input-schema-template.json
    └── description-checklist.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The top of &lt;code&gt;SKILL.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mcp-tool-flow&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Use when creating or changing an MCP tool flow with the&lt;/span&gt;
  &lt;span class="s"&gt;MCP Connector Tool Listener. Covers naming, description, input schema,&lt;/span&gt;
  &lt;span class="s"&gt;Process API call and error codes.&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="p"&gt;1.&lt;/span&gt; Ask for the business action and who will call it, if not given.
&lt;span class="p"&gt;2.&lt;/span&gt; Name the tool &lt;span class="nt"&gt;&amp;lt;verb&amp;gt;&lt;/span&gt;&lt;span class="ge"&gt;_&amp;lt;object&amp;gt;, snake_&lt;/span&gt;case.
&lt;span class="p"&gt;3.&lt;/span&gt; Write the description with: what it does, when to use it,
   what it needs first, what it returns.
&lt;span class="p"&gt;4.&lt;/span&gt; Build the input schema from references/input-schema-template.json.
   Every field typed, constrained and described. No additionalProperties.
&lt;span class="p"&gt;5.&lt;/span&gt; Call the Process API, never a System API.
&lt;span class="p"&gt;6.&lt;/span&gt; Map failures to named error codes from the Process API contract.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The description checklist is the same four rules from &lt;a href="https://dev.to/thasha/part-4-turning-mule-apis-into-mcp-tools-with-the-mcp-connector-39oa"&gt;Part 4&lt;/a&gt;. Putting it in a skill means every developer gets it, including the ones who never read the series.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflows: the sequence we kept repeating
&lt;/h2&gt;

&lt;p&gt;Adding a tool always took the same steps, so we made it a workflow and run it as &lt;code&gt;/new-mcp-tool&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Collect the business action, caller (which agent) and Process API operation.&lt;/li&gt;
&lt;li&gt;Generate the input schema and Tool Listener flow, using the &lt;code&gt;mcp-tool-flow&lt;/code&gt; skill.&lt;/li&gt;
&lt;li&gt;Generate an MUnit test for the happy path and each named error.&lt;/li&gt;
&lt;li&gt;Draft the change request for the platform team: add the tool to the Global Access allow-list and to the right agent's ABAC rule (Part 5).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 4 is the one people forgot before the workflow existed. A tool that works locally but isn't on the gateway's allow-list is invisible to every agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Guardrails: what the AI doesn't get to decide
&lt;/h2&gt;

&lt;p&gt;Rules and skills make good output likely. They don't make it certain. A developer can ignore a suggestion, and a model can miss an instruction. So the checks that must always pass are deterministic and live outside Vibes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A git pre-commit hook&lt;/strong&gt; runs a small script that checks every Tool Listener has a description and an input schema, that tool names match the naming rule, and that no tool flow references a System API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The CI pipeline&lt;/strong&gt; runs the MUnit suite and the same checks again, because hooks can be skipped locally.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vibes itself doesn't have hooks; these are ordinary git hooks and pipeline steps. If your team also uses an AI coding tool that supports hooks, such as Claude Code, you can run the same checks at edit time. The principle is the same as in the runtime design: the AI proposes, deterministic checks decide.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who owns what
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Integration team:&lt;/strong&gt; workspace rules, the skills and workflows in the repo, and the pre-commit checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration CoE or platform team:&lt;/strong&gt; global rules shared across projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Every developer:&lt;/strong&gt; proposes a new rule or skill when they catch themselves correcting the same thing twice.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Part 7&lt;/strong&gt; covers testing an agentic flow: MUnit for the deterministic tool layer, evaluations for agent answers, and the evidence a regulated quality team will ask for.&lt;/p&gt;

&lt;p&gt;Which of your team's standards would you turn into a skill first?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This series describes a reference model built on a fictional company. Vibes capabilities are based on MuleSoft documentation as of October 2026; check current docs before you build.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mulesoft</category>
      <category>ai</category>
      <category>devops</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Part 5: Governing agent traffic with Omni Gateway policies</title>
      <dc:creator>Shakar Bisetty</dc:creator>
      <pubDate>Mon, 05 Oct 2026 04:22:34 +0000</pubDate>
      <link>https://dev.to/thasha/part-5-governing-agent-traffic-with-omni-gateway-policies-5edp</link>
      <guid>https://dev.to/thasha/part-5-governing-agent-traffic-with-omni-gateway-policies-5edp</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 5 of 10 · Building an Agentic Change-Approval MVP on MuleSoft&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/thasha/part-4-turning-mule-apis-into-mcp-tools-with-the-mcp-connector-39oa"&gt;Part 4&lt;/a&gt; ended with an uncomfortable point: a tool's description guides the agent, but it doesn't protect anything. This part covers the layer that does: Omni Gateway, sitting in front of every MCP server, every agent-to-agent call and every request to an LLM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three kinds of traffic, one gateway
&lt;/h2&gt;

&lt;p&gt;An agent network produces three kinds of traffic, and each one has its own risks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent → MCP tools.&lt;/strong&gt; Can this agent call this tool? Is the request well formed? Is personal data coming back in the response?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent → agent (A2A).&lt;/strong&gt; Is the request valid, and is personal data being passed between agents?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent → LLM.&lt;/strong&gt; Is personal data going to the model provider? Is anyone trying to talk the model out of its instructions? How many tokens is each agent burning?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Omni Gateway has policy sets for all three. Here's the chain we use in the MVP:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F01bstd6ox6logs3wgj36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F01bstd6ox6logs3wgj36.png" alt="The policy chain in front of each kind of agent traffic" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The order shown is the order we apply them, cheapest and most decisive first. A malformed request should fail before anything inspects its content.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP traffic: who can see which tool
&lt;/h2&gt;

&lt;p&gt;Two policies decide tool access, and they work at different levels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP Support&lt;/strong&gt; comes first: it's the required policy that makes the gateway treat the API as an MCP server. Then &lt;strong&gt;MCP Global Access&lt;/strong&gt; sets the baseline. It defines allow and block rules for which tools the MCP server exposes at all. We allow exactly the five tools from Part 4. Anything the integration team adds later stays invisible until someone adds it to the list on purpose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP Attribute-Based Access Control&lt;/strong&gt; narrows that down per caller. Rules use attributes of the request, such as token claims, headers, IP or tiers. Each agent calls the gateway with its own identity, so the rules can say which agent gets which tool:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Intake&lt;/th&gt;
&lt;th&gt;Planner&lt;/th&gt;
&lt;th&gt;Approval&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;create_change&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;read_transport&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;request_approval&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;create_sap_change_doc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;import_transport_to_qa&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The Intake agent never sees &lt;code&gt;import_transport_to_qa&lt;/code&gt;. It isn't refused when it tries; the tool simply isn't in its list. A tool an agent can't see is a tool it can't be talked into calling.&lt;/p&gt;

&lt;p&gt;Two more MCP policies are worth switching on early:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MCP Schema Validation&lt;/strong&gt; rejects requests that don't conform to the MCP specification before they reach a flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP PII Detector&lt;/strong&gt; blocks responses that contain personal data. ITSM records carry requester names and contact details. The agents don't need them, so they never leave the integration layer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your tool list grows, look at &lt;strong&gt;MCP Tools Progressive Disclosure&lt;/strong&gt;, which exposes tools on demand through search instead of sending every description in every prompt. &lt;strong&gt;MCP Tool Mapping&lt;/strong&gt; lets you rename tools and rewrite descriptions at the gateway without redeploying the Mule app.&lt;/p&gt;

&lt;h2&gt;
  
  
  A2A traffic: agents talking to agents
&lt;/h2&gt;

&lt;p&gt;In our network the broker coordinates the agents, so agent-to-agent calls are fewer than you might expect. They still go through the gateway:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A2A Schema Validation&lt;/strong&gt; checks requests against the A2A specification.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A2A PII Detector&lt;/strong&gt; catches personal data passed between agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A2A Prompt Decorator&lt;/strong&gt; adds context to every request, such as "this is a regulated change process; never skip an approval step".&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  LLM traffic: what leaves the building
&lt;/h2&gt;

&lt;p&gt;Every agent's model calls go out through the gateway too. Three policies matter most:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Regex Prompt Guard&lt;/strong&gt; blocks requests that match a deny-list. Ours includes common prompt-injection phrasing and any attempt to name a production system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM PII Detection&lt;/strong&gt; finds personal data in prompts before they reach the model provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM Token Based Rate Limit&lt;/strong&gt; caps token use per agent. Part 3 gave every loop a retry limit; this is the budget behind it. An agent stuck in a loop hits the token limit long before it hits the invoice.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Defense in depth, not a single wall
&lt;/h2&gt;

&lt;p&gt;The gateway is one of three layers, and none of them trusts the others:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The tool contract&lt;/strong&gt; (Part 4) makes the right call easy and rejects malformed input.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The gateway&lt;/strong&gt; decides who can see which tool and what data crosses the boundary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Process API&lt;/strong&gt; checks the approval ID against the approval record before any import, whoever calls it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Remove the tool contract or the gateway and the system is weaker, but the approval still holds. Remove the Process API check and it doesn't, which is why that check never moves out of the integration layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who owns what
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Platform team:&lt;/strong&gt; the gateway, every policy on it, the agent identities the ABAC rules depend on, and the token budgets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration team:&lt;/strong&gt; asks for a tool to be added to the allow-list and explains who needs it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent team:&lt;/strong&gt; gets a clear error when a policy blocks something, and adjusts the agent instead of asking for the policy to be removed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Part 6&lt;/strong&gt; moves to the developer side: building all of this with MuleSoft Vibes, using skills, rules and workflows, plus hooks as guardrails for the AI developer.&lt;/p&gt;

&lt;p&gt;Which policy would you switch on first: tool access, PII or token limits?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This series describes a reference model built on a fictional company. Policy names are from the Omni Gateway agent policies documentation as of October 2026; check current docs before you build.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mulesoft</category>
      <category>ai</category>
      <category>mcp</category>
      <category>security</category>
    </item>
    <item>
      <title>Part 4: Turning Mule APIs into MCP tools with the MCP Connector</title>
      <dc:creator>Shakar Bisetty</dc:creator>
      <pubDate>Sun, 04 Oct 2026 10:11:59 +0000</pubDate>
      <link>https://dev.to/thasha/part-4-turning-mule-apis-into-mcp-tools-with-the-mcp-connector-39oa</link>
      <guid>https://dev.to/thasha/part-4-turning-mule-apis-into-mcp-tools-with-the-mcp-connector-39oa</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 4 of 10 · Building an Agentic Change-Approval MVP on MuleSoft&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/thasha/part-3-designing-the-agent-network-and-what-the-brokers-graph-actually-looks-like-jap"&gt;Part 3&lt;/a&gt; drew the broker's graph. Four of its nine nodes are MCP tool calls, and that's where the integration team does its work. This part covers how a Mule flow becomes an MCP tool with the MCP Connector, and why the tool's name and description matter more than the code behind it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tools in the MVP
&lt;/h2&gt;

&lt;p&gt;The MVP graph uses four tools. We also built a fifth, &lt;code&gt;import_transport_to_qa&lt;/code&gt;, which stage 4 will need first. It's the example used below, because it's the one that must never run without an approval.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Calls&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;create_change&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Opens the change record&lt;/td&gt;
&lt;td&gt;ITSM System API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;read_transport&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reads a transport's objects and status&lt;/td&gt;
&lt;td&gt;SAP System API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;request_approval&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sends the package to the business owner and returns an &lt;code&gt;approval_id&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Approval Process API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;create_sap_change_doc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Creates the SAP change document&lt;/td&gt;
&lt;td&gt;Change Process API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;import_transport_to_qa&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Imports one approved transport into QA (stage 4)&lt;/td&gt;
&lt;td&gt;Change Process API&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;None of these maps one-to-one to an existing endpoint. Each one is a &lt;strong&gt;business action&lt;/strong&gt;, and its flow calls the APIs it needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Mule flow to MCP tool
&lt;/h2&gt;

&lt;p&gt;The MCP Connector lets a Mule app act as an MCP server (and as a client, which we don't need here). Three pieces do the work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuz0xv1grg2sz8h4om60q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuz0xv1grg2sz8h4om60q.png" alt="How a tool call travels through the stack" width="800" height="680"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The server configuration
&lt;/h3&gt;

&lt;p&gt;One MCP server configuration per app. It has a server name and version, and a connection type. Use &lt;strong&gt;Streamable HTTP&lt;/strong&gt;: SSE is deprecated in the connector and only supports single-replica deployments. Streamable HTTP serves one endpoint (&lt;code&gt;/mcp&lt;/code&gt; by default), and with a distributed object store for sessions it runs across several replicas.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. One Tool Listener per tool
&lt;/h3&gt;

&lt;p&gt;Each tool is a flow that starts with a &lt;strong&gt;Tool Listener&lt;/strong&gt; source. The listener carries the contract the agent sees:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name:&lt;/strong&gt; &lt;code&gt;import_transport_to_qa&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; what it does, when to use it, and what it needs first&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Input schema:&lt;/strong&gt; the arguments, as JSON Schema&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output schema&lt;/strong&gt; (optional): a structured result the agent can rely on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The input schema for &lt;code&gt;import_transport_to_qa&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"transport_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"pattern"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^[A-Z0-9]{3}K9[0-9]{5}$"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SAP transport request, e.g. DEVK900123"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"approval_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Approval ID returned by request_approval"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"required"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"transport_id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"approval_id"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"additionalProperties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the agent calls the tool, the flow receives the arguments as its payload.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The flow body
&lt;/h3&gt;

&lt;p&gt;The flow is ordinary Mule: validate, call the Process API, shape the response. It doesn't talk to SAP itself. The Process API checks the approval again and calls the SAP System API. If anything fails, the flow returns an error result with a named code, such as &lt;code&gt;APPROVAL_MISSING&lt;/code&gt; or &lt;code&gt;TRANSPORT_LOCKED&lt;/code&gt;, instead of a stack trace.&lt;/p&gt;

&lt;p&gt;That's the whole pattern. If your team already builds API-led integrations, most of the work is already done: the System and Process APIs exist, and the MCP layer is a thin set of flows on top.&lt;/p&gt;

&lt;h2&gt;
  
  
  The contract is the hard part
&lt;/h2&gt;

&lt;p&gt;The code in a tool flow is short. The name and description take longer, because the agent picks tools by reading them. &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7512253967909896192/" rel="noopener noreferrer"&gt;A recent LinkedIn post in this series&lt;/a&gt; showed the before and after:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2oynuiaey4496r1fduh6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2oynuiaey4496r1fduh6.png" alt="Tool contracts an LLM can actually use" width="800" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Four rules we follow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Name the business action, not the HTTP verb.&lt;/strong&gt; &lt;code&gt;import_transport_to_qa&lt;/code&gt;, not &lt;code&gt;postTransportImport&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Say when to use it, and when not to.&lt;/strong&gt; Preconditions belong in the description the model reads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type and constrain every input.&lt;/strong&gt; A pattern on &lt;code&gt;transport_id&lt;/code&gt; and a required &lt;code&gt;approval_id&lt;/code&gt; stop bad calls before they reach SAP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name the errors.&lt;/strong&gt; An agent that gets &lt;code&gt;APPROVAL_MISSING&lt;/code&gt; can tell the requester what's wrong. An agent that gets "500 Internal Server Error" retries.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One more: keep the tool list short. Every tool's description goes into the agent's context. Five well-described tools work better than twenty overlapping ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where enforcement actually lives
&lt;/h2&gt;

&lt;p&gt;The description guides the agent. It doesn't protect anything. Enforcement sits in three places:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The input schema&lt;/strong&gt; rejects malformed calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Process API&lt;/strong&gt; checks the approval ID against the approval record before any import, whoever calls it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Omni Gateway&lt;/strong&gt; decides which agent can see which tool at all. The Intake agent never sees &lt;code&gt;import_transport_to_qa&lt;/code&gt;. That's Part 5.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you remove the description entirely, the system is still safe. It just works worse.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who owns what
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Integration team:&lt;/strong&gt; the MCP server app, tool flows, schemas, descriptions and error codes, plus the Process and System APIs underneath.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent team:&lt;/strong&gt; reviews tool names and descriptions with the integration team, because they see how agents actually use them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform team:&lt;/strong&gt; the gateway in front of &lt;code&gt;/mcp&lt;/code&gt; and the policies on it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Part 5&lt;/strong&gt; puts Omni Gateway in front of the MCP server: tool allow-lists per agent, attribute-based access control, PII detection and token limits on LLM traffic.&lt;/p&gt;

&lt;p&gt;What's the first tool you'd expose from your own APIs?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This series describes a reference model built on a fictional company. Product capabilities are based on MuleSoft documentation as of October 2026 (MCP Connector 1.7); check current docs before you build.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mulesoft</category>
      <category>ai</category>
      <category>mcp</category>
      <category>integration</category>
    </item>
    <item>
      <title>Part 3: Designing the agent network, and what the broker's graph actually looks like</title>
      <dc:creator>Shakar Bisetty</dc:creator>
      <pubDate>Sat, 03 Oct 2026 07:45:25 +0000</pubDate>
      <link>https://dev.to/thasha/part-3-designing-the-agent-network-and-what-the-brokers-graph-actually-looks-like-jap</link>
      <guid>https://dev.to/thasha/part-3-designing-the-agent-network-and-what-the-brokers-graph-actually-looks-like-jap</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 3 of 10 · Building an Agentic Change-Approval MVP on MuleSoft&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/thasha/part-2-the-reference-architecture-for-an-agentic-change-approval-mvp-on-mulesoft-on-one-page-1917"&gt;Part 2&lt;/a&gt; put the architecture on one page: agents in Agent Fabric, Omni Gateway in front of everything they touch, and MCP tools over Mule APIs. This part goes one level down. How do you decide where each of the 21 steps lives, and what does the broker's graph actually look like?&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: sort every step before drawing anything
&lt;/h2&gt;

&lt;p&gt;We started with a spreadsheet, not a diagram. One row per step, and four questions per row:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Does it follow rules or need judgement?&lt;/strong&gt; (See &lt;a href="https://dev.to/thasha/not-every-step-should-be-an-agent-a-2x2-for-deciding-what-to-automate-2np6"&gt;the 2x2&lt;/a&gt;.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How bad is a mistake, and can we undo it?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Which system of record does it read or change?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Who has to sign off, if anyone?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The answers put each step in one of four places: an &lt;strong&gt;agent&lt;/strong&gt; (judgement, low risk), an &lt;strong&gt;MCP tool&lt;/strong&gt; (rules), a &lt;strong&gt;human gate&lt;/strong&gt; (judgement, high risk), or a &lt;strong&gt;tool behind a gate&lt;/strong&gt; (rules, high risk).&lt;/p&gt;

&lt;p&gt;Once every step is sorted, the agents almost name themselves. Steps that need the same kind of judgement and the same context belong together. In our process that gave four agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Intake agent:&lt;/strong&gt; completeness and risk classification.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Planner agent:&lt;/strong&gt; transports, dependencies and sequence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change agent:&lt;/strong&gt; documentation, evidence and log analysis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Approval agent:&lt;/strong&gt; building packages and requesting gates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each agent gets a short list of tools, and no agent gets a tool it doesn't need. The Intake agent can't import anything into SAP, because it never sees that tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: draw the broker's graph
&lt;/h2&gt;

&lt;p&gt;With Agent Network 2.0 in Agent Fabric, the broker coordinates agents using a defined graph ("guided determinism"). The LLM still reasons inside each step, but the order of steps, the branches and the gates are part of the graph, not left to the model.&lt;/p&gt;

&lt;p&gt;Here's the graph for the MVP scope, the first three stages of the process:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5bf1l22phnaql1p6wopp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5bf1l22phnaql1p6wopp.png" alt="The broker's graph for the MVP" width="800" height="833"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reading it top to bottom:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A change request arrives.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Intake agent&lt;/strong&gt; checks completeness and classifies risk.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;rule-based branch&lt;/strong&gt; decides what happens next. If the request is incomplete, it goes back to the requester. That loop runs at most twice before a person takes over.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;&lt;code&gt;create_change&lt;/code&gt; tool&lt;/strong&gt; opens the change record in the ITSM tool. No LLM is involved.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Planner agent&lt;/strong&gt; maps transports and dependencies, calling &lt;code&gt;read_transport&lt;/code&gt; as it needs to.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Approval agent&lt;/strong&gt; builds the package for the business owner.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;business owner approves or rejects&lt;/strong&gt;. A rejection closes the request with a reason.&lt;/li&gt;
&lt;li&gt;Only with a valid approval ID can &lt;strong&gt;&lt;code&gt;create_sap_change_doc&lt;/code&gt;&lt;/strong&gt; run.&lt;/li&gt;
&lt;li&gt;The request hands off to stage 4, which is outside the MVP.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Three rules the graph enforces
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Every loop has a limit
&lt;/h3&gt;

&lt;p&gt;An agent that's allowed to retry forever eventually will. Every loop in the graph has a counter and an exit to a human. "Two tries, then a person" is a good default for anything involving a requester.&lt;/p&gt;

&lt;h3&gt;
  
  
  Validate between steps
&lt;/h3&gt;

&lt;p&gt;Each agent's output is checked against a schema before the graph moves on. If the Intake agent returns a risk level that isn't one of the allowed values, the step fails loudly instead of passing nonsense to the Planner. This is cheap to build and catches a lot of quiet errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gates are edges, not instructions
&lt;/h3&gt;

&lt;p&gt;The approval isn't a line in a prompt asking the agent to wait. It's the only edge from node 7 to node 8, and the tool on node 8 checks the approval ID again in the integration layer. As covered in &lt;a href="https://dev.to/thasha/human-in-the-loop-is-a-design-feature-enforcing-approval-gates-for-ai-agents-on-mulesoft-3eee"&gt;the human-in-the-loop post&lt;/a&gt;, the model can't skip the gate, and the API wouldn't let it even if it tried.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the graph doesn't do
&lt;/h2&gt;

&lt;p&gt;It doesn't make the agents smarter. A bad prompt in the Planner agent still produces a bad plan. What the graph gives you is a guarantee about &lt;em&gt;structure&lt;/em&gt;: whatever the agents decide, the process still runs in the right order, with the right people involved and a record of what happened. In a regulated environment, that structure is what auditors and quality teams care about first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who owns what
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent team:&lt;/strong&gt; the four agents, their prompts and output schemas, and the broker graph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration team:&lt;/strong&gt; the MCP tools behind nodes 4, 5, 7 and 8, and the approval check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform team:&lt;/strong&gt; the gateway policies that decide which agent can see which tool.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Part 4&lt;/strong&gt; gets hands-on with the integration side: turning Mule APIs into MCP tools with the MCP Connector, and why tool names and descriptions matter more than you'd expect.&lt;/p&gt;

&lt;p&gt;Where would you put the loop limit, and what would you do when it's hit?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This series describes a reference model built on a fictional company. Product capabilities are based on MuleSoft documentation as of October 2026; check current docs before you build.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mulesoft</category>
      <category>ai</category>
      <category>architecture</category>
      <category>agents</category>
    </item>
    <item>
      <title>Part 2: The reference architecture for an agentic change-approval MVP on MuleSoft, on one page</title>
      <dc:creator>Shakar Bisetty</dc:creator>
      <pubDate>Fri, 02 Oct 2026 15:12:20 +0000</pubDate>
      <link>https://dev.to/thasha/part-2-the-reference-architecture-for-an-agentic-change-approval-mvp-on-mulesoft-on-one-page-1917</link>
      <guid>https://dev.to/thasha/part-2-the-reference-architecture-for-an-agentic-change-approval-mvp-on-mulesoft-on-one-page-1917</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 2 of 10 · Building an Agentic Change-Approval MVP on MuleSoft&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://dev.to/thasha/the-21-step-change-nobody-wants-to-own-why-sap-change-promotion-is-an-agentic-use-case-4mpo"&gt;Part 1&lt;/a&gt; I set out the use case: automating the approval and promotion of SAP changes in a regulated company, with agents doing the reasoning, integration tools doing the actions and people doing the approving. The two follow-ups covered &lt;a href="https://dev.to/thasha/not-every-step-should-be-an-agent-a-2x2-for-deciding-what-to-automate-2np6"&gt;which steps should be agents at all&lt;/a&gt; and &lt;a href="https://dev.to/thasha/human-in-the-loop-is-a-design-feature-enforcing-approval-gates-for-ai-agents-on-mulesoft-3eee"&gt;how to enforce approval gates&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This part puts the whole thing on one page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0i90zdiqmbk3wnlhcyc2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0i90zdiqmbk3wnlhcyc2.png" alt="Reference architecture on one page" width="800" height="767"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The layers, top to bottom
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;People.&lt;/strong&gt; A requester raises the change. Approvers (business, QA, validation and the change advisory board) make the decisions. They work in the tools they already use; the agents come to them, not the other way round.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent network (Agent Fabric).&lt;/strong&gt; Four agents, each with a narrow job:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Intake agent:&lt;/strong&gt; checks the request is complete and enriches it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Planner agent:&lt;/strong&gt; works out transport dependencies and sequence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change agent:&lt;/strong&gt; drafts documentation, collects test evidence and reads import logs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Approval agent:&lt;/strong&gt; builds the approval package and requests each gate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A &lt;strong&gt;broker&lt;/strong&gt; coordinates them. With Agent Network 2.0, the broker's flow is a defined graph: the LLM reasons inside each step, but the order of steps and the gates between them are deterministic. In a regulated process, that's the difference between "the model decided to skip QA" and "it can't".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Governance (Omni Gateway).&lt;/strong&gt; Omni Gateway, formerly Flex Gateway, sits in front of everything agents touch: MCP servers, other agents over A2A, and the LLM provider. Policies here decide which tools an agent may see, check the caller's claims, detect PII, limit token usage and log every call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP tools.&lt;/strong&gt; One MCP server, built in Mule with the MCP Connector, exposes a small set of business-level tools: &lt;code&gt;create_change&lt;/code&gt;, &lt;code&gt;read_transport&lt;/code&gt;, &lt;code&gt;request_approval&lt;/code&gt;, &lt;code&gt;import_to_prod&lt;/code&gt;. Agents see tools, not APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Process API.&lt;/strong&gt; &lt;code&gt;change-process-api&lt;/code&gt; orchestrates the multi-step work behind each tool, verifies approvals before anything irreversible happens, and writes the audit record.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System APIs.&lt;/strong&gt; One per back end: SAP (through RFCs), the ITSM tool and test management. They hide connection details and normalise errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Systems of record.&lt;/strong&gt; SAP, the ITSM tool, test management and the LLM provider. None of them is called directly by an agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Platform.&lt;/strong&gt; Agent Registry and Exchange for discovering agents and tools, Agent Visualizer for seeing how agents interact, and CloudHub 2.0 or Runtime Fabric for deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three design decisions worth explaining
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Tools are business actions, not API endpoints
&lt;/h3&gt;

&lt;p&gt;It's tempting to expose every System API operation as an MCP tool. Don't. An LLM choosing between 40 low-level operations makes more mistakes and burns more tokens than one choosing between five clear business actions. The MCP tool layer is where we decide what an agent is &lt;em&gt;allowed to want&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. A Process API between tools and systems
&lt;/h3&gt;

&lt;p&gt;The MCP server could call System APIs directly. We put a Process API in between because that's where cross-system rules live: "an import needs a valid approval for this exact change" spans ITSM and SAP. Keeping that logic in one place means it's tested once and enforced for every caller, agent or human.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The gateway covers outbound LLM traffic too
&lt;/h3&gt;

&lt;p&gt;Most teams think of a gateway as inbound protection. Here it also governs what leaves: prompts going to the LLM provider pass through the same policies for PII and token limits. If a change record contains something sensitive, it's caught before it reaches a model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who owns what
&lt;/h2&gt;

&lt;p&gt;The colours in the diagram are the team boundaries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent team (purple):&lt;/strong&gt; agents, prompts, the broker graph and evaluation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration team (teal):&lt;/strong&gt; the MCP server, Process API and System APIs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform team (dark grey):&lt;/strong&gt; Omni Gateway policies, registry, observability and environments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each team can ship independently as long as the contracts between layers (tool definitions and API specs) stay stable. Those contracts are published in Exchange, which makes them the shared source of truth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Starting small
&lt;/h2&gt;

&lt;p&gt;The full process has 21 steps. The MVP starts with the first three stages: request intake, change setup and creating the change in SAP, with stubbed back ends so the whole chain can be tested end to end before touching real systems. Later parts show how the remaining stages slot into the same layers without changing the shape of the architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Part 3&lt;/strong&gt; goes one level down into design: how we decided where each of the 21 steps lives, and what the broker's graph actually looks like.&lt;/p&gt;

&lt;p&gt;Which layer would you push back on? I'd especially like to hear from anyone who exposes System APIs directly as MCP tools.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This series describes a reference model built on a fictional company. Product capabilities are based on MuleSoft documentation as of October 2026; check current docs before you build.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mulesoft</category>
      <category>ai</category>
      <category>architecture</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Human-in-the-loop is a design feature: enforcing approval gates for AI agents on MuleSoft</title>
      <dc:creator>Shakar Bisetty</dc:creator>
      <pubDate>Thu, 01 Oct 2026 02:05:31 +0000</pubDate>
      <link>https://dev.to/thasha/human-in-the-loop-is-a-design-feature-enforcing-approval-gates-for-ai-agents-on-mulesoft-3eee</link>
      <guid>https://dev.to/thasha/human-in-the-loop-is-a-design-feature-enforcing-approval-gates-for-ai-agents-on-mulesoft-3eee</guid>
      <description>&lt;p&gt;&lt;em&gt;Companion to Part 1 · Building an Agentic Change-Approval MVP on MuleSoft&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When people demo agentic systems, the human approval step is often treated as an embarrassment: the bit we'll automate away later.&lt;/p&gt;

&lt;p&gt;In a regulated process it's the opposite. The approval &lt;em&gt;is&lt;/em&gt; the product. Auditors, quality teams and your change advisory board rely on it. The question isn't how to remove it, but how to design it so it's fast, hard to bypass and fully traceable.&lt;/p&gt;

&lt;p&gt;This post walks through the pattern we use in our change-approval MVP for promoting SAP changes to production. (Background: &lt;a href="https://dev.to/thasha/the-21-step-change-nobody-wants-to-own-why-sap-change-promotion-is-an-agentic-use-case-4mpo"&gt;Part 1&lt;/a&gt; and &lt;a href="https://dev.to/thasha/not-every-step-should-be-an-agent-a-2x2-for-deciding-what-to-automate-2np6"&gt;the 2x2 for deciding what to automate&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl3eca21us9zzmw06vq4m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl3eca21us9zzmw06vq4m.png" alt="Human-in-the-loop is a design feature" width="800" height="733"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The flow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The agent builds the approval package.&lt;/strong&gt; It gathers the change summary, transport contents, test evidence and a risk summary into one place.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It calls a &lt;code&gt;request_approval&lt;/code&gt; tool.&lt;/strong&gt; This is an MCP tool over a Mule API that creates an approval task in the ITSM system. The agent can't approve anything itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A person reviews and approves.&lt;/strong&gt; Their identity and the timestamp are recorded in the ITSM system, which issues an &lt;code&gt;approval_id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The agent calls &lt;code&gt;import_to_prod&lt;/code&gt; with the change ID and the approval ID.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Omni Gateway applies policy first.&lt;/strong&gt; The MCP tool allow-list decides whether this agent may see the tool at all, and attribute-based access control checks the caller's claims.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Mule API verifies the approval.&lt;/strong&gt; Does the approval ID exist, match this change, and is it unexpired and unused? Only then does it call SAP to import the transport.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An audit record is written.&lt;/strong&gt; It captures who approved, what they saw and what was executed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If any check fails, the tool refuses with a clear error and nothing touches SAP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three design rules
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Enforce, don't instruct
&lt;/h3&gt;

&lt;p&gt;"Always ask the user before importing to production" in a system prompt is a hope, not a control. Prompts can be ignored, misread or injected around.&lt;/p&gt;

&lt;p&gt;The gate belongs where agents can't argue with it: in the API that performs the action, and in gateway policy in front of it. The agent's job is to &lt;em&gt;request&lt;/em&gt;; the integration layer decides.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Make approving easy
&lt;/h3&gt;

&lt;p&gt;Approval gates slow processes down mostly because approvers get incomplete information. They have to open five screens, read a raw log and chase someone for test evidence.&lt;/p&gt;

&lt;p&gt;The agent's most valuable work here is preparing a single, complete package. A fast "yes" from a well-informed approver beats a slow one every time, and so does a confident "no".&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Leave a trail
&lt;/h3&gt;

&lt;p&gt;Every gate should answer, after the fact: who approved, when, what they were shown, and what was executed as a result. That's what turns an agentic workflow from "interesting" into something a validated environment can actually accept.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who owns what
&lt;/h2&gt;

&lt;p&gt;This pattern splits cleanly by team:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent team:&lt;/strong&gt; building the package and handling refusals gracefully.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration team:&lt;/strong&gt; the &lt;code&gt;request_approval&lt;/code&gt; and &lt;code&gt;import_to_prod&lt;/code&gt; tools, approval verification and the audit record.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform team:&lt;/strong&gt; gateway policies, identities and environments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next
&lt;/h2&gt;

&lt;p&gt;In &lt;strong&gt;Part 2&lt;/strong&gt; I'll zoom out to the full reference architecture: Agent Fabric, Omni Gateway, MCP tools and the SAP and ITSM back ends on one page.&lt;/p&gt;

&lt;p&gt;How do you enforce approvals in your agentic workflows today? Prompt, API, gateway, or something else?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This series describes a reference model built on a fictional company. Product capabilities are based on MuleSoft documentation as of September 2026.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mulesoft</category>
      <category>ai</category>
      <category>security</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Not every step should be an agent: a 2x2 for deciding what to automate</title>
      <dc:creator>Shakar Bisetty</dc:creator>
      <pubDate>Wed, 30 Sep 2026 03:30:31 +0000</pubDate>
      <link>https://dev.to/thasha/not-every-step-should-be-an-agent-a-2x2-for-deciding-what-to-automate-2np6</link>
      <guid>https://dev.to/thasha/not-every-step-should-be-an-agent-a-2x2-for-deciding-what-to-automate-2np6</guid>
      <description>&lt;p&gt;&lt;em&gt;Companion to Part 1 · Building an Agentic Change-Approval MVP on MuleSoft&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The fastest way to over-engineer an agentic system is to make every step an agent.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://dev.to/thasha/the-21-step-change-nobody-wants-to-own-why-sap-change-promotion-is-an-agentic-use-case-4mpo"&gt;Part 1&lt;/a&gt; I introduced the use case for this series: automating the approval and promotion of SAP changes from lower to upper environments in a regulated company. The process has about 21 steps across 11 stages. Before designing anything, we had to decide which of those steps an agent should touch at all.&lt;/p&gt;

&lt;p&gt;This is the tool we used. It's simple enough to run on a whiteboard in 30 minutes with the process owners.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two questions per step
&lt;/h2&gt;

&lt;p&gt;For every step in the process, ask:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Does it follow rules, or does it need judgement?&lt;/strong&gt; If you can write the logic as an if-statement or a mapping, it follows rules. If a person reads something messy and decides, it needs judgement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If it goes wrong, how bad is it, and can we undo it?&lt;/strong&gt; Drafting a document badly is cheap to fix. Importing the wrong transport into production is not.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Plot each step on those two axes and you get four quadrants.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fud993upzaiyyspybtx9d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fud993upzaiyyspybtx9d.png" alt="Not every step should be an agent" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The four answers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Rules, low risk: integration tool, fully automated.&lt;/strong&gt;&lt;br&gt;
This is an MCP tool over a Mule API, with no LLM in the path. Creating the change record, reading transport objects and fetching import logs all live here. They're deterministic, fast, cheap and easy to audit. An agent can &lt;em&gt;call&lt;/em&gt; these tools, but the tool itself doesn't reason.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Judgement, low risk: the agent acts and a human spot-checks.&lt;/strong&gt;&lt;br&gt;
This is where agents earn their keep. Is the change request complete? Does the description match the transport contents? What do these import logs actually mean for the approver? Mistakes here are visible and easy to correct, so the agent can act and a person reviews samples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rules, high risk: still a tool, but only after approval.&lt;/strong&gt;&lt;br&gt;
Importing to production is a deterministic call, so it shouldn't involve an LLM. But it's hard to undo, so the tool only runs once an approval is on record. In a MuleSoft setup that's enforced in the integration layer and at the gateway, not by asking the agent nicely in a prompt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Judgement, high risk: a human decides, the agent prepares.&lt;/strong&gt;&lt;br&gt;
Business approval, validation review and the CAB decision stay with people. The agent's job is to hand them a complete package with a summary, the evidence and the risks, so the decision is fast and well-informed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we learned
&lt;/h2&gt;

&lt;p&gt;When we sorted our process, &lt;strong&gt;more steps landed in the "tool" quadrants than in the "agent" quadrants.&lt;/strong&gt; That surprised some of the team, but it's a good sign:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deterministic steps are cheaper to run and easier to test.&lt;/li&gt;
&lt;li&gt;Auditors understand them.&lt;/li&gt;
&lt;li&gt;Every step that doesn't need an LLM is one less thing that can hallucinate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also split the work cleanly between teams. The integration team owns the tool quadrants: MCP tools, Mule APIs, and SAP and ITSM connectivity. The agent team owns the judgement quadrants. The platform team owns the guardrails that keep the high-risk row behind approvals.&lt;/p&gt;

&lt;h2&gt;
  
  
  The borderline cases
&lt;/h2&gt;

&lt;p&gt;Some steps don't sort cleanly. "Analyse import logs" is the one we argued about most. You could write rules for known return codes, but real logs are messy and the value is in explaining them to a non-technical approver. We put it with the agent, with the raw return codes still passed through deterministically.&lt;/p&gt;

&lt;p&gt;Where would you put it? I'd like to hear the case for a rules engine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next
&lt;/h2&gt;

&lt;p&gt;In &lt;strong&gt;Part 2&lt;/strong&gt; I'll put the whole reference architecture on one page: Agent Fabric, Omni Gateway, MCP tools and the SAP and ITSM back ends, colour-coded by which team owns what.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This series describes a reference model built on a fictional company. Product capabilities are based on MuleSoft documentation as of September 2026.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mulesoft</category>
      <category>ai</category>
      <category>architecture</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
