YAML Workflow

io.github.oriegPublished by GitHub account oriegv0.9.6Updated Oct 24, 2026

Expose declarative YAML-defined workflows as MCP tools over stdio

Overview

AI-generated overview

A local MCP server that exposes declarative YAML-defined workflows as tools an assistant can run, with shell, Python, file, template, HTTP and batch steps.

What you can do
Run YAML-defined workflows and their steps, including shell commands, Python code, file, template, HTTP and batch tasks, with Jinja2 templating and parameters. Preview runs with dry-run, resume failed runs from persisted state, and use retries and parallel steps. Validate and list workflows, and visualize them as ASCII DAGs or Mermaid. Compose workflows through imports and watch files to re-run on changes.
When to use it
Useful when you keep automation, CI/CD, data-processing or DevOps pipelines as version-controlled YAML files and want an assistant to trigger, preview, validate or inspect them locally without a scheduler or database.
Requirements
Runs as a local process on the user's machine over stdio; the manifest lists the PyPI package yaml-workflow, run with uvx, and the README notes the MCP server needs the mcp extra installed. Python is required. No authentication, environment variables or headers are declared.
Before you install
Workflows execute real shell commands, Python code and HTTP requests, and can write files, so runs change the local machine and may reach third-party services. Dry-run only previews. Secrets validation fails fast when required environment variables are missing, so workflows may depend on credentials in the environment.

Installation

In SourceWeft

  1. Open YAML Workflow in the dashboard and add it to a workspace.
  2. 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

YAML Workflow

[PyPI version] [Python versions] [CI] [codecov] [License: MIT]

A lightweight workflow engine for CI/CD pipelines, data processing, and DevOps automation. Define reproducible, version-controlled workflows in YAML — run them locally, in CI, or on any machine with Python installed.

Why yaml-workflow?

Most workflow tools require servers, databases, and complex infrastructure. yaml-workflow takes a GitOps approach — workflows are plain YAML files, version-controlled alongside your code:

yaml-workflowAirflow / Prefect / Dagster
Setuppip install yaml-workflowServer, database, scheduler, workers
ConfigurationPlain YAML filesPython DAGs + infrastructure config
Dependencies2 (PyYAML, Jinja2)50+ packages, Docker, PostgreSQL
Use caseLocal automation, scripts, CI/CD, data pipelinesEnterprise orchestration at scale
Learning curveMinutesHours to days
StateFile-based, resumableDatabase-backed

Choose yaml-workflow when you need:

  • Simple task automation without infrastructure overhead
  • Reproducible pipelines defined in version-controlled YAML
  • Batch processing with parallel execution
  • State persistence and workflow resume after failures
  • A lightweight alternative to shell scripts with better error handling
  • GitOps-friendly pipelines that live in your repo alongside the code
  • A single tool that runs the same pipeline locally and in CI

Features

  • YAML-driven workflow definition with Jinja2 templating
  • Multiple task types: shell, Python, file, template, HTTP, batch
  • Workflow composition via imports — reuse steps across workflows
  • Plugin system via entry points — pip install yaml-workflow-myplugin
  • Watch mode — --watch to re-run on file changes
  • Dry-run mode to preview without executing
  • Workflow visualization (ASCII branching DAG and Mermaid)
  • Parallel execution with configurable worker pools
  • State persistence and resume capability
  • Retry mechanisms with configurable strategies
  • Namespaced variables (args, env, steps, batch)
  • Flow control with custom step sequences and conditions
  • Extensible task system via @register_task decorator
  • Parallel step execution via depends_on — run independent steps concurrently
  • Secrets validation — fail fast if required environment variables are missing
  • Structured output (--format json) for CI integration and scripting
  • MCP server — expose workflows as AI agent tools (pip install yaml-workflow[mcp])
  • Web dashboard — monitor runs and trigger workflows (pip install yaml-workflow[serve])
  • GitHub Action — run workflows in CI with uses: orieg/[email protected]

Use Cases

  • CI/CD pipelines — multi-step build, test, deploy workflows in YAML
  • Data processing — batch ETL pipelines with retry and resume on failure
  • DevOps automation — infrastructure tasks with secrets management and notifications
  • AI/LLM pipelines — orchestrate API calls with auth, retry, and batch processing
  • Local automation — replace shell scripts with reproducible, parameterized workflows

Quick Start

bash
# Install (isolated CLI — recommended)pipx install yaml-workflow            # Core CLIpipx install 'yaml-workflow[all]'     # + web dashboard + MCP server
# Or with pippip install yaml-workflow
# Initialize example workflowsyaml-workflow init
# Run a workflow with parametersyaml-workflow run workflows/hello_world.yaml name=Alice

Example workflow (hello_world.yaml):

yaml
name: Hello Worlddescription: A simple greeting workflow
params:  name:    type: string    default: World
steps:  - name: create_greeting    task: template    inputs:      template: "Hello, {{ args.name }}!"      output_file: greeting.txt
  - name: show_greeting    task: shell    inputs:      command: cat greeting.txt

Visualize workflows

bash
yaml-workflow visualize workflows/data_pipeline.yaml
  Workflow: Data Pipeline
  ┌─────────────────┐  │  detect_format  │  │   python_code   │  └─────────────────┘           │           ▼  ┌────────────────┐  ┌────────────────┐  ┌────────────────┐  ┌────────────────┐  │  process_json  │  │  process_csv   │  │  process_xml   │  │ handle_unknown │  │     shell      │  │     shell      │  │     shell      │  │     shell      │  └────────────────┘  └────────────────┘  └────────────────┘  └────────────────┘           │           ▼  ┌─────────────────┐  │ generate_report │  │   python_code   │  └─────────────────┘

Adjacent conditional steps are automatically grouped as branches. Use --format mermaid to export for docs or GitHub rendering.

Dry-run mode

Preview what a workflow would do without executing anything:

bash
yaml-workflow run workflows/hello_world.yaml name=Alice --dry-run
[DRY-RUN] Workflow: Hello World[DRY-RUN] Steps: 2 to execute
  [DRY-RUN] Step 'create_greeting' — task: template — WOULD EXECUTE    template: Hello, Alice!    output_file: greeting.txt  [DRY-RUN] Step 'show_greeting' — task: shell — WOULD EXECUTE    command: cat greeting.txt
[DRY-RUN] Complete. 2 step(s) would execute, 0 would be skipped.[DRY-RUN] No files were written. No tasks were executed.

Workflow composition

Reuse steps across workflows with imports:

yaml
# main.yamlimports:  - ./shared/logging_steps.yaml  - ./shared/common_params.yaml
steps:  - name: my_step    task: shell    inputs:      command: echo "runs after imported steps"

Imported steps are prepended. Imported params provide defaults that the main workflow can override. Supports transitive imports with circular detection.

Parallel Steps

Run independent steps concurrently with depends_on:

yaml
steps:  - name: fetch_api    task: http.request    inputs: {url: "https://api.example.com/data"}
  - name: fetch_db    task: python_code    inputs:      code: "result = query_database()"
  - name: merge    task: python_code    depends_on: [fetch_api, fetch_db]    inputs:      code: |        api_data = steps["fetch_api"]["result"]        db_data = steps["fetch_db"]["result"]        result = {"merged": True}

Watch mode

Automatically re-run on file changes during development:

bash
yaml-workflow run workflows/hello_world.yaml name=Alice --watch

Monitors the workflow file and all imported files. Press Ctrl+C to stop.

GitHub Actions

Run workflows in CI with the yaml-workflow action:

yaml
- name: Run pipeline  uses: orieg/[email protected]  id: pipeline  with:    workflow: workflows/deploy.yaml    params: |      env=production      version=1.2.0    format: json
- name: Use results  run: echo '${{ steps.pipeline.outputs.result }}'

Docker & Kubernetes

Run anywhere without installing Python:

bash
# Run a workflow in Dockerdocker run --rm -v $(pwd)/workflows:/app/workflows \  ghcr.io/orieg/yaml-workflow run /app/workflows/pipeline.yaml
# Start the web dashboarddocker run -p 8080:8080 -v $(pwd)/workflows:/app/workflows \  ghcr.io/orieg/yaml-workflow

Deploy on Kubernetes with the Helm chart:

bash
helm install my-workflows ./helm/yaml-workflow \  --set-file workflows.files.pipeline\\.yaml=workflows/pipeline.yaml

Compatible with ArgoCD (GitOps) and Argo Workflows. See the Kubernetes guide.

More commands

bash
# List available workflowsyaml-workflow list
# Validate a workflow (with JSON output for CI)yaml-workflow validate workflows/hello_world.yaml --format json
# Resume a failed workflowyaml-workflow run workflows/hello_world.yaml --resume
# Structured output for scriptingyaml-workflow run workflows/pipeline.yaml --format json --output results.json

Documentation

Full documentation is available at orieg.github.io/yaml-workflow.

Contributing

Contributions are welcome! See the Contributing Guide for development setup and guidelines.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Source: README.md at commit b87ac21

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.9.6LatestSep 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