{"id":"44807ed7-3e6e-441a-ab07-94e0a47288d9","slug":"flowglyph","kind":"mcp","name":"FlowGlyph","summary":"Make automation workflows discoverable, executable and safe for AI agents. Turns UiPath, SAP, BPMN, n8n and OpenAPI workflows into reusable, searchable functions for humans and AI agents.","owner":"afernandeztem","repoUrl":"https://github.com/afernandeztem/FlowGlyph","license":"Apache-2.0","licenseTier":"permissive","trust":"community","stars":3,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-11-06T15:04:02.000Z","addedAt":"2026-11-08T23:26:32.536Z","logoUrl":"https://avatars.githubusercontent.com/u/26246029?v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["developer-tools","cloud-infra"],"tags":["ai-agents","automation","bpmn","claude-code","idempotency","llm-wiki","n8n","openapi"],"runtime":"python","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-11-08T23:27:29.017Z","sample":false,"url":"https://conduits.dev/tools/flowglyph","language":"Python","transports":["stdio"],"install":{"pypi":"flowglyph"},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"<div align=\"center\">\n\n<img src=\"https://raw.githubusercontent.com/afernandeztem/FlowGlyph/main/docs/assets/logo.svg\" alt=\"FlowGlyph\" width=\"112\" height=\"112\">\n\n# FlowGlyph\n\n**Make automation workflows discoverable, executable and safe for AI agents.**\n\nTurn UiPath, SAP, BPMN, n8n and OpenAPI workflows into reusable, searchable functions for\nhumans and AI agents.\n\n[![PyPI](https://img.shields.io/pypi/v/flowglyph)](https://pypi.org/project/flowglyph/)\n[![CI](https://github.com/afernandeztem/FlowGlyph/actions/workflows/ci.yml/badge.svg)](https://github.com/afernandeztem/FlowGlyph/actions/workflows/ci.yml)\n[![Python](https://img.shields.io/pypi/pyversions/flowglyph)](https://pypi.org/project/flowglyph/)\n[![License](https://img.shields.io/badge/license-Apache--2.0-blue)](LICENSE)\n[![Typed](https://img.shields.io/badge/typing-strict-success)](pyproject.toml)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![Status](https://img.shields.io/badge/status-alpha-orange)](CHANGELOG.md)\n\n</div>\n\n[![FlowGlyph in 44 seconds: a client asks for a new automation. What can you reuse, what's missing, and is it safe to run twice? FlowGlyph answers all three. Watch on YouTube.](https://raw.githubusercontent.com/afernandeztem/FlowGlyph/main/docs/assets/video-thumbnail.png)](https://www.youtube.com/watch?v=UfGquyfKb2g)\n\n*Forty-four seconds on [YouTube](https://www.youtube.com/watch?v=UfGquyfKb2g), with subtitles.*\n\n## Why\n\nBefore anything, or anyone, presses the button on an automation, two questions matter: **what\nwill this change, and is it safe to run twice?** Companies run thousands of automations, UiPath\nrobots, SAP integration flows and OData services, SAP Build processes, BPMN processes, n8n\nworkflows, internal APIs, and the answers are scattered across XML and JSON files nobody reads.\n\nFlowGlyph reads those files with deterministic parsers, never with a model, and turns every\nworkflow, service operation and API call into a small, typed **capability** (in plain words, a\nfunction someone can call): its inputs and outputs, what it does to the world, and whether a retry is a repeat. Every answer says whether\nit was inferred or declared, and what the sources cannot settle, you declare once in a file\nnext to them. From that catalog you take only what you need: a report of every function and\nits retry safety, a wiki an LLM can maintain, an MCP gateway that lets agents use the\nautomations without being able to break the rules, a planner that designs new workflows from\nthe capabilities you already have, or context files for the coding agent working on a project.\n\n**New here?** The [guide](docs/guide.md) walks through every feature in order, with samples\nyou can run from a clone. [HOWTO.md](HOWTO.md) is the reference: every tool, what it does and\nhow to use it.\n\n## See it run\n\n<img alt=\"Six things FlowGlyph does, animated on one folder: read everything into a catalog, audit retry safety and declare the rest, a wiki for LLMs and context for coding agents, a workflow planned from the client's Word document, compiled to XAML, and served to an agent behind a policy.\" src=\"https://raw.githubusercontent.com/afernandeztem/FlowGlyph/main/docs/assets/walkthrough.gif\" width=\"100%\">\n\n*Eighty-five seconds, also as a [video](docs/assets/walkthrough.mp4); rendered from the real output\nby `make walkthrough`.*\n\n## Install\n\n```bash\npip install flowglyph                    # the library: only pydantic and PyYAML\nuv tool install \"flowglyph[cli]\"         # the command line\npip install \"flowglyph[all]\"             # everything: CLI, MCP gateway, Anthropic planner\n```\n\n| Extra | Adds | For |\n|---|---|---|\n| none | the Python library | `import flowglyph` in your own tools |\n| `cli` | typer, rich | the `flowglyph` command |\n| `mcp` | the MCP SDK, jsonschema | `flowglyph serve`, and `flowglyph.gateway` from Python |\n| `llm` | the Anthropic SDK | `flowglyph plan --via anthropic`; the other planner backends need nothing extra |\n| `documents` | pypdf, python-docx, openpyxl | `flowglyph plan` from a PDF, Word or Excel document |\n\nFrom a clone, to work on it:\n\n```bash\ngit clone https://github.com/afernandeztem/FlowGlyph && cd FlowGlyph\nuv sync --all-extras && uv run flowglyph --version      # or: pip install -e \".[all]\"\n```\n\n## Quickstart\n\n```bash\nflowglyph extract https://github.com/UiPath/ReFrameWork -o catalog   # read a whole repository\nflowglyph idempotency catalog                                         # every function and its retry safety\nflowglyph inspect catalog                                             # the call tree of each entry point\n```\n\n```text\nMain RWdX none\n├── InitiAllSettings RX natural\n├── KillAllProcesses pure natural\n├── Initialize Applications pure natural\n├── GetTransactionData RWX none\n├── Process pure natural\n├── SetTransactionStatus RWdX none\n│   ├── TakeScreenshot RWdX none\n│   ├── CloseAllApplications pure natural\n│   └── KillAllProcesses pure natural\n└── CloseAllApplications pure natural\n```\n\n`R` reads, `W` writes, `D` destroys, `X` talks to another system; upper case means yes, lower\ncase means it may, `pure` means none of them. `natural` means a repeat changes nothing more;\n`key` means a repeat is safe when it carries the same key; `conditional` means it is safe under\nconditions the source documents; `none` means every run has an effect.\n\nLook at `GetTransactionData`: it **writes**. Its *Get Transaction Item* activity marks the queue\nitem *In Progress*, so calling it twice takes two different items. A retry is not a repeat. That\nis the kind of fact FlowGlyph puts in front of you, from the sources alone, before an agent\nretries something it should not.\n\n## Pick what you need\n\nEvery piece works on its own. Start with the first row and stop wherever you have what you need.\n\n| I want to... | Run | Get |\n|---|---|---|\n| Know what every function does and whether it can be retried | `flowglyph idempotency <source>` | a table, or Markdown, CSV, JSON |\n| Keep a versioned catalog of all functions | `flowglyph extract <source> -o catalog` | `catalog.jsonl`, `graph.json`, `flowglyph.lock`, one card per function |\n| Fail CI when a contract breaks | `flowglyph diff old-catalog catalog --fail-on major` | a non-zero exit on breaking changes |\n| Give people and LLMs a wiki of the automations | `flowglyph wiki build <source> -o wiki` | linked pages, an index, a log and an `AGENTS.md` for the LLM |\n| Describe what sources leave undescribed | `flowglyph enrich catalog --via claude-code` | descriptions and business meaning, marked as generated, cached |\n| Let an AI agent use the automations safely | `flowglyph serve catalog --policy policy.yaml` | an MCP server with policy, idempotency and audit |\n| Design a new workflow from a description | `flowglyph plan requirements.md catalog` | a checked workflow, with the missing pieces named |\n| Turn a workflow into BPMN or UiPath | `flowglyph compile plan/workflow.ir.yaml --to bpmn` | a `.bpmn` or `.xaml` its tool opens |\n| Give coding agents context on a UiPath project | `flowglyph context ./robots` | `AGENTS.md`, project context and activity cards, from the sources |\n| Build my own tooling | `import flowglyph` | the same features as a typed Python API |\n\n`<source>` is a folder, a single file, a git URL (a repository, a folder of it, or `--ref` a\nbranch, tag or commit) or a catalog saved earlier. Each row is one section of\n[HOWTO.md](HOWTO.md).\n\n## Six things, on one folder\n\nEach row of the table above is a tool of its own. To show how they connect, here are six of\nthem on one folder, the kind a client hands over: a UiPath project, the OpenAPI document of\nthe payments API and the process definition in Word. Every output is real; the sources are in\n`tests/fixtures`, the process document is a two-page Word file with a table of steps. Each step\nis also a page of its own in [docs/use-cases](docs/use-cases/README.md), with who it is for\nand how to tell it.\n\n**1. Read everything that exists.** One command, every format it finds.\n\n```bash\nflowglyph extract ./handover -o catalog\n```\n\n```text\nExtracted 11 invocable capabilities and 7 that cannot be run on their own into catalog\n  warning payments-api.yaml: PATCH /invoices/{invoiceId} has no operationId, using patch_invoices_invoiceId\n  warning Invoices/Main.xaml: invoked workflow not found in the project: Steps/Missing.xaml\n```\n\n**2. Settle what the sources cannot say.** The report lists what still needs a decision. You\nwrite the decision once, next to the sources, and it becomes part of the catalog.\n\n```bash\nflowglyph idempotency ./handover --review\n```\n\n```text\n Capability                                     Kind       Effects  Idempotency  Status\n openapi/Payments_API/executePayment            operation  rWX      none         review\n openapi/Payments_API/patch_invoices_invoiceId  operation  rWdX     none         review\n uipath/Invoices/Main                           workflow   WX       none         review\n uipath/Invoices/Steps/BookInvoice              workflow   WX       none         review\n uipath/Invoices/Steps/RequestApproval          workflow   WX       none         review\n5 capabilities, 5 to review.\n```\n\n```yaml\n# handover/flowglyph.overrides.yaml\ncapabilities:\n  uipath/Invoices/Steps/BookInvoice:\n    idempotency: {mode: key, key_fields: [in_Invoice]}\n  uipath/Invoices/Steps/RequestApproval:\n    description: Emails the finance approver; a second email is harmless.\n    idempotency: {mode: natural}\n  openapi/Payments_API/executePayment:\n    security: {approval_required: true}\n```\n\nRun the report again: three rows are left, and `BookInvoice` and `RequestApproval` read\n`declared`.\n\n**3. Give the agents the picture.** A wiki for people and LLMs, and the files a coding agent\nreads before touching the project, both from the sources alone.\n\n```bash\nflowglyph wiki build ./handover -o wiki\nflowglyph context ./handover --catalog catalog\n```\n\n```text\nWiki 30 pages in wiki\nContext Invoices: 9 files written, 0 unchanged, in handover/Invoices\n```\n\n`handover/Invoices/AGENTS.md` now states that `Main.xaml` takes `in_Threshold: number`, that\n`BookInvoice` writes to an Orchestrator queue and must not be retried blindly, and\n`.flowglyph/activities/AddQueueItem.md` holds the XAML this project uses for that activity.\n\n**4. Design the new workflow from the client's own document.** A model proposes the steps\nfrom the Word file; FlowGlyph checks each one against the catalog.\n\n```bash\nflowglyph plan ./handover/supplier-invoice-pdd.docx catalog -o plan --via claude-code\n```\n\n```text\nBook emailed supplier invoices without creating duplicates, then archive the PDF\n Step               Capability                             Intent\n validate_vendor    uipath/Invoices/Steps/ValidateVendor   Check that the vendor on the invoice exists in our records.\n notify_purchasing  missing                                Notify purchasing that the vendor is unknown and stop processing the invoice.\n request_approval   uipath/Invoices/Steps/RequestApproval  Ask the finance approver for approval before booking a high-value invoice.\n create_invoice     openapi/Payments_API/createInvoice     Create the invoice in the payments system, keyed by the invoice reference so a retry never books it twice.\n archive_pdf        missing                                Archive the invoice PDF in the document store with a 10-year retention period.\n```\n\nTwo steps are **missing**, and that is the point: nothing in the sources notifies purchasing or\narchives a PDF, so the plan doubles as the gap list, and nothing was invented to fill it.\n\n**5. Open it in Studio.**\n\n```bash\nflowglyph compile plan/workflow.ir.yaml --catalog catalog --to xaml -o Main.xaml\n```\n\n```text\n  warning conditions are copied as written; rewrite them as Visual Basic expressions in Studio\nCompiled plan/book-emailed-supplier-invoices-without-creating-duplicates-then-archive-the-pdf into Main.xaml\n```\n\nA Flowchart with the three resolved steps as `InvokeWorkflowFile` calls, their arguments ready\nto bind, and a `Comment` placeholder where each missing step goes. Those two are what the coding agent\nbuilds next, from the activity cards; `flowglyph skill` tells it how.\n\n**6. Or let an agent run what exists, safely.**\n\n```bash\nflowglyph serve catalog --policy policy.yaml\n```\n\nEvery call goes through the contract, your policy, the idempotency ledger and the audit log,\nand `executePayment` waits for a person. As written, every run is a dry run that shows what\nwould be sent; add `--connections flowglyph.connections.yaml` to run for real.\n\n<!-- mcp-name: io.github.afernandeztem/flowglyph -->\n\n## What it reads\n\n| Adapter | Reads | Each capability is |\n|---|---|---|\n| `uipath` | UiPath Studio projects: `project.json` and every `.xaml` | a workflow typed from its arguments, with its graph of steps |\n| `sap` | SAP OData `$metadata`, V2 and V4 | an entity operation, function import, function or action the service allows |\n| `sap-cpi` | SAP Cloud Integration iFlows, `.zip` or unpacked | an endpoint the iFlow exposes, with its steps as the graph |\n| `sbpa` | SAP Build Process Automation projects, `.mtar` or unpacked | a process, and the automations and decisions it runs |\n| `bpmn` | BPMN 2.0, with Camunda 7 and Camunda 8 extensions | a process, with tasks, gateways and call activities |\n| `n8n` | n8n workflow exports | a workflow, started by its webhook, form, schedule or a parent |\n| `openapi` | OpenAPI 3.0 and 3.1 documents | an API operation |\n\nNothing is guessed by a model: each adapter applies the semantics of its platform, an editable\ntaxonomy for UiPath activities, HTTP and OData semantics for services, the receiver types of an\niFlow. [HOWTO.md](HOWTO.md#adapters) lists the rules. New formats are plugins: implement\n`flowglyph.adapters.Adapter` and register it under the `flowglyph.adapters` entry point group.\n\n## Examples\n\nThree complete walkthroughs, with the real output of every command:\n\n- [A UiPath process on the ReFrameWork](examples/uipath-reframework): UiPath's own template\n  through the call tree, the report, overrides, a change made in Studio, the wiki and the\n  gateway.\n- [An SAP landscape](examples/sap-integration): OData services and Cloud Integration iFlows\n  through the report, overrides, the wiki and the gateway.\n- [Supplier invoice intake](examples/invoice-processing): a UiPath project and an OpenAPI\n  document in one catalog, planned and served.\n\n## How it works\n\n**The Automation IR** is the contract between everything else. A `Capability` says what an\noperation needs, what it returns, what it does to the world (`reads`, `mutates_state`,\n`destructive`, `external`, each `yes`, `no` or `unknown`) and how it can be retried (`natural`,\n`key`, `conditional`, `none`). A `Workflow` is the graph behind it: steps, guarded edges, and a\n`join` on each step that says whether it needs every predecessor to have run or just one. The\nfull specification is in [docs/ir-spec.md](docs/ir-spec.md).\n\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/afernandeztem/FlowGlyph/main/docs/assets/pipeline-dark.svg\">\n  <img alt=\"FlowGlyph pipeline. Sources (UiPath projects, SAP OData, Cloud Integration and Build Process Automation, BPMN, n8n and OpenAPI, from a folder, a file or a git URL) go through deterministic adapters, with no LLM, into the Automation IR: capabilities and the workflows behind them. flowglyph extract writes the catalog as plain files plus flowglyph.lock; flowglyph enrich can add descriptions, marked as generated. From the catalog you get a retry-safety report and CI check (flowglyph idempotency, diff), the Python library, a wiki for people and LLMs, context files for coding agents, a planner for new workflows whose plans compile for UiPath Studio or a BPMN engine, and the MCP gateway (flowglyph serve), the only part that runs anything, which AI agents call through policy, ledger and audit.\" src=\"https://raw.githubusercontent.com/afernandeztem/FlowGlyph/main/docs/assets/pipeline-light.svg\">\n</picture>\n\n```yaml\nid: sap/ZSUPPLIER_INVOICE_SRV/SupplierInvoice/create\nkind: operation\neffects: {reads: no, mutates_state: yes, destructive: no, external: yes}\nidempotency: {mode: none, provenance: inferred, confidence: 0.7}\ninput_schema:\n  properties:\n    body:\n      properties:\n        CompanyCode: {type: string, maxLength: 4, description: Company code}\n        InvoicingParty: {type: string, maxLength: 10, description: Supplier}\n      required: [CompanyCode, InvoicingParty]\n```\n\n**Adapters** produce IR and nothing else. They are deterministic and offline, so the same files\nalways give the same catalog, byte for byte.\n\n**The catalog** is plain files you can commit and review, versioned by a lock file: a change\nthat can break a caller is a major version. Agents read it at three sizes, a one-line card to\nsearch thousands of functions, a page to choose between a few, the full contract to call one,\nso they never load more than they use.\n\n**The gateway** is the only part that executes, and the only part that has to be trusted:\neffects and idempotency modes describe intent, the gateway enforces it. Every call is validated\nagainst the contract, checked against your policy, run at most once per idempotency key, and\nwritten to an audit log.\n\nMore in [docs/architecture.md](docs/architecture.md) (the parts and the rules between them),\n[docs/glossary.md](docs/glossary.md) (every term FlowGlyph uses) and the\n[decision records](docs/adr/README.md).\n\n## How it compares\n\n| | What it gives you | What it does not |\n|---|---|---|\n| **Each vendor's own agent integration** (UiPath, SAP, n8n...) | the deepest access to that one platform | one platform at a time; effects and retry safety as hints; the vendor's hosted service, not yours |\n| **OpenAPI-to-MCP converters** | every operation of an API as a tool in minutes | nothing for UiPath, SAP CPI, BPMN or n8n; no effects, no idempotency, no policy, no ledger, no audit |\n| **Parsers for one format** (XAML, BPMN, iFlow readers) | the structure of a file | no common model, no catalog, no versioning, nothing an agent can call |\n| **Asking an LLM to read the sources** | a plausible description, fast | not deterministic, not auditable, and it will invent a workflow that does not exist |\n\nFlowGlyph is the common model over all of them: one catalog for every platform, effects and\nretry safety as answers that say whether they were declared or inferred, and how confident\nan inferred one is, a gateway you host that enforces them, and nothing\nthat leaves your machine unless you say so.\n\n## Status and roadmap\n\nAlpha. The IR is at version 0.4 and may still change before 1.0, as may the library API; the\ncommand line and the file formats are what the guide and the reference describe. The adapters\nhave been run on vendor templates and synthetic projects; real client estates will find cases\nthey do not cover yet, and an issue with the file that broke is the most useful thing you can\nsend.\n\nWhat comes next, in order:\n\n1. The gateway running UiPath jobs and OData calls for real in more setups (Orchestrator\n   folders, OData V4 actions with complex bodies), with the dry run as the default it is now.\n2. An HTTP transport with OAuth for `flowglyph serve`, so one gateway can serve several agents.\n3. More sources through the adapter entry point: Power Automate and Zapier exports first.\n4. A Temporal compiler, next to BPMN and XAML.\n5. 1.0 when the IR stops changing.\n\n## Contributing\n\nContributions are welcome. [CONTRIBUTING.md](CONTRIBUTING.md) explains the setup (`make install`,\n`make check`), the code style, and how to write an adapter, with a complete example. Diagrams are\nedited in [Excalidraw](https://excalidraw.com) from the `.excalidraw` files in `docs/assets/` and\nrendered with `make diagrams`. Security issues: see [SECURITY.md](SECURITY.md).\n\n## License\n\n[Apache License 2.0](LICENSE). Test fixtures from UiPath ReFrameWork are MIT-licensed, see\n[NOTICE](NOTICE).\n\nUiPath and SAP are trademarks of their respective owners. FlowGlyph is an independent project\nand is not affiliated with or endorsed by them.\n"}