Skip to main content
Glama

bpmn-js-mcp — publicação na web

Servidor MCP que permite a assistentes de IA (Claude Code, Claude Desktop, VS Code/Copilot e outros clientes MCP) criar e editar diagramas BPMN 2.0 válidos, com layout automático, validação bpmnlint e exportação em XML, SVG e PNG. Usa o bpmn-js sem navegador, via jsdom. Fork de datakurre/bpmn-js-mcp; a documentação original das ferramentas está em docs/README-upstream.md.

O projeto original só funciona localmente (stdio: o cliente abre o servidor como processo filho). Este repositório acrescenta o modo HTTP (--http), que permite publicá-lo numa URL e usá-lo de qualquer máquina:

stdio (original)

--http (web)

Quem acessa

o próprio usuário, na máquina dele

qualquer cliente com token

Autenticação

não precisa

Authorization: Bearer <token> obrigatório

Diagramas

um conjunto por processo

isolados por sessão MCP — um usuário nunca vê o do outro

filePath (ler/gravar arquivo)

permitido

desligado (seria leitura/escrita arbitrária no servidor)

Exportação

xml, svg, png, gif, apng, mp4, webp, html

xml, svg, both, png (imagem no próprio resultado)

Persistência em disco

--persist-dir

não há: o diagrama vive enquanto a sessão durar; o agente exporta o XML ao final

Decisão de arquitetura: agents/adrs/ADR-033-http-transport.md.

Há duas formas de publicar:

Container (Docker + nginx)

Vercel (--stateless)

Onde

infra da FGV, qualquer host com Docker

Vercel Functions

Diagramas ficam

na memória da sessão MCP

no Upstash Redis, por 7 dias sem uso

Isolamento

por sessão MCP

por token

Cabeçalhos de segurança

nginx (deploy/nginx/nginx.conf)

vercel.json

Seção

Subir com Docker Compose

Publicar na Vercel

Decisão do modo Vercel: agents/adrs/ADR-034-stateless-http-vercel.md.

Arquitetura de deploy

cliente MCP ──HTTPS──▶ F5 / balanceador ──HTTP──▶ nginx :8080 ──▶ app :3000
                       (TLS da FGV)               cabeçalhos de      /mcp  /health
                                                  segurança, SSE
  • app (Dockerfile): Node 22, usuário não-root, sistema de arquivos somente-leitura. Porta 3000, só na rede interna do compose.

  • nginx (deploy/nginx/): nginx 1.30.5 (fora da lista vetada pela SI; a 1.27.5 é proibida). É a única fonte dos cabeçalhos de segurança exigidos pelo pentest do ESI — o app não os emite, para que cada um saia uma vez só. O F5 não deve injetar os mesmos cabeçalhos (CSP duplicada vira interseção; COOP duplicado é ignorado).

  • Sem banco de dados e sem volume.

Related MCP server: MCP-BPMN Server

Pré-requisitos

  • Docker 24+ com Docker Compose v2.

  • No build: acesso HTTPS a registry.npmjs.org. As duas dependências que só existem no GitHub (bpmn-auto-layout e bpmn-to-image) vêm pré-compiladas em vendor/, então o build não precisa de git nem do GitHub.

  • Em execução: nenhum acesso externo.

  • TLS terminado na frente (F5/balanceador). O nginx escuta HTTP puro em 8080.

Subir com Docker Compose

cp .env.docker.example .env.docker
# editar .env.docker e preencher MCP_AUTH_TOKENS (openssl rand -hex 32)
docker compose --env-file .env.docker up -d --build
curl -i http://localhost:8080/health

O arquivo chama-se .env.docker (e não .env) para o token nunca ir para o git por engano; ele já está no .gitignore.

Variáveis de ambiente

Variável

Obrigatória

Default

O que faz

MCP_AUTH_TOKENS

sim

—

Tokens aceitos, separados por vírgula, cada um com ≥ 32 caracteres. Vazio ou curto: o app recusa subir (de propósito). Um token por equipe/usuário facilita revogar.

HTTP_PORT

não

8080

Porta do host onde o nginx é publicado (no container é 8080).

MCP_ALLOWED_ORIGINS

não

vazio

Origens de navegador autorizadas a chamar /mcp. Clientes de desktop/CLI não mandam Origin e funcionam com o default.

MCP_MAX_SESSIONS

não

50

Sessões MCP abertas ao mesmo tempo. Acima disso: 503.

MCP_SESSION_IDLE_MINUTES

não

30

Inatividade até a sessão (e seus diagramas) ser descartada.

MCP_MAX_BODY_BYTES

não

4194304

Corpo máximo da requisição (4 MB). Acompanha client_max_body_size do nginx.

MCP_MAX_CONCURRENT_REQUESTS

não

8

Chamadas processadas em paralelo (trabalho de CPU). Acima disso: 503 com Retry-After.

BPMN_MCP_MAX_DIAGRAMS

não

20

Diagramas por sessão; ao estourar, descarta o mais antigo.

BPMN_MCP_TOOLS

não

full

core expõe só as 10 ferramentas mais usadas.

IMAGE_TAG

não

latest

Tag das imagens geradas pelo compose.

Build e docker run manuais

docker build -t bpmn-js-mcp:1.0.0 .
docker build -t bpmn-js-mcp-nginx:1.0.0 -f deploy/nginx/Dockerfile .
docker network create bpmn-mcp
docker run -d --name app --network bpmn-mcp --read-only --tmpfs /tmp \
  -e MCP_AUTH_TOKENS="<token de 64 hex>" bpmn-js-mcp:1.0.0
docker run -d --name nginx --network bpmn-mcp --read-only --tmpfs /tmp \
  -p 8080:8080 bpmn-js-mcp-nginx:1.0.0

O container do nginx procura o app pelo nome app (deploy/nginx/nginx.conf, bloco upstream); com outro nome, ajustar ali. Conferir a versão do nginx na imagem construída: docker run --rm --entrypoint nginx bpmn-js-mcp-nginx:1.0.0 -v.

Publicar na Vercel

Na Vercel cada chamada pode cair numa instância diferente, então o servidor roda sem sessão e guarda os diagramas num Redis (Upstash, pelo Marketplace da Vercel). Antes de cada chamada recarrega o diagrama citado se outra instância o alterou; depois, grava de volta o que mudou — antes de responder.

Arquivos: vercel.json (build, região gru1/São Paulo, rotas e cabeçalhos), api/mcp.js (a função; o código vem de dist/vercel/vercel.js, um bundle autocontido — ver esbuild.config.mjs), public/ (a página de apresentação em / — servida também pelo nginx no modo Docker — e o robots.txt; ter essa pasta como saída impede a Vercel de servir o repositório como site estático) e .vercelignore. Variáveis comentadas em .env.vercel.example.

  1. Login e vínculo do projeto (uma vez, na raiz do repositório):

    npx vercel login
    npx vercel link
  2. Redis: no painel da Vercel, Storage → Create Database → Upstash for Redis, região São Paulo (sa-east-1), e conecte ao projeto. A integração cria KV_REST_API_URL e KV_REST_API_TOKEN sozinha.

  3. Token de acesso (gere com openssl rand -hex 32 e guarde num cofre):

    npx vercel env add MCP_AUTH_TOKENS production
  4. Deploy de produção (as URLs de preview ficam atrás do login da Vercel e clientes MCP não passam por ele):

    npx vercel deploy --prod
  5. Conferir: curl -i https://<projeto>.vercel.app/health deve dar 200 com os cabeçalhos de segurança; /mcp sem token, 401. Se /health der 500, falta token ou Redis — o log da função diz qual.

Limites e diferenças em relação ao modo container:

  • Diagramas isolados por token: quem usa o mesmo token vê os mesmos diagramas.

  • Corpo até 4,5 MB e cada chamada até 120 s (maxDuration no vercel.json).

  • Duas instâncias alterando o mesmo diagrama ao mesmo tempo: vale a última gravação.

  • O desfazer/refazer recomeça quando o diagrama é recarregado por outra instância.

  • Sem notificações de progresso (respostas JSON simples).

Para reproduzir o modo Vercel localmente, com Redis e o emulador da API REST do Upstash: docker compose --env-file .env.docker --profile vercel-dev up -d --build e use http://127.0.0.1:8081/mcp.

Conectar um cliente

A página na raiz do serviço (https://<host-publicado>/) é o guia para quem vai usar: instalação local em 1 prompt (o Claude clona este repositório e registra o servidor via stdio, sem token), cadastro manual no Claude Code/Desktop, os 7 usos com prompts prontos, as ferramentas e “Deu erro?”. O uso pela nuvem, com token, fica num bloco à parte. Fontes Inter e Instrument Serif em public/assets/fonts (licença OFL).

Claude Code:

claude mcp add --transport http bpmn https://<host-publicado>/mcp --header "Authorization: Bearer <token>"

VS Code (.vscode/mcp.json):

{
  "servers": {
    "bpmn": {
      "type": "http",
      "url": "https://<host-publicado>/mcp",
      "headers": { "Authorization": "Bearer ${input:bpmn-token}" }
    }
  },
  "inputs": [
    {
      "id": "bpmn-token",
      "type": "promptString",
      "password": true,
      "description": "Token do bpmn-js-mcp"
    }
  ]
}

Clientes que só aceitam conector remoto com OAuth (por exemplo, conectores adicionados pela interface web do claude.ai) não funcionam com token fixo; para eles seria preciso uma camada OAuth (ex.: SSO da FGV) na frente.

Desenvolvimento sem Docker

Node.js 22+.

npm ci                 # também compila (script prepare)
npm test               # vitest (~1600 testes)
npm run lint && npm run typecheck && npm run format:check
node dist/index.js     # modo stdio, como no projeto original
MCP_AUTH_TOKENS=$(openssl rand -hex 32) node dist/index.js --http   # modo HTTP em :3000

Os testes do modo HTTP estão em test/http-server.test.ts (sessões) e test/stateless-http.test.ts (modo Vercel, com duas instâncias alternadas).

Ambientes

Ambiente

URL

Observação

Produção

a definir com a infra

atrás do F5, com TLS

Teste na Vercel

https://<projeto>.vercel.app/mcp

modo --stateless, token próprio

Réplica / homologação

a definir

mesmo compose, token próprio

Desenvolvimento

http://localhost:8080/mcp

docker compose --env-file .env.docker up

Use tokens diferentes em cada ambiente.

Segurança (checklist do pentest ESI/FGV)

Conferido em container real (curl -I em /health, numa rota inexistente, em /mcp sem token, em 413 e em 502):

  • Strict-Transport-Security, X-Content-Type-Options, Referrer-Policy, X-Frame-Options, Cross-Origin-Opener-Policy, Content-Security-Policy e Cache-Control: no-store em todas as respostas, uma vez cada, inclusive nos erros gerados pelo próprio nginx.

  • Não há página HTML, então a CSP é a base mínima, sem exceções.

  • Autenticação por token com comparação em tempo constante; sessão presa ao token que a abriu; Origin de navegador validada.

  • filePath desligado: sem leitura nem escrita de arquivos do servidor.

  • Limites de corpo, de sessões, de chamadas simultâneas e de diagramas.

  • Dependências de produção sem vulnerabilidades conhecidas (npm audit --omit=dev).

  • Não se aplicam (não há usuários com senha): política de senha e limite de tentativas de login. Os tokens têm ≥ 256 bits de entropia, o que torna tentativa por força bruta inviável; por isso não há bloqueio por IP, que atrás do F5 viraria um bloqueio global.

Documentação

Estrutura de pastas

src/
  index.ts             entrada: escolhe stdio, --http ou --http --stateless
  vercel.ts            função da Vercel (vira dist/vercel/vercel.js)
  server.ts            monta o servidor MCP (uma instância por sessão no HTTP)
  http-server.ts       transporte HTTP com sessões (Docker): limites, /health
  stateless-http.ts    transporte HTTP sem sessão (Vercel): sincroniza com o Redis
  diagram-store.ts     armazenamento dos diagramas (Upstash Redis ou memória)
  http-common.ts       token, leitura do corpo, respostas de erro
  session-scope.ts     isolamento do estado por sessão (AsyncLocalStorage)
  filesystem-policy.ts desliga filePath no modo HTTP
  handlers/            uma pasta por domínio de ferramenta
test/                  vitest (inclui http-server.test.ts)
deploy/nginx/          imagem e configuração do nginx de borda
api/mcp.js             função da Vercel
vercel.json            configuração da Vercel (rotas, cabeçalhos, região)
public/                guia em / (HTML, CSS, JS e fontes locais; nada inline, por causa da CSP)
Dockerfile             imagem do app
docker-compose.yml     app + nginx; perfil vercel-dev = modo Vercel local
.env.docker.example    variáveis do compose, comentadas
.env.vercel.example    variáveis da Vercel, comentadas
docs/, agents/adrs/    documentação e ADRs

Licença

MIT (ver LICENSE).

Available Tools

20 tools
add_bpmn_elementsA

Add one or more elements (tasks, gateways, events, etc.) to a BPMN diagram; a single element is an array of one. With connect "chain" (default) each element is connected to the previous one by a sequence flow (afterElementId attaches the first one after an existing element) and the diagram is laid out; with connect "none" they are only added, each placed right of the previous one. Chains containing a gateway are not auto-connected past it — wire branches with connect_bpmn_elements. An entry that sets its own anchor or position (hostElementId, flowId, fromElementId + toLaneId, copyFrom, afterElementId, x/y) is placed there instead of being chained, and then auto-layout is off unless autoLayout is true. Supports boundary events via hostElementId, inserting into a flow via flowId, and cross-lane handoff via fromElementId + toLaneId. Subprocesses are expanded by default (isExpanded=false for collapsed). Generates descriptive element IDs when a name is provided (e.g. UserTask_EnterName). See bpmn://guides/modeling-elements for naming conventions, integration patterns, and event subprocess guidance.

ParametersJSON Schema
NameRequiredDescriptionDefault
laneIdNoDefault lane for all entries; overridable per entry.
connectNo"chain" (default) connects each element to the previous one; "none" only adds them, placing each right of the previous one (starting from afterElementId) unless it sets its own anchor/position.chain
elementsYesElements to add, in order. participantId, laneId and afterElementId at the top level apply to all entries.
diagramIdYesThe diagram ID returned from create_bpmn_diagram
autoLayoutNoRun layout_bpmn_diagram afterwards (chain mode only; default true, but off when a gateway is in the chain or an entry sets its own anchor/position).
participantIdNoDefault participant (pool) for all entries; overridable per entry.
afterElementIdNoAttach the first element after this existing element (auto-positioned).

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only supply readOnlyHint=false and openWorldHint=false; the description adds substantial behavior the agent could not otherwise infer: auto-layout runs after chaining, chains stop auto-connecting past a gateway, setting an anchor turns auto-layout off unless autoLayout=true, subprocesses expand by default, and IDs are auto-generated from names. It even notes response nextSteps for compensation wiring, which is well beyond annotation coverage.

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 purpose and default chaining behavior are front-loaded, and the length is justified by the tool's complexity (7 top-level params plus a large nested element object). The single dense paragraph is somewhat heavy and could be broken into shorter units, but nearly every sentence carries distinct rules.

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 complex mutation tool with no output schema and 100% schema coverage, the description covers side effects, placement overrides, boundary-event hosting, subprocess expansion, and points to bpmn://guides/modeling-elements for conventions. It only partially describes the return value (mentioning nextSteps for one case), which is a minor gap given the absence of an output schema.

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%, so the baseline is 3, but the description contributes cross-parameter interaction semantics the per-field schema does not state: which anchor parameters disable auto-layout, the mutual exclusion of flowId vs afterElementId, and the pairing requirement of fromElementId + toLaneId. This meaningfully exceeds restating individual fields.

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?

States a specific verb ("Add") and resource ("elements ... to a BPMN diagram") and enumerates the concrete element categories (tasks, gateways, events). It also distinguishes itself from connect_bpmn_elements by explaining that gateway branches must be wired with that sibling, so an agent can tell the two apart without opening a 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?

Gives explicit operating modes (connect "chain" vs "none"), the gateway exception with a named alternative ("wire branches with connect_bpmn_elements"), and the rule that an entry setting its own anchor/position opts out of chaining and auto-layout. It lacks broader selection guidance against siblings such as move_bpmn_element or batch_bpmn_operations, but the core when/when-not is present.

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

align_bpmn_elementsA
Idempotent

Align or distribute selected elements. Supports two operations: (1) align — align elements along an axis (left, center, right, top, middle, bottom), requires at least 2 elements. Use compact=true to also redistribute with ~50px gaps. (2) distribute — evenly distribute elements horizontally or vertically using edge-to-edge spacing, requires at least 3 elements. Use gap for exact pixel spacing (recommended: 50). ⚠️ Warning: alignment: middle on a process with parallel branches collapses all branches onto a single Y row, causing horizontal overlaps. Use layout_bpmn_diagram instead to re-arrange the full diagram while preserving branch separation. If you must use alignment: middle, pass compact: true to detect and spread overlapping elements on the X axis afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
gapNoFixed edge-to-edge gap in pixels between elements (for distribute operation). Standard BPMN spacing is ~50px. When omitted, elements are evenly distributed within their current span.
compactNoWhen true (align operation), also redistributes elements along the perpendicular axis with ~50px edge-to-edge gaps.
alignmentNoThe alignment direction (for align operation)
diagramIdYesThe diagram ID
elementIdsYesArray of element IDs to align or distribute
orientationNoDistribution direction (for distribute operation)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare readOnlyHint=false and idempotentHint=true, but the description adds crucial destructive-behavior context beyond them: the `alignment: middle` collapse of parallel branches onto a single Y row and the resulting horizontal overlaps. It also prescribes a mitigation (compact=true) and a safer alternative, which is exactly the disclosure a mutation tool needs.

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?

Front-loaded with the core purpose, then numbered operations, then the warning. The warning paragraph is long but each sentence (risk, safer alternative, mitigation) earns its place; minor redundancy in re-explaining compact.

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 6-parameter mutation tool with no output schema, the description covers the operations, preconditions, parameter interactions, failure modes, and the fallback tool. Nothing needed to invoke it correctly is missing.

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%, so the baseline is 3, but the description adds operational meaning: it ties `compact` to the align operation, ties `gap` to distribute and recommends ~50px, and maps the enum values to the align/distribute operations. It goes beyond restating the schema.

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?

States a specific verb ('Align or distribute') and resource ('selected elements'), then enumerates the two operations with their axes. It is clearly distinguishable from siblings like move_bpmn_element or layout_bpmn_diagram.

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

Usage Guidelines5/5

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

Explicitly states the preconditions for each mode (align needs ≥2 elements, distribute needs ≥3) and names the alternative ('Use layout_bpmn_diagram instead to re-arrange the full diagram while preserving branch separation') with the condition that selects it.

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

analyze_bpmn_lanesA
Read-only

Analyze lane organization in a BPMN diagram. Three modes: 'suggest' — analyze tasks and suggest optimal lane assignments based on roles (camunda:assignee/candidateGroups) or element types (human vs automated). Returns structured suggestions with lane names, coherence score, and reasoning. 'validate' — check if current lane assignment makes semantic sense by analyzing cross-lane flow frequency, zigzag patterns, single-element lanes, and overall coherence. Returns structured issues with fix suggestions. 'pool-vs-lanes' — evaluate whether a collaboration should use separate pools (different organizations/systems) or lanes (role separation within one organization). Returns recommendation with confidence and reasoning. Read-only; to assign or redistribute elements use create_bpmn_lanes.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesAnalysis mode: 'suggest' for lane assignment recommendations, 'validate' for checking current lane organization quality, 'pool-vs-lanes' for deciding between pools and lanes.
diagramIdYesThe diagram ID
participantIdNoOptional participant ID to scope the analysis (used with 'suggest' and 'validate' modes).

TDQS

A4.6/5.0
Behavior4/5

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

The description declares 'Read-only', consistent with readOnlyHint=true, and goes beyond the annotations by disclosing what each mode returns (lane names, coherence score, reasoning; issues with fix suggestions; recommendation with confidence). It does not discuss auth, rate limits, or failure modes, but the safety profile is fully covered.

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 purpose is front-loaded, then the three modes are enumerated compactly with their return shapes, ending with the sibling routing. It is longer than most descriptions but nearly every clause carries distinct information; only the repeated mode naming is slightly redundant.

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?

With no output schema, the description compensates by describing the return payload for each mode. Three parameters, full schema coverage, and read-only annotations are all accounted for, leaving nothing an agent needs in order to invoke 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?

Schema coverage is 100%, so the enum values and diagramId/participantId are already documented, giving a baseline of 3. The description adds meaning the schema lacks: that 'suggest' keys off roles (camunda:assignee/candidateGroups) or human-vs-automated element types, and that participantId scopes 'suggest' and 'validate'.

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?

States a specific verb and resource ('Analyze lane organization in a BPMN diagram') and enumerates the three distinct modes with what each produces. It explicitly separates itself from the sibling create_bpmn_lanes, so an agent can route correctly without opening a schema.

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

Usage Guidelines5/5

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

Each mode carries an explicit condition for use ('suggest' for assignment proposals, 'validate' for checking current organization, 'pool-vs-lanes' for the pool/lane decision). It also names the alternative for mutation ('to assign or redistribute elements use create_bpmn_lanes'), giving both when-to-use and when-not-to-use.

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

batch_bpmn_operationsA

Execute multiple BPMN operations in a single call, reducing round-trips. Operations run sequentially. By default, execution stops on first error (set stopOnError: false to continue). When stopOnError is true (default), all changes are rolled back on failure using the bpmn-js command stack. Nested batch calls are not allowed.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationsYesArray of operations to execute sequentially
stopOnErrorNoStop on first error (default: true). Set to false to continue executing remaining operations.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the sparse annotations (readOnlyHint=false, openWorldHint=false) by disclosing sequential execution order, the stop-on-first-error default, the opt-out flag, and the transactional rollback mechanism via the bpmn-js command stack — exactly the failure semantics an agent needs before batching writes.

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?

Four short sentences, zero filler, with the core purpose front-loaded and the execution/rollback semantics following in priority order. Every sentence carries distinct 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?

Covers invocation and failure semantics well for a mutation tool with no output schema, but is silent on the response shape — e.g. whether per-operation results/errors are returned and what a partial run looks like when stopOnError is false.

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% so the baseline is 3, but the description adds real meaning the schema does not: stopOnError's default value and, critically, that rollback behavior is tied to it, which changes how an agent should set the flag.

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?

States a specific verb and resource ('Execute multiple BPMN operations in a single call') plus the benefit (reducing round-trips), which cleanly distinguishes this meta-tool from the individual operation siblings like add_bpmn_elements or connect_bpmn_elements.

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?

Gives a clear context for use (batching multiple operations to cut round-trips) and an explicit constraint ('Nested batch calls are not allowed'), but never states when to prefer individual calls over batching or any prerequisites/call-order limits.

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

bpmn_historyA

Undo or redo changes on a BPMN diagram. Uses the bpmn-js command stack to reverse or re-apply operations. Supports multiple steps. Note: layout operations (layout_bpmn_diagram) bypass the command stack for boundary event repositioning and the normaliseOrigin fallback — these specific changes cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsNoNumber of steps to undo/redo (default: 1).
actionYesThe history action to perform: 'undo' to reverse, 'redo' to re-apply.
diagramIdYesThe diagram ID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false and openWorldHint=false, so the description carries the rest and does so well: it names the underlying command-stack mechanism, notes multi-step support, and warns that a specific class of operations (boundary-event repositioning and the normaliseOrigin fallback) is not undoable. It does not say what happens when the stack is empty or exhausted.

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?

Three tight sentences: purpose first, mechanism second, exception third. Every sentence earns its place and nothing is repeated from the schema.

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 3-parameter mutation tool with no output schema, the description covers action semantics, step handling, and the important incompatibility with layout operations. It leaves some gaps around empty/failed history behavior and whether it targets the currently loaded diagram, but nothing essential to invocation 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 coverage is 100% and each parameter already has a description, so the schema does the heavy lifting. The description's mention of multi-step undo/redo mirrors the 'steps' parameter without adding format or boundary detail (e.g., max steps, behavior past the stack depth).

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?

States a specific verb pair (undo/redo) and resource (BPMN diagram changes) and explains the mechanism (bpmn-js command stack). No sibling among the ~20 list does history reversal, so the agent can distinguish it immediately.

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?

Makes clear this is the tool for reversing or re-applying prior edits, and adds a valuable boundary condition: changes made by layout_bpmn_diagram are outside the command stack and cannot be undone. It stops short of stating explicit when-not conditions (e.g., what to do if there is no history).

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

connect_bpmn_elementsA

Connect BPMN elements. Supports pair mode (sourceElementId + targetElementId), chain mode (elementIds array for sequential connections), or batch mode (connections array for arbitrary source/target pairs, e.g. a gateway's branches with per-branch conditions). Auto-detects connection type: SequenceFlow for normal flow, MessageFlow for cross-pool, Association for text annotations, and DataAssociation for data objects/stores. Supports optional condition expressions for gateway branches and isDefault flag for gateway default flows. To modify an existing connection's label or condition after creation, use set_bpmn_element_properties with the connection's ID. Also supports waypoint mode: provide connectionId + waypoints to set custom routing on an existing connection.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoOptional label for the connection
diagramIdYesThe diagram ID
isDefaultNoWhen connecting from an exclusive/inclusive gateway, set this flow as the gateway's default flow (taken when no condition matches).
waypointsNoOrdered array of waypoints defining the connection path (waypoint mode). Must have at least 2 points (start and end). Use with connectionId.
autoLayoutNoWhen true, run layout_bpmn_diagram automatically after connecting. Useful after the last connection in a sequence. Default: false.
elementIdsNoOrdered list of element IDs to connect sequentially (chain mode). When provided, sourceElementId and targetElementId are ignored.
connectionsNoBatch mode — arbitrary source/target pairs (e.g. a gateway's branches), validated up front and applied as one undo step. Each item takes the same fields as pair mode above.
connectionIdNoID of an existing connection to update waypoints on (waypoint mode). Must be provided together with waypoints.
connectionTypeNoType of connection (default: auto-detected). Usually not needed — the tool auto-detects the correct type.
sourceElementIdNoThe ID of the source element (pair mode)
targetElementIdNoThe ID of the target element (pair mode)
conditionExpressionNoOptional condition expression for sequence flows leaving gateways (e.g. '${approved == true}')

TDQS

A4.3/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false and openWorldHint=false, so the description must carry the behavioral load, and it does: it discloses automatic connection-type detection (SequenceFlow/MessageFlow/Association/DataAssociation), support for condition expressions and isDefault on gateway flows, and the existence of a waypoint-update path. It does not mention undo/permission semantics for the create path, leaving a small gap.

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?

Front-loaded with the verb and the mode enumeration, and each subsequent sentence (auto-detection, condition/isDefault, alternative tool, waypoint mode) carries distinct information. It is dense but nearly every clause earns its place; only slight redundancy between the mode list here and the oneOf descriptions costs it a point.

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 12-parameter mutation tool with no output schema, the description covers modes, auto-detection behavior, gateway-flow options, and the alternative tool for edits. The one notable gap is that waypoint mode requires a connectionId from a prior call, and the description does not state how an agent obtains that ID from the create result.

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%, so the baseline is 3, but the description adds real meaning by mapping parameter groups to named modes and giving a concrete example (a gateway's branches with per-branch conditions) that clarifies the connections array's purpose. It stops short of documenting the individual field names beyond what the schema already states.

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?

States a specific verb+resource ('Connect BPMN elements') and immediately enumerates the four operating modes (pair, chain, batch, waypoint), which lets an agent distinguish the shape of call it needs. It also names the sibling it is not ('To modify an existing connection... use set_bpmn_element_properties'), so it is separable from set_bpmn_element_properties without opening either 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?

Explicitly routes post-creation edits of label/condition to set_bpmn_element_properties with the connection ID, which is a genuine when-to-use-this-vs-alternative statement. It also explains which mode to pick via the source/target shape (pair vs chain vs batch vs waypoint), though it gives no explicit exclusions for the tool as a whole.

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

create_bpmn_diagramA

Create a new BPMN diagram: blank, cloned from an existing diagram (cloneFrom), or imported from existing BPMN XML (xml or filePath). Returns a diagram ID that can be used with other tools. For an xml/filePath import, if the XML lacks diagram coordinates (DI), auto-layout is applied; use autoLayout to force or skip it. Warning: Forcing autoLayout: true on diagrams that already have DI coordinates may reposition elements and can affect boundary event placement — for diagrams with boundary events, subprocesses, or complex structures, prefer autoLayout: false (or omit it to use auto-detection). An xml/filePath import creates a fresh modeler with an empty undo/redo history; combine with export_bpmn filePath to implement an open→edit→save workflow. Use draftMode: true to suppress lint feedback during incremental construction.

ParametersJSON Schema
NameRequiredDescriptionDefault
xmlNoImport existing BPMN XML instead of creating a blank diagram. Alternative to filePath. Ignored when cloneFrom is given.
nameNoOptional name for the diagram / process
filePathNoPath to a .bpmn file to read and import instead of creating a blank diagram. Alternative to xml. Ignored when cloneFrom is given.
cloneFromNoClone an existing diagram instead of creating a blank one. Provide the diagram ID to clone from. Returns a new diagram ID.
draftModeNoWhen true, suppress implicit lint feedback on every operation. Useful during incremental diagram construction to reduce noise. Validation is still available via validate_bpmn_diagram, and export_bpmn still enforces its lint gate. Default: false. Deprecated: use hintLevel instead.
hintLevelNoControls implicit feedback verbosity. 'full' (default) includes lint errors, layout hints, and connectivity warnings. 'minimal' includes only lint errors. 'none' suppresses all implicit feedback (equivalent to draftMode: true). Overrides draftMode when set.
autoLayoutNoWith xml/filePath: force (true) or skip (false) auto-layout. When omitted, auto-layout runs only if the XML has no diagram coordinates. Ignored otherwise.
includeImageNoList of image formats to append to every mutating tool response. Pass ['png'] for a 2×-resolution PNG, ['svg'] for a cropped SVG, or ['png', 'svg'] for both. Also accepts boolean: true = ['png'] (default when omitted), false = no images. Set to [] or false to keep responses small (CI / batch mode).
workflowContextNoOptional hint about the workflow context. 'single-organization' suggests using lanes for role separation within one pool. 'multi-organization' suggests using collaboration with separate pools for distinct organizations. 'multi-system' requires collaboration with message flows between technical systems. Adds structural guidance to the response to help choose the right modeling approach.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare the write/open-world nature, but the description adds substantial context beyond them: it returns a diagram ID for reuse, warns that forcing autoLayout:true may reposition elements and disturb boundary event placement, notes that xml/filePath imports start with an empty undo/redo history, and explains lint-feedback suppression semantics. This is exactly the kind of side-effect disclosure a mutation tool needs.

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?

Front-loads the three creation modes before the return value and caveats, so the primary decision is answered first. It is a dense single block of prose, though; the autoLayout warning and workflow tips could be more scannable, keeping it just shy of a 5.

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 9-parameter, zero-required creation tool with no output schema, the description covers the return value (diagram ID), the mode selection logic, and the major side-effect caveat. It is nearly complete, though it does not explain default naming or what a blank diagram contains.

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%, so the baseline is 3 and the schema carries most parameter documentation. The description still adds meaning on top: it clarifies the mutual exclusivity of cloneFrom vs xml/filePath, the auto-detection rule for autoLayout when omitted, and that hintLevel overrides draftMode. Marginal but real added value over the schema.

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?

States a specific verb (create) and resource (BPMN diagram) and immediately enumerates the three distinct modes: blank, cloned via cloneFrom, or imported from xml/filePath. An agent can tell this apart from add_bpmn_elements, create_bpmn_participant, and the other create-adjacent siblings without opening any schema.

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

Usage Guidelines5/5

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

Explicitly routes between modes: cloneFrom is ignored-alternative to xml/filePath, autoLayout is only meaningful with xml/filePath, and draftMode vs hintLevel precedence is stated. It also names the concrete workflow (combine with export_bpmn filePath for open→edit→save) and the condition for each path, leaving little to inference.

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

create_bpmn_lanesA

Create lanes (swimlanes) within a participant pool. Creates a bpmn:LaneSet with the specified lanes, dividing the pool height evenly (or using explicit heights). Lanes represent roles or departments within a single organization/process. Use lanes for role separation within one pool; use separate pools (participants) for separate organizations with message flows. Requires at least 2 lanes when defined manually. Alternatively, use distributeStrategy to auto-generate lanes: "by-type" groups elements into Human Tasks vs Automated Tasks lanes; "manual" uses elementIds in each lane definition to assign elements explicitly. Use assignments ([{ laneId, elementIds }]) to assign existing elements to existing lanes, or strategy (role-based | balance | minimize-crossings, with dryRun/validate) to redistribute elements across existing lanes. These forms are mutually exclusive. Use mergeFrom to convert a multi-pool collaboration into a single pool with lanes (elements are moved, message flows become sequence flows).

ParametersJSON Schema
NameRequiredDescriptionDefault
lanesNoLane definitions (at least 2). Optional when distributeStrategy is "by-type" (lanes are auto-generated from element types).
dryRunNoWith strategy: return the redistribution plan without applying changes.
layoutNoWhen true (default), runs layout after mergeFrom conversion.
strategyNoRedistribute elements across EXISTING lanes (participantId optional, auto-detected); unlike distributeStrategy, it never creates lanes. 'role-based' matches assignee/candidateGroups to lane names; 'balance' spreads elements evenly; 'minimize-crossings' minimizes cross-lane flows.
validateNoWith strategy: run lane validation before and after redistribution.
diagramIdYesThe diagram ID
mergeFromNoConvert a multi-pool collaboration into lanes within a single pool. Provide the ID of the participant to keep as the main pool. Other expanded pools become lanes, elements are moved, and message flows are converted to sequence flows.
repositionNoWith assignments/strategy (default true): move elements vertically into their lane.
assignmentsNoAssign existing elements to existing lanes (participantId and lane creation not needed).
participantIdNoThe ID of the participant (pool) to add lanes to (required unless using assignments or strategy)
autoDistributeNoWhen true, automatically assigns existing elements in the participant to the created lanes based on matching lane names to element roles (camunda:assignee or camunda:candidateGroups, case-insensitive). Elements without role matches fall back to type-based grouping (human tasks vs automated tasks). Flow-control elements (gateways, events) are assigned to their most-connected neighbor's lane. Run layout_bpmn_diagram afterwards for clean positioning.
distributeStrategyNoAuto-generate and distribute elements to lanes. "by-type": auto-creates lanes based on element types (Human Tasks, Automated Tasks). "manual": uses elementIds in each lane definition to assign elements. When omitted, lanes are created without distribution.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only supply readOnlyHint=false and openWorldHint=false, so the description carries the real burden and does so: it discloses even height division, the 2-lane minimum, that mergeFrom moves elements and converts message flows into sequence flows, and that dryRun/validate return a plan without applying changes. This is behavioral context well beyond the safety profile.

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?

Purpose and the primary lane/pool distinction are front-loaded in the first two sentences, and each subsequent sentence covers a distinct mode rather than restating. It is dense and runs long for a description, with some overlap against the 100%-covered schema, so it falls short of maximally tight.

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 12-parameter tool with several mutually exclusive operating modes and no output schema, the description covers mode selection, prerequisites, side effects (element movement, flow conversion), and dry-run/validation behavior. An agent has enough to choose and invoke the correct mode without further inference.

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%, so the schema already documents each parameter and the baseline is 3. The description still adds value the schema does not: the mutual exclusivity of lanes/distributeStrategy/assignments/strategy/mergeFrom, and the distinction that strategy redistributes across EXISTING lanes and never creates them, unlike distributeStrategy.

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?

States a specific verb and resource ("Create lanes (swimlanes) within a participant pool") and names the underlying construct (bpmn:LaneSet). It also explicitly distinguishes itself from the sibling create_bpmn_participant by contrasting lanes for role separation within one pool versus separate pools for separate organizations.

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

Usage Guidelines5/5

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

Explicitly routes the agent among the tool's own modes: lanes vs distributeStrategy (by-type/manual), assignments vs strategy (role-based/balance/minimize-crossings), and mergeFrom, and it states these forms are mutually exclusive. It also gives the when-not case (use separate pools for separate organizations) and prerequisites (at least 2 lanes when defined manually).

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

create_bpmn_participantA

Create participant(s) (pools) in a BPMN diagram. Single pool: pass name. Wrap existing process: set wrapExisting=true. Multi-pool collaboration: pass participants array (min 2). Camunda 7: only one pool is executable; additional pools must be collapsed. For role separation within one organization, use lanes inside one pool — not multiple expanded pools.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX coordinate (default: 300)
yNoY coordinate (default: auto-positioned below existing participants)
nameNoParticipant/pool name (for single-pool mode)
lanesNoOptional lanes to create within this participant (requires at least 2).
widthNoPool width in pixels (default: 600)
heightNoPool height in pixels (default: 250)
collapsedNoIf true, creates a collapsed pool (thin bar). Use for non-executable partner pools.
diagramIdYesThe diagram ID
processIdNoOptional process ID for the participant's process reference (e.g. "Process_OrderHandling").
participantsNoMulti-pool mode: create multiple participants at once (collaboration). Requires at least 2 entries. When provided, single-pool parameters (name, collapsed, etc.) are ignored.
wrapExistingNoWhen true, wraps the existing process flow nodes into a participant pool without duplicating elements. Use this to convert a plain process into a collaboration. Requires name to be set.
participantIdNoOptional explicit element ID. If omitted, a descriptive ID is generated.
additionalParticipantsNoAdditional collapsed partner pools to create when using wrapExisting mode. Each entry creates a collapsed pool below the main pool.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only supply readOnlyHint=false and openWorldHint=false, so the description carries real behavioral load: the Camunda 7 constraint that only one pool is executable and additional pools must be collapsed is genuine domain semantics an agent could not infer elsewhere. It stops short of stating permissions or what the call returns, keeping it out of 5 territory.

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?

Five short sentences, each tied to a distinct mode or constraint, with the primary use case front-loaded. No filler and no repetition of coordinate/default details that the schema already owns.

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 13-parameter, no-output-schema mutation tool, the description covers the mode-selection logic, the wrap-existing workflow, and the Camunda 7 constraint, which is most of what an agent needs. It omits any note on post-creation return or how the new pool interacts with existing collaboration state, a minor gap.

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% and the schema already documents each parameter, including that participants ignores single-pool params and that wrapExisting requires name. The description's mode framing (name vs wrapExisting vs participants) is a useful synthesis but largely restates structured data, so the baseline 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?

States a specific verb+resource ('Create participant(s) (pools) in a BPMN diagram') and immediately disambiguates against the sibling lane tool by prescribing lanes for intra-organization role separation. An agent can distinguish this from create_bpmn_lanes and add_bpmn_elements without opening a schema.

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

Usage Guidelines5/5

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

Enumerates the three concrete invocation modes (single pool via name, wrapExisting=true, multi-pool via participants with min 2) and gives an explicit when-not: use lanes inside one pool rather than multiple expanded pools. Alternatives and conditions are spelled out rather than implied.

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

delete_bpmn_diagramB
DestructiveIdempotent

Remove a diagram from the in-memory store.

ParametersJSON Schema
NameRequiredDescriptionDefault
diagramIdYesThe ID of the diagram to delete

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds one genuinely useful piece of context not in the annotations — that the store is in-memory — but says nothing about cascading effects on contained elements or irreversibility.

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 short, front-loaded sentence with no filler. Every word carries information and the verb leads.

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 one-parameter tool with full schema coverage and rich annotations, the description is minimally sufficient. It omits the one thing an agent would want to know about a destructive diagram-level delete — whether child elements are removed with it.

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% with a single parameter whose description ('The ID of the diagram to delete') is already complete. The prose adds no format, source, or lookup detail beyond the schema, so baseline 3 applies.

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?

States a specific verb (remove) and resource (diagram) plus a scope qualifier (in-memory store), which separates it from the element-level sibling delete_bpmn_element. It does not explicitly name any sibling, but the resource noun makes the distinction inferable.

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 versus delete_bpmn_element or when to prefer re-creating versus deleting a diagram. No prerequisites, no exclusions, no mention of what happens to the diagram's elements.

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

delete_bpmn_elementA
DestructiveIdempotent

Remove one or more elements or connections from a BPMN diagram. Supports single deletion via elementId or bulk deletion via elementIds array.

ParametersJSON Schema
NameRequiredDescriptionDefault
diagramIdYesThe diagram ID
elementIdNoThe ID of the element or connection to remove (single mode)
elementIdsNoArray of element/connection IDs to remove in a single call (bulk mode). When provided, elementId is ignored.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds the mode-selection rule but omits notable behavior such as whether deleting a node also removes its attached connections or how unknown IDs are handled. With annotations carrying the risk signal, a 3 is appropriate.

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 tight sentences with the core action front-loaded and the mode distinction immediately after. No filler or redundancy.

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?

There is no output schema, and the annotations cover the mutation risk, so the essentials are present. Still missing for a destructive tool: cascade behavior on connected elements, handling of nonexistent IDs, and whether the operation is atomic across a bulk array.

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 three parameters including the elementId/elementIds precedence rule are already documented in the schema. The description merely restates that precedence rather than adding format, validation, or failure semantics, so the baseline 3 applies.

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?

States a specific verb (remove) and resource (elements or connections in a BPMN diagram), which cleanly separates it from delete_bpmn_diagram by scope. It never explicitly names the sibling it differs from, so an agent must infer the distinction from the resource noun alone.

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 explains the two invocation modes (single via elementId, bulk via elementIds) and that bulk takes precedence, which is genuine usage guidance. It gives no when-to-use-vs-alternatives context, e.g. no mention of delete_bpmn_diagram for whole-diagram removal or how this interacts with move/layout tools.

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

export_bpmnA
Read-only

Export a BPMN diagram as XML, SVG, PNG, an animated GIF/APNG/MP4/WebP, or a standalone interactive HTML embed, and write it to a file. By default, runs bpmnlint and blocks export if there are error-level lint issues. Set skipLint to true to bypass validation. Optionally scope to a subprocess or participant via elementId (xml/svg/both only). Use format 'both' to get XML and SVG in a single call. PNG/animated/HTML formats always write to filePath (required for those formats) rather than inlining. Animated formats render token-simulation driven by an optional TOML scenario (see the executable-Camunda-7 guide resource); omit scenario to use the diagram's own default. gif/apng/mp4/webp/html require optional dependencies (gifenc or ffmpeg for encoding, smol-toml for scenario parsing) — errors name the missing one. The exported text content is also returned in the response, unless it is large — beyond a size threshold, xml/svg/both return a bpmn://diagram/{id}/xml or /svg resource_link plus a short summary instead of the full text; pass inline: true to force full text regardless of size. Binary/HTML formats return a confirmation only.

ParametersJSON Schema
NameRequiredDescriptionDefault
fpsNogif/apng/mp4/webp only: rendered animation frame rate.
scaleNopng/animated formats: pixel density multiplier. Default: 2 for png, 1 for animations.
formatYesThe export format: 'xml' for BPMN XML, 'svg' for SVG image, 'both' for XML and SVG in one call, 'png' for a static image, 'gif'/'apng'/'mp4'/'webp' for an animated token-simulation, 'html' for a standalone interactive embed.
inlineNoxml/svg/both only: force full text inline even for a large diagram that would otherwise be summarized as a bpmn://diagram/{id}/xml or /svg resource_link. Default: false.
encoderNogif format only: 'auto' (default) prefers ffmpeg when on PATH for better quality, else the bundled gifenc.
filePathYesFile path to write the exported content to. For 'both' format, writes the XML portion. Required for png/gif/apng/mp4/webp/html. Directories are created automatically.
scenarioNogif/apng/mp4/webp only: TOML scenario steering token-simulation (which gateway branches/events fire, and when). Omit to render the diagram's own default scenario.
skipLintNoSkip lint validation before export. Default: false (lint errors block export).
diagramIdYesThe diagram ID
elementIdNoOptional ID of a SubProcess or Participant to export as a standalone diagram (xml/svg/both only). When provided, lint gating is skipped.
backgroundNopng/animated/html formats: background color (CSS color string, e.g. "white"). Default: transparent.
lintMinSeverityNoMinimum lint severity that blocks export. 'error' (default) blocks only on errors. 'warning' blocks on warnings too. Useful for strict CI pipelines.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare readOnlyHint/openWorldHint; the description carries substantial extra burden: lint gating and its bypass, the sentence-level note that PNG/animated/HTML always write to filePath, optional-dependency failures that name the missing package, and the size-threshold behavior where large xml/svg returns a bpmn:// resource_link plus summary while binary formats return only a confirmation. That is unusually rich behavioral disclosure.

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?

A single dense paragraph, front-loaded with the core action and format list before secondary concerns. Every sentence carries information, though the wall-of-text format with many embedded parentheticals makes it less scannable than it could be for 12 parameters.

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 12-parameter tool with no output schema, the description explicitly covers return behavior (inline text, resource_link for oversized output, confirmation-only for binary), dependency failure modes, and lint interaction. Nothing an agent needs to invoke it correctly 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 coverage is 100% and the schema descriptions already document fps, scale, inline, encoder, filePath, scenario, skipLint, etc. in detail, so the baseline is 3. The description reinforces and slightly extends this (e.g., 'both' writes the XML portion, elementId skips lint gating), but adds little the schema does not already state.

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 precise verb+resource ("Export a BPMN diagram") and enumerates every supported output format, immediately distinguishing it from the create/add/delete/list siblings. An agent can tell exactly what this tool produces without opening 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?

It gives clear in-tool decision guidance: default behavior runs bpmnlint and blocks on errors, skipLint=true bypasses, elementId is scoped to xml/svg/both, format 'both' bundles XML+SVG, and inline=true forces full text. It does not name any sibling alternative, but no competing export tool exists, so the when-to-use context is effectively complete.

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

layout_bpmn_diagramA
Idempotent

Automatically arrange elements in a BPMN diagram using bpmn-auto-layout, producing a clean left-to-right layout with orthogonal connections and placed labels. Handles parallel branches, reconverging gateways, loops, boundary events, subprocesses, pools, lanes, message flows, and artifacts. Use this after structural changes (adding gateways, splitting flows) to automatically clean up the layout. The whole layout is a single undo step in bpmn_history. Use dryRun to preview changes before applying them. Use labelsOnly: true to only adjust label positions without moving elements. Partial layout: pass scopeElementId to re-layout only one participant/subprocess, or elementIds to re-layout only a set of sibling elements (e.g. a newly added branch); the rest of the diagram is left unchanged and connections crossing the boundary are re-routed. Elements positioned with move_bpmn_element are pinned and keep their position until the next full layout.

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNoWhen true, preview layout changes without applying them. Returns displacement statistics showing how many elements would move and by how much. Default: false.
verboseNoWhen true, include full diagnostics: the non-orthogonal flow ID list, per-pool/lane sizing issues, cross-lane crossing flow IDs, the recomputed association ID list, and the full nextSteps list. Default: false — a compact summary with only actionable warnings and up to two nextSteps.
gridSnapNoOptional pixel grid snapping. Pass a number (e.g. 10) to snap element positions to a pixel grid after layout. Off by default.
diagramIdYesThe diagram ID
elementIdsNoOptional IDs of flow elements to layout in isolation. All elements must share the same parent process or subprocess; boundary events follow their host task. The subset keeps its current top-left position. Cannot be combined with scopeElementId.
labelsOnlyNoWhen true, only adjust labels without performing full layout. Useful for fixing label overlaps after importing diagrams or manual positioning.
autosizeOnlyNoWhen true, only resize pools and lanes to fit their contents without running full layout. Accepts participantId to scope resizing to a single pool. Default: false.
participantIdNoOptional. When autosizeOnly is true, scope pool resizing to this participant ID.
poolExpansionNoAdditionally run the pool/lane autosize pass after layout. The layout engine already sizes pools and lanes to fit their contents, so this is rarely needed. Default: false.
scopeElementIdNoOptional ID of a Participant or SubProcess to layout in isolation, leaving the rest of the diagram unchanged. The scope element keeps its top-left position but may be resized.
expandSubprocessesNoWhen true, expand collapsed subprocesses that have internal flow-node children before running layout. Converts drill-down plane subprocesses to inline expanded subprocesses so the layout engine can arrange their children on the main plane. Default: false (preserve existing collapsed/expanded state).

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only give readOnlyHint=false and idempotentHint=true; the description adds substantial behavioral context beyond that: the whole layout is a single undo step in bpmn_history, dryRun previews changes, labelsOnly only moves labels, and elements positioned with move_bpmn_element are pinned. These are exactly the mutation-side effects an agent needs.

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?

Front-loaded with the core behavior before the mode flags and partial-layout details. It is dense and a little long, but each sentence (undo step, dryRun, labelsOnly, partial layout, pinning) carries distinct operational information rather than restating the schema.

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 an 11-parameter mutating tool with no output schema, the description covers the key call paths (full, partial, labels-only, autosize) and the interaction with move_bpmn_element and bpmn_history. Nothing essential for correct invocation appears missing.

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%, so the baseline is 3, but the description adds cross-parameter interaction meaning the schema only partly conveys: the difference between scopeElementId and elementIds, that partial layout re-routes boundary-crossing connections, and that pinned move_bpmn_element positions survive until the next full layout.

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?

States a specific verb and resource (arrange elements in a BPMN diagram) plus the underlying engine (bpmn-auto-layout) and the output shape (left-to-right, orthogonal connections, placed labels). It also enumerates the structural cases it handles, which distinguishes it from align_bpmn_elements and move_bpmn_element.

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?

Explicitly says when to use it ('after structural changes (adding gateways, splitting flows) to automatically clean up the layout') and describes partial-layout alternatives (scopeElementId vs elementIds). It does not directly contrast with the sibling align_bpmn_elements, so the boundary with that tool is left implicit.

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

list_bpmn_diagramsA
Read-only

List all diagrams or get a detailed summary of one. When called without diagramId, lists all diagrams in memory with their IDs, names, and element counts. When diagramId is provided, returns a lightweight summary: process name, element counts by type, participant/lane names, named elements, and connectivity stats. When both diagramId and compareWith are provided, returns a structured diff between the two diagrams (additions, removals, and changes).

ParametersJSON Schema
NameRequiredDescriptionDefault
diagramIdNoOptional. When provided, returns a detailed summary of this specific diagram instead of listing all diagrams.
compareWithNoOptional. When provided alongside diagramId, returns a structured diff between diagramId (base) and compareWith (changed).

Output Schema

ParametersJSON Schema
NameRequiredDescription
successYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds substantive context beyond that: what each mode returns (IDs/names/element counts, summary fields, diff additions/removals/changes). It doesn't cover pagination or limits for the list-all mode, but for a read-only inspection tool this is strong.

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?

Three sentences, one per mode, front-loaded with the no-arg behavior and progressively adding the optional parameters. No filler or redundancy; every clause conveys a distinct behavior.

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?

An output schema exists, so return-value documentation is not required, and the description still sketches each mode's payload. All three call patterns are covered, leaving nothing an agent needs to invoke 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?

Schema description coverage is 100%, so baseline is 3, but the description adds directional semantics the schema lacks: diagramId is the base and compareWith is the changed side of the diff, plus the mutual-dependency rule (compareWith only applies alongside diagramId). That is meaningful value beyond the schema text.

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?

States a specific verb (List) plus a resource (BPMN diagrams) and enumerates three distinct modes keyed to parameters. An agent can distinguish this overview/list tool from list_bpmn_elements and list_bpmn_process_variables without opening any 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?

Explicitly maps each parameter combination to the mode it triggers (no args = list all, diagramId = summary, diagramId+compareWith = diff), giving clear when-to-use guidance. It stops short of naming sibling alternatives or stating when not to use this tool, so it is short of a 5.

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

list_bpmn_elementsA
Read-only

List elements in a BPMN diagram with their types, names, positions, connections, and properties. Supports optional filters to search by name pattern, element type, or property value. When no filters are given, returns all elements — unless the diagram is large, in which case an unfiltered call returns a type-count summary plus a bpmn://diagram/{id}/elements resource_link instead (pass inline: true to force the full list). Pass elementIds to inspect specific elements in full detail (all properties, extension elements, connections, event definitions) instead — ignores the other filters, one or several elements per call.

ParametersJSON Schema
NameRequiredDescriptionDefault
inlineNoForce the full element list even for a large, unfiltered diagram that would otherwise be summarized. Default: false.
propertyNoFilter by a specific property key and optional value
diagramIdYesThe diagram ID
elementIdsNoInspect these specific elements in full detail instead of listing/filtering.
elementTypeNoBPMN element type to filter by (e.g. 'bpmn:UserTask', 'bpmn:ExclusiveGateway')
namePatternNoRegular expression pattern to match against element names (case-insensitive). Only matching elements are returned.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
successYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, but the description goes well beyond by disclosing the large-diagram summarization behavior, the returned bpmn:// resource_link, the inline override, and the detail-expansion semantics of elementIds. These are non-obvious behaviors an agent must know before calling.

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?

Front-loaded with the primary behavior, then filters, then the large-diagram caveat, then the elementIds alternative. Dense and mostly waste-free, though the final sentence about elementIds packs several clauses that could be split for readability.

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?

With an output schema present, return-value detail is not required, and the description still covers the important non-obvious return behavior (summary vs full list plus resource_link). For a 6-param tool with nested objects, this is complete.

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%, so baseline is 3, but the description adds real meaning: inline forces the full list on large unfiltered diagrams, and elementIds switches to a full-detail inspection mode that ignores the other filters. It slightly under-explains how the filters combine, but the added semantics are genuine.

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?

States a specific verb (List) and resource (BPMN diagram elements) plus what is returned: types, names, positions, connections, properties. It is clearly distinguishable from siblings like add_bpmn_elements, delete_bpmn_element, and set_bpmn_element_properties.

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

Usage Guidelines5/5

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

Explicitly covers when to filter (by name pattern, type, property value), what happens without filters (all elements vs type-count summary for large diagrams), how to override that (inline: true), and when to use the elementIds mode instead, noting it ignores other filters. Alternatives and conditions are fully spelled out.

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

list_bpmn_process_variablesA
Read-only

List all process variables referenced in a BPMN diagram. Extracts variables from form fields, input/output parameter mappings, condition expressions, script result variables, loop characteristics, call activity variable mappings, and Camunda properties (assignee, candidateGroups, etc.). Returns each variable with its read/write access pattern and the elements that reference it — unless the diagram references a lot of variables, in which case it returns just the names plus a bpmn://diagram/{id}/variables resource_link (pass inline: true to force the full list).

ParametersJSON Schema
NameRequiredDescriptionDefault
inlineNoForce the full variable list even for a large diagram that would otherwise be summarized. Default: false.
diagramIdYesThe diagram ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
successYes
variableCountYes

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnly/openWorld annotations, the description discloses a non-obvious behavioral trait: large diagrams return only variable names plus a bpmn://diagram/{id}/variables resource_link, and inline: true forces the full list. It also states the per-variable return shape (read/write access pattern plus referencing elements). This is exactly the kind of conditional behavior an agent cannot infer from annotations or schema.

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?

Three sentences, purpose front-loaded, and the long enumeration of extraction sources is genuinely load-bearing for predicting results. The final sentence is dense but carries the truncation rule and the escape hatch, so it earns its length; only minor trimming is possible.

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?

An output schema exists, yet the description still explains the conditional return behavior and how to defeat the summarization, which is what an agent actually needs to decide on inline. Nothing required to invoke or interpret this tool correctly is missing.

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%, so the baseline is 3, but the description adds real meaning by explaining the summarization path that inline overrides and by tying it to the resource_link fallback, which the schema text alone does not connect. diagramId still gets no added semantics beyond its schema entry.

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?

States a specific verb and resource ('List all process variables referenced in a BPMN diagram') and then enumerates the exact source constructs it scans (form fields, I/O mappings, condition expressions, script results, loop characteristics, call activity mappings, Camunda properties). This is clearly distinguishable from the sibling list_bpmn_elements, which enumerates structural elements rather than variables.

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 when the tool is useful (analyzing variable usage across a diagram) but never states when to prefer it over siblings such as list_bpmn_elements or bpmn_history, nor any exclusions or prerequisites. Usage is left to inference from the purpose statement.

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

manage_bpmn_root_elementsA
Idempotent

Create or update shared root-level bpmn:Message and bpmn:Signal definitions. These shared definitions can be referenced from multiple event definitions across the diagram via messageRef/signalRef in set_bpmn_element_properties's eventDefinition sub-object.

ParametersJSON Schema
NameRequiredDescriptionDefault
signalsNoSignal definitions to create or update
messagesNoMessage definitions to create or update
diagramIdYesThe diagram ID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, idempotentHint=true, and openWorldHint=false, so the mutating-but-idempotent safety profile is already covered. The description adds genuine context beyond that: these are shared, cross-referenced definitions, implying a change can affect multiple event definitions. It does not, however, state update semantics (replace vs. merge) or what happens to omitted definitions.

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, front-loaded with the action and resource, followed by the reference context. No filler; every clause earns its place.

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 mutation tool with no output schema and full schema coverage, the description supplies the needed purpose and reference semantics. It stops short of explaining update behavior for existing definitions or whether omitted arrays are left untouched, which would make it fully 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%, so the schema already documents diagramId, messages, and signals with their id/name sub-fields. The description references messageRef/signalRef but adds no syntax or format detail beyond the schema, so the baseline 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?

States a specific verb pair (create or update) and precise resource (shared root-level bpmn:Message and bpmn:Signal definitions). This clearly distinguishes it from element-level siblings like add_bpmn_elements and even names set_bpmn_element_properties as the consumer of these definitions.

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 makes the use case clear: define shared message/signal objects that multiple event definitions reference. It names the sibling mechanism (messageRef/signalRef via set_bpmn_element_properties) that consumes them, giving strong routing context. It lacks an explicit when-not-to-use exclusion, so it falls short of a 5.

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

move_bpmn_elementA
Idempotent

Move, resize, or reassign an element to a lane. Any combination of x/y (absolute move), width/height (resize, top-left preserved), and laneId (auto-centered) — at least one required. For several elements at once, pass moves: [{ elementId, x?, y?, width?, height?, laneId? }] instead — validated up front, applied as one undo step.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoNew X coordinate. Required unless laneId is given.
yNoNew Y coordinate. Required unless laneId is given.
movesNoBatch form — see the tool description.
widthNoNew width in pixels (top-left preserved).
heightNoNew height in pixels (top-left preserved).
laneIdNoTarget lane ID; x/y are ignored and the element is auto-centered in the lane.
diagramIdYesThe diagram ID
elementIdNoElement to move or resize. Omit when using `moves`.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare the mutation (readOnlyHint=false), idempotency, and closed-world scope. The description adds real behavioral context beyond that: resize preserves top-left, laneId auto-centers and ignores x/y, and batch moves are validated up front and collapse into one undo step.

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, front-loaded with the core action, then the constraint, then the batch alternative. Every clause carries information; no filler.

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 mutating tool with annotations covering safety and idempotency and no output schema, the description covers operations, constraints, and batch behavior well. It could note failure modes (e.g., invalid laneId/elementId) but is largely complete.

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%, so baseline is 3, but the description adds the combination semantics (any mix of coordinates/size/lane, at least one required) that the schema does not express, plus the top-left/auto-center behavior. It earns above baseline without duplicating schema text.

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?

States specific verbs (move, resize, reassign) plus the resource (BPMN element to a lane), and the sibling set (align_bpmn_elements, layout_bpmn_diagram) is clearly not this operation. An agent can distinguish it without opening 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?

Explains the constraint that any combination is allowed but at least one of x/y, width/height, or laneId is required, and explicitly routes to the batch `moves` form for several elements. It does not name competing siblings (align/layout), so it falls just short of a 5.

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

set_bpmn_element_propertiesA
Idempotent

Set BPMN or Camunda extension properties on an element. Supports standard properties (name, isExecutable, documentation, default, conditionExpression) and Camunda extensions with camunda: prefix (e.g. camunda:assignee, camunda:class, camunda:type, camunda:topic). Also handles: scriptFormat/script on ScriptTask, camunda:connector, camunda:field, camunda:properties, camunda:retryTimeCycle, isExpanded on SubProcess, and cancelActivity on BoundaryEvent (false = non-interrupting). See bpmn://guides/element-properties for the full property catalog by element type. Supports optional elementType to replace the element type (e.g. bpmn:Task → bpmn:UserTask). Also accepts optional sub-objects for other concerns, settable together with properties in one call: inputOutput, formData, listeners, callActivityVariables, loop, eventDefinition. To update several elements in one call — e.g. setting camunda:assignee on every task in an executable process — pass updates: [{ elementId, properties, ... }] instead of the single-element elementId/properties/etc. fields. Every item is validated before any element is changed, and the whole batch applies as one undo step.

ParametersJSON Schema
NameRequiredDescriptionDefault
loopNoLoop/multi-instance characteristics on tasks, subprocesses, or call activities. Equivalent to the former set_bpmn_loop_characteristics tool.
updatesNoBatch form: apply properties/elementType/sub-objects to several elements in one call, as a single undo step. Alternative to the single-element elementId (+ properties/elementType/...) fields above — do not combine elementId with updates.
formDataNoGenerated task form fields (camunda:FormData) for UserTasks/StartEvents. Equivalent to the former set_bpmn_form_data tool.
diagramIdYesThe diagram ID
elementIdNoThe ID of the element to update. Required unless `updates` is used instead.
listenersNoExecution listeners, task listeners, and/or error event definitions. Equivalent to the former set_bpmn_camunda_listeners tool.
propertiesNoKey-value pairs of properties to set. Use 'camunda:' prefix for Camunda extension attributes (e.g. { 'camunda:assignee': 'john', 'camunda:formKey': 'embedded:app:forms/task.html' }).
elementTypeNoOptional element type to replace the element with (e.g. "bpmn:UserTask", "bpmn:ServiceTask"). When provided, replaces the element type before setting properties.
inputOutputNoCamunda input/output parameter mapping (camunda:InputOutput). Equivalent to the former set_bpmn_input_output_mapping tool.
eventDefinitionNoEvent definition to add/replace on an event element (StartEvent, EndEvent, IntermediateCatchEvent/ThrowEvent, BoundaryEvent).
callActivityVariablesNoCallActivity in/out variable mappings (camunda:in / camunda:out). Equivalent to the former set_bpmn_call_activity_variables tool.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and idempotentHint=true; the description adds real behavioral context beyond that: 'Every item is validated before any element is changed, and the whole batch applies as one undo step,' and it notes that listener sub-objects 'replace existing.' It stops short of describing failure modes or permission requirements.

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?

It is long but front-loaded and each sentence carries distinct information (supported property families, batch form, validation/undo semantics). The element-type replacement detail is repeated from the schema but the density is justified for a tool this broad.

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 an 11-parameter, deeply nested mutation tool with no output schema, the description covers the key concerns: what can be set, the batch alternative, validation-before-application, and single-undo-step behavior. Return values are omitted, but callers of a setter rarely need them described.

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 description coverage is 100%, so the schema already documents parameters; baseline would be 3. The description adds value by clarifying the mutually exclusive single-element vs `updates` batch forms and by pointing to bpmn://guides/element-properties for the property catalog, which goes beyond what any single schema field says.

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+resource ('Set BPMN or Camunda extension properties on an element') and then enumerates the concrete property families it handles (standard props, camunda: extensions, scriptFormat, listeners, etc.). It clearly distinguishes this consolidated setter from element-creation siblings like add_bpmn_elements.

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?

It gives explicit guidance on the batch-vs-single choice ('pass `updates: [...]` instead of the single-element elementId/properties/etc. fields') and notes not to combine elementId with updates. It does not, however, state when to prefer this tool over siblings such as manage_bpmn_root_elements or add_bpmn_elements.

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

validate_bpmn_diagramA
Read-only

Validate a BPMN diagram using bpmnlint rules. Returns structured issues with rule names, severities, element IDs, documentation URLs, and fix suggestions (concrete MCP tool calls to resolve each issue). Uses bpmnlint:recommended by default with tuning for AI-generated diagrams. Supports custom config overrides.

ParametersJSON Schema
NameRequiredDescriptionDefault
configNoOptional bpmnlint config override. Default extends bpmnlint:recommended.
diagramIdYesThe diagram ID
lintMinSeverityNoMinimum lint severity that marks the diagram as invalid. 'error' (default) counts only errors. 'warning' counts warnings too.

Output Schema

ParametersJSON Schema
NameRequiredDescription
validYes
successYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, so safety profile is covered. The description adds significant behavioral detail: returns structured issues with rule names, severities, element IDs, documentation URLs, and fix suggestions as concrete MCP tool calls. This goes well beyond annotations, though it doesn't mention performance or determinism.

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?

Three sentences, front-loaded with the core action and engine, followed by return value details and configuration options. No filler, every sentence adds value.

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 presence of an output schema, the description doesn't need to detail return values but still summarizes them helpfully. It covers default configuration, custom overrides, and validation severity behavior. An agent has everything needed to call and interpret the 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?

Schema coverage is 100% – all parameters (diagramId, config, lintMinSeverity) are fully described in the schema. The description mentions 'config overrides' and 'bpmnlint:recommended by default', which slightly reinforces the schema but adds no new syntax or format details. Baseline 3 is appropriate when 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?

States a specific verb+resource ('Validate a BPMN diagram') and the engine used ('bpmnlint rules'). No sibling tool performs validation, so the purpose is unambiguous from the name and description.

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?

Clear context: validating a BPMN diagram against bpmnlint rules. It mentions default config ('bpmnlint:recommended by default with tuning for AI-generated diagrams') and custom overrides, implying when to use defaults vs. custom. No explicit when-not-to-use or alternative, but the validation function is singular in the toolset.

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.

  1. 20 tool updatesv1.0.0
    • First observedadd_bpmn_elements
    • First observedalign_bpmn_elements
    • First observedanalyze_bpmn_lanes
    • First observedbatch_bpmn_operations
    • First observedbpmn_history
    • First observedconnect_bpmn_elements
    • First observedcreate_bpmn_diagram
    • First observedcreate_bpmn_lanes
    • First observedcreate_bpmn_participant
    • First observeddelete_bpmn_diagram
    • First observeddelete_bpmn_element
    • First observedexport_bpmn
    • First observedlayout_bpmn_diagram
    • First observedlist_bpmn_diagrams
    • First observedlist_bpmn_elements
    • First observedlist_bpmn_process_variables
    • First observedmanage_bpmn_root_elements
    • First observedmove_bpmn_element
    • First observedset_bpmn_element_properties
    • First observedvalidate_bpmn_diagram

TDQS

A4/5.0

Scored across 20 tools

Disambiguation4/5

Most tools have clearly distinct resource+action targets (create/add/delete/move/connect elements, manage diagrams/pools/lanes, validate/export). Some potential overlap exists between add_bpmn_elements (which can chain-connect) and connect_bpmn_elements, and between align_bpmn_elements and layout_bpmn_diagram, but the descriptions explicitly clarify boundaries.

Naming Consistency4/5

Names follow a consistent verb_bpmn_noun pattern (e.g., create_bpmn_diagram, add_bpmn_elements, set_bpmn_element_properties). Exceptions like bpmn_history (no verb, reversed order) and export_bpmn (no noun) are minor and remain readable.

Tool Count4/5

20 tools is on the heavy side, but the domain—full BPMN modeling, layout, validation, export, and analysis—justifies the breadth. Each tool covers a distinct, non-trivial capability, though a few read-only analyzers could theoretically be folded into list or validate tools.

Completeness4/5

The surface covers create/read/update/delete for diagrams, elements, connections, pools, lanes, and properties, plus validation, export, history, and batch operations. Minor gaps include no explicit tool to rename/update diagram metadata or delete shared root elements, but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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
    14
    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
    12
    -
  • 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
    -