From mcp-prefect to yas-mcp
From mcp-prefect to yas-mcp
In early 2025, I built mcp-prefect, a Model Context Protocol server that let AI assistants interact with Prefect’s workflow API. It exposed 64 tools across 10 categories: flows, deployments, work queues, variables, logs, the works.
The Prefect team noticed and reached out about collaborating. They ended up building their own official version. I archived mine in November 2025 with a deprecation notice pointing to their release.
What I learned
Building mcp-prefect taught me a few things:
Hand-writing MCP servers is tedious. Every API endpoint becomes a tool definition with input schemas, descriptions, and handlers. It’s mechanical work.
Most APIs already have this information in their OpenAPI spec.
The MCP ecosystem was exploding but everyone was duplicating effort.
yas-mcp
So I built yas-mcp: yet another swagger MCP. Point it at any OpenAPI spec and it generates an MCP server automatically.
yas-mcp --swagger-file api.yaml --mode stdio
Written in Rust for fast startup and zero runtime dependencies. Supports OAuth2, route filtering, multiple transport modes.
If I’d had this tool first, mcp-prefect would have been a config file instead of a Python project.
flowengine
Around the same time I started flowengine — a Rust workflow engine inspired by n8n and Airflow but event-driven and embeddable.
The connection: I wanted to build workflows that could call MCP tools, and MCP servers that could trigger workflows. The two projects feed each other.
flowengine is still early. DAG execution works, there’s a node registry, real-time event streaming, HTTP/WebSocket API, its all just json for now, but hey it can run docker, in a way that reminds me too much of hadoop, but that’s for another PR.
Links
- yas-mcp — OpenAPI to MCP, in Rust
- flowengine — event-driven workflow engine
- mcp-prefect — archived, use yas-mcp