workflows-mcp-server
Allows storing workflow data using Cloudflare's KV, R2, or D1 storage services.
Allows storing workflow data in a Supabase database, leveraging their Postgres backend for persistence.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@workflows-mcp-serverlist all workflows related to deployment"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Tools
Four tools covering the full workflow library lifecycle — discovery, retrieval, and creation for both permanent and temporary workflows:
Tool | Description |
| List all permanent workflows in the index, with optional category and tag filters. |
| Retrieve a complete workflow definition by name, with global instructions prepended. |
| Write a new permanent workflow YAML to the library. |
| Write a temporary one-shot workflow, indexed but excluded from list results. |
workflow_list
List permanent workflows from the in-memory index.
Optional category filter (case-insensitive substring match)
Optional tag filter (AND match — all listed tags must be present)
Set
includeTools: trueto surface the uniqueserver/toolpairs used across each workflow's stepsTemporary workflows are excluded; results sorted by name then version descending
workflow_get
Retrieve a complete workflow by name, including the global instructions document.
Semver-aware: omit
versionto get the highest available match; specify a version for an exact lookupReturns the full workflow YAML structure with all steps and metadata
Injects the
global_instructions.mdcontent asglobalInstructions— apply these when executing the workflow;nullwhen the file is absentTemporary workflows are accessible here even though excluded from
workflow_listTemplate placeholders (
{{input.foo}},{{steps.X.output.Y}}) are returned verbatim — the server never interpolates them
workflow_create
Write a new permanent workflow to the library.
Workflow stored at
categories/<slugified-category>/<slugified-name>-workflow.yamlRejects if
name@versionalready exists — bump the version to create a new revisionServer stamps
created_dateandlast_updated_dateautomaticallyIndex and snapshot rebuilt after write; filesystem watcher also fires (idempotent, debounced)
workflow_create_temp
Write a throwaway workflow to the temp/ directory.
No conflict check — temp workflows are intentionally ephemeral and overwriteable
Indexed and accessible via
workflow_getbut excluded fromworkflow_listresultsUseful for one-shot plans, short-lived scaffolding, or session-specific orchestration steps
Related MCP server: workflows-mcp
Features
Built on @cyanheads/mcp-ts-core:
Declarative tool definitions — single file per primitive, framework handles registration and validation
Unified error handling — handlers throw, framework catches, classifies, and formats
Pluggable auth:
none,jwt,oauthSwappable storage backends:
in-memory,filesystem,Supabase,Cloudflare KV/R2/D1Structured logging with optional OpenTelemetry tracing
STDIO and Streamable HTTP transports
Workflow library:
In-memory index keyed by
name@version, built at startup fromworkflows-yaml/categories/recursivelySemver-aware lookup — latest version returned when version is omitted
Filesystem watcher (Node.js
fs.watchrecursive) rebuilds the index on any add/change/remove; debounced to avoid thrashYAML validated at index time — invalid files are skipped and logged, never crash the server
_index.jsonsnapshot written on every rebuild for external tooling and debuggingConfigurable
WORKFLOWS_DIR,GLOBAL_INSTRUCTIONS_PATH, and debounce interval
Agent-friendly output:
workflow_getalways includesglobalInstructionsalongside the workflow — no second call neededDiscriminated
sourcefield (permanent|temp) on everyworkflow_getresponseTyped error contracts with structured
reasoncodes (not_found,version_not_found,already_exists,index_unavailable) so callers can branch on error type rather than parsing messagesworkflow_listwithincludeTools: truesurfaces all MCP server/tool dependencies at a glance
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:
{
"mcpServers": {
"workflows-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/workflows-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"WORKFLOWS_DIR": "/absolute/path/to/your/workflows-yaml"
}
}
}
}Or with npx (no Bun required):
{
"mcpServers": {
"workflows-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/workflows-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"WORKFLOWS_DIR": "/absolute/path/to/your/workflows-yaml"
}
}
}
}Or with Docker:
{
"mcpServers": {
"workflows-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-v", "/absolute/path/to/your/workflows-yaml:/workflows-yaml",
"-e", "WORKFLOWS_DIR=/workflows-yaml",
"ghcr.io/cyanheads/workflows-mcp-server:latest"
]
}
}
}For Streamable HTTP, set the transport and start the server:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcpSeed 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 prepends to every workflow_get response — edit it to set global guidance for your agent.
Prerequisites
Bun v1.3.2 or higher (or Node.js v24+).
A local directory containing YAML workflow files (or use the bundled
workflows-yaml/seed).
Installation
Clone the repository:
git clone https://github.com/cyanheads/workflows-mcp-server.gitNavigate into the directory:
cd workflows-mcp-serverInstall dependencies:
bun installConfigure environment:
cp .env.example .env
# edit .env if needed — most settings have defaultsConfiguration
Variable | Description | Default |
| Absolute or relative path to the workflows root directory. |
|
| Path to the global instructions markdown file. Derives from |
|
| Milliseconds to debounce filesystem change events before rebuilding the index. |
|
| Transport: |
|
| Port for HTTP server. |
|
| Auth mode: |
|
| Log level (RFC 5424). |
|
| Enable OpenTelemetry instrumentation (spans, metrics, completion logs). |
|
See .env.example for the full list of optional overrides.
Running the server
Local development
Build and run:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:httpRun checks and tests:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t workflows-mcp-server .
docker run --rm \
-v /path/to/workflows-yaml:/workflows-yaml \
-e WORKFLOWS_DIR=/workflows-yaml \
-p 3010:3010 \
workflows-mcp-serverThe Dockerfile defaults to HTTP transport, stateless session mode, 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
Directory | Purpose |
|
|
| Server-specific environment variable parsing and validation with Zod. |
| Tool definitions ( |
|
|
| Unit and integration tests mirroring |
| Seed workflow library — |
Development guide
See CLAUDE.md for development guidelines and architectural rules. The short version:
Handlers throw, framework catches — no
try/catchin tool logicUse
ctx.logfor request-scoped loggingRegister new tools via the barrel in
src/mcp-server/tools/definitions/index.tsFilesystem operations go through
WorkflowIndexService, not directly in tool handlers
Contributing
Issues and pull requests are welcome. Run checks and tests before submitting:
bun run devcheck
bun run testLicense
Apache-2.0 — see LICENSE for details.
This server cannot be installed
Maintenance
Latest Blog Posts
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/cyanheads/workflows-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server