MCP-BPMN Server
MCP-BPMN-Server
Ein Model Context Protocol (MCP)-Server für eine getestete Teilmenge der BPMN-2.0-Autorenschaft, einschließlich Mermaid-Konvertierung, lokaler Persistenz, Layout, Validierung und XML- oder SVG-Export.
🎯 Überblick
MCP-BPMN bietet eine zustandsbehaftete Schnittstelle für KI-Assistenten, um jeweils mit einem Geschäftsprozessdiagramm zu arbeiten. Es erstellt wohlgeformtes BPMN-2.0-XML für die unten aufgeführten Konstrukte; es ist kein vollständiger BPMN-2.0-Editor, keine Ausführungs-Engine und kein Bereitstellungs-Client. Tragbarer BPMN-Kern ist der Standard-Autorenvertrag, mit einem optionalen typisierten Camunda-7-Profil, das in ADR 0001 dokumentiert ist.
Hauptfunktionen
Fokussierte BPMN-Autorenschaft: Unterstützte Ereignisse, Aktivitäten, Gateways, Datenobjekte, Annotationen, Pools, Top-Level-Lanes, Sequenzflüsse und Assoziationen
Mermaid-Konvertierung: Bootstrap-Diagramme aus der dokumentierten Flowchart-Teilmenge
Horizontales Auto-Layout: Deterministische Prozess- und Kollaborationsplatzierung
Lokale Persistenz: Atomares Speichern und erneutes Öffnen von Diagrammen in einem konfigurierten Verzeichnis
XML- und SVG-Export: XML wird prozessintern generiert; SVG wird über Puppeteer und
bpmn-jsgerendertTragbare und Camunda-7-Profile: Standardmäßig anbieterfreie Ausgabe, mit drei typisierten Camunda-7-Benutzeraufgabenfeldern, wenn explizit ausgewählt
Related MCP server: BPMN-MCP
🚀 Schnellstart
Voraussetzungen
Node.js 22.12.0 oder neuer
npm mit Lockfile-Unterstützung
Chrome oder Chromium für
export({ format: "svg" }); die normale Puppeteer-Installation lädt einen kompatiblen Browser herunter
XML-Autorenschaft, Validierung, Layout, Persistenz und XML-Export starten keinen Browser. SVG-Export schon. Wenn der Puppeteer-Browser-Download absichtlich übersprungen wird, setzen Sie PUPPETEER_EXECUTABLE_PATH auf eine kompatible Chrome- oder Chromium-Ausführungsdatei, bevor Sie den Server starten. Das SVG-Rendering ist headless, auf eine gleichzeitige Renderung pro Serverinstanz beschränkt und hat ein Render-Timeout von zwanzig Sekunden.
Aus einem Quell-Checkout ausführen
git clone https://github.com/oisee/mcp-bpmn.git
cd mcp-bpmn
npm ci
npm run build
npm startnpm run build erzeugt das kanonische ESM-Ausführungsprogramm unter dist/server/index.js. Der Server verwendet stdio, erscheint daher normalerweise im Terminal als inaktiv und ist dafür gedacht, von einem MCP-Client gestartet zu werden.
Konfiguration
Für Claude Desktop
Fügen Sie Ihrer Claude-Desktop-Konfigurationsdatei Folgendes hinzu:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"mcp-bpmn": {
"command": "node",
"args": ["/absolute/path/to/mcp-bpmn/dist/server/index.js"]
}
}
}Für andere MCP-Clients
Verwenden Sie denselben ESM-Einstiegspunkt mit einem absoluten Pfad:
node /absolute/path/to/mcp-bpmn/dist/server/index.jsEin gepacktes Release-Artefakt installieren
Dieses Repository dokumentiert derzeit eine npm-Tarball-Installation, anstatt anzunehmen, dass mcp-bpmn-server aus der öffentlichen npm-Registry verfügbar ist. Ein Release-Ersteller kann das kanonische CLI-only-Artefakt aus einem Quell-Checkout erstellen:
artifact_dir=$(mktemp -d)
npm pack --pack-destination "$artifact_dir"Installieren Sie diesen Tarball in ein dediziertes Verbraucherverzeichnis und führen Sie sein gepacktes ausführbares Programm aus:
consumer_dir=$(mktemp -d)
npm install --prefix "$consumer_dir" "$artifact_dir"/mcp-bpmn-server-*.tgz
"$consumer_dir/node_modules/.bin/mcp-bpmn-server"Für einen MCP-Client verwenden Sie den absoluten Wert von $consumer_dir/node_modules/.bin/mcp-bpmn-server als command und ein leeres args-Array. Das Paket ist eine CLI, keine importierbare JavaScript-Bibliothek.
Für Claude Code und Codex installieren
Aus einem Quell-Checkout verpackt das Installationsprogramm die aktuelle Version in einen stabilen, benutzereigenen Speicherort, registriert ihren MCP-Server und installiert die bpmn-modeler-Fähigkeit für jeden unterstützten Client, der auf PATH gefunden wird:
make install
make doctorDer Standardprogramm-Speicherort ist ~/.local/share/mcp-bpmn, während Diagramme außerhalb der Installation in ~/mcp-bpmn bleiben. Die Fähigkeit wird nach ~/.codex/skills/bpmn-modeler für Codex und ~/.claude/skills/bpmn-modeler für Claude Code kopiert. Starten Sie die Clients nach der Installation neu, damit sie die neue Fähigkeit und den MCP-Server entdecken.
Die Installation ist idempotent: Das erneute Ausführen von make install ersetzt nur Dateien und Registrierungen, die diesem Installationsprogramm gehören. Bestehende Drittanbieter-Registrierungen oder Fähigkeitsverzeichnisse bleiben erhalten, es sei denn, ein Ersatz wird explizit mit FORCE=1 angefordert. Zielen Sie auf einen Client, aktualisieren Sie eine bestehende Installation oder deinstallieren Sie unter Beibehaltung der Diagramme mit:
make install-codex
make install-claude
make update
make uninstallSetzen Sie PREFIX, um den Programm-Speicherort zu ändern, und MCP_BPMN_DIAGRAMS_PATH, um ein anderes absolutes Diagrammverzeichnis zu verwenden. Ein vorgefertigtes Release-Tarball kann reproduzierbar installiert werden, indem sowohl MCP_BPMN_PACKAGE_TARBALL als auch sein erforderliches MCP_BPMN_PACKAGE_SHA256 gesetzt werden. Führen Sie ./scripts/install-agent-integrations.sh --help für die vollständige Schnittstelle aus. Das Installationsprogramm unterstützt macOS und Linux, einschließlich WSL mit Linux-nativem Node.js und Client-CLIs.
Das Codex-Plugin lokal entwickeln
Das Release-Artefakt ist auch ein Codex-Plugin. Sein Manifest entdeckt die kanonische skills/bpmn-modeler-Fähigkeit und startet einen mcp-bpmn-stdio-Server über einen Launcher, der in den Plugin-Cache kopiert wird. Der Launcher verwendet die stabile private Version, die von make install-codex installiert wurde; er führt kein TypeScript aus und hängt nach der Installation nicht vom Checkout ab.
Erstellen Sie das Release-Artefakt, fügen Sie diesen Checkout als temporären Repo-Marktplatz hinzu und installieren Sie das Plugin mit:
npm ci
npm run build
make install-codex
codex plugin marketplace add .
codex plugin list --available
codex plugin add mcp-bpmn@mcp-bpmn-localStarten Sie nach der Installation eine neue Codex-Konversation, damit die Fähigkeit und die MCP-Tools geladen werden. Der gebündelte Server verwendet standardmäßig den writes-Genehmigungsmodus: Als schreibgeschützt markierte Tools können automatisch ausgeführt werden, während Diagrammmutationen zur Genehmigung sichtbar bleiben. Entfernen Sie die Entwicklungsinstallation mit:
codex plugin remove mcp-bpmn@mcp-bpmn-local
codex plugin marketplace remove mcp-bpmn-localFühren Sie den isolierten Marktplatz-, Cache-, Discovery-, MCP-Start- und Entfernungs-Smoke aus, ohne die echte Codex-Konfiguration zu ändern:
npm run test:codex-pluginDas Claude-Code-Plugin lokal entwickeln
Das Release-Artefakt ist auch ein Claude-Code-Plugin. Claude entdeckt die kanonische skills/bpmn-modeler/SKILL.md als die namespaced Fähigkeit /mcp-bpmn:bpmn-modeler und startet den Inline-mcp-bpmn-Server aus dem Plugin-Cache. Das Plugin verwendet skills/; es enthält keine veraltete commands/-Kopie.
Aus einem Quell-Checkout installieren Sie Abhängigkeiten, erstellen, validieren und laden das Plugin für eine Entwicklungssitzung:
npm ci
npm run build
claude plugin validate .
claude --plugin-dir .Verwenden Sie in Claude Code /mcp, um den vom Plugin bereitgestellten Server zu bestätigen, rufen Sie /mcp-bpmn:bpmn-modeler auf, um die Fähigkeit zu inspizieren, und führen Sie /reload-plugins aus, nachdem Sie das Manifest oder die MCP-Konfiguration geändert haben. Der Checkout enthält eine Root-CLAUDE.md für Repository-Mitwirkende, daher meldet die Quellvalidierung, dass es sich nicht um Plugin-Kontext handelt; der Befehl wird trotzdem erfolgreich ausgeführt. Das gepackte Plugin schließt diese nur für das Repository bestimmte Datei aus und besteht die strenge Validierung.
Führen Sie den vollständigen lokalen Marktplatz-Smoke mit:
npm run test:claude-pluginDiese Prüfung verwendet ein temporäres Claude-Home und einen temporären Marktplatz. Sie installiert ein kopiertes Release-Artefakt, prüft die Komponenteninventur von Claude, startet den gecachten MCP-Server, übt ein Neuladen aus und deaktiviert, aktiviert und entfernt dann das Plugin. Sie ändert nicht die echte Claude-Konfiguration des Entwicklers.
Diagramme werden niemals in ${CLAUDE_PLUGIN_ROOT} geschrieben. Sie bleiben in MCP_BPMN_DIAGRAMS_PATH, wenn gesetzt, oder standardmäßig in ~/mcp-bpmn, sodass Plugin-Neuladungen, -Updates, -Deaktivierungen und -Entfernungen sie nicht löschen. Bevor Sie von einer manuellen Claude-MCP-Registrierung zum Plugin wechseln, prüfen Sie claude mcp list und entfernen Sie die alte mcp-bpmn-Registrierung, wenn ihr Befehl sich vom Plugin-Endpunkt unterscheidet; Claude dedupliziert nur Plugin- und Benutzerserver, die auf denselben Befehl auflösen.
Agenten-Workflows evaluieren
Das kanonische maschinenlesbare Korpus ist evals/bpmn-modeler/cases.json. Beide Client-Adapter verwenden genau diese Prompts und semantischen Erwartungen. Die deterministische Prüfung ist für normale Entwicklung und CI sicher: Sie verifiziert Aktivierungsgrenzen, Fähigkeitsmetadaten, Toolnamen, Client-Parität und die Sequenz create/mutate/validate/layout/validate/export, ohne ein Modell aufzurufen:
npm run test:evaluationsAuthentifizierte Modellläufe sind opt-in. Erstellen Sie zuerst, wählen Sie dann einen begrenzten Fall aus, während Sie iterieren:
npm run build
npm run eval:codex -- --case direct-process-svg
npm run eval:claude -- --case direct-process-svgDer Codex-Adapter führt codex exec in einem temporären Projekt aus, das die kanonische Fähigkeit und eine projektspezifische stdio-MCP-Konfiguration enthält. Der Claude-Adapter materialisiert dieselben Fälle als native claude plugin eval-Fälle in einer temporären Plugin-Kopie. Beide setzen MCP_BPMN_DIAGRAMS_PATH auf ein temporäres Verzeichnis, kopieren nur deklarierte Setup-Fixtures dorthin und entfernen das Verzeichnis danach; sie lesen, überschreiben oder löschen niemals Diagramme aus dem echten Speicher des Benutzers. Lassen Sie --case weg, um das vollständige Korpus auszuführen. Diese Befehle können Modellkontingent verbrauchen und sind absichtlich von npm run check und CI ausgeschlossen.
Optionales CommonJS-Bundle
Das CommonJS-Bundle ist ein separater Quell-Checkout-Build und wird nicht von npm run build erzeugt oder in das kanonische npm-Tarball aufgenommen:
npm run build:bundle
npm run start:bundle📚 API-Referenz
Zustandsbehaftetes Kontextmanagement
MCP-BPMN verwendet ein zustandsbehaftetes API-Design, bei dem Sie jeweils mit einem Diagramm arbeiten. Alle Operationen gelten für den aktuellen Diagrammkontext, wodurch die Notwendigkeit von processId-Parametern entfällt.
Beworbene Tool-Matrix
Die Überschriften in dieser API-Referenz zählen jedes Tool auf, das von tools/list zurückgegeben wird. Die ausführbare Paritätsbasislinie ist tests/contracts/engine-contract.test.ts, mit fokussiertem Verhalten in den Unit-, Integrations- und End-to-End-Suiten.
Jedes beworbene Tool enthält auch die standardmäßigen MCP-Annotationen readOnlyHint, destructiveHint, idempotentHint und openWorldHint. Diese Annotationen beschreiben beobachtbares Serververhalten: Autorenaufrufe speichern automatisch, Ersetzungs- und Löschaufrufe können vorhandenen Zustand zerstören, und alle Operationen bleiben innerhalb des konfigurierten lokalen Diagrammspeichers. MCP-Annotationen sind beratende Hinweise, keine Autorisierungsgrenze; Clients müssen weiterhin ihre eigenen Vertrauens- und Genehmigungsrichtlinien anwenden.
Bereich | Beworbene Tools | Getesteter Umfang und Grenze |
Kontexterstellung/Import |
| Prozess- oder Kollaborationswurzeln; dokumentierte Mermaid-Teilmenge; Importe müssen in das kanonische Modell des Servers passen |
Kontextlebenszyklus |
| Ein aktives Diagramm und Dateiname; lokale atomare Persistenz |
Autorenschaft |
| Die expliziten Schema-Enums und typisierten Eigenschaften unten, nicht beliebige BPMN-Elemente oder Erweiterungsattribute |
Beziehungen |
| Direktes |
Abfrage/Mutation |
| Paginierte Abfragen und die dokumentierten typisierten Mutationsfelder |
Export/Qualität |
| XML oder browserbasiertes SVG; geschichtete strukturelle Validierung; nur horizontales Layout |
Gespeicherte Dateien |
| Sandbox-Zugriff innerhalb des konfigurierten Diagrammverzeichnisses |
Erstellungstools
new_bpmn
Erstellen Sie ein neues BPMN-Prozess- oder Kollaborationsdiagramm und setzen Sie es als aktuellen Kontext.
{
name: "Order Processing",
type: "process" // or "collaboration" (optional, defaults to "process")
}new_from_mermaid
Erstellen Sie ein neues BPMN-Diagramm aus Mermaid-Code und legen Sie es als aktuellen Kontext fest.
{
name: "My Process",
mermaidCode: "graph TD\n A[Start] --> B[Task] --> C[End]"
}Mermaid-Konvertierung unterstützt absichtlich eine fokussierte Flowchart-Teilmenge:
Mermaid-Konstrukt | BPMN-Zuordnung | ||
| Task (die genauen Bezeichnungen | ||
| Start-/Ende-Ereignis, wenn die Topologie eines identifiziert; andernfalls Zwischen-Throw-Ereignis | ||
| Exklusives Gateway | ||
| Teilprozess | ||
| Eigenständige Datenobjekt-Referenz, die mit einem zugrunde liegenden Datenobjekt verknüpft ist | ||
`--> | Label | ` | Anzeigename für Sequenz-/Nachrichtenfluss; Beschriftungen sind keine Bedingungsausdrücke |
| Teilnehmer mit eigenem Prozess; Kanten zwischen Subgraphen werden zu Nachrichtenflüssen |
Wenn ein Subgraph vorhanden ist, muss jeder Knoten zu genau einem Top-Level-Subgraph gehören. Verschachtelte Subgraphen und Sequenzflussverbindungen zu Datenknoten werden vor dem BPMN-Export abgelehnt. Styling, Klick-Handler, CSS-Klassen und gepunktete Kantendarstellung werden in BPMN nicht dargestellt; akzeptierte verlustbehaftete Syntax gibt eine Konvertierungswarnung zurück. Textbeschriftungen und Subgraph-Namen werden XML-escaped und durchlaufen BPMN unverändert.
Dateioperationen
open_bpmn
Öffnen Sie eine vorhandene BPMN-Datei und legen Sie sie als aktuellen Kontext fest.
{
filename: "my-process.bpmn"
}open_mermaid_file
Öffnen und konvertieren Sie eine Mermaid-Datei in BPMN und legen Sie sie als aktuellen Kontext fest.
{
filename: "my-flowchart.mmd"
}save
Speichern Sie das aktuelle Diagramm atomar in seiner aktiven Datei. Neue und geöffnete Diagramme haben bereits einen aktiven Dateinamen, und erfolgreiche Mutationen speichern automatisch in derselben Datei.
{}save_as
Speichern Sie das aktuelle Diagramm atomar mit einem neuen Dateinamen und machen Sie diesen Dateinamen aktiv. Spätere Mutationen aktualisieren nur die neue Datei; die vorherige Datei bleibt eine unveränderte Momentaufnahme.
{
filename: "my-process.bpmn"
}close
Schließen Sie das aktuelle Diagramm und leeren Sie den Kontext.
{}current
Informationen über das aktuelle Diagramm abrufen.
{}Werkzeuge zur Elementbearbeitung
add_event
Fügen Sie Ereignisse (Start, Ende, Zwischen, Rand) zum aktuellen Diagramm hinzu.
{
eventType: "start", // start, end, intermediate-throw, intermediate-catch, boundary
name: "Order Received",
eventDefinition: "message", // optional; only BPMN-legal event kind/definition pairs are accepted
eventDefinitionPayload: {
reference: { name: "Order received" } // root ID is generated when omitted
},
position: { x: 100, y: 200 } // optional
}Timer-Definitionen erfordern timer: { type: "timeDate" | "timeDuration" | "timeCycle", expression, language? }; bedingte Definitionen erfordern condition: { expression, language? }. Fehler- und Eskalationsreferenzen können auch code enthalten. Kompensations-Throws können activityRef und waitForCompletion enthalten; Kompensations-Randereignisse sind nicht unterbrechend.
add_activity
Fügen Sie Aktivitäten (Aufgaben, Teilprozesse) zum aktuellen Diagramm hinzu.
{
activityType: "userTask", // task, userTask, serviceTask, scriptTask, etc.
name: "Review Order",
position: { x: 250, y: 200 }, // optional
properties: { // optional; Camunda 7 profile only on userTask
assignee: "reviewer",
candidateGroups: ["operations", "approvers"],
dueDate: "${dueDate}"
}
}Neue BPMN- und Mermaid-Dokumente akzeptieren extensionProfile: "portable" | "camunda7"; der Standard ist portable. Der portable Modus lehnt die drei Herstellerfelder ab und gibt keinen Hersteller-Namespace aus. Camunda-Updates akzeptieren null für jedes davon, um das entsprechende XML-Attribut zu entfernen. Kandidatengruppeneinträge dürfen keine Kommas enthalten. Importiertes BPMN erkennt die tatsächliche Verwendung des Camunda-Namespace und bewahrt andere warnungsfreie Erweiterungen opak.
Aufrufaktivitäten werden als bpmn:callActivity serialisiert. Ihr optionales properties.calledElement ist ein lexikalischer BPMN-QName, der das aufrufbare Element identifiziert; es muss nicht mit einer Prozess-ID im aktuellen Diagramm übereinstimmen.
Aktivitäten können standardmäßige BPMN-Multi-Instance-Schleifenmerkmale verwenden. Setzen Sie isSequential auf false für parallele Instanzen oder auf true für sequenzielle Instanzen:
{
activityType: "serviceTask",
name: "Process Batch",
properties: {
multiInstance: {
isSequential: false,
loopCardinality: {
body: "requestedInstanceCount",
language: "urn:example:expression-language"
},
completionCondition: {
body: "completedInstanceCount >= requiredInstanceCount",
language: "urn:example:expression-language"
},
loopDataInputRef: "DataObjectReference_Input", // optional ItemAwareElement ID
loopDataOutputRef: "DataObjectReference_Output" // optional ItemAwareElement ID
}
}
}Der Server bewahrt Ausdruckskörper exakt und serialisiert sie als BPMN-FormalExpression-Werte. Er parst oder wertet sie nicht aus, wählen Sie also eine Sprache/Profil, die von der BPMN-Engine unterstützt wird, die das exportierte Diagramm ausführen wird. Die Schleifendatenreferenzen müssen vorhandene BPMN-ItemAwareElement-Instanzen identifizieren; das portable Schema gibt kein herstellerspezifisches collection-Attribut aus. Herstellerspezifische Bindungs- oder Versionsattribute werden vom portablen BPMN-Dialekt nicht ausgegeben.
{
activityType: "callActivity",
name: "Invoke fulfillment",
properties: { calledElement: "FulfillmentProcess" }
}add_gateway
Fügen Sie Gateways für Verzweigungslogik zum aktuellen Diagramm hinzu.
{
gatewayType: "exclusive", // exclusive, parallel, inclusive, eventBased, complex
name: "Payment Check",
position: { x: 400, y: 200 } // optional
}add_data_object
Fügen Sie eine sichtbare bpmn:dataObjectReference und ihr verknüpftes, nicht gerendertes bpmn:dataObject hinzu. Der Sammlungszustand gehört zum zugrunde liegenden Objekt. Ein optionales itemSubjectRef muss eine vorhandene bpmn:itemDefinition identifizieren, z. B. eine aus einem importierten Diagramm geladene.
{
name: "Order records",
position: { x: 400, y: 320 }, // optional reference position
isCollection: true, // optional, defaults to false
itemSubjectRef: "ItemDefinition_Order" // optional existing definition ID
}Daten-Eingabe-/Ausgabe-Assoziationen sind BPMN-Konstrukte, die Aktivitäten gehören, und werden nicht von add_association erstellt, das die generische Artefakt-Assoziation bleibt.
add_text_annotation
Fügen Sie eine BPMN-Textannotation hinzu. Text wird exakt erhalten, einschließlich Zeilenumbrüchen und XML-Metazeichen. textFormat standardmäßig auf BPMNs text/plain; Position und Größe standardmäßig auf die Annotationsgeometrie der Engine. Die Angabe von associatedElementId erstellt auch eine separate, ungerichtete BPMN-Assoziation von der Annotation zu diesem Element.
{
text: "Review the exception path\nbefore approval",
textFormat: "text/markdown", // optional
position: { x: 400, y: 320 }, // optional
size: { width: 220, height: 80 }, // optional
associatedElementId: "UserTask_1" // optional
}connect
Verbinden Sie zwei Elemente mit einem Sequenzfluss im aktuellen Diagramm.
{
sourceId: "ExclusiveGateway_1",
targetId: "UserTask_1",
label: "Start Flow", // optional
condition: "amount > 1000", // optional, for conditional sequence flows
conditionLanguage: "FEEL", // optional
conditionType: "bpmn:FormalExpression", // optional
isDefault: false // optional; default flows cannot have conditions
}Bedingungen und Standardwerte werden für Aktivitäten und exklusive, inklusive oder komplexe Gateways unterstützt. Ein Standardfluss kann nicht auch eine Bedingung haben.
add_association
Fügen Sie ein BPMN-Assoziationsartefakt zwischen zwei BaseElements in einem kompatiblen Prozess- oder Kollaborationsbereich hinzu. Dies unterscheidet sich von Sequenz- und Nachrichtenflüssen. associationDirection standardmäßig auf BPMNs None-Wert.
{
sourceId: "TextAnnotation_1",
targetId: "UserTask_1",
associationDirection: "One" // None, One, or Both
}add_pool
Fügen Sie einen Pool (Teilnehmer) zu einem Kollaborationsdiagramm hinzu.
{
name: "Customer",
position: { x: 100, y: 100 }, // optional
size: { width: 600, height: 250 }, // optional
blackBox: false // optional; true creates a participant without an owned process
}add_lane
Fügen Sie eine Spur zu einem White-Box-Pool hinzu und weisen Sie direkte Prozessflussknoten zu. Knoten, die bereits einer anderen Spur zugewiesen sind, werden in die neue Spur verschoben.
{
poolId: "Participant_1",
name: "Sales Department",
flowNodeIds: ["StartEvent_1", "UserTask_1"],
position: "bottom" // optional
}Abfrage- und Bearbeitungswerkzeuge
list_elements
Listen Sie eine stabile, nach ID geordnete Seite von Elementen und Assoziationsartefakten im aktuellen Diagramm auf. Filtern Sie mit elementType: "bpmn:Association", um nur Assoziationen aufzulisten.
{
elementType: "bpmn:Task", // optional filter
limit: 100, // optional, defaults to 100; maximum 500
offset: 0 // optional, defaults to 0
}Die Antwort ist { count, returnedCount, offset, limit, hasMore, elements }. Kompatibilitätshinweis: Der Paginierungs-Envelope ersetzt die frühere Bare-Array-Antwort; Clients, die gegen diesen Vertrag geschrieben wurden, müssen jetzt elements lesen. Die vorhandenen Elementfelder behalten ihre Bedeutung; zusätzliche Metadatenfelder und Spureinträge können vorhanden sein.
get_element
Details eines bestimmten Elements oder einer Assoziation abrufen.
{
elementId: "UserTask_1"
}update_element
Elementeigenschaften aktualisieren.
{
elementId: "UserTask_1",
name: "Updated Task Name",
properties: { assignee: "john.doe", candidateGroups: ["reviewers"] },
defaultFlow: "Flow_2" // outgoing flow ID, or null to clear
}delete_element
Löschen Sie ein Element und seine anfallenden Verbindungen. Das Übergeben einer Assoziations-ID löscht nur diese Assoziation und lässt ihre Endpunkte intakt; das Löschen eines Endpunkts, einschließlich einer Textannotation, kaskadiert auf seine Assoziationen.
{
elementId: "Task_1"
}Dienstprogrammwerkzeuge
export
Exportieren Sie das aktuelle Diagramm als BPMN 2.0 XML oder als gerendertes SVG.
{
format: "xml", // "xml" or "svg"; defaults to "xml"
formatted: true // optional; applies to XML and defaults to true
}XML-Export gibt Text zurück und startet keinen Browser. SVG-Export startet einen Headless-Browser über Puppeteer, rendert mit bpmn-js, bereinigt das Ergebnis und gibt eine eingebettete image/svg+xml-Ressource zurück. Es erfordert eine verfügbare Chrome/Chromium-Ausführungsdatei und behält die sichtbare bpmn.io-Zuschreibung bei, die unter Lizenz beschrieben ist.
validate
Validieren Sie die Struktur des aktuellen Diagramms.
{
level: "full" // "syntax", "semantic", or "full"; defaults to "full"
}Validierungsstufen sind kumulativ. syntax parst XML und löst Referenzen auf; semantic fügt besitzerbewusste Ereignis-, Fluss-, Teilprozess-, Spuren- und Kollaborationsregeln hinzu; full fügt auch Start-/Ende-/Konnektivitätsrichtlinien für ausführbare Profile hinzu.
auto_layout
Wenden Sie automatisches Layout an, um Elemente im aktuellen Diagramm zu positionieren.
{
algorithm: "horizontal" // currently only horizontal is supported
}Das Layout läuft in einem beendbaren Unterprozess mit einem standardmäßigen Fünf-Sekunden-Budget. Eine benchmarkbasierte Vorprüfung akzeptiert höchstens 2.000 Elemente, 2.000 Verbindungen und 10 Verbindungen pro Element; Eingaben über einem Limit werden vor dem Layout abgelehnt. Bei Kollaborationen wird jeder Teilnehmerprozess unabhängig eingestuft, sodass Nachrichtenflüsse die Reihenfolge der Sequenzflüsse nicht ändern. Automatisches Layout ersetzt manuelle Knoten- und Containerkoordinaten, aber angeforderte/importierte Teilnehmer- und Spurabmessungen bleiben untere Grenzen. Pools werden dann ohne Überlappung gestapelt; Spuren und zugehörige Knoten bleiben enthalten, und Nachrichtenflüsse werden erst nach der endgültigen Poolplatzierung geroutet. Nicht verbundene Knoten werden deterministisch in ihrem Besitzerprozess gepackt, verschachtelte Teilprozesse behalten semantische Containment, und Black-Box-Teilnehmer behalten ihre angeforderte Mindestgröße ohne erfundenen Prozessinhalt.
Dateiverwaltungswerkzeuge
list_diagrams
Listen Sie eine stabile, nach Dateinamen geordnete Seite gespeicherter BPMN-Diagramme auf.
{
limit: 100, // optional, defaults to 100; maximum 500
offset: 0 // optional, defaults to 0
}Die vorhandenen Antwortfelder { count, diagrams, path } bleiben verfügbar; returnedCount, offset, limit und hasMore beschreiben die ausgewählte Seite. Nur Dateien auf der ausgewählten Seite werden für eingebettete BPMN-Metadaten gelesen, und das aggregierte Metadatenlesen ist standardmäßig auf 5 MiB begrenzt.
delete_diagram_file
Löschen Sie eine gespeicherte Diagrammdatei.
{
filename: "old-process.bpmn"
}get_diagrams_path
Den Speicherpfad für Diagramme abrufen.
{}🔄 Kontextverwaltung
Der MCP-BPMN-Server verwendet ein zustandsbehaftetes Design, bei dem Sie jeweils mit einem Diagramm arbeiten:
Erstellen oder Öffnen: Beginnen Sie mit dem Erstellen eines neuen Diagramms (
new_bpmn,new_from_mermaid) oder dem Öffnen eines vorhandenen (open_bpmn,open_mermaid_file)Bearbeiten: Alle Operationen (
add_event,connectusw.) gelten für das aktuelle DiagrammSpeichern: Speichern Sie Ihre Arbeit mit
saveodersave_asSchließen: Schließen Sie das aktuelle Diagramm mit
close
Wenn Sie versuchen, Operationen ohne aktuellen Kontext auszuführen, erhalten Sie eine hilfreiche Fehlermeldung:
No current context. Please create a diagram first with:
- new_bpmn(name) to create a new BPMN diagram
- new_from_mermaid(name, mermaidCode) to convert from Mermaid
- open_bpmn(filename) to open an existing BPMN file
- open_mermaid_file(filename) to convert a Mermaid file💡 Beispiele
Beispiel 1: Erstellen eines Genehmigungsprozesses von Grund auf
// Step 1: Create a new process (sets it as current context)
await new_bpmn({ name: "Approval Workflow" });
// Step 2: Add elements (all operations apply to current diagram)
await add_event({ eventType: "start", name: "Request Received" });
await add_activity({ activityType: "userTask", name: "Review Request" });
await add_gateway({ gatewayType: "exclusive", name: "Approved?" });
await add_activity({ activityType: "serviceTask", name: "Process Approval" });
await add_activity({ activityType: "userTask", name: "Handle Rejection" });
await add_event({ eventType: "end", name: "Complete" });
// Step 3: Connect elements
await connect({ sourceId: "StartEvent_1", targetId: "UserTask_1" });
await connect({ sourceId: "UserTask_1", targetId: "ExclusiveGateway_1" });
await connect({ sourceId: "ExclusiveGateway_1", targetId: "ServiceTask_1", label: "Yes" });
await connect({ sourceId: "ExclusiveGateway_1", targetId: "UserTask_2", label: "No" });
await connect({ sourceId: "ServiceTask_1", targetId: "EndEvent_1" });
await connect({ sourceId: "UserTask_2", targetId: "EndEvent_1" });
// Step 4: Apply auto-layout for proper positioning
await auto_layout();
// Step 5: Save and export the diagram
await save_as({ filename: "approval-workflow.bpmn" });
const xml = await export();Beispiel 2: Bootstrap aus Mermaid (empfohlen für geringeren Token-Verbrauch)
// Step 1: Create from Mermaid syntax (much more concise!)
await new_from_mermaid({
name: "Approval Workflow",
extensionProfile: "camunda7",
mermaidCode: `
graph TD
A((Request Received)) --> B[Review Request]
B --> C{Approved?}
C -->|Yes| D[Process Approval]
C -->|No| E[Handle Rejection]
D --> F((Complete))
E --> F
`
});
// Step 2: Apply auto-layout (Mermaid conversion includes basic layout)
await auto_layout();
// Step 3: Make additional edits if needed
await update_element({
elementId: "UserTask_1",
properties: { assignee: "reviewer" }
});
// Step 4: Save and export
await save_as({ filename: "approval-workflow.bpmn" });
const xml = await export();Beispiel 3: Arbeiten mit mehreren Diagrammen
// Create first diagram
await new_bpmn({ name: "Process A" });
await add_event({ eventType: "start" });
await add_activity({ activityType: "task", name: "Task A" });
await save_as({ filename: "process-a.bpmn" });
// Create second diagram (automatically closes the first)
await new_bpmn({ name: "Process B" });
await add_event({ eventType: "start" });
await add_activity({ activityType: "task", name: "Task B" });
await save_as({ filename: "process-b.bpmn" });
// Go back to first diagram
await open_bpmn({ filename: "process-a.bpmn" });
await add_event({ eventType: "end" });
await save();
// Check current diagram info
const info = await current();
console.log(info); // Shows: { name: "Process A", filename: "process-a.bpmn", ... }🗂️ Dateispeicherung
BPMN-Diagramme werden automatisch in Ihrem lokalen Dateisystem gespeichert:
Unix/Linux/Mac:
~/mcp-bpmn/Windows:
%USERPROFILE%\mcp-bpmn\
Benutzerdefinierter Pfad über Umgebungsvariable:
export MCP_BPMN_DIAGRAMS_PATH=/custom/pathRessourcengrenzen können mit MCP_BPMN_MAX_IMPORT_BYTES, MCP_BPMN_MAX_MERMAID_BYTES, MCP_BPMN_MAX_LAYOUT_ELEMENTS, MCP_BPMN_MAX_LAYOUT_CONNECTIONS, MCP_BPMN_MAX_LAYOUT_DENSITY, MCP_BPMN_MAX_LAYOUT_BYTES, MCP_BPMN_MAX_CONCURRENT_LAYOUTS, MCP_BPMN_MAX_LISTING_ITEMS, MCP_BPMN_MAX_LISTING_METADATA_BYTES und MCP_BPMN_LAYOUT_TIMEOUT_MS eingestellt werden. Die Frist für das ordnungsgemäße Herunterfahren kann mit MCP_BPMN_SHUTDOWN_TIMEOUT_MS überschrieben werden. Standardwerte sind 5 MiB pro importiertem/Layout-Eingang und pro Metadaten-Seite, 2.000 Layout-Elemente/Verbindungen, Dichte 10, zwei gleichzeitige Layout-Unterprozesse, 10.000 Auflistungskandidaten und 5.000 ms. Die Layout-Standardwerte stammen aus lokalen Sparse/Dense-Benchmarks: 2.000/1.999 in etwa 1,4 s, 25/300 in etwa 4,8 s und 26/325 überschritten fünf Sekunden.
Bei SIGINT, SIGTERM oder stdin-EOF stoppt der Server die Annahme von Tool-Aufrufen und lässt akzeptierte Operationen und deren atomare Persistenz abschließen, bevor er Renderer-/Layout-Unterprozesse und den stdio-Transport schließt. Das ordnungsgemäße Herunterfahren hat eine harte 15-Sekunden-Frist; deren Überschreitung erzwingt einen Exit mit Nicht-Null-Status.
Neue Diagramme beginnen mit dem Dateinamen {ProcessId}_{ProcessName}.bpmn. Jedes Diagramm hat genau einen aktiven Dateinamen: Beim Öffnen wird der geöffnete Dateiname übernommen und save_as wechselt ihn, nachdem die neue Datei erfolgreich geschrieben wurde. Hinzufügen, Aktualisieren, Löschen, Verbinden und Layout-Operationen serialisieren und speichern die aktive Datei atomar automatisch; fehlgeschlagene Serialisierung oder Schreibvorgänge belassen sowohl Speicher als auch Festplatte im letzten erfolgreichen Zustand.
🏗️ Architektur
Technologie-Stack
TypeScript - Typsichere Entwicklung
Node.js - Laufzeitumgebung
MCP SDK - Implementierung des Model Context Protocol
Jest - Test-Framework
Schlüsselkomponenten
SimpleBpmnEngine- Kanonische BPMN-Dokumentmutation, Persistenz und XML-ExportBpmnSvgRenderer- Isoliertes, browserbasiertesbpmn-js-SVG-RenderingDiagramContext- Zustandsbehaftetes Kontextmanagement für das aktuelle DiagrammBpmnAutoLayoutV2Adapter- BPMN-Auto-Layout-IntegrationBpmnRequestHandler- MCP-AnfrageverarbeitungMermaidConverter- Mermaid-zu-BPMN-KonvertierungTypeMappings- BPMN-Elementtyp-KonvertierungenIdGenerator- Konsistente ID-Generierung
Projektstruktur
mcp-bpmn/
├── src/
│ ├── core/ # Core BPMN engine
│ ├── server/ # MCP server implementation
│ ├── utils/ # Utilities (layout, ID generation)
│ ├── types/ # TypeScript type definitions
│ └── config/ # Configuration
├── tests/
│ ├── unit/ # Unit tests
│ ├── integration/ # Integration tests
│ └── e2e/ # End-to-end tests
├── dist/ # Compiled output
└── docs/ # Documentation🧪 Entwicklung
Verfügbare Skripte
npm run build # Build TypeScript
npm run build:bundle # Build CommonJS bundle
npm run build:watch # Build with watch mode
npm run check # Complete clean contributor/CI quality gate
npm test # Run source-level tests (no build output required)
npm run test:all # Clean, build, and run every test including e2e
npm run test:unit # Run unit tests only
npm run test:integration # Run integration tests only
npm run test:e2e # Run end-to-end tests
npm run lint # Run ESLint
npm run dev # Development mode with hot reload
npm start # Start the MCP serverTesten
Das Projekt umfasst eine umfassende Testabdeckung. Befehle auf Quellcode-Ebene lesen dist/ nicht, sodass ein alter Build ihr Ergebnis nicht beeinflussen kann:
Unit-Tests: Testen der Kernfunktionalität
Integrationstests: Testen von Handler und Werkzeugen
E2E-Tests: Vollständiges Testen des MCP-Protokolls
Führen Sie Tests aus mit:
npm test # Source-level tests
npm run test:all # Clean build plus all tests
npm run check # Complete clean contributor/CI quality gate
npm run test:coverage # Source-level tests with coverage
npm run test:watch # Source-level tests in watch mode📈 Leistung
Das kanonische Release-Artefakt wurde am 22.08.2026 mit Node 25.9.0 und npm 11.12.1 gemessen mit:
npm pack --dry-run --jsonDieser Befehl meldete ungefähr 195 kB komprimiert und 1104270 ungepackte Bytes. Diese Zahlen beschreiben das npm-Tarball, nicht einen installierten Server: Das Tarball bündelt keine Produktionsabhängigkeiten, während die Installation die neun direkten Laufzeitabhängigkeiten in package.json und deren transitive Abhängigkeiten auflöst. Der von Puppeteer verwaltete Chrome-Download liegt ebenfalls außerhalb der Tarball-Messung. Führen Sie den Befehl für das aktuelle Artefakt erneut aus, anstatt diese datierte Momentaufnahme als dauerhafte Größengarantie zu behandeln.
Das optionale CommonJS-Bundle ist nicht das Release-Artefakt und hat keinen Größenanspruch. Layout-Eingabelimits und die datierten Benchmark-Beobachtungen, die zur Auswahl ihrer Standardwerte verwendet wurden, sind unter Dateispeicher dokumentiert.
🐛 Bekannte Einschränkungen
Die Autoren-API ist eine fokussierte BPMN-2.0-Teilmenge, keine vollständige BPMN-2.0-Abdeckung. Nicht unterstützte importierte Konstrukte können abgelehnt werden, anstatt verlustfrei bearbeitet zu werden.
connectbietet keine direkte Autorenunterstützung für Nachrichtenflüsse. Die Mermaid-Kollaborations-Teilmenge kann Nachrichtenflüsse zwischen Teilgraphen erstellen.add_laneerstellt Top-Level-Swimlanes in White-Box-Pools; es kann keine importierte verschachtelte Lane-Hierarchie erweitern.Auto-Layout unterstützt nur horizontales Layout. Vertikale und radiale Algorithmen werden nicht beworben.
Die Validierung bietet die dokumentierten Syntax-, Semantik- und vollständigen Anleitungsebenen; sie ist keine BPMN-XSD-Zertifizierung oder Validierung gegen eine Bereitstellungs-Engine.
Das Camunda-7-Autorenprofil ist auf
assignee,candidateGroupsunddueDatebei Benutzeraufgaben beschränkt. Es ist keine allgemeine Camunda-Modeler-Abdeckung.Der SVG-Export erfordert Chrome/Chromium über Puppeteer und erlaubt nur ein gleichzeitiges Rendering pro Serverinstanz. XML-Workflows bleiben browserfrei.
Der Server führt BPMN-Prozesse nicht aus, simuliert sie nicht und stellt sie nicht bereit.
🚧 Roadmap
Geplante Arbeiten und bekannte Lücken werden als Beads-Issues verfolgt und nicht als implementierte Funktionen in diesem Release-Dokument versprochen.
🤝 Mitwirken
Beiträge sind willkommen! Bitte:
Forken Sie das Repository
Erstellen Sie einen Feature-Branch (
git checkout -b feature/amazing-feature)Führen Sie das vollständige Qualitätsgate aus (
npm run check)Committen Sie Ihre Änderungen (
git commit -m 'Add amazing feature')Pushen Sie den Branch (
git push origin feature/amazing-feature)Öffnen Sie einen Pull-Request
Codestil
TypeScript mit striktem Modus
ESLint-Konfiguration bereitgestellt
Jest zum Testen
Konventionelle Commits
📝 Lizenz
MIT-Lizenz – siehe Datei LICENSE für Details.
Der SVG-Export verwendet bpmn-js@17.11.1. Jedes exportierte SVG enthält ein sichtbares „Powered by bpmn.io“-Logo, das mit https://bpmn.io verlinkt ist; Clients sollten diese Zuordnung nicht zuschneiden, abdecken oder entfernen. Siehe THIRD_PARTY_NOTICES.md für die Lizenzbedingungen der Abhängigkeit und ADR 0002 für die Release-Entscheidung.
📞 Support
Issues: GitHub Issues
Dokumentation: Siehe Ordner
/docsfür ausführliche Anleitungen
🙏 Danksagungen
Basierend auf der Model Context Protocol-Spezifikation
Inspiriert von bpmn-js für BPMN-Standards
Dank an das Anthropic-Team für die MCP-Entwicklung
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to create, validate, and visualize ArchiMate 3.2 enterprise architecture diagrams through natural language. Supports all 55+ element types across 7 architectural layers with Mermaid diagram generation and XML export capabilities.5128MIT
- AlicenseAqualityDmaintenanceAn MCP server that enables AI assistants to programmatically create, modify, and export BPMN 2.0 workflow diagrams. It supports managing various process elements and sequence flows while providing export capabilities to standard XML and SVG formats.711MIT
- FlicenseBqualityDmaintenanceEnables AI agents to create, manipulate, and manage BPMN 2.0 diagrams programmatically, with support for Mermaid conversion, auto-layout, and file persistence.249
- AlicenseNot gradedqualityDmaintenanceEnables creating, manipulating, and managing Mermaid diagrams with automatic saving and multi-format conversion from JSON, CSV, Python, Markdown, and plain text.7MIT
Related MCP Connectors
Generate dynamic Mermaid diagrams and charts with AI assistance. Customize styles and export diagr…
Let Claude, Cursor, or ChatGPT author Mermaid diagrams your team can read and share.
Generate cloud architecture diagrams, flowcharts, and sequence diagrams.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sebahrens/bpmn-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server