
Workflows Mcp Server
io.github.cyanheadsPublished by GitHub account cyanheadsv0.5.0Updated Oct 29, 2026
Store, query, and create YAML workflow playbooks for LLM agents.
Overview
Local MCP server that stores, lists, retrieves, creates and deletes versioned YAML workflow playbooks for LLM agents from a directory of files.
- What you can do
- List permanent workflows with keyword, category and tag filters, optionally showing the server/tool pairs each one uses
- Retrieve a full workflow by name and optional semver version, together with the library's global instructions
- Create permanent workflows as YAML files under category folders, with name, version, description, author and steps
- Create temporary draft workflows that can be fetched but never appear in listings
- Delete a permanent workflow or draft after the user confirms the resolved name, version and file
- Pick up edits to the YAML files automatically through a debounced filesystem watcher
- When to use it
- Useful when you want an agent to reuse multi-step playbooks of MCP server/tool calls across sessions, keep them as readable, version-controlled YAML on disk, and draft one-off workflows without cluttering the permanent library.
- Requirements
- Runs locally over stdio (or Streamable HTTP). Needs Bun v1.4.0+ or Node.js v24+, installed via npx or bunx, or Docker. A local directory of YAML workflow files, set with WORKFLOWS_DIR (defaults to ./workflows-yaml). No API keys required. Optional settings include GLOBAL_INSTRUCTIONS_PATH, WATCHER_DEBOUNCE_MS, MCP_TRANSPORT_TYPE, MCP_HTTP_PORT, MCP_AUTH_MODE and MCP_LOG_LEVEL.
Installation
In SourceWeft
- Open Workflows Mcp Server in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
@cyanheads/workflows-mcp-server
Store, query, and create YAML workflow playbooks for LLM agents via MCP. STDIO or Streamable HTTP.
Overview
A declarative workflow library for LLM agents, backed by local YAML files. Store, list, and retrieve named, versioned multi-step playbooks — each a sequence of MCP server/tool calls — for permanent reuse or one-shot temporary runs. Edits to the YAML files are picked up automatically.
Tools
Capability reference
workflow_list tool
- Optional
query(name and description),category(substring), andtags(all must match) filters, case-insensitive; temporary drafts are never listed - Sorted by name, then highest version first; an empty result carries a
noticeechoing the applied filters includeTools: trueadds each workflow's uniqueserver/toolpairs
workflow_get tool
nameplus an optional semverversion; omitversionfor the highest available, drafts included- Returns the full workflow, its
source(permanentortemp), andglobalInstructionsfromglobal_instructions.md(nullwhen absent); fails withnot_foundorversion_not_found - Template placeholders such as
{{input.foo}}come back verbatim — the server never interpolates them
workflow_create tool
name, semverversion,description,author,category, andsteps(plus optionaltags); stored as one file pername@versionundercategories/<category>/, with created and updated dates stamped- Returns the
key(name@version) andfilePath; fails withalready_existswhen a permanent workflow or a draft holds the key,invalid_input, orwrite_failed
workflow_create_temp tool
- The
workflow_createfields minuscategory; stored undertemp/, retrievable withworkflow_get, never listed, and kept untilworkflow_deleteremoves it statusiscreated, oroverwrittenwhen it replaced the draft of the same key (keeping that draft'screated_date); a key held by a permanent workflow fails withalready_exists
workflow_delete tool
nameplus an optionalversion(omitted: the highest across permanent workflows and drafts); the user confirms the resolvedname@version, source, and file before anything is deleted, so a client without elicitation cannot delete- Returns the deleted workflow's
source, plus anoticewhen another file declaring the same key now takes its place; fails withcancelled,confirmation_invalid(a prompt never issued, already answered, older than 10 minutes, or issued to another caller),target_changed(the file or its content changed after the user saw it), ornot_found
Features
Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
Workflow library:
- YAML files under
categories/andtemp/are validated at index time; an invalid file is skipped and logged, never crashes the server - In-memory index keyed by
name@version, read from each file's content rather than its name and kept fresh by a debounced recursive watcher; a permanent workflow outranks a draft with the same key - Versions are canonical semver everywhere: a leading
v, surrounding whitespace, and build metadata are dropped, sov1.0.0+build.5is stored, keyed, and looked up as1.0.0 - Creates and deletes run one at a time, so each existence check holds until its write lands; filenames carry a hash of
name@version, so keys whose slugs coincide never share a file - An
_index.jsonsnapshot is written on every rebuild for external tooling and debugging
Agent-friendly output:
- Discriminated output —
source: "permanent" | "temp"on everyworkflow_getresponse and typedreasoncodes (not_found,version_not_found,already_exists,cancelled,confirmation_invalid,target_changed,index_unavailable, …) on failures, so callers branch on data instead of parsing error strings - No extra round trip —
workflow_getalways returnsglobalInstructionsalongside the workflow definition in the same response - Response shaping —
workflow_list's optionalincludeToolsflag pre-derives the uniqueserver/toolpairs used by a workflow, and an empty result echoes the applied filters with a broadening hint instead of returning nothing
Getting started
No API keys required. The server reads from a local workflows-yaml/ directory by default.
Add the following to your MCP client configuration file:
Or with npx (no Bun required):
Or with Docker:
For Streamable HTTP, set the transport and start the server:
Seed workflows
The repository ships a workflows-yaml/ directory with example workflows organized under categories/. These are ready to use as a starting point. The workflows-yaml/global_instructions.md file contains instructions the server includes in every workflow_get response (the globalInstructions field) — edit it to set global guidance for your agent.
Prerequisites
- Bun v1.4.0 or higher (or Node.js v24+).
- A local directory containing YAML workflow files (or use the bundled
workflows-yaml/seed).
Installation
- Clone the repository:
- Navigate into the directory:
- Install dependencies:
- Configure environment:
Configuration
See .env.example for the full list of optional overrides.
Running the server
Local development
-
Build and run:
-
Run checks and tests:
Docker
The Dockerfile defaults to HTTP transport, stateful session mode (required — see MCP_SESSION_MODE above), and logs to /var/log/workflows-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.
Project structure
Development guide
See CLAUDE.md for development guidelines and architectural rules. The short version:
- Handlers throw, framework catches — no
try/catchin tool logic - Use
ctx.logfor request-scoped logging - Register new tools via the barrel in
src/mcp-server/tools/definitions/index.ts - Filesystem operations go through
WorkflowIndexService, not directly in tool handlers
Contributing
Issues are welcome. Run checks and tests before submitting:
License
Apache-2.0 — see LICENSE for details.
Source: README.md at commit 148f4db
Tools
0Version history
6- v0.5.0LatestOct 29, 2026
- v0.4.2Oct 25, 2026
- v0.4.1Oct 7, 2026
- v0.4.0Sep 24, 2026
- v0.3.3Sep 19, 2026
- v0.3.2Sep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts