openflowkit
GitHub基于 openflowkit MCP 服务,生成并管理流程图、架构图等可视化图表。支持 Mermaid/OpenFlow DSL 编写,通过工具链验证语法、创建和更新图表,保存为 JSON/SVG 并与代码关联,辅助架构分析与文档说明。
Trigger Scenarios
Install
npx skills add openflowkit/openflowkit --skill openflowkit -g -y
SKILL.md
Frontmatter
{
"name": "openflowkit",
"description": "Draw diagrams that stay valid, editable and saved next to the code. Use when a flowchart, architecture, sequence, state, ER, class, mindmap or git graph would explain something better than prose, or when the user asks for a diagram. Needs the openflowkit MCP server."
}
OpenFlowKit diagrams
Write Mermaid or OpenFlow DSL, hand it to the openflowkit MCP server, and save the result as a
.openflow.json beside the code it explains: it opens at app.openflowkit.com (Open file) and reads back.
When to draw: a flow with branches, a system with more than three moving parts, a protocol, a data model, a state machine. Not a list, a single call, or what one sentence explains.
Setup (once)
claude mcp add -s user openflowkit -- npx -y openflowkit mcp (any MCP client: npx -y openflowkit mcp); it
calls no outside service. In claude.ai or ChatGPT, https://mcp.openflowkit.com/mcp draws chat cards only.
Draw and save
- Write the diagram in Mermaid (what you already know) or OpenFlow DSL (below).
validate_openflow_dslwith{ dsl }untilok. Fix everyerror: a line the parser dropped is one, with its line and a hint. Warnings are guesses; read them. For Mermaid (or Structurizr DSL, D2),converted.lossesname what did not carry over andconverted.dslis what it became.- With an editor paired (
whoami; if not, ask the user to open app.openflowkit.com/#/connect),create_diagramwith{ dsl }draws where the user is looking. Otherwise use file mode:openflow_create, thencreate_diagramwith{ dsl, documentId }. openflow_savewith{ path }(plusdocumentIdin file mode) beside the code, e.g.src/payments/checkout-flow.openflow.json;svg: truealso writes a.svg(for a README).- Tell the user the path, and what you left out.
Change a diagram
get_diagram returns the DSL and frameId (file mode: openflow_open first, then pass
documentId) → edit the text → update_diagram with { frameId, dsl } → openflow_save.
Not create_diagram again: that draws a second diagram. update_diagram redraws from the text, so
canvasEdits (the user's recolours, moves, renames) are lost unless you merge each carry into that
node's one [ … ] list; discarded lists any lost. "The box I selected" is selection in get_document.
Draw this repo's architecture
discover_architecture with { path } proposes a C4 workspace (dsl) from the code. Review its
names, create_diagram with it, and write the text to architecture.ofk at the repo root; later,
drift_report with { path } says what the code gained or lost since.
OpenFlow DSL in one screen
First line is the family: flowchart, architecture, sequence, state, erd, class,
mindmap, gitgraph, optionally with a direction (flowchart right). Lines are statements;
// starts a comment. Nodes are declared by name; edges declare their ends.
flowchart right
title: Checkout
group Payments {
Pay [diamond]
Stripe [icon: tabler/brand-stripe]
}
Cart -> Pay : card ok?
Pay -> Done [ellipse, green] : yes
Pay --> Cart : no [red]
Pay -> Stripe : charge [thick]
- Arrows:
->solid,-->dashed,<->both ends,--no heads,A -> B : label. - Attributes go in
[ … ]: a shape, a colour, a fill, flags, orkey: value. - Shapes:
rect rounded circle ellipse diamond cylinder hexagon cloud doc note parallelogram person queue component browser mobile - Colours:
blue green red orange violet teal pink yellow grayor#hex. - Icons:
icon: aws/lambda,gcp/pubsub,tech/react,tabler/user. A node whose label names a technology (Postgres,Redis,S3 bucket) gets its icon by itself;icon: nonestops it.iconpos: leftdraws an icon card as a row, the icon beside its name.search_iconsfinds exact ids. group Name { … }boxes the nodes first mentioned inside it, so open groups before edges. An edge toNameends on the group itself.note Name : textpins a sticky to a node.
sequence
participant Browser [person]
Browser -> API : POST /login
API -> DB : find user
DB --> API : row
alt valid {
API --> Browser : 200 + token
} else invalid {
API --> Browser : 401
}
erd
users {
id uuid pk
email text unique
}
orders {
id uuid pk
user_id uuid fk
}
users ||--o{ orders : places
For any other family, or more detail, call get_syntax with the family name.
Mermaid works too
flowchart LR
A[Client] -->|HTTPS| B(API)
B --> C[(Postgres)]
Converts: flowchart, sequenceDiagram, stateDiagram, classDiagram, erDiagram, mindmap, architecture-beta,
gitGraph; not gantt, pie, journey (write chart bar DSL, see get_syntax). Structurizr and D2 text convert too.
Rules
- One diagram per idea; split before forty nodes. Name nodes as the code does (
OrderService). - Do not place coordinates; layout is computed. Change the text and
update_diagram. - Check before you claim:
validate_openflow_dslpasses, then save, then report the path.
Version History
- 9786bc7 Current 2026-10-19 02:12


