Stateful workflows for MCP servers
Open Source · MITMCP servers have tools. But tools without process are just a bag of functions — the AI has to guess what comes next, state gets lost between sessions, and multi-step tasks fall apart. Vela gives any MCP server pausable, resumable, stateful workflows, defined as YAML.
pip install vela-sdk[fastmcp]
from fastmcp import FastMCP from vela_sdk import VelaWorkflows mcp = FastMCP("cooking-assistant") workflows = VelaWorkflows(mcp, workflows_dir="./workflows/")
npm install vela-sdk
import { FastMCP } from "fastmcp"; import { VelaWorkflows } from "vela-sdk"; import { FastMcpAdapter } from "vela-sdk/adapters/fastmcp"; const server = new FastMCP({ name: "my-server", version: "1.0.0" }); const vela = new VelaWorkflows({ server: new FastMcpAdapter(server), workflows: [myWorkflowYaml], });
Define your process as YAML — 7 step types, branching, pause/resume across sessions.
id: cook-recipe name: Cook a Recipe steps: - id: choose type: choice prompt: "What do you want to cook?" options: - key: pasta label: Pasta Carbonara - key: curry label: Thai Green Curry - id: ingredients type: confirm prompt: "Check these ingredients: {{state.recipe_ingredients}}" - id: cooking type: execute prompt: "Follow the recipe step by step."
Pause a workflow, come back tomorrow, resume exactly where it left off — identity-based state, not just chat history.
Adapters for FastMCP, the official @modelcontextprotocol/sdk, and LangChain — bring your own server.
7 step types — freeform, choice, confirm, execute, dialog, workflow, mcp_call — with templating and branching.
Python and TypeScript share the same state-machine architecture — pick whichever your server runs on.
| Example | Framework | Language |
|---|---|---|
| mcp-fastmcp | FastMCP | Python |
| langchain | LangChain | Python |
| mcp-fastmcp | FastMCP | TypeScript |
| mcp-sdk | @modelcontextprotocol/sdk | TypeScript |
| langchain | LangChain | TypeScript |