MCP Workflow Orchestration Server Server

Cho phép các tác nhân AI khám phá, tạo và thực thi các quy trình làm việc phức tạp, nhiều bước được định nghĩa trong các tệp YAML đơn giản.

Tài liệu

@cyanheads/workflows-mcp-server

Store, query, and create YAML workflow playbooks for LLM agents via MCP. STDIO or Streamable HTTP.

4 Tools

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework


Tools

Four tools covering the full workflow library lifecycle — discovery, retrieval, and creation for both permanent and temporary workflows:

ToolDescription
workflow_listList all permanent workflows in the index, with optional category and tag filters.
workflow_getRetrieve a complete workflow definition by name, with global instructions prepended.
workflow_createWrite a new permanent workflow YAML to the library.
workflow_create_tempWrite 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: true to surface the unique server/tool pairs used across each workflow's steps
  • Temporary 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 version to get the highest available match; specify a version for an exact lookup
  • Returns the full workflow YAML structure with all steps and metadata
  • Injects the global_instructions.md content as globalInstructions — apply these when executing the workflow; null when the file is absent
  • Temporary workflows are accessible here even though excluded from workflow_list
  • Template 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.yaml
  • Rejects if name@version already exists — bump the version to create a new revision
  • Server stamps created_date and last_updated_date automatically
  • Index 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_get but excluded from workflow_list results
  • Useful for one-shot plans, short-lived scaffolding, or session-specific orchestration steps

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, oauth
  • Swappable storage backends: in-memory, filesystem, Supabase, Cloudflare KV/R2/D1
  • Structured logging with optional OpenTelemetry tracing
  • STDIO and Streamable HTTP transports

Workflow library:

  • In-memory index keyed by name@version, built at startup from workflows-yaml/categories/ recursively
  • Semver-aware lookup — latest version returned when version is omitted
  • Filesystem watcher (Node.js fs.watch recursive) rebuilds the index on any add/change/remove; debounced to avoid thrash
  • YAML validated at index time — invalid files are skipped and logged, never crash the server
  • _index.json snapshot written on every rebuild for external tooling and debugging
  • Configurable WORKFLOWS_DIR, GLOBAL_INSTRUCTIONS_PATH, and debounce interval

Agent-friendly output:

  • workflow_get always includes globalInstructions alongside the workflow — no second call needed
  • Discriminated source field (permanent | temp) on every workflow_get response
  • Typed error contracts with structured reason codes (not_found, version_not_found, already_exists, index_unavailable) so callers can branch on error type rather than parsing messages
  • workflow_list with includeTools: true surfaces 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/mcp

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 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

  1. Clone the repository:
git clone https://github.com/cyanheads/workflows-mcp-server.git
  1. Navigate into the directory:
cd workflows-mcp-server
  1. Install dependencies:
bun install
  1. Configure environment:
cp .env.example .env
# edit .env if needed — most settings have defaults

Configuration

VariableDescriptionDefault
WORKFLOWS_DIRAbsolute or relative path to the workflows root directory../workflows-yaml
GLOBAL_INSTRUCTIONS_PATHPath to the global instructions markdown file. Derives from WORKFLOWS_DIR when not set.<WORKFLOWS_DIR>/global_instructions.md
WATCHER_DEBOUNCE_MSMilliseconds to debounce filesystem change events before rebuilding the index.500
MCP_TRANSPORT_TYPETransport: stdio or http.stdio
MCP_HTTP_PORTPort for HTTP server.3010
MCP_AUTH_MODEAuth mode: none, jwt, or oauth.none
MCP_LOG_LEVELLog level (RFC 5424).info
OTEL_ENABLEDEnable OpenTelemetry instrumentation (spans, metrics, completion logs).false

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:http
    
  • Run 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-server

The 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

DirectoryPurpose
src/index.tscreateApp() entry point — registers tools and inits the workflow index service.
src/config/Server-specific environment variable parsing and validation with Zod.
src/mcp-server/tools/Tool definitions (*.tool.ts).
src/services/workflow-index/WorkflowIndexService — YAML parsing, index build, watcher, semver lookup, write helpers.
tests/Unit and integration tests mirroring src/.
workflows-yaml/Seed workflow library — categories/ for permanent workflows, temp/ for throwaway ones, global_instructions.md for agent-global guidance.

Development guide

See CLAUDE.md for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches — no try/catch in tool logic
  • Use ctx.log for 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 and pull requests are welcome. Run checks and tests before submitting:

bun run devcheck
bun run test

License

Apache-2.0 — see LICENSE for details.