Skip to main content
Glama

MCP-BPMN Server

A Model Context Protocol (MCP) server for a tested BPMN 2.0 authoring subset, including Mermaid conversion, local persistence, layout, validation, and XML or SVG export.

🎯 Overview

MCP-BPMN provides a stateful interface for AI assistants to work with one business process diagram at a time. It authors well-formed BPMN 2.0 XML for the constructs listed below; it is not a complete BPMN 2.0 editor, execution engine, or deployment client. Portable BPMN core is the default authoring contract, with an opt-in typed Camunda 7 profile documented in ADR 0001.

Key Features

  • Focused BPMN authoring: Supported events, activities, gateways, data objects, annotations, pools, top-level lanes, sequence flows, and associations

  • Mermaid conversion: Bootstrap diagrams from the documented flowchart subset

  • Horizontal auto-layout: Deterministic process and collaboration placement

  • Local persistence: Atomically save and reopen diagrams in a configured directory

  • XML/SVG export and rendered artifacts: XML is generated in-process; SVG export and managed SVG/PNG artifacts are rendered through Puppeteer and bpmn-js

  • Portable and Camunda 7 profiles: Vendor-free output by default, with three typed Camunda 7 user-task fields when explicitly selected

Related MCP server: BPMN-MCP

🚀 Quick Start

Requirements

  • Node.js 22.12.0 or newer

  • npm with lockfile support; make is additionally required for the Codex/Claude installer

  • macOS, Linux, or WSL2 with Linux-native Node.js, npm, and agent clients

  • Chrome or Chromium for export({ format: "svg" }), save_svg, and save_png; the normal Puppeteer install downloads a compatible browser

XML authoring, validation, layout, persistence, and XML export do not launch a browser. SVG export and managed SVG/PNG artifact rendering do. Rendering is headless, limited to one concurrent render per server instance, and has a twenty-second timeout.

Browser download

npm ci in this checkout runs Puppeteer's install step, which downloads Chrome for Testing and the headless shell into a shared, machine-wide cache at ~/.cache/puppeteer. That download needs network access and about 650 MB of disk (measured on Linux with puppeteer@25.8.0: 391 MB for chrome, 261 MB for chrome-headless-shell). The cache is shared across projects, so a machine that already has it pays nothing extra.

To skip it, install with PUPPETEER_SKIP_DOWNLOAD=1. Everything except SVG/PNG rendering then works unchanged; those three calls fail until you point the server at an existing browser:

export PUPPETEER_EXECUTABLE_PATH="/usr/bin/google-chrome"

make install never downloads a browser: the installer runs its private npm install with PUPPETEER_SKIP_DOWNLOAD=true, so the installed server renders only if this checkout's npm ci already filled the shared cache, a system Chrome/Chromium is on PATH, or PUPPETEER_EXECUTABLE_PATH is set. make doctor reports which of those applies as SVG browser readiness.

Chrome refuses to start as root, and container, devcontainer, CI, and cloud sandbox images commonly run the server as uid 0. The server therefore launches Chrome with --no-sandbox --disable-setuid-sandbox when process.getuid() is 0. Set MCP_BPMN_BROWSER_ARGS to a space-separated argument list to replace that default anywhere else the sandbox cannot start — for example on hosts that restrict unprivileged user namespaces — or to an empty string to launch Chrome with no extra arguments at all.

Install for Codex and Claude Code

git clone https://github.com/sebahrens/bpmn-mcp.git
cd mcp-bpmn
npm ci
make install
make doctor

make install builds a private release, registers every supported client found on PATH, and copies the bpmn-modeler skill into each detected client. Start a new client session, then ask it to create a small BPMN process and export XML. Each stdio session uses its canonical launch directory as the managed workspace by default, so the same registration follows Codex or Claude Code across repositories.

See agent client installation and operation for targeted installs, custom paths, updates, verification, the first safe BPMN workflow, and generic MCP-only setup. See installation troubleshooting for WSL, browser, registration-conflict, and recovery guidance.

make uninstall removes installer-owned program files, registrations, and skill copies but preserves diagrams by default.

Generic stdio setup

Clients other than Codex and Claude Code can launch the source checkout directly:

npm run build
npm start

npm run build emits the canonical ESM executable at dist/server/index.js. For a generic MCP client, configure command as the absolute result of command -v node and args as the absolute checkout path to dist/server/index.js. The server uses stdio, so it normally appears idle when started in a terminal.

To use the stable executable created by make install instead, obtain its absolute path from make doctor and configure it as command with an empty args array. Generic MCP clients receive the server's built-in workflow instructions but do not automatically discover the optional Agent Skill.

Install a packed release artifact

This repository currently documents an npm tarball install rather than assuming that bpmn-mcp is available from the public npm registry. A release producer can build the canonical CLI-only artifact from a source checkout:

artifact_dir=$(mktemp -d)
npm pack --pack-destination "$artifact_dir"

Install that tarball into a dedicated consumer directory and run its packaged executable:

consumer_dir=$(mktemp -d)
npm install --prefix "$consumer_dir" "$artifact_dir"/bpmn-mcp-*.tgz
"$consumer_dir/node_modules/.bin/bpmn-mcp"

For an MCP client, use the absolute value of $consumer_dir/node_modules/.bin/bpmn-mcp as command and an empty args array. The package is a CLI, not an importable JavaScript library.

Agent plugins and evaluations

The checkout contains Codex and Claude Code plugin metadata for development and release validation. Public marketplace installation is a later distribution path; no public marketplace entry is claimed here. Do not combine a development plugin with a same-named user MCP registration without first following the conflict checks.

The deterministic cross-client workflow evaluation is safe for development and CI:

npm run test:evaluations

Authenticated model runs are opt-in. Build first, then select one bounded case while iterating:

npm run build
npm run eval:codex -- --case direct-process-svg
npm run eval:claude -- --case direct-process-svg

The Codex adapter runs codex exec in a temporary project containing the canonical skill and a project-scoped stdio MCP configuration. The Claude adapter materializes the same cases as native claude plugin eval cases in a temporary plugin copy. Both set MCP_BPMN_DIAGRAMS_PATH to a temporary directory, copy only declared setup fixtures there, and remove the directory afterward; they never read, overwrite, or delete diagrams from the user's real store. Omit --case to run the complete corpus. These commands can consume model quota and are intentionally excluded from npm run check and CI.

Optional CommonJS bundle

The CommonJS bundle is a separate source-checkout build and is not produced by npm run build or included in the canonical npm tarball:

npm run build:bundle
npm run start:bundle

📚 API Reference

Stateful Context Management

MCP-BPMN uses a stateful API design where you work with one diagram at a time. All operations apply to the current diagram context, eliminating the need for processId parameters.

Advertised tool matrix

The headings in this API reference enumerate every tool returned by tools/list. The executable parity baseline is tests/contracts/engine-contract.test.ts, with focused behavior in the unit, integration, and end-to-end suites.

Each advertised tool also includes the standard MCP readOnlyHint, destructiveHint, idempotentHint, and openWorldHint annotations. These annotations describe observable server behavior: authoring calls auto-save, replacement and deletion calls may destroy existing state, and all operations stay within the configured local diagram store. MCP annotations are advisory hints, not an authorization boundary; clients must still apply their own trust and approval policies.

Area

Advertised tools

Tested scope and boundary

Context creation/import

new_bpmn, new_from_mermaid, open_bpmn, open_mermaid_file

Process or collaboration roots; documented Mermaid subset; imports must fit the server's canonical model

Context lifecycle

save, save_as, close, current

One active diagram and filename; local atomic persistence

Authoring

add_event, add_activity, add_gateway, add_data_object, add_text_annotation, add_pool, add_lane

The explicit schema enums and typed properties below, not arbitrary BPMN elements or extension attributes

Relationships

connect, add_association

connect authors a sequence flow within one process, or a message flow across participants of a collaboration; associations are artifact relationships

Query/mutation

list_elements, get_element, list_connections, get_connection, update_element, update_connection, update_element_geometry, update_connection_geometry, apply_geometry_patch, route_connection, delete_element

Paginated queries, typed semantic updates, guarded BPMNShape/BPMNEdge geometry updates, and proposal-first local rerouting

Bulk authoring

build_process

Many nodes and the flows between them in one atomic call, using caller-chosen ref names; the same per-element validation applies

Export/quality

export, save_svg, save_png, validate, analyze_geometry, auto_layout

XML or browser-backed SVG export; managed SVG/PNG artifact persistence; structural and geometry diagnostics; left-to-right or top-to-bottom layout

Workspace and stored files

get_workspace, select_workspace, list_diagrams, delete_diagram_file, get_diagrams_path

Per-session repository discovery and sandboxed access inside the selected workspace; rendered artifacts remain separate from managed BPMN listings; get_diagrams_path is a compatibility alias

Creation Tools

new_bpmn

Create a new BPMN process or collaboration diagram and set it as the current context.

{
  name: "Order Processing",
  filename: "order-processing.bpmn", // optional; see Diagram filenames
  type: "process" // or "collaboration" (optional, defaults to "process")
}

Omitting filename is safe: the server generates a placeholder name for autosave and save_as removes it when you pick a real one. See Diagram filenames.

new_from_mermaid

Create a new BPMN diagram from Mermaid code and set it as the current context.

{
  name: "My Process",
  filename: "my-process.bpmn", // optional; see Diagram filenames
  mermaidCode: "graph TD\n  A[Start] --> B[Task] --> C[End]"
}

Mermaid conversion intentionally supports a focused flowchart subset:

Mermaid construct

BPMN mapping

[Task]

Task (the exact labels Start/Begin and End/Stop/Finish become events)

((Event))

Start/end event when topology identifies one; otherwise intermediate throw event

{Decision}

Exclusive gateway

[/Subprocess/]

Subprocess

[[Data]]

Standalone data object reference linked to a backing data object

`-->

Label

subgraph id[Name]

Participant with its own process; cross-subgraph edges become message flows

When any subgraph is present, every node must belong to exactly one top-level subgraph. Nested subgraphs and sequence-flow connections to data nodes are rejected before BPMN export. Styling, click handlers, CSS classes, and dotted edge appearance are not represented in BPMN; accepted lossy syntax returns a conversion warning. Text labels and subgraph names are XML-escaped and round-trip through BPMN unchanged.

preview_mermaid

Dry-run the same conversion and report what each node and edge became, without creating a diagram, writing a file, or replacing the current context. Use it to check an ambiguous node before committing to new_from_mermaid.

{
  mermaidCode: "flowchart TD\n  A((Start)) --> B[Review] --> C{Approved?}"
}

The result lists every node as { mermaidId, elementId, type, name, ownerId }, every edge as { connectionId, type, sourceId, targetId, label } with its sequence- or message-flow classification, the pools each subgraph produced, and the conversion warnings. Layout is skipped: the preview answers what each node became, not where it will sit.

Mermaid has no form for parallel or inclusive gateways, user or service tasks, or message and timer events. Import first, then create or adjust those with add_gateway, add_activity, and add_event.

File Operations

open_bpmn

Open an existing BPMN file and set it as the current context.

{
  filename: "my-process.bpmn"
}

open_mermaid_file

Open and convert a Mermaid file to BPMN, setting it as the current context.

{
  filename: "my-flowchart.mmd",
  bpmnFilename: "my-flowchart.bpmn" // optional; names the converted diagram
}

save

Atomically save the current diagram to its active file. New and opened diagrams already have an active filename, and successful mutations autosave to that same file.

{}

save_as

Atomically save the current diagram with a new filename and make that filename active. Later mutations update only the new file.

If the previous filename was a server-generated placeholder, it is deleted so the diagram does not exist twice; the result reports previousFilename and removedPreviousFile. A filename you chose yourself is kept as an unchanged snapshot. See Diagram filenames.

{
  filename: "my-process.bpmn"
}

close

Close the current diagram and clear the context.

{}

current

Get information about the current diagram.

{}

Element Manipulation Tools

add_event

Add events (start, end, intermediate, boundary) to the current diagram.

{
  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 definitions require timer: { type: "timeDate" | "timeDuration" | "timeCycle", expression, language? }; conditional definitions require condition: { expression, language? }. Error and escalation references may also include code. Compensation throws may include activityRef and waitForCompletion; compensation boundary events are non-interrupting.

add_activity

Add activities (tasks, subprocesses) to the current diagram.

{
  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}"
  }
}

New BPMN and Mermaid-authored documents accept extensionProfile: "portable" | "camunda7"; the default is portable. Portable mode rejects the three vendor fields and emits no vendor namespace. Camunda updates accept null for any of them to remove the corresponding XML attribute. Candidate group entries cannot contain commas. Imported BPMN detects actual Camunda namespace use and preserves other warning-free extensions opaquely.

Call activities serialize as bpmn:callActivity. Their optional properties.calledElement is a lexical BPMN QName identifying the callable element; it is not required to match a process ID in the current diagram.

Activities may use standard BPMN multi-instance loop characteristics. Set isSequential to false for parallel instances or true for sequential instances:

{
  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
    }
  }
}

The server preserves expression bodies exactly and serializes them as BPMN FormalExpression values. It does not parse or evaluate them, so choose a language/profile supported by the BPMN engine that will execute the exported diagram. The loop data references must identify existing BPMN ItemAwareElement instances; the portable schema does not emit a vendor-specific collection attribute. Vendor-specific binding or version attributes are not emitted by the portable BPMN dialect.

{
  activityType: "callActivity",
  name: "Invoke fulfillment",
  properties: { calledElement: "FulfillmentProcess" }
}

add_gateway

Add gateways for branching logic to the current diagram.

{
  gatewayType: "exclusive", // exclusive, parallel, inclusive, eventBased, complex
  name: "Payment Check",
  position: { x: 400, y: 200 } // optional
}

add_data_object

Add a visible bpmn:dataObjectReference and its linked, non-rendered bpmn:dataObject. Collection state belongs to the backing object. An optional itemSubjectRef must identify an existing bpmn:itemDefinition, such as one loaded from an imported diagram.

{
  name: "Order records",
  position: { x: 400, y: 320 }, // optional reference position
  isCollection: true, // optional, defaults to false
  itemSubjectRef: "ItemDefinition_Order" // optional existing definition ID
}

Data input/output associations are activity-owned BPMN constructs and are not created by add_association, which remains the generic artifact association.

add_text_annotation

Add a BPMN text annotation. Text is preserved exactly, including line breaks and XML metacharacters. textFormat defaults to BPMN's text/plain; position and size default to the engine's annotation geometry. Supplying associatedElementId also creates a separate, undirected BPMN association from the annotation to that 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

Connect two elements in the current diagram. Endpoints in the same process and scope get a sequence flow; endpoints belonging to different participants of a collaboration, black-box pools included, get a message flow. The connection type follows from the endpoints, so there is no type argument.

{
  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
}

Conditions and defaults are supported for activities and exclusive, inclusive, or complex gateways. A default flow cannot also have a condition, and neither applies to a message flow. The result reports the connectionType that was created, so a caller can confirm which kind it got.

add_association

Add a BPMN association artifact between two BaseElements in a compatible process or collaboration scope. This is distinct from sequence and message flows. associationDirection defaults to BPMN's None value.

{
  sourceId: "TextAnnotation_1",
  targetId: "UserTask_1",
  associationDirection: "One" // None, One, or Both
}

add_pool

Add a pool (participant) to a collaboration diagram.

{
  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

Add a lane to a white-box pool and assign direct process flow nodes to it. Nodes already assigned to another lane are moved to the new lane.

{
  poolId: "Participant_1",
  name: "Sales Department",
  flowNodeIds: ["StartEvent_1", "UserTask_1"],
  position: "bottom" // optional
}

Query and Manipulation Tools

list_elements

List a stable, ID-ordered page of elements and association artifacts in the current diagram. Filter with elementType: "bpmn:Association" to list only associations.

{
  elementType: "bpmn:Task", // optional filter
  limit: 100, // optional, defaults to 100; maximum 500
  offset: 0 // optional, defaults to 0
}

The response is { count, returnedCount, offset, limit, hasMore, elements, revision }. Compatibility note: the pagination envelope replaces the earlier bare-array response; clients written against that contract must now read elements. The existing element fields retain their meanings. Rendered elements also expose shapeId, bounds, and optional labelBounds; additional metadata fields and lane entries may be present.

get_element

Get details of a specific element or association.

{
  elementId: "UserTask_1"
}

list_connections

List a stable, ID-ordered page of SequenceFlow, MessageFlow, and Association connections. Optional filters select a connection type, endpoint, owner, or scope. Each result includes semantic fields, BPMN DI waypoints, and the current semantic, geometry, and document revisions.

{
  connectionType: "bpmn:MessageFlow", // optional
  sourceId: "SendTask_1", // optional
  limit: 100,
  offset: 0
}

get_connection

Get the complete semantic and rendered geometry state for one SequenceFlow, MessageFlow, or Association. Use the returned revisions as compare-and-set guards for connection mutations and routing.

{
  connectionId: "Flow_1"
}

update_element

Update element properties.

{
  elementId: "UserTask_1",
  name: "Updated Task Name",
  properties: { assignee: "john.doe", candidateGroups: ["reviewers"] },
  defaultFlow: "Flow_2" // outgoing flow ID, or null to clear
}

update_connection

Update SequenceFlow, MessageFlow, or Association semantics without replacing the connection ID. Labels may be cleared with null; SequenceFlow conditions may be replaced or cleared, default ownership may be toggled, and Association direction may be changed. Supply either the semanticRevision returned by get_connection or the current document revision. Changing either endpoint requires explicit snap-to-boundary, which validates and attaches the retained route to the new endpoint shapes before the atomic autosave.

{
  connectionId: "Flow_1",
  targetId: "Task_3", // optional
  label: "Approved", // optional; null clears
  condition: { body: "${approved}", language: "FEEL" }, // null clears
  isDefault: false, // SequenceFlow only
  endpointPolicy: "snap-to-boundary", // required when an endpoint changes
  expectedSemanticRevision: "sha256:...",
  collisionPolicy: "reject-new" // or "warn" / "allow"
}

update_element_geometry

Move or resize one rendered element with atomic autosave. Connected shapes require incidentConnectionPolicy; use snap-endpoints to keep incident edges attached or reject to refuse the change. Newly introduced collisions are rejected unless collisionPolicy: "allow" is explicit. Use dryRun to receive the proposed before/after geometry and diagnostics without changing the file.

{
  elementId: "UserTask_1",
  bounds: { x: 420, y: 180, width: 120, height: 90 },
  labelBounds: { x: 430, y: 275, width: 100, height: 20 }, // optional; null clears
  expectedBounds: { x: 300, y: 180, width: 100, height: 80 }, // optional CAS guard
  expectedRevision: "sha256:...:v4", // optional optimistic-concurrency guard
  collisionPolicy: "reject", // or "allow"; defaults to "reject"
  incidentConnectionPolicy: "snap-endpoints", // required for connected moves/resizes
  dryRun: false
}

update_connection_geometry

Replace all waypoints for one rendered connection with atomic autosave. Exact endpoints must already attach to the source and target boundaries; snap-to-boundary adjusts both endpoints while preserving interior waypoints. Omitting labelBounds preserves the edge label and null clears it. Use either expectedWaypoints or the geometryRevision returned by get_connection as a compare-and-set guard. Newly introduced error diagnostics are rejected by default; warn and allow apply while returning the resulting diagnostics.

{
  connectionId: "Flow_1",
  waypoints: [{ x: 200, y: 140 }, { x: 300, y: 140 }, { x: 400, y: 140 }],
  labelBounds: null, // optional; omission preserves the current BPMNLabel
  expectedGeometryRevision: "sha256:...", // optional geometry CAS guard
  expectedRevision: "sha256:...:v5", // optional document CAS guard
  endpointPolicy: "exact", // or "snap-to-boundary"; defaults to "exact"
  collisionPolicy: "reject-new", // or "warn" / "allow"
  dryRun: false
}

apply_geometry_patch

Update up to 256 rendered elements and connections in one atomic commit. The server applies every shape, label, and route update to a private candidate, then evaluates diagnostics against that complete final geometry. Supply either expectedRevision for the whole patch or per-object before guards. Any stale guard, invalid final geometry, rejected diagnostic, or save failure leaves both memory and disk unchanged.

{
  expectedRevision: "sha256:...:v6",
  elementUpdates: [{
    elementId: "UserTask_1",
    bounds: { x: 500, y: 180, width: 120, height: 90 },
    labelBounds: { x: 510, y: 275, width: 100, height: 20 }
  }],
  connectionUpdates: [{
    connectionId: "Flow_1",
    waypoints: [{ x: 200, y: 140 }, { x: 500, y: 225 }],
    endpointPolicy: "exact"
  }],
  collisionPolicy: "reject-new", // or "warn" / "allow"
  dryRun: false
}

route_connection

Generate ranked orthogonal routing candidates for one SequenceFlow, MessageFlow, or Association. The default is proposal-only: memory, disk, and the document revision remain unchanged. The returned geometryPatch can be passed directly to apply_geometry_patch. Set apply: true to commit the best collision-free candidate in one atomic autosave. The router scores shape and label collisions, clearance failures, crossings with existing connections, bends, and length while preserving every unrelated DI object.

{
  connectionId: "Flow_1",
  avoidElementIds: ["Task_Obstacle"],
  avoidConnectionIds: ["Flow_Existing"],
  clearance: 20,
  preserveOtherGeometry: true,
  expectedGeometryRevision: "sha256:...", // optional geometry CAS guard
  apply: false // proposal-only by default
}

If no acceptable route exists, the tool returns a routing_failed error with ranked candidate geometry, score breakdowns, and diagnostics without mutation.

build_process

Create many elements and the flows between them in one atomic call. Each node carries a caller-chosen ref that flows in the same request use to name it; the server assigns the real BPMN IDs and returns the mapping. A flow endpoint that is not a ref is treated as the ID of an element already in the diagram. The same validation applies as for the individual add_* and connect tools, and nothing is written unless every step succeeds. Run auto_layout afterwards to place the result.

{
  nodes: [
    { kind: "event", ref: "start", eventType: "start", name: "Request received" },
    { kind: "activity", ref: "review", activityType: "userTask", name: "Review" },
    { kind: "gateway", ref: "decide", gatewayType: "exclusive", name: "Approved?" },
    { kind: "activity", ref: "pay", activityType: "serviceTask", name: "Pay" },
    { kind: "event", ref: "done", eventType: "end", name: "Done" }
  ],
  flows: [
    { source: "start", target: "review" },
    { source: "review", target: "decide" },
    { source: "decide", target: "pay", label: "yes", condition: "${approved}" },
    { source: "decide", target: "done", label: "no", isDefault: true },
    { source: "pay", target: "done" }
  ]
}

Returns elements (each with its ref, assigned elementId and BPMN type), connections, and the usual revision fields.

delete_element

Delete an element and its incident connections. Passing an association ID deletes only that association and leaves its endpoints intact; deleting an endpoint, including a text annotation, cascades to its associations.

{
  elementId: "Task_1"
}

Utility Tools

export

Export the current diagram as BPMN 2.0 XML or a rendered SVG.

{
  format: "xml", // "xml" or "svg"; defaults to "xml"
  formatted: true // optional; applies to XML and defaults to true
}

XML export returns text and does not launch a browser. SVG export launches a headless browser through Puppeteer, renders with bpmn-js, sanitizes the result, and returns an embedded image/svg+xml resource. It requires an available Chrome/Chromium executable and retains the visible bpmn.io attribution described under License.

save_svg

Render the current diagram and atomically persist a separate SVG artifact in the managed workspace. The required filename must use the .svg extension. Existing files are preserved unless overwrite is explicitly true.

{
  filename: "order-review.svg",
  overwrite: false // optional; defaults to false
}

SVG artifacts use the same sanitization and visible bpmn.io attribution as export.

save_png

Render the current diagram and atomically persist a separate PNG artifact in the managed workspace. The required filename must use the .png extension. Existing files are preserved unless overwrite is explicitly true.

{
  filename: "order-review.png",
  overwrite: false, // optional; defaults to false
  scale: 1 // optional pixel density, 1 to 4; defaults to 1
}

PNG is rasterized from the same sanitized SVG that save_svg writes. scale becomes the browser's device pixel ratio, so text and strokes are resampled rather than stretched. The result reports width, height, scale, and downscaled; a diagram whose raster would exceed 4,096 px on a side or 16 million pixels is reduced below the requested scale and says so instead of shrinking silently.

Both tools render from the active BPMN snapshot without changing its XML, revision, or active .bpmn filename. Rendered output is capped at 5 MiB by default and can be configured with MCP_BPMN_MAX_ARTIFACT_BYTES. Filenames are basename-only and traversal-safe. list_diagrams and delete_diagram_file continue to operate only on BPMN XML files, keeping diagram and rendered-artifact operations explicit.

validate

Validate the current diagram structure.

{
  level: "full" // "syntax", "semantic", or "full"; defaults to "full"
}

Validation levels are cumulative. syntax parses XML and resolves references; semantic adds owner-aware event, flow, subprocess, lane, and collaboration rules; full also adds executable-profile start/end/connectivity guidance.

analyze_geometry

Inspect the whole diagram or selected element and connection IDs for missing DI, endpoint gaps, overlaps, crossings, containment failures, minimum clearance, and optional non-orthogonal routes. The response includes stable severity-coded diagnostics, a summary, and the relevant shapes, edges, and labels.

{
  elementIds: ["DataObjectReference_1"], // optional
  connectionIds: ["MessageFlow_1"], // optional
  clearance: 5,
  tolerance: 1,
  requireOrthogonal: true
}

auto_layout

Apply automatic layout to position elements in the current diagram.

{
  algorithm: "horizontal", // currently only horizontal is supported
  direction: "left-to-right" // or "top-to-bottom"
}

direction chooses the reading direction. top-to-bottom reflects the ranked layout across the diagonal: flows run downward, pools become vertical bands, and edge endpoints are re-docked onto the borders they now face. There are no spacing, subset, or pinned-element controls yet, so every coordinate the layout touches is replaced.

A layout that reproduces the geometry the diagram already has is not committed. The call returns changed: false, leaves the revision alone, and does not rewrite the file, so running auto_layout twice is free the second time.

Layout runs in a killable subprocess with a default five-second budget. A benchmark-derived preflight accepts at most 2,000 elements, 2,000 connections, and 10 connections per element; inputs over any limit reject before layout. For collaborations, each participant process is ranked independently, so message flows do not change its sequence-flow order. Auto-layout replaces manual node and container coordinates, but requested/imported participant and lane dimensions remain lower bounds. Pools are then stacked without overlap; lanes and owned nodes remain contained, and message flows are routed only after the final pool placement. Disconnected nodes are packed deterministically in their owner process, nested subprocesses retain semantic containment, and black-box participants keep their requested minimum size without fabricated process content.

File Management Tools

list_diagrams

List a stable, filename-ordered page of saved BPMN diagrams.

{
  limit: 100, // optional, defaults to 100; maximum 500
  offset: 0 // optional, defaults to 0
}

The existing { count, diagrams, path } response fields remain available; returnedCount, offset, limit, and hasMore describe the selected page. Only files on the selected page are read for embedded BPMN metadata, and the aggregate metadata read is capped at 5 MiB by default.

delete_diagram_file

Delete a saved diagram file.

{
  filename: "old-process.bpmn"
}

get_diagrams_path

Get the current workspace path. This compatibility alias predates the richer workspace discovery response.

{}

get_workspace

Report the canonical launch cwd, immutable startup boundary, current workspace, and whether it came from the environment, repository config, launch cwd, or a session selection.

{}

select_workspace

Select another workspace below the startup boundary for this stdio session. Changing workspaces closes the active diagram; successful prior mutations are already autosaved.

{
  path: "wiki/processes/assets"
}

🔄 Context Management

The MCP-BPMN server uses a stateful design where you work with one diagram at a time:

  1. Create or Open: Start by creating a new diagram (new_bpmn, new_from_mermaid) or opening an existing one (open_bpmn, open_mermaid_file)

  2. Manipulate: All operations (add_event, connect, etc.) apply to the current diagram

  3. Save: Save your work with save or save_as

  4. Close: Close the current diagram with close

If you try to perform operations without a current context, you'll get a helpful error message:

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

💡 Examples

Example 1: Creating an Approval Process from Scratch

// Step 1: Create a new process (sets it as current context)
await new_bpmn({ name: "Approval Workflow" });

// Step 2: Add elements. Every add_* result carries the generated `elementId`;
// keep it instead of guessing. IDs come from per-type session counters, and a
// rejected call still consumes a number, so "StartEvent_1" only holds on a
// server that has never failed a call.
const start = await add_event({ eventType: "start", name: "Request Received" });
const review = await add_activity({ activityType: "userTask", name: "Review Request" });
const decision = await add_gateway({ gatewayType: "exclusive", name: "Approved?" });
const approve = await add_activity({ activityType: "serviceTask", name: "Process Approval" });
const reject = await add_activity({ activityType: "userTask", name: "Handle Rejection" });
const complete = await add_event({ eventType: "end", name: "Complete" });

// Step 3: Connect elements using the returned IDs
await connect({ sourceId: start.elementId, targetId: review.elementId });
await connect({ sourceId: review.elementId, targetId: decision.elementId });
await connect({ sourceId: decision.elementId, targetId: approve.elementId, label: "Yes" });
await connect({ sourceId: decision.elementId, targetId: reject.elementId, label: "No" });
await connect({ sourceId: approve.elementId, targetId: complete.elementId });
await connect({ sourceId: reject.elementId, targetId: complete.elementId });

// 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();
// 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: Look up the imported IDs before editing. Mermaid node keys become the
// ID suffix, and every Mermaid box becomes a plain `bpmn:Task`, so this import
// yields StartEvent_A, Task_B, Gateway_C, Task_D, Task_E, and EndEvent_F.
const { elements } = await list_elements({});
const review = elements.find(element => element.name === "Review Request");

// `assignee` is rejected on `bpmn:Task` ("assignee is only valid on
// bpmn:UserTask"), so rename here and add a real user task with add_activity
// when you need user-task properties.
await update_element({
  elementId: review.id,
  name: "Review Request (SLA 2 days)"
});

// Step 4: Save and export
await save_as({ filename: "approval-workflow.bpmn" });
const xml = await export();

Example 3: Working with Multiple Diagrams

// 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", ... }

🗂️ File Storage

BPMN diagrams are automatically saved in the canonical directory from which the MCP client launched the stdio child. A repository may narrow storage to a relative descendant with .mcp-bpmn.json:

{
  "path": "wiki/processes/assets"
}

Dot segments, absolute repository-config paths, and symlink traversal are rejected. Use get_workspace to inspect the launch cwd, immutable startup boundary, current workspace, and resolution source. select_workspace may narrow the current session to another relative descendant and closes the active diagram when the workspace changes; it never changes the Node process cwd.

An explicit absolute environment override remains available for clients that do not propagate the intended repository cwd:

export MCP_BPMN_DIAGRAMS_PATH=/custom/path

src/config/index.ts defines every other supported variable. This is the complete set the server reads at runtime (MCP_BPMN_LAYOUT_CANDIDATES, listed under Development, is a test-suite flag and has no effect on the server):

Variable

Effect

Default

MCP_BPMN_DIAGRAMS_PATH

Absolute workspace override; must have no dot segments

launch cwd

MCP_BPMN_MAX_IMPORT_BYTES

Largest accepted BPMN import

5 MiB

MCP_BPMN_MAX_IMPORT_ELEMENTS

Elements accepted per import

10,000

MCP_BPMN_MAX_IMPORT_FLOWS

Flows accepted per import

20,000

MCP_BPMN_MAX_IMPORT_DI_ELEMENTS

DI elements accepted per import

30,000

MCP_BPMN_MAX_MERMAID_BYTES

Largest accepted Mermaid input

5 MiB

MCP_BPMN_MAX_ARTIFACT_BYTES

Largest rendered SVG/PNG written by save_svg/save_png

5 MiB

MCP_BPMN_MAX_LAYOUT_ELEMENTS

Elements accepted per layout

2,000

MCP_BPMN_MAX_LAYOUT_CONNECTIONS

Connections accepted per layout

2,000

MCP_BPMN_MAX_LAYOUT_DENSITY

Connections per element accepted per layout

10

MCP_BPMN_MAX_LAYOUT_BYTES

Largest XML handed to the layout subprocess

5 MiB

MCP_BPMN_MAX_CONCURRENT_LAYOUTS

Simultaneous layout subprocesses

2

MCP_BPMN_MAX_LISTING_ITEMS

Directory entries scanned by list_diagrams

10,000

MCP_BPMN_MAX_LISTING_METADATA_BYTES

Total diagram bytes read for listing metadata

5 MiB

MCP_BPMN_LAYOUT_TIMEOUT_MS

Layout subprocess deadline

5,000 ms

MCP_BPMN_SHUTDOWN_TIMEOUT_MS

Graceful shutdown deadline

15,000 ms

MCP_BPMN_BROWSER_ARGS

Space-separated list that replaces the Chrome command line used for SVG/PNG rendering

--no-sandbox --disable-setuid-sandbox under uid 0, otherwise none

A numeric variable that is not a positive number — a typo, 0, or a negative value — is ignored and the default applies, so a malformed override can never disable a limit. Read the defaults from src/config/index.ts rather than pinning them in deployment documentation. The layout defaults come from local sparse/dense benchmarks recorded in that file: 2,000/1,999 completed in about 1.4s, 25/300 took about 4.8s, and 26/325 exceeded five seconds.

On SIGINT, SIGTERM, or stdin EOF, the server stops accepting tool calls and allows accepted operations and their atomic persistence to finish before it closes renderer/layout subprocesses and the stdio transport. Graceful shutdown has a hard 15-second deadline; exceeding it forces a nonzero exit.

Diagram filenames

Each diagram has exactly one active filename, and every successful mutation serializes and atomically autosaves to it. A failed serialization or write leaves both memory and disk at the last successful state.

new_bpmn, new_from_mermaid, and open_mermaid_file all accept an optional filename (filename, or bpmnFilename on open_mermaid_file). Pass one and that name is the active filename from the first autosave; a name with no extension gets .bpmn appended.

Omit it and the server generates a placeholder name instead, so that autosave has somewhere to write before you have chosen a name. The placeholder is not meant to be read by a human:

mcp-bpmn-v1_<base64url of ["<processId>","<name>","<uuid>"]>.bpmn

Encoding the metadata is what lets list_diagrams report the exact process ID and name without opening the file. If that encoded name would exceed 200 bytes, the server falls back to {processId}_{sanitizedName}_{uuid}.bpmn; the 200-byte ceiling leaves room for the atomic-write suffix inside one 255-byte filesystem component.

save_as adopts the name you give it and deletes the placeholder it replaces, so a diagram that started unnamed does not leave an orphan duplicate behind. Its result reports previousFilename and removedPreviousFile. A filename you chose yourself is never deleted on your behalf: calling save_as on a named diagram leaves the previous file in place as an unchanged snapshot. Opening a file adopts that file's name, which is likewise never a placeholder.

🏗️ Architecture

Technology Stack

  • TypeScript - Type-safe development

  • Node.js - Runtime environment

  • MCP SDK - Model Context Protocol implementation

  • Jest - Testing framework

Key Components

  • SimpleBpmnEngine (src/core/) - Canonical BPMN document mutation, persistence, and XML export

  • BpmnDocument (src/core/) - Typed, moddle-backed model and XML serialization

  • BpmnValidator (src/core/) - Syntax, semantic, and full validation levels

  • BpmnSvgRenderer (src/core/) - Isolated, browser-backed bpmn-js SVG rendering

  • DiagramContext (src/core/) - Stateful context management for current diagram

  • BpmnAutoLayoutV2Adapter (src/core/layout/) - The one layout path; runs bpmn-auto-layout in a bounded subprocess

  • BpmnRequestHandler (src/server/) - MCP request validation and dispatch

  • MermaidConverter / MermaidParser (src/converters/) - Mermaid to BPMN conversion

  • WorkspaceSession (src/config/) - Launch cwd, startup boundary, and workspace selection

  • FileManager / SafeFileStore (src/utils/) - Bounded, atomic, root-pinned file operations

Project Structure

mcp-bpmn/
├── src/
│   ├── core/           # BPMN engine, document model, validator, renderer
│   │   └── layout/     # Layout model, adapters, connection routing
│   ├── converters/     # Mermaid parsing and conversion
│   ├── server/         # MCP server, tool schemas, request handlers
│   ├── utils/          # IDs, type mappings, safe file access
│   ├── types/          # TypeScript type definitions
│   └── config/         # Configuration and workspace resolution
├── tests/
│   ├── unit/          # Component tests grouped by source area
│   ├── integration/   # Cross-component behavior
│   ├── contracts/     # Engine and tool-annotation contracts
│   ├── security/      # Adversarial boundary and resource tests
│   ├── e2e/           # Built MCP server protocol tests
│   ├── fixtures/      # BPMN, Mermaid, dialect, and layout inputs
│   ├── helpers/       # Shared test helpers
│   └── mocks/         # Jest/runtime mocks
├── dist/              # Compiled output
└── docs/              # Documentation

🧪 Development

Available Scripts

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             # Source-level tests, then the renderer suite
npm run test:all     # Clean, build, and run every suite including e2e and the loop tests
npm run test:unit    # Unit tests only
npm run test:integration # Integration tests, then the renderer suite
npm run test:e2e     # Clean, build, and run the compiled MCP server tests
npm run test:package # Pack, install, and initialize the published entry points
npm run lint         # Run ESLint
npm run dev          # Development mode with hot reload
npm start            # Start the MCP server

Two suites are excluded from the everyday loop and run only when asked for, or as part of npm run test:all:

npm run test:layout-candidates # Compare the shipped layout against the dev-only alternatives
npm run test:ralph             # Integration tests for ralph-loop/loop.sh

npm test still exercises the shipped layout path across the whole fixture corpus; only the third-party comparison candidates, which cost roughly 54 extra Node subprocesses, are gated behind test:layout-candidates.

Testing

Source-level commands do not read dist/, so an old build cannot affect their result. The suites are:

  • Unit (tests/unit/) - component tests grouped by source area

  • Integration (tests/integration/) - cross-component behavior

  • Contracts (tests/contracts/) - the engine and tool-annotation contracts

  • Security (tests/security/) - adversarial boundary and resource tests

  • E2E (tests/e2e/) - the built MCP server over the protocol

  • Renderer (npm run test:renderer) - real Puppeteer/Chrome rendering

Run tests with:

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

📈 Performance

The canonical release artifact was last measured on 2026-09-04 with Node 22.22.2 and npm 10.9.7 using:

npm pack --dry-run --json

That command reported approximately 410 kB compressed, 2,353,180 unpacked bytes, and 153 files. Most of the unpacked size is not executable code: .js accounts for about 811 kB, TypeScript declarations for about 354 kB, and source maps (.js.map plus .d.ts.map) for about 798 kB together, all emitted because tsconfig.json compiles the whole of src/**/*.

Measure it after a build: npm pack reports only the files that exist, so running it against a cleaned dist/ reports a fraction of the real artifact.

These figures describe the npm tarball, not an installed server: the tarball bundles no production dependencies, while installation resolves the nine direct runtime dependencies in package.json and their transitive dependencies. Puppeteer's managed browser download (see Browser download) is also outside the tarball measurement, and it is far larger than the tarball itself. Re-run the command for the current artifact instead of treating this dated snapshot as a permanent size guarantee.

The optional CommonJS bundle is not the release artifact and has no size claim. Layout input limits and the dated benchmark observations used to choose their defaults are documented under File Storage.

🐛 Known Limitations

  • The authoring API is a focused BPMN 2.0 subset, not complete BPMN 2.0 coverage. Unsupported imported constructs can be rejected rather than edited losslessly.

  • connect infers the connection type from its endpoints rather than taking one. There is no way to ask for a message flow between two nodes that a collaboration would otherwise join with a sequence flow.

  • add_lane authors top-level lanes in white-box pools; it cannot extend an imported nested lane hierarchy.

  • Auto-layout ranks left to right, optionally reflected top to bottom. There are no spacing, subset, or pinned-element controls, and radial algorithms are not advertised.

  • Validation provides the documented syntax, semantic, and full guidance levels; it is not BPMN XSD certification or validation against a deployment engine.

  • The Camunda 7 authoring profile is limited to assignee, candidateGroups, and dueDate on user tasks. It is not general Camunda modeler coverage.

  • SVG export and managed SVG/PNG artifact rendering require Chrome/Chromium through Puppeteer and permit only one concurrent render per server instance. XML workflows remain browser-free.

  • The server does not execute, simulate, or deploy BPMN processes.

🚧 Roadmap

Planned work and known gaps are tracked as Beads issues rather than promised as implemented features in this release document.

🤝 Contributing

Contributions are welcome! Please:

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Run the complete quality gate (npm run check)

  4. Commit your changes (git commit -m 'Add amazing feature')

  5. Push to the branch (git push origin feature/amazing-feature)

  6. Open a Pull Request

Code Style

  • TypeScript with strict mode

  • ESLint configuration provided

  • Jest for testing

  • Conventional commits

📝 License

MIT License - see LICENSE file for details.

SVG export and saved SVG/PNG artifacts use bpmn-js@17.11.1. Every exported or saved artifact includes the visible "Powered by bpmn.io" logo linked to https://bpmn.io; clients should not crop, cover, or remove that attribution. See THIRD_PARTY_NOTICES.md for the dependency's license terms and ADR 0002 for the release decision.

📞 Support

  • Issues: GitHub Issues

  • Documentation: See /docs folder for detailed guides

🙏 Acknowledgments

Available Tools

27 tools
add_activityC

Add an activity to the current diagram

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the activity
ownerIdNoOwning process ID (required when adding to a collaboration)
scopeIdNoContaining process or subprocess ID (defaults to ownerId)
positionNoPosition of the activity (optional)
propertiesNoTyped activity properties. multiInstance is portable BPMN and its expression bodies are opaque text; assignee, candidateGroups, and dueDate are Camunda 7 user-task fields and require extensionProfile camunda7. Arbitrary qualified names and raw XML are rejected.
activityTypeYesType of activity

Output Schema

ParametersJSON Schema
NameRequiredDescription
filenameYesActive BPMN filename
elementIdYesStable generated or existing BPMN ID
elementTypeYes

TDQS

C2.2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide no substantive behavior (readOnlyHint=false, destructiveHint=false, etc.). The description does not disclose side effects, return values, or whether the diagram must be open. For a tool that mutates state, this is a major gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short phrase, but it adds little beyond the tool name. For a tool with six parameters and nested objects, this is under-specification rather than appropriate conciseness. Important context is missing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complex schema (activityType enum, properties, multiInstance, position), the description is woefully incomplete. It explains nothing about activity types, property usage, or how this fits into the diagram editing workflow. An agent gets no contextual help beyond the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%—every parameter has a description in the input schema. The tool description adds nothing about parameters, so the baseline of 3 applies. No additional semantic value is provided beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb-resource pair: 'Add an activity to the current diagram'. It is specific enough to distinguish from siblings like add_event or add_gateway, though it relies partly on the tool name. It is not a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool instead of alternatives such as add_event or add_gateway. There are no prerequisites, exclusions, or context clues beyond the bare action. An agent must infer usage solely from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_associationC

Add a BPMN association artifact between two compatible BaseElements

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceIdYesID of the source BaseElement
targetIdYesID of the target BaseElement
associationDirectionNoArrow direction for the association; BPMN defaults to NoneNone

Output Schema

ParametersJSON Schema
NameRequiredDescription
filenameYesActive BPMN filename
sourceIdYesStable generated or existing BPMN ID
targetIdYesStable generated or existing BPMN ID
associationIdYesStable generated or existing BPMN ID
associationDirectionYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide no hints (all false), so the description carries the full burden. It states the action ('Add') but does not disclose side effects, such as whether both elements must exist, what happens if they are incompatible, or whether the association is reversible. The description mentions 'compatible' but never explains what that entails, leaving the agent to guess.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no redundancy. 'Add a BPMN association artifact' immediately conveys the purpose, and the scope is appended succinctly. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's mutation nature (readOnlyHint=false) and lack of annotation support, the description is too sparse. The critical notion of 'compatible' is undefined, and there is no mention of where associations fit in the BPMN model or how they differ from other connections. An agent without deep BPMN domain knowledge would struggle to use this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds no additional parameter context beyond what the schema already provides ('ID of the source BaseElement', etc.). The direction parameter is documented in the schema with its default, so the description does not need to repeat it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Add') and resource ('BPMN association artifact') with a scope ('between two compatible BaseElements'). It distinguishes itself from other add_* tools by naming the association artifact. However, the term 'compatible' is ambiguous and does not specify what types of elements are compatible, slightly diminishing clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives like 'connect' (which likely handles sequence/message flows) or other add_* tools. The description does not mention exclusions, prerequisites, or when an association is appropriate. An agent must infer context from the sibling names, which is insufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_data_objectB

Add a BPMN data object reference and its non-rendered backing data object

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the data object and its visible reference
ownerIdNoOwning process ID (required when adding to a collaboration with multiple pools)
scopeIdNoContaining process or subprocess ID (defaults to ownerId)
positionNoPosition of the visible data object reference
isCollectionNoWhether the backing bpmn:DataObject represents a collection
itemSubjectRefNoID of an existing bpmn:ItemDefinition referenced by the backing data object

Output Schema

ParametersJSON Schema
NameRequiredDescription
filenameYesActive BPMN filename
referenceIdYesStable generated or existing BPMN ID
dataObjectIdYesStable generated or existing BPMN ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are all false (not read-only, not idempotent, not destructive) but provide no positive behavioral signals. The description adds the key fact that it creates both a visible reference and a non-rendered backing object, which is useful. However, it does not disclose side effects, whether it can overwrite, or any other behavioral traits beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that front-loads the core action and the dual-artifact nature. It is appropriately sized with no wasted words, though it could add a brief usage note without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters, a nested object, and an output schema, the description is adequate but not rich. It explains the core purpose but omits guidance on collaboration edge cases (e.g., when ownerId is needed) or any preconditions. The schema and output schema compensate partly, but the description could do more.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add parameter-level meaning beyond the schema, but the dual-artifact framing helps understand how name/position relate. Since the schema already documents every parameter, no further compensation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Add') and a specific resource ('BPMN data object reference and its non-rendered backing data object'), clearly identifying what the tool does. It distinguishes this from other add_* tools by focusing on data objects, though it does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for adding data objects but does not provide explicit when-to-use or when-not-to-use guidance relative to sibling tools like add_event, add_activity, or add_gateway. The schema hint about ownerId being required in collaborations is useful but lives in the schema, not the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_eventC

Add an event to the current diagram

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName of the event
ownerIdNoOwning process ID (required when adding to a collaboration)
scopeIdNoContaining process or subprocess ID (defaults to ownerId)
attachToNoRequired activity ID for boundary events; invalid on other events. Cancel boundaries require a transaction.
positionNoPosition of the event (optional)
eventTypeYesType of event to add
cancelActivityNoWhether a boundary event interrupts its attached activity; compensation boundaries must be false
eventDefinitionNoEvent definition type. The event kind/type combination must be BPMN-legal.
eventDefinitionPayloadNoDefinition details. Timer requires timer; conditional requires condition. Message/signal/error/escalation roots are generated and may be named or assigned a stable ID here.

Output Schema

ParametersJSON Schema
NameRequiredDescription
filenameYesActive BPMN filename
elementIdYesStable generated or existing BPMN ID
elementTypeYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

All annotations are false, providing no safety or mutation hints, so the description carries the full burden of behavioral disclosure. The description only says 'Add', implying a mutation, but does not disclose side effects, required permissions, or failure modes (e.g., invalid eventType or BPMN constraints). This is inadequate for a complex modeling tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with zero wasted words. It is front-loaded and efficiently states the core purpose. However, given the tool's 9 complex parameters and nested objects, the description could arguably be slightly more informative, but it remains appropriately brief for a schema that is self-documenting.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the presence of an output schema and detailed parameter descriptions, the tool description provides no high-level context about event types (start, end, boundary, etc.), parameter interrelations, or common usage patterns. It fails to synthesize the schema's information into a usable mental model, leaving an agent without guidance on selecting appropriate configurations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with detailed descriptions for each parameter (e.g., `eventType` enum, `attachTo` conditions, `cancelActivity` rules). The description adds no parameter-level information, so it relies entirely on the schema, which is the baseline when coverage is high. No extra value is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool adds an event to the current diagram, specifying the verb (add), resource (event), and context (current diagram). This is distinct from sibling add_* tools because 'event' is a specific BPMN element type, though the description does not explicitly contrast with `add_activity` or `add_gateway`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like `add_activity`, `add_gateway`, or `add_pool`. The description simply states the action without mentioning exclusions, contexts, or alternative tools, leaving the agent to infer usage from the name and context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_gatewayC

Add a gateway to the current diagram

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName of the gateway (optional)
ownerIdNoOwning process ID (required when adding to a collaboration)
scopeIdNoContaining process or subprocess ID (defaults to ownerId)
positionNoPosition of the gateway (optional)
gatewayTypeYesType of gateway

Output Schema

ParametersJSON Schema
NameRequiredDescription
filenameYesActive BPMN filename
elementIdYesStable generated or existing BPMN ID
elementTypeYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is a mutating operation (readOnlyHint=false) with no idempotency or open-world implications. The description adds minimal behavioral context by specifying it adds to the current diagram, but does not disclose potential side effects, required context (e.g., existing diagram), or behavior when called without a current diagram. Since annotations don't carry detailed behavioral information, the description should have done more.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no wasted words, which is good. However, it is extremely short for a tool with five parameters and a nested object, leaving out any useful structural information. It is appropriately compact but borderline under-specified, so it earns a middle score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 parameters, enum gatewayType, nested position object, and no output schema explanation), the description is far too minimal. It doesn't explain the gatewayType choices, the meaning of ownerId and scopeId, or how positioning works. An agent would have to rely entirely on the schema, and even then some context (e.g., relationship to current diagram) is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are documented in the schema. The description itself adds no parameter semantics; it doesn't mention gatewayType, name, ownerId, scopeId, or position. With high schema coverage, the baseline is 3, and the description provides no extra value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (add) and the resource (gateway) and specifies the target (current diagram). It distinguishes from sibling add_* tools by resource type, though it doesn't mention the gatewayType parameter that differentiates gateway kinds. It is specific enough to identify the tool's purpose but lacks a mention of the required type parameter.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool instead of alternatives like add_event, add_activity, or add_pool. There is no mention of prerequisites, context, or conditions for use. The description simply states the action without any usage context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_laneA
Destructive

Add a lane to a white-box pool and assign flow nodes to it. Existing assignments are moved from their previous lane.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the lane
poolIdYesID of the pool to add lane to
positionNoPosition relative to existing lanesbottom
flowNodeIdsYesIDs of direct flow nodes in the pool process to assign to this lane

Output Schema

ParametersJSON Schema
NameRequiredDescription
laneIdYesStable generated or existing BPMN ID
poolIdYesStable generated or existing BPMN ID
filenameYesActive BPMN filename
assignedFlowNodeCountYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a key behavioral trait beyond annotations: 'Existing assignments are moved from their previous lane.' This adds specific context about mutation and potential data relocation, complementing the destructiveHint annotation without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff. The first sentence front-loads the core action, and the second delivers a critical side-effect. Every word earns its place, making it highly efficient for quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Beyond the schema and annotations, the description covers the essential purpose and the move-behavior. It doesn't mention prerequisites (e.g., pool existence) or error conditions, but with an output schema present and a well-covered input schema, this is adequate for correct invocation in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides full descriptions for all parameters (coverage 100%). The description does not add new meaning about params like position or flowNodeIds beyond what the schema states, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Add a lane to a white-box pool and assign flow nodes to it.' It also notes the side-effect of moving existing assignments, which distinguishes it from simple add operations like add_pool. This makes the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (adding lanes to a white-box pool) but does not explicitly contrast with siblings like add_pool or add_activity. There is no 'use this when' or 'instead of' guidance, leaving the agent to infer from the resource type.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_poolB

Add a pool to the current collaboration diagram

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the participant/pool
sizeNoSize of the pool (optional)
blackBoxNoCreate a black-box participant without an owned process
positionNoPosition of the pool (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
blackBoxYes
filenameYesActive BPMN filename
elementIdYesStable generated or existing BPMN ID
processIdNoStable generated or existing BPMN ID

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are all false (readOnlyHint: false, idempotentHint: false, etc.), so the description carries the full burden of behavioral disclosure. 'Add' implies a state mutation, but the description does not explain side effects, whether the current diagram must be open, or what happens to existing elements. It offers no additional behavioral context beyond the bare action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no filler or redundancy. It is front-loaded with the main action and delivers exactly the necessary information. No unnecessary details or repetition, making it a model of conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema and full parameter documentation, so return values and parameter details are covered. However, the description does not provide usage context such as whether a diagram must be active, or how this relates to 'add_lane' (a common alternative). Given its simplicity and the availability of structural information, a 3 reflects a minimally adequate description with a notable gap in contextual guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% parameter coverage, so each parameter is documented in the schema itself. The description adds no extra meaning to parameters like 'name', 'size', 'blackBox', or 'position'. Given high schema coverage, the baseline is 3, and the description does not raise it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'add', the object 'pool', and the context 'current collaboration diagram'. It distinguishes the tool from siblings like add_association, add_event, and add_lane by naming a specific BPMN element and its scope. A 4 rather than 5 because it lacks any elaboration on what a 'pool' means in this domain, though the sibling set implies a BPMN context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as add_lane or add_participant (if any exist). The description does not mention prerequisites, constraints, or situations where one would choose this over a sibling. Completely absent, earning a 2.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_text_annotationA

Add a BPMN text annotation, optionally associated with an existing element

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNoSize of the annotation
textYesAnnotation text preserved exactly, including whitespace, line breaks, and metacharacters
positionNoPosition of the annotation
textFormatNoOptional text media type; BPMN defaults to text/plain
associatedElementIdNoExisting element to link from the annotation with a separate undirected BPMN association

Output Schema

ParametersJSON Schema
NameRequiredDescription
filenameYesActive BPMN filename
annotationIdYesStable generated or existing BPMN ID
associationIdNoStable generated or existing BPMN ID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, indicating mutation. The description adds the behavioral fact that an association may be created, which is beyond the annotation's binary mutation flag. However, it does not disclose side effects on the existing element (e.g., whether it modifies the element) or any failure modes. Given annotations carry the core mutation trait, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler. It is front-loaded with the core action and resource, and the optional clause adds value without bloat. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters (including nested objects) and an output schema. The description covers the fundamental action but omits any mention of context, such as that the annotation is added to the current diagram or any error conditions. However, given the schema fully documents parameters and the output schema exists, the description is minimally sufficient but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, meaning all parameters have descriptive text. The tool description adds no parameter-specific details beyond highlighting the optional association, which is already captured in the associatedElementId description. Thus the description does not meaningfully augment the schema, warranting the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Add' and the specific resource 'BPMN text annotation', and notes the optional association. This distinguishes it from sibling tools like add_event or add_activity, which target different element types. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool versus alternatives. It mentions 'optionally associated' but does not explain when linking is appropriate or when to use add_association instead. There are no stated prerequisites, exclusions, or conditions for choosing this over other add-* tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

auto_layoutA
DestructiveIdempotent

Apply deterministic automatic layout. Collaboration processes are ranked independently; requested pool/lane sizes are lower bounds, manual coordinates are replaced, disconnected nodes stay in their owner, and message flows route after non-overlapping pool placement.

ParametersJSON Schema
NameRequiredDescriptionDefault
algorithmNoLayout algorithm to usehorizontal

Output Schema

ParametersJSON Schema
NameRequiredDescription
filenameYesActive BPMN filename
warningsYes
algorithmYes
elementCountYes
connectionCountYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses specific behavioral traits beyond annotations: it explains that pool/lane sizes act as lower bounds, manual coordinates are replaced, disconnected nodes stay with their owner, and message flows route after pool placement. These details align with the destructiveHint and idempotentHint annotations, adding value by clarifying exact effects. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, information-dense sentence that front-loads the core action ('Apply deterministic automatic layout') before listing behaviors. It is concise, with no filler, though the list of clauses is a bit packed but still readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a layout tool with one optional parameter and an output schema, the description thoroughly covers the essential behaviors and constraints. It explains deterministic behavior, rank ordering, size bounds, coordinate replacement, and routing logic, leaving no ambiguity about what the operation does. The output schema handles return values, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully documents the single parameter 'algorithm' with an enum and default, achieving 100% coverage. The description adds no additional meaning about the parameter or its values. Since the schema already covers it, a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Apply deterministic automatic layout' with a specific verb and resource. It goes beyond a simple statement to enumerate key behavioral rules (e.g., collaboration processes ranked independently, manual coordinates replaced), making its purpose precise and unambiguous. It is easily distinguishable from siblings, none of which perform layout operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any conditions, prerequisites, or exclusions. While it implies use for automatic layout, it fails to explicitly state the scenario or contrast with manual layout or other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

closeB
Idempotent

Close the current diagram and clear the context

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
filenameYesActive BPMN filename
processIdYesStable generated or existing BPMN ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, so the description doesn't need to restate those. It adds the side effect of clearing the context, which is beyond the annotations, but does not clarify whether changes are saved or discarded, or if the action is reversible. Given the annotations, a 3 is appropriate; more detail would be better for a state-changing operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the primary action and includes the secondary effect. No unnecessary words or repetition. It is appropriately concise for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and an output schema present, the description covers the essential behavior. However, given the large set of sibling tools, it lacks context about when to use 'close' versus alternatives like 'save' or 'delete'. The description is functional but not rich enough for an agent to confidently choose it in all relevant scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the input schema is empty with 100% coverage. As per the baseline for 0-parameter tools, the description does not need to elaborate on parameters, and it doesn't. This is fully adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Close the current diagram and clear the context'), which is specific and unambiguous. It identifies the resource (diagram) and the extra behavior (clearing context). However, it does not explicitly differentiate from sibling tools like 'save' or 'delete', though the action is distinct enough that the purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as 'save', 'new_bpmn', or 'delete_diagram_file'. The description only states what it does, not the context in which it should be chosen. With many sibling tools, an agent is left to infer when closing is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connectC

Connect two elements in the current diagram

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoLabel for the connection (optional)
sourceIdYesID of the source element
targetIdYesID of the target element
conditionNoFormal condition expression for a sequence flow; cannot be combined with isDefault
isDefaultNoMake this the source activity/gateway default flow; default flows cannot have conditions
conditionTypeNoBPMN expression type; only valid when condition is supplied (defaults to bpmn:FormalExpression)
conditionLanguageNoLanguage URI or identifier; only valid when condition is supplied

Output Schema

ParametersJSON Schema
NameRequiredDescription
filenameYesActive BPMN filename
sourceIdYesStable generated or existing BPMN ID
targetIdYesStable generated or existing BPMN ID
connectionIdYesStable generated or existing BPMN ID
connectionTypeYes

TDQS

C2.3/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide no positive hints (all false), so the description carries the full burden of behavioral disclosure. It fails to mention that this modifies the diagram, whether it validates element existence or compatibility, or any side effects. The agent has no idea what the operation actually does beyond a generic 'connect'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise (one sentence), but it lacks the substance needed to be useful. It doesn't front-load key constraints or provide any structure that helps an agent parse intent quickly. While brevity is good, this is under-specification rather than efficient framing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters including condition, isDefault, and language options, the description is grossly incomplete. An agent has no high-level understanding of how to use these together (e.g., when to supply a condition vs setting a default flow), or what the operation returns (despite an output schema, the description doesn't set context). The tool needs far more narrative to be safely invoked.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are documented in the schema. The description itself adds no extra meaning beyond the generic notion of connecting, which is the baseline expectation for high coverage. It does not explain relationships between parameters (e.g., condition vs isDefault) outside what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb+resource ('Connect two elements in the current diagram') that conveys the basic action. It does not differentiate from sibling tools like add_association, which might represent a similar connection operation, so it lacks explicit distinguishing context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as add_association, or on the prerequisites (e.g., elements must exist). With many sibling tools and complex connection semantics, the complete absence of routing information leaves an agent unable to choose correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

currentB
Read-onlyIdempotent

Get information about the current diagram

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
currentYes
diagramNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds nothing beyond the name about behavior—it doesn't mention output format, scope, or any side effects. With strong annotations, a 3 is appropriate because it adds minimal context beyond structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, concise sentence with no wasted words. The core action and target are front-loaded. Perfectly sized for a zero-parameter read tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema that presumably defines the return structure, so that gap is covered. However, the description doesn't clarify what 'information' means in practice—whether it returns the full diagram model, just properties, or a summary. Given the broad sibling set of read-like tools (list_elements, get_element, export), a slightly more explicit scope would make it self-contained. It's minimally complete but leaves ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero parameters, so schema description coverage is trivially 100%. With no parameters to explain, the baseline is 4. The description doesn't need to elaborate on parameters; it correctly avoids redundant parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Get') and a resource ('current diagram'), but 'information' is vague—it doesn't specify whether this returns metadata, elements, or both. It's distinguishable from get_element (which targets a specific element) but not precisely from list_elements or export. The purpose is understandable but under-specified.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives like list_elements, get_element, or export. It does not state what kind of 'information' it returns or when a caller should prefer this over sibling read operations. The usage context must be inferred entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_diagram_fileB
DestructiveIdempotent

Delete a saved BPMN diagram file

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesFilename of the diagram to delete

Output Schema

ParametersJSON Schema
NameRequiredDescription
filenameYes
closedCurrentYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description simply says 'delete', which is consistent with the destructiveHint annotation, but adds no extra behavioral context such as irreversibility, error handling for missing files, or side effects. Given the annotations already declare destructiveHint=true and idempotentHint=true, the description contributes no new information about the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that states the action and object without extraneous details. It is front-loaded with the verb, and every word earns its place. There is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, one-parameter delete operation, the description is mostly sufficient, and the presence of an output schema means return values need not be explained. However, it lacks usage context (when to use vs. alternatives) and practical constraints (e.g., availability of the file), which an agent would benefit from. Given the sibling tool delete_element exists, the absence of any differentiation weakens completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The parameter 'filename' is fully described in the schema ('Filename of the diagram to delete'), and schema coverage is 100%. The description adds no further meaning beyond the schema; it only reiterates that the file is a BPMN diagram, which is already implicit. This meets the baseline but does not enhance understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'delete' and the resource 'a saved BPMN diagram file', which distinguishes it from sibling tools like delete_element that target elements rather than files. It is specific and unambiguous, though it does not elaborate on what 'saved' means in context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as delete_element or close. It does not mention prerequisites (e.g., the file must exist) or situations where deletion is not appropriate, leaving the agent to infer usage solely from the name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_elementA
DestructiveIdempotent

Delete an element (cascading incident connections) or a connection while preserving its endpoints

ParametersJSON Schema
NameRequiredDescriptionDefault
elementIdYesID of the element to delete

Output Schema

ParametersJSON Schema
NameRequiredDescription
filenameYesActive BPMN filename
elementIdYesStable generated or existing BPMN ID
deletedKindYes
removedConnectionCountYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the agent knows it is a destructive, repeatable operation. The description adds value beyond these by specifying that element deletion cascades incident connections while connection deletion preserves endpoints. This is crucial context not present in annotations. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that front-loads the primary action and packs the two modes and their effects efficiently. Every word earns its place, with no redundancy or filler. It is optimally sized for the complexity of the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive tool with annotations covering safety and an output schema present, the description is largely complete. It explains the two deletion modes and their different implications. Minor omission: it does not explicitly state what happens to the endpoints of incident connections when deleting an element (beyond implying they are cascaded), which could be clarified. Overall, adequate for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema describes elementId as 'ID of the element to delete' with 100% coverage, but the tool description reveals that elementId can also refer to a connection, adding meaning beyond the schema. It clarifies that the ID serves double duty. However, it does not specify how an agent can distinguish an element ID from a connection ID, which is a minor gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Delete') and resource ('an element or a connection'), and concisely differentiates the two modes with their distinct effects. It is clear what the tool does overall, though it does not explain how it determines which mode applies (which is left to the parameter value).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides implicit usage guidance by explaining that it can delete either an element (cascading incident connections) or a connection (preserving endpoints), which helps an agent choose the appropriate action. However, it does not explicitly state when to prefer this tool over alternatives (no other element-deletion tool exists among siblings) or provide conditions for exclusion. The guidance is functional but not explicit about scenarios where deletion should not be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

exportA
Read-onlyIdempotent

Export the current diagram as BPMN XML text or an embedded image/svg+xml resource rendered by bpmn-js

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoExport formatxml
formattedNoWhether to format the output (for XML)

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriNo
formatYes
filenameYesActive BPMN filename
mimeTypeYes
processIdYesStable generated or existing BPMN ID
byteLengthYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that the output is 'rendered by bpmn-js', which is a behavioral detail beyond the annotations. It does not contradict any annotation; it is consistent. The description doesn't need to repeat safety hints since annotations carry that, and it adds value with the rendering detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that is front-loaded with the action ('Export') and resource ('current diagram'), followed by the output formats and rendering detail. There is zero filler or repetition. Every word contributes to clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the output schema exists (as indicated by context signals), the description does not need to explain return values. The tool has two optional parameters that are fully documented in the schema, and the description covers purpose and output formats. Annotations cover safety. Nothing needed for an agent to call this tool successfully is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema describes both parameters: 'format' with enum values and a default, and 'formatted' with a description. Schema description coverage is 100%, so the schema already documents parameters thoroughly. The description does not add any extra meaning about parameter syntax, alternatives, or nuances beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific verb 'export' and the resource 'current diagram', and specifies the two possible output formats (BPMN XML or svg+xml). This distinguishes it from sibling tools like save and save_as, which persist files, while export produces a serialized representation. No ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context that this tool is for exporting the current diagram in a specific format, which is implicitly distinct from saving or opening. It does not explicitly mention when not to use it or name alternatives, but the purpose is self-evident given the format and the 'current diagram' scope. A slight gap is the lack of explicit routing to save_as for persistence, but the context is adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_diagrams_pathA
Read-onlyIdempotent

Get the path where BPMN diagrams are saved

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. However, the description adds no additional behavioral context, such as what the returned path looks like or any side effects, which is minimal over the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence with no filler. The purpose is stated directly and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a trivial getter with no parameters and an existing output schema, the description is adequate. It doesn't provide context on typical use cases, but that's not necessary given its simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description adds no parameter meaning. According to the rubric, 0 params has a baseline of 4, which is appropriate since there is nothing to explain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the path where BPMN diagrams are saved. It is specific and distinguishes from siblings like open_bpmn or list_diagrams, as it returns the location rather than contents or list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives, such as list_diagrams or current. It only states what it does, leaving the agent to infer usage from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_elementB
Read-onlyIdempotent

Get details of a specific element or association in the current diagram

ParametersJSON Schema
NameRequiredDescriptionDefault
elementIdYesID of the element

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesStable generated or existing BPMN ID
kindNo
nameNo
sizeNo
typeYes
ownerIdNoStable generated or existing BPMN ID
scopeIdNoStable generated or existing BPMN ID
incomingNo
outgoingNo
positionNo
sourceIdNoStable generated or existing BPMN ID
targetIdNoStable generated or existing BPMN ID
waypointsNo
processRefNoStable generated or existing BPMN ID
propertiesNo
defaultFlowNoStable generated or existing BPMN ID
associationDirectionNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds the useful context that it operates on 'specific' elements and associations within the 'current diagram', which is not in the annotations. However, it does not disclose behavior on missing IDs or error conditions; the output schema likely covers return format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with zero redundancy. It states the action, scope, and resource type efficiently, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential scope ('current diagram', 'element or association') and safety is fully provided by annotations. The presence of an output schema means return values are documented elsewhere. It omits potential error behavior for nonexistent IDs, but that is a minor gap for such a simple retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides a description for elementId ('ID of the element'), and the description ('Get details of a specific element or association') implies it is the target identifier. No additional semantic detail is added beyond the schema, and with 100% schema coverage the baseline is 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'details of a specific element or association', and scopes it to 'the current diagram'. It distinguishes from list_elements (which lists) and update_element (which updates) by emphasizing specificity, though it does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus its siblings, such as list_elements for enumeration or update_element for modification. The word 'specific' implies single-element retrieval, but no explicit selection criteria or alternative routing is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_diagramsA
Read-onlyIdempotent

List diagrams in stable filename order as { count, returnedCount, offset, limit, hasMore, diagrams, path }; request the next page with offset + returnedCount

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default 100, max 500)
offsetNoZero-based offset in the stable result order

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
countYes
limitYes
offsetYes
hasMoreYes
diagramsYes
returnedCountYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare read-only, idempotent, and non-destructive behavior, so the description's job is lighter. It adds valuable context about stable ordering and pagination mechanics, going beyond what annotations provide. Does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that starts with the core purpose, then compactly provides return structure and pagination instruction. No wasted words; everything is essential and immediately useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list operation, the description covers the result format, pagination logic, and ordering guarantee. The output schema (if present) is not shown, but the description explicitly lists the response fields, making it self-contained. No missing information that an agent would need to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for both parameters (limit, offset), but the description enhances understanding by explaining offset in the context of 'stable filename order' and pagination, which is not fully captured by the schema. This adds functional meaning beyond parameter names and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('List') and resource ('diagrams') with the specific ordering definition ('stable filename order'). It also specifies the return shape, making it unambiguous what the tool does and how it differs from other diagram operations like open, save, or export.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit pagination usage ('request the next page with offset + returnedCount') which is key to correct invocation. It doesn't explicitly mention when not to use this tool, but no direct alternative exists among siblings for listing diagrams, so the guidance is sufficient for the use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_elementsA
Read-onlyIdempotent

List elements and association artifacts in stable ID order as { count, returnedCount, offset, limit, hasMore, elements }; request the next page with offset + returnedCount

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return (default 100, max 500)
offsetNoZero-based offset in the stable result order
elementTypeNoFilter by element type (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
limitYes
offsetYes
hasMoreYes
elementsYes
returnedCountYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral traits beyond annotations: it specifies the response envelope, the stable sort order, and the pagination mechanism (offset + returnedCount). This gives the agent expectations about ordering and data volume that structured metadata alone cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence that front-loads the core purpose, then specifies the response format, and closes with pagination guidance. Every clause earns its place; there is no fluff or redundancy. It respects the token budget while delivering high-value details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists (covering return values), the annotations cover read-only/idempotent safety, and the input schema fully documents all three parameters, the description is complete for an agent to call this tool correctly. It adds the crucial non-obvious detail of stable ordering and pagination, making it self-sufficient for both initial listing and subsequent page requests.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and every parameter (limit, offset, elementType) has a description, so the baseline is 3. The description adds contextual semantics for offset by tying it to the stable ID order and the pagination rule (offset + returnedCount), which clarifies how offset behaves beyond the schema's 'Zero-based offset' note. This elevates it above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List elements and association artifacts'. It further specifies the ordering ('stable ID order') and the exact response shape. This clearly distinguishes list_elements from sibling tools like get_element (targeted retrieval) and delete_element (mutation), so an agent can select it without needing to inspect the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not name alternative tools or give explicit when-not-to-use guidance, but it provides actionable usage context: it explains the pagination contract ('request the next page with offset + returnedCount'), which is the core operational detail. This is clear context, though it stops short of contrasting with siblings like get_element or export.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

new_bpmnA

Create a new BPMN diagram and set it as current context

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the diagram
typeNoType of diagram to createprocess
extensionProfileNoBPMN extension profile; portable emits no vendor attributesportable

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
typeYes
filenameYesActive BPMN filename
processIdYesStable generated or existing BPMN ID
extensionProfileYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that it creates a diagram and sets it as the current context, which is a side effect. Annotations are minimal (all false), so the description carries the burden. However, it doesn't mention whether the diagram is persisted, what happens to the previous current diagram, or any error conditions. This is adequate but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the primary action and key side effect. No filler or redundant content. It efficiently conveys the essence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple creation tool with fully documented parameters and an output schema, the description is mostly adequate but lacks usage guidance and detailed behavioral context (e.g., where the diagram is stored, effect on existing state). It covers the minimum but leaves some gaps that an agent might need.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for all three parameters (name, type, extensionProfile), each with clear descriptions and enums. The description adds no extra meaning beyond what the schema provides. Baseline 3 applies since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (create) and resource (BPMN diagram) and an additional effect (set as current context). It distinguishes from siblings like open_bpmn (open existing) and new_from_mermaid (create from mermaid), making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool versus alternatives. It doesn't mention conditions, exclusions, or when to prefer other tools like new_from_mermaid for mermaid-derived diagrams. Usage context is only implied by the tool's name and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

new_from_mermaidA

Create a new BPMN diagram from Mermaid code and set it as current context

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the new diagram
mermaidCodeYesMermaid flowchart code to convert
extensionProfileNoBPMN extension profile for the authored documentportable

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
typeYes
filenameYesActive BPMN filename
warningsYes
flowCountYes
nodeCountYes
processIdYesStable generated or existing BPMN ID
extensionProfileYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so safety is covered. The description adds the behavioral trait of setting the new diagram as the current context, which is not in annotations. This is useful context beyond the structured data, though it does not disclose error handling or prerequisites.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the action, the input, and the side effect without any redundancy. Every word contributes to the meaning, making it highly concise and structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a straightforward creation operation with a side effect. The description states the core purpose and the current-context behavior. An output schema exists (as indicated), so return values are presumably covered elsewhere. The description is sufficient for an agent to understand how to invoke it correctly, though it does not mention potential failure modes or prerequisites.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema descriptions fully cover all three parameters (name, mermaidCode, extensionProfile) with 100% coverage. The tool description does not add any further meaning beyond what the schema already provides, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Create'), a resource ('a new BPMN diagram from Mermaid code'), and a distinct side effect ('set it as current context'). It differentiates from siblings like new_bpmn (likely empty diagram) and open_mermaid_file (opens existing file) by emphasizing the conversion and context-setting behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you have Mermaid code and want to convert it to BPMN, but it does not explicitly state when to use this tool versus alternatives such as new_bpmn or open_mermaid_file. There is no 'use this when' or 'prefer this over' guidance, leaving the agent to infer context from the purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_bpmnA
Idempotent

Open an existing BPMN file and set it as current context

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesFilename of the BPMN diagram to open

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
typeYes
filenameYesActive BPMN filename
processIdYesStable generated or existing BPMN ID
elementCountYes
connectionCountYes
extensionProfileYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose idempotency (idempotentHint: true) and non-destructiveness (destructiveHint: false). The description adds the key behavioural trait of switching the current context, which is not captured by annotations. It does not discuss failure modes, but given the annotations and the simple nature of the tool, this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence states the action and effect with zero filler. Every word adds value, and the structure is optimally compact for a tool with one parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter, an output schema, and annotations that cover safety, this description is complete. It explains what the tool does (opens and sets context), and nothing else is needed for an agent to invoke it correctly. The existence of the output schema relieves the description from explaining return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully describes the single parameter ('filename': 'Filename of the BPMN diagram to open') with 100% coverage. The description does not add any extra meaning about the parameter (e.g., path patterns, extensions, or constraints), so it merely echoes the schema. A baseline of 3 is appropriate when the schema carries the semantic load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Open'), a clear resource ('existing BPMN file'), and an explicit effect ('set it as current context'). This distinguishes it from siblings like new_bpmn (create), open_mermaid_file (different format), and save (persist), making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies usage: open an existing BPMN diagram to make it the working context. It does not explicitly name alternatives or conditions for when not to use it, but the resource type ('existing BPMN') implicitly rules out new files or other formats. A named alternative would be stronger, but the core context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_mermaid_fileA

Open a Mermaid file, convert it to BPMN, and set as current context

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesFilename of the Mermaid file to open and convert
extensionProfileNoBPMN extension profile for the authored documentportable

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
typeYes
filenameYesActive BPMN filename
warningsYes
flowCountYes
nodeCountYes
processIdYesStable generated or existing BPMN ID
sourceFilenameYes
extensionProfileYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as non-read-only and non-destructive, and the description adds the key side effect of setting current context. It does not disclose potential impacts on unsaved work or file modifications, but given the annotation coverage, the provided behavioral details are adequate and non-contradictory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the primary action (open, convert, set context). Every word adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core purpose and the side effect of setting current context, while an output schema exists and all parameters are fully described. It does not explicitly mention the extensionProfile's role, but that is a minor omission given the schema's clarity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters (filename and extensionProfile) have full descriptions in the schema, including the enum for extensionProfile. The tool description itself adds no extra parameter context, which is acceptable because schema coverage is 100%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb-resource-action: open a Mermaid file, convert it to BPMN, and set it as current context. This distinguishes it from siblings like open_bpmn (which opens BPMN files) and new_from_mermaid (which creates new BPMN from Mermaid).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context where this tool should be used is implied: when an existing Mermaid file needs to be converted and made the active diagram. However, it does not explicitly mention alternatives or conditions for selection, leaving the agent to infer from tool names and sibling descriptions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

saveA
DestructiveIdempotent

Save the current diagram to its file (error if no filename set)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
filenameYesActive BPMN filename
processIdYesStable generated or existing BPMN ID

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, covering the safety profile. The description adds the error condition (error if no filename set), which is useful behavioral context, but little else about side effects. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the primary action and immediately notes the key error condition. Every word earns its place, with no filler or repetition of schema information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and an output schema exists, the description adequately covers what the tool does and a critical edge case (missing filename). It does not discuss permissions or asynchronous behavior, but these are minor for a save operation with existing annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

This tool has zero parameters, so the description does not need to explain parameter semantics. The baseline of 4 applies because there is nothing to elaborate on; the description correctly avoids adding irrelevant details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the exact action (save), the resource (current diagram), and the destination (its file), which immediately distinguishes it from save_as. The error condition adds precision. This is a clear, unambiguous purpose for an agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that a filename must already be set to avoid an error, which indirectly suggests using save_as when no filename is set, but it does not explicitly name save_as or other alternatives. This leaves usage guidance implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_asA
Idempotent

Save the current diagram with a new filename

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesNew filename for the diagram

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
filenameYesActive BPMN filename
processIdYesStable generated or existing BPMN ID

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false (write operation) and destructiveHint=false. The description adds the key 'new filename' behavior but does not disclose side effects such as whether the current diagram's internal file reference changes to the new filename, or what happens if a file with the same name already exists (overwrite vs. error). The description adds minimal behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, succinct sentence with no extraneous words. It front-loads the verb and directly conveys the essential action and differentiator. There is zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one parameter) and has an output schema, so return values are likely covered. However, the description omits important behavioral nuances: what happens to the current diagram's file association after save_as, and whether existing files are overwritten. Given the presence of a sibling 'save' tool, an explicit clarification of when to use save_as versus save would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (the 'filename' parameter has a clear description: 'New filename for the diagram'). The tool description essentially repeats this information without adding further meaning. The baseline of 3 applies since the schema fully documents the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Save the current diagram with a new filename' clearly states the action (save), the resource (current diagram), and the key differentiator (with a new filename) that distinguishes it from the sibling 'save' tool. An agent can immediately understand what this tool does and how it differs from the alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (use when you want to save under a different name) but does not explicitly state when to prefer this over 'save' or mention any exclusions. The differentiation is implicit via the phrase 'with a new filename' rather than an explicit 'use this when you want to keep the original file intact'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_elementA
DestructiveIdempotent

Update properties of an element in the current diagram

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name for the element
elementIdYesID of the element to update
propertiesNoTyped properties to update. isCollection and itemSubjectRef apply only to data object references; null clears itemSubjectRef, assignee, candidateGroups, or dueDate. Unknown and namespace-qualified fields are rejected.
defaultFlowNoOutgoing sequence-flow ID to make the element default, or null to clear its default flow

Output Schema

ParametersJSON Schema
NameRequiredDescription
filenameYesActive BPMN filename
elementIdYesStable generated or existing BPMN ID

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and idempotentHint=true, so the description does not need to restate that it mutates. However, the description adds no additional behavioral context, such as whether updating is partial (only provided properties change), whether null clears fields, or what happens if the element does not exist. Given the sparse description, the agent must rely on the schema for these nuances. The description is consistent with annotations but adds minimal value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It clearly communicates the action and target. This is exemplary conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a complex schema with nested properties and an output schema, and the description is very brief. While the schema carries detailed parameter semantics and annotations indicate destructive behavior, the description does not explain the partial-update semantics (unchanged properties remain) or that certain fields apply only to specific element types. An agent would need to read the schema carefully. For a mutation tool with this complexity, the description could provide more context, making it adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% – each parameter (elementId, name, defaultFlow, and the properties object) already has a detailed description in the schema, including notes on clearing fields and restrictions. The tool description itself adds no semantic information about parameters, so it does not compensate beyond what the schema provides. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Update') and a specific resource ('properties of an element in the current diagram'). This distinguishes it from sibling tools like get_element, delete_element, and add_* tools. The mention of 'current diagram' adds context. It is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool versus alternatives, such as save (which persists the whole diagram) or get_element (to read). Usage is implied by the name and description, but there is no directing of the agent to consider alternatives or exclusions. It is acceptable but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validateA
Read-onlyIdempotent

Validate the current diagram using cumulative BPMN checks: syntax parses XML and resolves references; semantic adds owner-aware event, flow, subprocess, lane, and collaboration rules; full also adds executable-profile start/end/connectivity guidance

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoCumulative validation level: syntax; syntax + semantic; or syntax + semantic + executable-profile guidancefull

Output Schema

ParametersJSON Schema
NameRequiredDescription
levelYes
validYes
errorsYes
issuesYes
summaryYes
filenameYesActive BPMN filename
warningsYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, establishing the safety profile. The description adds valuable behavioral context by detailing what each validation level actually does—syntax parsing and reference resolution, semantic rules for events/flows/subprocesses/lanes/collaborations, and executable-profile guidance for full. This goes beyond the annotations and helps the agent understand what the validation entails, without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, but it is well-structured with semicolons to separate the levels, and it front-loads the primary action ('Validate the current diagram'). It avoids unnecessary words while conveying all key information. The length is appropriate for the complexity of the tool's levels, and it doesn't repeat what the schema already states.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter, no required params), the description adequately covers the validation levels and what they involve. An output schema exists, so the return value is documented elsewhere. The description is complete for an agent to understand how to invoke the tool and what to expect from each level, with no missing critical details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers the 'level' parameter with enum values and a description, but the tool description provides much richer semantics by explaining exactly what each level checks. For example, 'syntax parses XML and resolves references' adds meaning beyond the schema's simple cumulative statement. Since schema coverage is 100%, a baseline of 3 is appropriate, but the elaboration justifies a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Validate' and the resource 'current diagram', making the tool's purpose unambiguous. It also distinguishes itself by explaining the cumulative levels, which is specific and not redundant with the name. Since sibling tools are all editing/IO operations, this is clearly the validation tool, and the description highlights its unique functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool (to validate the current diagram) and explains the different validation levels, implicitly guiding the agent on choosing the appropriate level. It doesn't mention alternatives because there are none among the siblings that serve a similar purpose, so the absence of explicit exclusion is acceptable. The trigger condition is well-defined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 27 tool updatesv0.2.0
    • First observedadd_activity
    • First observedadd_association
    • First observedadd_data_object
    • First observedadd_event
    • First observedadd_gateway
    • First observedadd_lane
    • First observedadd_pool
    • First observedadd_text_annotation
    • First observedauto_layout
    • First observedclose
    • First observedconnect
    • First observedcurrent
    • First observeddelete_diagram_file
    • First observeddelete_element
    • First observedexport
    • First observedget_diagrams_path
    • First observedget_element
    • First observedlist_diagrams
    • First observedlist_elements
    • First observednew_bpmn
    • First observednew_from_mermaid
    • First observedopen_bpmn
    • First observedopen_mermaid_file
    • First observedsave
    • First observedsave_as
    • First observedupdate_element
    • First observedvalidate

TDQS

B3.4/5.0
Disambiguation5/5

Each tool targets a clearly distinct action or resource. Element creation tools are separated by type (event, activity, gateway, data object, annotation, pool, lane), and file operations are distinct (new, open, save, save_as, close, list, delete). No two tools appear to overlap in purpose.

Naming Consistency4/5

The naming pattern is mostly consistent with verb-first, underscore-separated names (e.g., add_event, list_elements, delete_diagram_file). Minor deviations exist, such as 'new_from_mermaid' and 'open_mermaid_file' vs. 'open_bpmn', and the noun 'current' as a standalone tool, but overall the convention is coherent.

Tool Count4/5

27 tools is above the typical 3-15 range, but the complexity of a BPMN editor justifies the breadth. The tools cover file management, element operations, validation, layout, and export without excess overlap, so the count feels justified rather than bloated.

Completeness5/5

The tool surface is remarkably complete for a BPMN diagramming server. It covers full CRUD for elements and files, connections, associations, validation at multiple levels, layout, and export. There are no glaring gaps that would hinder common workflows, including lifecycle operations for diagrams and elements.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    An 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.
    7
    12
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    Enables AI agents to create, manipulate, and manage BPMN 2.0 diagrams programmatically, with support for Mermaid conversion, auto-layout, and file persistence.
    24
    9
    -
  • F
    license
    Not graded
    quality
    F
    maintenance
    Enables AI-driven graphical diagram creation and manipulation using natural language, with support for BPMN workflows, analysis, and manual editing via the Model Context Protocol.
    1
    -

Latest Blog Posts

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