camunda-mcp
camunda-mcp
MCP server (Model Context Protocol) com ferramentas para modelar BPMN Camunda 7, em Node.js, independente do Camunda Modeler.
Construído sobre bpmn-moddle e
camunda-bpmn-moddle, os mesmos
módulos do projeto bpmn-js — então o XML gerado é 100% compatível com o
Camunda Modeler / bpmn-js. Layout/DI é regenerado pelo
bpmn-auto-layout.
Namespace de extensão usada: http://camunda.org/schema/1.0/bpmn (Camunda 7).
Instalação
git clone https://github.com/fssou/camunda-mcp.git
cd camunda-mcp
npm install
npm run buildUso em clientes MCP
Claude Desktop / Cursor / Continue (stdio)
Adicione no mcpServers do seu cliente:
{
"mcpServers": {
"camunda7": {
"command": "node",
"args": ["/caminho/absoluto/para/camunda-mcp/dist/index.js"]
}
}
}Após salvar, o cliente lista todas as ferramentas (~40) prefixadas com camunda7.
Execução standalone (debug)
node dist/index.js
# imprime no stderr: "@fssou/camunda-mcp v0.1.0 ready on stdio"
# espera mensagens MCP JSON-RPC em stdinFerramentas disponíveis
Ciclo de vida do diagrama
Tool | Descrição |
| Cria um novo diagrama em memória. Retorna |
| Lista diagramas abertos. |
| Descarta um diagrama. |
| Importa um XML BPMN 2.0. |
| Importa um arquivo |
| Serializa para XML. |
| Grava |
| Regenera |
| Lista erros/warnings estruturais. |
Elementos BPMN
Tool | Descrição |
| StartEvent (`none |
| EndEvent (`none |
| IntermediateCatchEvent / IntermediateThrowEvent. |
| BoundaryEvent anexado a uma atividade (interrupting ou não). |
| Task / UserTask / ServiceTask / SendTask / ReceiveTask / ScriptTask / BusinessRuleTask / ManualTask. |
| Exclusive / Parallel / Inclusive / EventBased / Complex. |
| SubProcess / Transaction / AdHocSubProcess (event sub-process via |
| CallActivity ( |
| Anotação de texto. |
| Remove o elemento e os fluxos incidentes. |
| Lista elementos (filtros por tipo / parentId). |
| Inspeciona um elemento e suas extensões Camunda. |
| Mutações genéricas. |
Fluxos
Tool | Descrição |
| Cria um |
| Cria um |
| Cria uma |
| Marca um fluxo como default de um gateway/atividade. |
| Define um |
Pools e lanes
Tool | Descrição |
| Cria um Participant (pool) — promove o diagrama para |
| Cria uma Lane em um Participant. |
| Adiciona um flow node a uma lane ( |
Extensões Camunda 7
Tool | Descrição |
|
|
|
|
|
|
|
|
|
|
| Substitui |
| Anexa |
| Anexa |
| Configura |
|
|
| Cria/reusa |
| Cria/reusa |
|
|
Exemplo de fluxo
Após o cliente MCP chamar as ferramentas, o XML produzido tem o seguinte formato (Camunda 7 plenamente válido):
<bpmn:definitions xmlns:bpmn="..." xmlns:camunda="http://camunda.org/schema/1.0/bpmn">
<bpmn:process id="Approval_Process" isExecutable="true"
camunda:versionTag="1.0.0" camunda:historyTimeToLive="P30D">
<bpmn:startEvent id="Event_..." name="Pedido recebido" />
<bpmn:userTask id="Activity_..." name="Aprovar pedido"
camunda:candidateGroups="gerentes" camunda:dueDate="P1D"
camunda:asyncBefore="true" camunda:exclusive="true"
camunda:formKey="embedded:app:forms/approve.html" />
<bpmn:exclusiveGateway id="Gateway_..." name="Aprovado?" />
<bpmn:serviceTask id="Activity_..." name="Faturar"
camunda:delegateExpression="${invoiceService}">
<bpmn:extensionElements>
<camunda:inputOutput>
<camunda:inputParameter name="orderId">${execution.getVariable("orderId")}</camunda:inputParameter>
<camunda:outputParameter name="invoiceId">${result.id}</camunda:outputParameter>
</camunda:inputOutput>
<camunda:properties>
<camunda:property name="retries" value="5" />
</camunda:properties>
<camunda:executionListener event="end" expression="${endListener.notify(execution)}" />
</bpmn:extensionElements>
</bpmn:serviceTask>
<bpmn:endEvent id="Event_..." name="Pedido recusado">
<bpmn:errorEventDefinition errorRef="Error_PEDIDO_RECUSADO" />
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_..." name="Aprovado" sourceRef="Gateway_..." targetRef="Activity_...">
<bpmn:conditionExpression>${approved}</bpmn:conditionExpression>
</bpmn:sequenceFlow>
</bpmn:process>
<bpmn:error id="Error_PEDIDO_RECUSADO" name="Pedido recusado" errorCode="PEDIDO_RECUSADO" />
</bpmn:definitions>Use auto_layout para regenerar bpmndi:BPMNDiagram quando o diagrama mudar.
Desenvolvimento
npm install
npm run build # compila TS → dist/
npm run typecheck # tsc --noEmit
npm run lint # eslint
npm test # vitest (smoke end-to-end)
npm run dev # roda src/index.ts via tsx (stdio)A árvore do projeto:
src/
├── index.ts # stdio entrypoint
├── server.ts # buildServer() — factory de McpServer
├── store.ts # DiagramStore + DiagramSession
├── bpmn/
│ ├── moddle.ts # cria BpmnModdle com camunda 7 descriptor
│ ├── builder.ts # BpmnBuilder — adiciona/remove elementos
│ ├── camunda.ts # helpers de extensões Camunda 7
│ ├── layout.ts # wrapper de bpmn-auto-layout
│ ├── validate.ts # validateDiagram()
│ ├── xml.ts # fromXML / toXML / indexById
│ └── types.ts # uniões discriminadas de tipos BPMN
└── tools/
├── registry.ts # schemas Zod por tool
└── handlers.ts # dispatch(toolName, params)
test/
└── smoke.test.ts # end-to-end: criação → exportação → auto-layout → round-tripLicença
MIT — veja LICENSE.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/fssou/camunda-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server