How to move from MuleSoft to FlowRunner
Keep MuleSoft for your APIs and move the business workflows: paste a Mule flow's XML into your AI tool and FlowRunner Prompt to Flow builds the same flow.
Moving workflows to FlowRunner doesn’t mean leaving MuleSoft. The APIs, the gateway policies, and the heavy system-to-system integrations stay where they are. What moves are the business workflows that ended up in Mule applications: the approval, the onboarding, the escalation, the flow that needs a person or an AI agent. Once they’re in FlowRunner, the team that owns the process can change them, and the flows call your Mule APIs like any other service.
A Mule flow is XML in the application’s project, so there’s no separate export file to build. You copy one flow’s XML, or describe the flow, and FlowRunner Prompt to Flow builds the same flow in your FlowRunner workspace from your AI tool. What’s left for you is connecting accounts, filling in keys, and testing.
1. Export your flows from MuleSoft
Start by choosing what to move. Good candidates start from a schedule, an app event, or a form, touch a few business systems, and have a decision or a person in the middle. Flows that serve your APIs stay in MuleSoft.
Mule applications. Each application is a Maven project, and its flows are <flow> elements in the XML files under src/main/mule. Sub-flows (<sub-flow>) and the <flow-ref> calls between them are in the same files. If the project is in Git, that folder is all you need. If it isn’t on your machine:
- Anypoint Studio: File > Export > Mule > Anypoint Studio Project to Mule Deployable Archive (includes Studio metadata), keep Attach Project Sources checked, and pick a destination.
- Anypoint Code Builder: run MuleSoft: Export Mule Project from the Command Palette and choose Shareable JAR, which holds the configuration XML and the other source files. The JAR lands in
/target.
A JAR is a zip file, so you can open it and find src/main/mule inside.
For each flow you move, collect the <flow> element, every <sub-flow> it calls, and the global configuration elements it uses, such as the connector configs.
Remove the secrets before you paste anything. Credentials in a Mule project usually live in properties files under src/main/resources, and MuleSoft’s export docs don’t say whether secure properties travel. Leave placeholders such as ${secure::db.password} in the XML, and keep the values, the encryption key, and any decrypted properties out of the chat.
MuleSoft Composer flows. Open the flow, choose View, click the wrench icon, and choose Export. The flow downloads as a JSON file. Connections don’t come with it.
No access to the project? Describe the flow in the chat instead: what starts it, which systems it reads and writes, the decisions it makes, who approves, and what happens on an error. Screenshots of the flow in Studio or Code Builder help.
Runtime settings in Runtime Manager, deployment configuration, and logs aren’t part of the project, so note the schedule and any settings you’ll need.
2. Connect FlowRunner Prompt to Flow to your AI tool
FlowRunner Prompt to Flow is an MCP server you add to the AI tool you already use. You connect it once and sign in with your FlowRunner account. The server URL is the same for every tool: https://app.flowrunner.ai/mcp.
- Claude (web and desktop): open Settings > Connectors, click + Add, then Add custom connector. Enter
FlowRunnerand the server URL, click Add, then Connect, and approve the FlowRunner sign-in. On a Team or Enterprise plan, an Owner adds it once under Organization settings > Connectors. - Claude Code: run these two commands in your project folder, and approve the sign-in page that opens:
claude mcp add --transport http flowrunner https://app.flowrunner.ai/mcp
claude mcp login flowrunner
- ChatGPT (on the web): open ChatGPT Plugins, click Add, then Add custom MCP server. Enter
FlowRunner, put the server URL under Connection, choose OAuth, and approve the sign-in. In a chat, type@and pick FlowRunner. - Codex: add the server to
~/.codex/config.toml, then runcodex mcp login flowrunner:
[mcp_servers.flowrunner]
url = "https://app.flowrunner.ai/mcp"
- Cursor: add the server to
~/.cursor/mcp.json, then open Customize > MCPs and follow the sign-in prompt:
{
"mcpServers": {
"flowrunner": { "url": "https://app.flowrunner.ai/mcp" }
}
}
If you don't have a FlowRunner account yet, the Free plan needs no card, and every new account starts with 14 days of Professional. The setup guide in the docs has each tool step by step.
3. Convert one flow at a time
Start a new chat, paste this request, then paste the XML after it:
Rebuild this MuleSoft flow as a FlowRunner flow. It’s Mule application XML from the project’s src/main/mule folder: the flow element, the sub-flows it calls with flow-ref, and the global configuration elements it uses. I removed the passwords, keys, and tokens; placeholders like ${secure::…} mark where they go. Transformations are DataWeave inside Transform Message steps. Keep the same behavior. Where the flow calls one of our own Mule APIs, call that API with an HTTP Request block instead of rebuilding it. Before you build, tell me anything you can’t map one to one, and ask me about anything the XML doesn’t say.
For a Composer export, change the second sentence to “It’s a MuleSoft Composer export: the JSON lists the trigger and the steps with their settings.” If you’re describing the flow instead, use this:
Build this as a FlowRunner flow. Today it runs in MuleSoft. Here’s what it does: [what starts it], [the systems it reads and writes], [the decisions it makes], [who approves and how they should be asked], [what happens on an error]. Keep the same behavior, and ask me about anything I haven’t said before you build.
Answer its questions, and it builds the flow in your workspace. DataWeave comes across as Transform Data operations, or as Custom Cloud Code in JavaScript when the mapping needs logic. FlowRunner doesn’t run Java, so a Java component stays where it runs today and the flow calls it over HTTP, or a small piece becomes a custom extension in JavaScript. One flow per chat keeps the questions specific.
4. Finish what the export can’t carry
Each conversion ends with a short list from the AI. Expect some of these:
- Connect your accounts. Each app, such as Salesforce or ServiceNow, is connected once in OAuth Connections and shared across your flows.
- Fill in the secrets. Every
${secure::...}placeholder becomes a value in a block or a connection. The AI tells you where each one goes. - Point callers at the new address. If the Mule flow started from an HTTP Listener, the FlowRunner flow starts from an External Callback with its own URL. If the caller needs an answer back, it uses the blocking Call Flow API, which waits up to 300 seconds for the flow’s Return Result. That call carries your workspace key, so make it from a server.
- Authorize calls to your Mule APIs. Add the client credentials or token your API policies expect to the HTTP Request block’s headers.
- Set the schedule. Match the Mule Scheduler’s frequency in the flow schedule.
- Decide who gets asked. For approvals, confirm the person and the channel: email, Slack, WhatsApp, phone, or a Form. If the approval should be a form, or an AI agent should call a review flow as its tool, the AI tells you, and you add those in the flow editor.
- Start the flow, if the AI left it stopped.
5. Test, then switch over
Run the FlowRunner flow with a few real inputs from recent Mule runs and compare the results, especially anything a DataWeave script produced. Every run’s block inputs and outputs are in the flow’s run history. When they match, point the callers, schedule, or app event at FlowRunner, watch a few days of runs, and stop the Mule flow. Leave the rest of the application running.
How MuleSoft maps to FlowRunner
| MuleSoft | FlowRunner | What changes |
|---|---|---|
| HTTP Listener | External Callback, or the Call Flow API | A new URL. A caller that needs an answer uses the blocking call and gets the Return Result. |
| Scheduler | Flow schedule | Once, every X seconds, daily, weekly, monthly, or cron. |
| Connector operation | Integration action | 2,100+ integrations, each connected once per workspace. |
| Calls to your Mule APIs | HTTP Request | The API stays in MuleSoft; the block has a retry policy. |
| Choice | Condition or Value Router | Yes/no tests, or named paths for each value. |
| Scatter-Gather | Actions Group | Runs its actions side by side. |
| For Each | List Iterator | Runs the inner steps once per item. |
| Transform Message (DataWeave) | Transform Data or Custom Cloud Code | Rewritten as operations or JavaScript. |
| Flow Reference | SubFlow or Call Flow | A sub-flow becomes a SubFlow; a call to another flow becomes Call Flow. |
| Try, On Error Continue, On Error Propagate | Handle Error | A recovery path wired to the blocks it guards. |
| Until Successful | HTTP Request retry policy, or Repeat with Handle Error and Wait | Retries without custom scopes. |
| Set Variable | Set Variables | Per-run values. |
| Object Store | Shared Memory | Values that last across runs. |
| Logger | Run history | Every block’s input and output is recorded for each run. |
Quick wins on day one
- The process owner can change the flow. A FlowRunner flow is built on a canvas, not in a Maven project, so an extra approval rule is an edit.
- People in the loop on every plan. A flow reaches a person on email, Slack, WhatsApp, phone, or a Form and waits up to 30 days on Free, Starter, and Growth, and up to a year on Professional and above.
- A published price. MuleSoft packages start at $2,000 a month, billed annually. FlowRunner has a permanent Free plan, paid plans from $5 a month, and audit trails and RBAC at $299.
- Unlimited users. Everyone who builds, reviews, or approves can have an account on every plan.
- Try it on Professional. Every new account starts with 14 days of Professional with no card.
Want a hand with a bigger migration? Contact us.
Frequently asked questions
Do I have to stop using MuleSoft?
No. You can keep MuleSoft for your APIs and system-to-system integrations and move only the business workflows: approvals, onboarding, escalations, and the flows that need a person or an AI agent. The FlowRunner flows call the Mule APIs with the HTTP Request block, so nothing about those APIs changes.
Does FlowRunner import Mule applications or JAR files?
There's no importer. FlowRunner Prompt to Flow does the conversion in your AI tool: you paste one flow's XML from the Mule project, or describe the flow, and the AI builds the equivalent FlowRunner flow from the same blocks the flow editor uses. You then connect accounts, fill in keys, and test.
What happens to DataWeave?
FlowRunner doesn't run DataWeave. The AI rewrites each Transform Message step as FlowRunner Transform Data operations, or as a short Custom Cloud Code step in JavaScript when the mapping needs logic. Compare the output with the Mule flow's output on the same input before you switch.
What about Java components in my Mule app?
FlowRunner doesn't run Java. Leave that code where it runs today and have the FlowRunner flow call it over HTTP, or rebuild a small piece of it as a custom extension in JavaScript. If the Java sits behind a Mule API, the flow calls that API.
Can I move MuleSoft Composer flows?
Yes. In Composer, open the flow, choose View, click the wrench icon, and choose Export. The flow downloads as a JSON file, and you paste it into your AI tool with the request on this page, naming it a Composer export.
Ready to try it?
Start on the Free plan. No card required, and every new account gets 14 days of Professional.