Skip to content

ISSUE-10 Initial implementation for MCP Start Events. Includes a plug…#14

Open
pieter-schutte wants to merge 1 commit intomainfrom
ISSUE-10-MCP-Start-Event
Open

ISSUE-10 Initial implementation for MCP Start Events. Includes a plug…#14
pieter-schutte wants to merge 1 commit intomainfrom
ISSUE-10-MCP-Start-Event

Conversation

@pieter-schutte
Copy link

ISSUE-10 Initial implementation for MCP Start Events. Includes a plugin component that will render a new pallete option called MCP Start Event and a corresponding java components that will register MCP components for each MCP Start event, on Startup and process deployment.

NB:

  1. This code still need hardening, and decision needs to be taken about security. My current thought is to leave it to the Spring container layer.
  2. For now I have kept both the plugin and the corresponding java code within this repo. There was a proposal to add the plugin in fluxnova-bpm-platform but I feel that will result in bad user experience as the Java dependency will not be included.
  3. I am using npm module camunda-modeler-plugin-helpers. Do we need to fork this module as well?
  4. I have never written a Camunda / Fluxnova plugin, very open to feedback and changes.
  5. @EdsGianesi - stylesheets and icons are just ai generated, can you please take a look.

…in component that will render a new pallete option called MCP Start Event and a corresponding java components that will register MCP components for each MCP Start event, on Startup and process deployment.
Copy link

@EdsGianesi EdsGianesi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From the UX viewpoint, it looks appropriate. As. our AI offerings grow, We may need to review these early elements.

@pieter-schutte
Copy link
Author

pieter-schutte commented Feb 12, 2026

I've had one error report from Olivier so far. Please report any issues here.

I've tested on 1.1.1-dev

@@ -0,0 +1,58 @@
'use strict';

var registerBpmnJSPlugin = require('camunda-modeler-plugin-helpers').registerBpmnJSPlugin;
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have been discussing this internally. The repo is under MIT: https://github.com/camunda/camunda-modeler-plugin-helpers

Do we need to fork this? Would like to get a view from our FINOS experts on using it. @opoupeney

Alternatively, Fidelity seems to have a lot of experience in plugins, perhaps advise a different approach @HarishMalavade

Copy link

@HarishMalavade HarishMalavade Feb 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We will able to add this plugin to modeler release whenever we decide to make this available as part of Fluxnova, I was not able to build this plugin in local, I think one of npm library asked for funding. @pieter-schutte is it possible for you to upload compiled plugin so we can push the generated nodeJS artifacts to plugin folder for the local testing, I think the readme was missing where and how to copy plugin post build was success

@swalsh01 can you have someone from our Modeler team look at mcp-tool-plugin folder and evaluate what it takes to make it as part of Fluxnova modeler repo?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think one of npm library asked for funding

That shouldn't block you from installing it (those notices are informational only I believe). There's probably another issue blocking build. If you post more details of any errors on build that might help with debug.

Copy link

@HarishMalavade HarishMalavade Feb 13, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Chris. It was my local thing, I was able to resolve the issue. For now I just copied the compiled node modules into local plugin folder. may be As I have called out Sean and team can look at making it part of our regular plugin contribution

Copy link

@HarishMalavade HarishMalavade left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Couple of general Cosmetic comments

  1. Should we start creating general Plugins or extensions repo and put all MCP Backend code into that folder and plugin will go into modeler repo
  2. Can we have better logos for some of these plugins where possible
  3. How can we point developers to MCP related documentation on how to set up MCP for those who are new to it.

@PieterSchutte
Copy link

PieterSchutte commented Feb 13, 2026

I have created a demo which contains all the MCP plumbing you need, plus two examples. I have set the repo to private for now. Fluxnova Maintainers, please ping me via github for link and access.

@kziemski
Copy link

@pieter-schutte hey happy to take a look

@prajwolbhandari1
Copy link

Maintainers

@pieter-schutte would love to take a look at it. Let me know the best way to look at that example. Thx.

@@ -0,0 +1,230 @@
# MCP Tool Plugin

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Few more thought process after trying to run this code in local.

  1. It would be good to call out prerequsites for running this plugin as part of Fluxnova Engine - Going through code today, I understood this is a plugin that needs to be registered and added to Fluxnova Engine
  2. It would be good if we can modify this repo as an full fledged springboot application or an example that we can simply start, For now like you highlighted we keep the plugin code here and discuss on how we can make some of these plugins available as extensions to be embeded into Clients application on demand or decide to make this part of default Fluxnova-bpm-platform
  3. Can we also update instructions on how get it running locally - especially differentiating the MCP Host and MCP Server pieces - My Interpretation correct me if I am wrong is this plugin is how we can have BPM specific MCP server allowing us to start any processes via MCP client (Which can be in host application like chat bot) and MCP host is the actual model we design and deploy. Is it fair to assume that?

@pieter-schutte
Copy link
Author

I will resubmit the example project to the fluxnova-examples repository, but it will take a day or two.

@HarishMalavade As I cant upload the original PPT due to restrictions. here is the second best option, which will also be added to the various README's:

Overview of where it fits:

flowchart LR
    AI[🤖 AI]

subgraph Potential["Potential Architecture"]
subgraph Existing["Existing AI Application"]
subgraph AI_Impl["AI Implementation"]
subgraph AI_App["AI Application"]
C1[MCP Client 1]
C2[MCP Client 2]
C3[MCP Client 3]
end
end

subgraph Service_Layer["Service Layer"]
subgraph Embedded["Embedded Service #2"]
S2[MCP Server 2]
end

S1[MCP Server 1]

subgraph Tools1["Tools"]
T1["Tool #1-5"]
end
end
end

subgraph Fluxnova["Fluxnova Runtime"]
S3[MCP Server 3]
FD[Fluxnova AI MCP Dependency]
end

subgraph Tools2["Fluxnova Tools"]
T2[BPMN Diagram A]
T3[BPMN Diagram B]
T4[BPMN Diagram C]
end
end

    AI <--> AI_App

    C1 -->|MCP Protocol| S1
    C1 -->|MCP Protocol| S2
    C2 -->|MCP Protocol| S2
    C3 -->|MCP Protocol| S3

    S1 -->|API| Tools1
    S3 --> Tools2

    style Fluxnova fill:#90EE90,stroke:#228B22,color:#000
    style Tools2 fill:#90EE90,stroke:#228B22,color:#000
    style S3 fill:#90EE90,stroke:#228B22,color:#000
    style FD fill:#90EE90,stroke:#228B22,color:#000
    style T2 fill:#90EE90,stroke:#228B22,color:#000
    style T3 fill:#90EE90,stroke:#228B22,color:#000
    style T4 fill:#90EE90,stroke:#228B22,color:#000

Loading

MCP Client Config for pre-existing MCP client. Below shows possible Spring-AI implementation:

    mcp:
      client:
        name: mcp-client
        version: 0.1.1
        toolcallback:
          enabled: true
        streamable-http:
          connections:
            mcp-tools-fluxnova:
              url: http://mcp-tools-fluxnova:8080}/mcp

MCP Server Config hosted in Fluxnova Runtime:

    <dependency>
      <!-- This dependency is not yet live and needs to be build from this repo -->
      <groupId>org.finos.fluxnova.ai.mcp</groupId>
      <artifactId>mcp-fluxnova-extension</artifactId>
      <version>0.1.0</version>
    </dependency>

MCP Server Config hosted in Fluxnova Runtime, which is Spring AI specific:

spring.ai.mcp.server.name=my-mcp-server
spring.ai.mcp.server.version=0.0.1
spring.ai.mcp.server.protocol=streamable
spring.ai.mcp.server.stdio=false
spring.ai.mcp.server.type=sync

@HarishMalavade
Copy link

I will resubmit the example project to the fluxnova-examples repository, but it will take a day or two.

@HarishMalavade As I cant upload the original PPT due to restrictions. here is the second best option, which will also be added to the various README's:

Overview of where it fits:

flowchart LR
    AI[🤖 AI]

subgraph Potential["Potential Architecture"]
subgraph Existing["Existing AI Application"]
subgraph AI_Impl["AI Implementation"]
subgraph AI_App["AI Application"]
C1[MCP Client 1]
C2[MCP Client 2]
C3[MCP Client 3]
end
end

subgraph Service_Layer["Service Layer"]
subgraph Embedded["Embedded Service #2"]
S2[MCP Server 2]
end

S1[MCP Server 1]

subgraph Tools1["Tools"]
T1["Tool #1-5"]
end
end
end

subgraph Fluxnova["Fluxnova Runtime"]
S3[MCP Server 3]
FD[Fluxnova AI MCP Dependency]
end

subgraph Tools2["Fluxnova Tools"]
T2[BPMN Diagram A]
T3[BPMN Diagram B]
T4[BPMN Diagram C]
end
end

    AI <--> AI_App

    C1 -->|MCP Protocol| S1
    C1 -->|MCP Protocol| S2
    C2 -->|MCP Protocol| S2
    C3 -->|MCP Protocol| S3

    S1 -->|API| Tools1
    S3 --> Tools2

    style Fluxnova fill:#90EE90,stroke:#228B22,color:#000
    style Tools2 fill:#90EE90,stroke:#228B22,color:#000
    style S3 fill:#90EE90,stroke:#228B22,color:#000
    style FD fill:#90EE90,stroke:#228B22,color:#000
    style T2 fill:#90EE90,stroke:#228B22,color:#000
    style T3 fill:#90EE90,stroke:#228B22,color:#000
    style T4 fill:#90EE90,stroke:#228B22,color:#000

Loading

MCP Client Config for pre-existing MCP client. Below shows possible Spring-AI implementation:

    mcp:
      client:
        name: mcp-client
        version: 0.1.1
        toolcallback:
          enabled: true
        streamable-http:
          connections:
            mcp-tools-fluxnova:
              url: http://mcp-tools-fluxnova:8080}/mcp

MCP Server Config hosted in Fluxnova Runtime:

    <dependency>
      <!-- This dependency is not yet live and needs to be build from this repo -->
      <groupId>org.finos.fluxnova.ai.mcp</groupId>
      <artifactId>mcp-fluxnova-extension</artifactId>
      <version>0.1.0</version>
    </dependency>

MCP Server Config hosted in Fluxnova Runtime, which is Spring AI specific:

spring.ai.mcp.server.name=my-mcp-server
spring.ai.mcp.server.version=0.0.1
spring.ai.mcp.server.protocol=streamable
spring.ai.mcp.server.stdio=false
spring.ai.mcp.server.type=sync

Thank you Pieter, This is helpful. will wait for your example springboot app to be contributed and try further

Copy link

@bryankenneally bryankenneally Feb 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can write the compiled version of the plugin to a "dist" folder and copy over the CSS to same. Removing the compiled version from source control would also eliminate the need to keep the src in sync with the compiled version in source control. We would just have to remember to build the plugin before using it.

const CamundaModelerWebpackPlugin = require("camunda-modeler-webpack-plugin");
const CopyPlugin = require("copy-webpack-plugin");
const { join, resolve } = require("node:path");

const outputDir = resolve(__dirname, "./dist");

module.exports = {
  mode: "development",
  entry: "./client/client.js",
  output: {
    path: outputDir,
    filename: "client.js",
  },
  devtool: "cheap-module-source-map",
  plugins: [
    new CamundaModelerWebpackPlugin(),
    new CopyPlugin({
      patterns: [
        {
          from: resolve(__dirname, "./client/styles.css"),
          to: join(outputDir, "./styles.css"),
        },
      ],
    }),
  ],
};

"domify": "^1.4.0"
},
"devDependencies": {
"camunda-modeler-plugin-helpers": "^3.0.0",

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could use the latest version of "camunda-modeler-plugin-helpers".

Using copy-webpack-plugin we can copy the src CSS into the "dist" folder at build time. camunda-modeler-webpack-plugin can also be used to ensure compatibility with the modeler's plugin system.

"camunda-modeler-plugin-helpers": "^5.1.0",
"camunda-modeler-webpack-plugin": "^0.2.0",
"copy-webpack-plugin": "^13.0.1",

website/yarn-error.log* No newline at end of file
website/yarn-error.log*

/.idea No newline at end of file
Copy link

@bryankenneally bryankenneally Feb 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggest adding "dist/" here if we go ahead with writing compiled versions of plugins to a separate directory


module.exports = {
name: 'MCP Tool Plugin',
style: './client/styles.css',

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggest registering the plugin using compiled version from the "dist/" folder

style: "./dist/styles.css",
script: "./dist/client.js",

@prajwolbhandari1
Copy link

@pieter-schutte any chance that you made your repo public?

@pieter-schutte
Copy link
Author

@pieter-schutte any chance that you made your repo public?

Please check your github notifications / messages. there should be an invite from about a week ago.

@pieter-schutte
Copy link
Author

@bryankenneally @HarishMalavade you suggested taking over the plugin component? I would be very happy for you to do that, @bryankenneally seems to know a log more about plugins than myself.

@bryankenneally
Copy link

@pieter-schutte any chance that you made your repo public?

Please check your github notifications / messages. there should be an invite from about a week ago.

Hey @pieter-schutte, is there any way of making an example available that I could view? I'm not in the maintainers group.

@pieter-schutte
Copy link
Author

pieter-schutte commented Feb 26, 2026

@pieter-schutte any chance that you made your repo public?

Please check your github notifications / messages. there should be an invite from about a week ago.

Hey @pieter-schutte, is there any way of making an example available that I could view? I'm not in the maintainers group.

It might be easier to test in isolation. just enable the mcp settings in an existing fluxnova application:

0d2e1c5#diff-0ffbcc3871158493227e1de4f1875a4d9a5de1b776d58da0a7c7e01ddc59f118R41-R67

Add the following dependencies to your pom.xml:

<dependencies>
    <!-- Spring AI MCP Server -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
    </dependency>

    <!-- MCP Fluxnova Extension -->
    <dependency>
        <groupId>io.mcp.tools</groupId>
        <artifactId>mcp-fluxnova-extension</artifactId>
    </dependency>
</dependencies>

Spring MCP Properties

Spring AI needs to be configured. Below is an example, but please refer to Spring AI documentation.

# MCP Server Configuration
spring.ai.mcp.server.name=fluxnova-mcp-server
spring.ai.mcp.server.version=1.0.0
spring.ai.mcp.server.protocol=streamable
spring.ai.mcp.server.stdio=false
spring.ai.mcp.server.type=sync

The MCP components should be directly testable via npx @modelcontextprotocol/inspector. After connecting to your Fluxnova server, you can invoke the process via the Tools menu.

@HarishMalavade
Copy link

HarishMalavade commented Mar 3, 2026

@pieter-schutte Sharing my thoughts on the plugin approach that we discussed in last week's maintainers call
First of all, I really appreciate and excited for all the great AI contributions Natwest is brining to Fluxnova, this is a great win for Fluxnova community to leverage the opensource collaboration

Advantages of enabling capabilities like AI integrations as plugin

  1. plugins hook into engine bootstrap and configurations allowing organizations to enable/disable on demand basis vs them being part of core engine - This is important because organizations might have different stance and custom integration needed especially for things like AI, MCP, Agentic, Authorization, Events etc
  2. Since plugins are configuration based they can be easily configured with maven dependency and spring config annotation that improves the portability across environments
  3. This allows us cleaner separation of Core engine capabilities which is more around BPMN and DMN engines or any capabilities needed for orchestration and automation with extended capabilities like MCP integration, custom security integration etc
  4. This would also allow us to build granular functionality independently with no disruption to core functionality.

So I recommend that this

  1. MCP backend java code integration become a plugin
  2. Modeler code is added as part of Modeler plugin - which does not impact runtime anyways

@pieter-schutte
Copy link
Author

@pieter-schutte any chance that you made your repo public?

Please check your github notifications / messages. there should be an invite from about a week ago.

Hey @pieter-schutte, is there any way of making an example available that I could view? I'm not in the maintainers group.

It might be easier to test in isolation. just enable the mcp settings in an existing fluxnova application:

0d2e1c5#diff-0ffbcc3871158493227e1de4f1875a4d9a5de1b776d58da0a7c7e01ddc59f118R41-R67

Add the following dependencies to your pom.xml:

<dependencies>
    <!-- Spring AI MCP Server -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
    </dependency>

    <!-- MCP Fluxnova Extension -->
    <dependency>
        <groupId>io.mcp.tools</groupId>
        <artifactId>mcp-fluxnova-extension</artifactId>
    </dependency>
</dependencies>

Spring MCP Properties

Spring AI needs to be configured. Below is an example, but please refer to Spring AI documentation.

# MCP Server Configuration
spring.ai.mcp.server.name=fluxnova-mcp-server
spring.ai.mcp.server.version=1.0.0
spring.ai.mcp.server.protocol=streamable
spring.ai.mcp.server.stdio=false
spring.ai.mcp.server.type=sync

The MCP components should be directly testable via npx @modelcontextprotocol/inspector. After connecting to your Fluxnova server, you can invoke the process via the Tools menu.

Fully working example is now available here, for testing purposes only. finos/fluxnova-examples#21

@pieter-schutte
Copy link
Author

pieter-schutte commented Mar 3, 2026

@pieter-schutte Sharing my thoughts on the plugin approach that we discussed in last week's maintainers call First of all, I really appreciate and excited for all the great AI contributions Natwest is brining to Fluxnova, this is a great win for Fluxnova community to leverage the opensource collaboration

Advantages of enabling capabilities like AI integrations as plugin

  1. plugins hook into engine bootstrap and configurations allowing organizations to enable/disable on demand basis vs them being part of core engine - This is important because organizations might have different stance and custom integration needed especially for things like AI, MCP, Agentic, Authorization, Events etc
  2. Since plugins are configuration based they can be easily configured with maven dependency and spring config annotation that improves the portability across environments
  3. This allows us cleaner separation of Core engine capabilities which is more around BPMN and DMN engines or any capabilities needed for orchestration and automation with extended capabilities like MCP integration, custom security integration etc
  4. This would also allow us to build granular functionality independently with no disruption to core functionality.

So I recommend that this

  1. MCP backend java code integration become a plugin
  2. Modeler code is added as part of Modeler plugin - which does not impact runtime anyways

Hi Harish. Can you please provide an example implementation of an existing plugin

<!-- Spring AI MCP Server -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it necessary to provide this dependency (since it is declared in the extension's pom.xml)? I was able to get it running without it (with just h2 and fluxnova-bpm-spring-boot-starter-webapp) .

@tom-stavert
Copy link

I was able to add the extension to an existing Fluxnova spring boot application (independent of the example you have provided, Pieter) without any issues. I think this works well as a plugin/extension so would also be interested if we could get an example implementation of a plugin.

@tom-stavert
Copy link

tom-stavert commented Mar 5, 2026

Having thought a little more about security for MCP functionality (an aspect we are also considering for our upcoming contribution at Scott Logic), I wonder whether it would make sense to abstract the MCP server configuration into a separate parent plugin that would handle enabling MCP server functionality for Fluxnova and any associated authentication/security features. Then, extensions which add tools (like this one) could be added on top of this. For security itself, we have discussed following a similar approach to the authentication for the REST API but curious to hear your thoughts on this.

@pieter-schutte
Copy link
Author

This PR will soon be closed. A preview of the plugin based implementation available here: https://github.com/finos/fluxnova-bpm-platform/tree/FLUXNOVA-AI-ISSUE-10

Will raise a PR as soon as the new Plugins repo is online.

@finos/fluxnova-maintainers @JamieWhitMac

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants