Lets Claude Desktop, Cursor, and Windsurf create and manipulate flowcharts, architecture diagrams, and other structured visuals in the OpenFlowKit web app running locally. You can ask your AI assistant to generate diagrams from natural language, paste Mermaid syntax that gets auto-enriched with 1,600+ tech icons, export to MP4 walkthroughs, or edit the bidirectional diagram-as-code DSL. The server acts as a bridge so your editor can drive the full OpenFlowKit canvas without leaving the chat window. Useful when you're documenting systems, explaining architectures to teammates, or prototyping data flows and want the diagram to live alongside your code with zero cloud dependencies.
claude mcp add openflowkit-mcp -- npx -y @vrun-design/openflowkit-mcpRun in your terminal. Replace YOUR_* placeholders with real values; add --scope user to install for every project.
Review the command, arguments, and environment values before installing — MCP servers run with your local permissions.
Verified live against the running server on Jun 10, 2026.
validate_openflow_dslLint an OpenFlow DSL document. Returns structured diagnostics (errors + warnings), declared node ids, and edge count. No network access; runs locally.1 paramsLint an OpenFlow DSL document. Returns structured diagnostics (errors + warnings), declared node ids, and edge count. No network access; runs locally.
dsl*stringanalyze_codebaseWalk a directory on disk and report detected cloud platform, services, top-level structure, and language breakdown. No network access — pure local filesystem scan. Useful to seed an architecture diagram.2 paramsWalk a directory on disk and report detected cloud platform, services, top-level structure, and language breakdown. No network access — pure local filesystem scan. Useful to seed an architecture diagram.
maxFilesintegerrootPath*stringlist_starter_templatesList built-in OpenFlow starter templates that can be loaded without any AI call. Returns names, titles, categories, and one-line summaries.List built-in OpenFlow starter templates that can be loaded without any AI call. Returns names, titles, categories, and one-line summaries.
No parameters — call it with no arguments.
get_starter_templateReturn the OpenFlow DSL for a named starter template. Use list_starter_templates to discover available names.1 paramsReturn the OpenFlow DSL for a named starter template. Use list_starter_templates to discover available names.
name*stringlist_diagram_node_typesQuick reference for every supported OpenFlow node type and edge style. Use this when authoring DSL by hand or when guiding another agent.Quick reference for every supported OpenFlow node type and edge style. Use this when authoring DSL by hand or when guiding another agent.
No parameters — call it with no arguments.
server_infoReturn version, capabilities, and a self-test report from the MCP server. Useful when debugging client connections.Return version, capabilities, and a self-test report from the MCP server. Useful when debugging client connections.
No parameters — call it with no arguments.
find_iconFuzzy-search the OpenFlowKit icon catalog (1600+ icons across AWS, Azure, GCP, CNCF, and developer brand logos). Returns ranked matches with their `provider` and `slug` values, which you pass back into [architecture] node attributes as `archProvider` and `archResourceType` to...3 paramsFuzzy-search the OpenFlowKit icon catalog (1600+ icons across AWS, Azure, GCP, CNCF, and developer brand logos). Returns ranked matches with their `provider` and `slug` values, which you pass back into [architecture] node attributes as `archProvider` and `archResourceType` to...
limitintegerquery*stringproviderstringcreate_viewer_urlBuild a shareable OpenFlowKit viewer URL for agent-authored OpenFlow DSL. No AI provider, network call, account, or API key is required. Always validate the DSL first or inspect the returned lint report before showing the URL.1 paramsBuild a shareable OpenFlowKit viewer URL for agent-authored OpenFlow DSL. No AI provider, network call, account, or API key is required. Always validate the DSL first or inspect the returned lint report before showing the URL.
dsl*stringCreate flows from templates, code, structured imports, or AI. Refine them visually, keep them local-first, and export as Cinematic MP4 walkthroughs — or drive everything from Claude / Cursor / Windsurf via our first-party MCP server.
→ Launch the App | Documentation | Website | Issues | Contribute
| ✨ Mermaid → Icons Paste Mermaid · 1,600+ icons auto-assigned · beautiful | 🤖 AI Generation 10 providers inc. local Ollama Direct-to-canvas output | `{}` Diagram as Code Bidirectional live sync Git-friendly DSL | 🧩 Asset Libraries Developer · AWS · Azure GCP · CNCF · Icons | 🎬 Cinematic MP4 WebCodecs H.264 Faster-than-realtime |
| 🧷 Anchored Layout Pin nodes — auto-layout rearranges around them | 🪄 MCP Server Drive from Claude Desktop, Cursor, Windsurf | ⚡ Worker Layout ELK runs off main thread UI stays responsive | 🦙 Local AI Ollama localhost preset fully offline diagramming | ♻️ Self-Correcting AI Bad DSL → AI sees its own output and repairs it |
|
|
|
Every diagramming tool makes a compromise. OpenFlowKit doesn't.
| Tool | What's missing |
|---|---|
| Excalidraw / tldraw | Freeform whiteboards — no structured diagram types, no DSL, no code imports |
| Mermaid.js | Code-only — no visual canvas, no AI, no interactive editor |
| Draw.io | Decade-old UX — Limited AI integration, no developer import pipelines |
| Lucidchart / Miro | Cloud lock-in — expensive, account required, your data lives on their servers |
| PlantUML | Server-dependent rendering — no visual editor, no local-first model |
OpenFlowKit is the only MIT-licensed tool that combines a real workspace home, a professional visual canvas, bidirectional diagram-as-code, AI generation from 10 providers (including fully-local Ollama), automatic icon assignment from 1,600+ tech icons, anchored auto-layout, hardware-encoded cinematic MP4 export, and a Model Context Protocol server so Claude / Cursor / Windsurf can drive it directly — all with zero server-side storage.
| OpenFlowKit | Excalidraw | Draw.io | Mermaid | Lucidchart | |
|---|---|---|---|---|---|
| Visual canvas editor | ✅ | ✅ | ✅ | ❌ | ✅ |
| Bidirectional diagram-as-code | ✅ | ❌ | ❌ | ✅ | ❌ |
| AI generation (10 providers + Ollama) | ✅ | ❌ | ❌ | ❌ | Limited |
| Mermaid import (8 types) | ✅ | ❌ | ⚠️ | ✅ | ❌ |
| Auto-icon assignment (1,600+) | ✅ | ❌ | ❌ | ❌ | ❌ |
| AWS / Azure / GCP / CNCF icons | ✅ | ❌ | ✅ | Partial | ✅ |
| Anchored auto-layout (pin nodes) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Cinematic MP4 export (WebCodecs) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Figma export (editable SVG) | ✅ | ❌ | ❌ | ❌ | ❌ |
| No account required | ✅ | ✅ | ✅ | ✅ | ❌ |
| Open source (MIT) | ✅ | ✅ | ✅ | ✅ | ❌ |
Paste any Mermaid flowchart, architecture, state diagram, class diagram, ER diagram, sequence diagram, mindmap, or journey — all 8 diagram families. OpenFlowKit renders it on a visual canvas and automatically assigns the correct branded icon to every technology node.
flowchart TD
API[Express API] --> DB[(PostgreSQL)]
DB --> Cache[Redis Cache]
Cache --> Queue[RabbitMQ]
Paste this → you get the Express wordmark, PostgreSQL elephant, Redis logo, and RabbitMQ icon — all auto-detected, all beautifully laid out. No other tool does this.
1,600+ icons from developer, AWS, Azure, CNCF, and GCP catalogs are matched automatically based on node labels. No manual drag-and-drop. No configuration.
npm run test:mermaid runs the broad Mermaid parser/plugin/round-trip gatenpm run test:mermaid:layout runs the layout, import-state, and recovery corpus gatenpm run test:mermaid:gold runs both togetherDescribe your system in plain English. AI generates a diagram on the canvas with correct icons applied automatically.
| Prompt | Output |
|---|---|
| "Node.js API with PostgreSQL and Redis" | 3 nodes with correct icons |
| "AWS Lambda → SQS → DynamoDB" | 3 nodes with AWS icons |
| "React frontend → Express → MongoDB → S3" | 4 nodes across developer + AWS catalogs |
10 providers supported: Google Gemini, OpenAI, Anthropic Claude, Groq, Mistral, NVIDIA NIM, Cerebras, OpenRouter, Ollama (fully local), or any custom OpenAI-compatible endpoint. Bad DSL from any provider is now auto-repaired — the model sees its own broken output and the parser error, then returns corrected DSL in a single follow-up turn.
OpenFlowKit now treats the product as two clear surfaces:
That means the app does not create a fake default flow just to get you onto the canvas. If you delete everything, your workspace can stay empty until you intentionally create the next flow.
Flowpilot sits directly in the editor. Describe a system, paste source code, upload a screenshot, or ask it to refine what's already on the canvas. Your API key is stored in your browser and sent directly to the provider — OpenFlowKit's servers never see it.
10 providers. Bring your own key. Switch any time. One runs entirely on your laptop.
| Provider | Default model | Why use it |
|---|---|---|
| 🦙 Ollama (local) | llama3.2 | Fully offline. No key, no network, no cost. |
| Google Gemini | gemini-2.5-flash-lite | Free tier available, fast, browser-safe |
| OpenAI | gpt-5-mini | Best reasoning for complex architectures |
| Anthropic Claude | claude-sonnet-4-6 | Excellent code and system understanding |
| Groq | meta-llama/llama-4-scout-17b-16e-instruct | Fastest open-source inference available |
| Mistral | mistral-large-latest | Strong European privacy-first alternative |
| NVIDIA NIM | meta/llama-4-maverick-17b-128e-instruct | Enterprise GPU inference |
| Cerebras | gpt-oss-120b | Ultra-fast on WSE-3 silicon |
| OpenRouter | google/gemini-2.5-pro | Access 300+ models through one key |
| Custom endpoint | Any model | LM Studio, vLLM, or any OpenAI-compatible API |
No proxy. No middleman. Direct browser-to-provider requests.
Every diagram has a live code panel. Edit the canvas → code updates. Edit the code → canvas updates. Two-way, always in sync.
flowchart TB
client[React App] --> gateway[API Gateway]
gateway --> auth[Auth Service]
gateway --> orders[Orders Service]
orders --> db[(PostgreSQL)]
orders --> cache[(Redis)]
auth --> db
{ archProvider: "developer", archResourceType: "database-postgresql" }Not a freeform whiteboard. Structured diagram types with opinionated defaults, correct relationship semantics, and purpose-built node styles.
OpenFlowKit works best when you move between the right surfaces instead of forcing everything through one panel:
Large diagrams also get better organization with multi-page documents, layers, sections, and local-first document recovery.
Turn any diagram into an animated video walkthrough — node by node, edge by edge — entirely in your browser. No upload, no server, no third-party tool.
Designed for architecture reviews, onboarding docs, and demos where a static image doesn't cut it.
No other open-source diagramming tool does this.
On modern browsers (Chrome / Edge / Safari 16.4+ / Firefox 130+) OpenFlowKit encodes via WebCodecs VideoEncoder + an in-browser MP4 muxer — H.264 baseline, hardware-accelerated, faster than real-time, deterministic frame timing. No more dropped frames under load. MediaRecorder remains a fallback for older browsers, so the feature is purely additive.
Point any MCP client at the @vrun-design/openflowkit-mcp package and your AI assistant gains local-first diagramming tools — no API key, no cloud round-trip. Your client already has an LLM, so OpenFlowKit MCP supplies deterministic local validation, codebase analysis, templates, icon lookup, and viewer links.
{
"mcpServers": {
"openflowkit": {
"command": "npx",
"args": ["-y", "@vrun-design/openflowkit-mcp"]
}
}
}
Then ask Claude: "Read the OpenFlowKit DSL cheatsheet, create a checkout flow with a promo-code branch and a Stripe webhook step, validate it, and create a viewer URL." The DSL comes back in seconds and stays editable in OpenFlowKit.
Full setup, tool table, and workflow details in mcp-server/README.md.
Build your diagram once. Take it anywhere.
Local-first is the default. Your saved flows live in your browser's IndexedDB. Your AI keys stay on your device — every request goes directly from your browser to the provider you chose. Exports are explicit and run entirely client-side. No accounts, no telemetry, no server-side storage.
Real-time P2P collaboration over WebRTC exists in the codebase as an opt-in beta (set
VITE_COLLABORATION_ENABLED=true). It is off by default while we redesign the signaling path for production reliability — the local-first experience does not depend on it.
| Shortcut | Action |
|---|---|
⌘ K / Ctrl K | Command bar — search, import, layout, assets, and actions |
⌘ \ / Ctrl \ | Toggle the live code panel |
⌘ Z / Ctrl Z | Full undo with complete history |
⌘ D / Ctrl D | Duplicate selection |
⌘ G / Ctrl G | Group selected nodes |
P | Pin / unpin selected nodes (anchored layout) |
⌘ / / Ctrl / | Keyboard shortcuts reference |
Plus: smart alignment guides, snap-to-grid, multi-select, pages, layers, sections, architecture lint, light/dark/system theme, and full i18n in 7 languages.
Recently shipped (latest milestone):
@vrun-design/openflowkit-mcp for Claude Desktop, Cursor, Windsurf, any MCP clientCurrent roadmap focus:
render_to_svg MCP tool — headless SVG render so AI clients can see the diagram, not just codegit clone https://github.com/Vrun-design/openflowkit.git
cd openflowkit
npm install
npm run dev
Open http://localhost:5173. Done.
Zero environment variables required. AI provider keys are configured in the in-app settings panel at runtime — nothing goes in
.env.
OpenFlowKit is a pure static SPA. There is no backend. Deploy the dist/ folder anywhere that serves HTML.
Cloudflare Pages / Netlify / Vercel:
npm run build
# upload dist/ to your provider
Docker:
docker build -t openflowkit .
docker run --rm -p 3045:3045 openflowkit
Open http://localhost:3045. The container serves the production build with nginx, SPA route fallback, long-lived caching for hashed assets, and the same security headers used by the static hosting path.
No database. No secrets. No infrastructure. One folder, or one container.
| Layer | Technology |
|---|---|
| Framework | React 19 + TypeScript 5 |
| Build | Vite 6 |
| Canvas | React Flow (XYFlow) |
| Auto-layout | ELK.js — runs in a Web Worker, off the main thread |
| Video export | WebCodecs VideoEncoder + mp4-muxer (MediaRecorder fallback) |
| State | Zustand |
| Storage | IndexedDB — local-first, no backend |
| Styling | Tailwind CSS |
| Agent surface | @vrun-design/openflowkit-mcp — Model Context Protocol stdio |
| Collaboration | WebRTC P2P (opt-in, off by default) |
| i18n | react-i18next — 7 languages |
| Testing | Vitest + Playwright |
All contributions are welcome — bug fixes, new diagram types, parser improvements, translations, and documentation.
Start here:
npm run dev # development server at localhost:5173
npm run test # unit tests via Vitest
npm run test:e2e # end-to-end tests via Playwright
npm run lint # ESLint + TypeScript type-check
Good first issues are tagged good first issue. Before opening a PR, please read CONTRIBUTING.md.
OpenFlowKit is MIT licensed, locally hosted, and built in the open.
No cloud required. No account required. No lock-in.
| → Launch App | Docs | Website | Changelog |
| Bug Report | Feature Request | Contributing Guide | Security Policy |
If OpenFlowKit saves you time, the most impactful thing you can do is give it a star.
It helps other developers find the project.
miapre/html-to-figma-design-system
ie3jp/illustrator-mcp-server
coding-solo/godot-mcp
ivanmurzak/unity-mcp
yctimlin/mcp_excalidraw
figma/mcp-server-guide