airflow-unfactor
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| read_dagA | Read an Airflow DAG file and return raw source with metadata. Accepts a file path or inline content. Returns the source code, file path, size, and line count. The LLM reads the code directly. Args: path: Path to a DAG file on disk. content: Inline DAG source code. Returns: JSON with source, file_path, file_size_bytes, line_count — or error. |
| lookup_conceptA | Look up Airflow→Prefect translation knowledge for a concept. Searches Colin-compiled knowledge for operators, patterns, connections, and core concepts. Falls back to built-in mappings if Colin output is not available. Args: concept: The Airflow concept to look up (e.g. "PythonOperator", "XCom", "TaskGroup", "postgres_default"). Returns: JSON with concept_type, airflow info, prefect_equivalent, translation_rules, and source ("colin" or "fallback"). |
| search_prefect_docsA | Search current Prefect documentation via the Prefect MCP server. For real-time queries beyond what Colin pre-compiled. Returns search results or an error with suggestion to run 'colin run'. Args: query: Search query for Prefect docs. Returns: JSON with search results or error. |
| validateA | Validate a converted Prefect flow against the original Airflow DAG. Returns both source files for comparison plus a syntax check on the generated code. You perform the structural comparison. Args: original_dag: Path or inline content of the original DAG. converted_flow: Path or inline content of the generated flow. Returns: JSON with original_source, converted_source, syntax_valid, syntax_errors, and comparison_guidance. |
| scaffoldA | Generate a Prefect project directory structure. Creates the project skeleton following prefecthq/flows conventions. Does NOT generate flow code - that's for the LLM to do. Args: output_directory: Where to create the project project_name: Project name (defaults to directory name) workspace: Workspace name for deployments// structure flow_names: List of flow names to create directories for include_docker: Include Dockerfile template include_github_actions: Include CI workflow template schedule_interval: Cron string, preset (@daily etc.), seconds, or None. Returns: JSON with created_directories, created_files, prefect_yaml_template, next_steps |
| generate_deploymentA | Write prefect.yaml deployment configuration from DAG metadata. Call after generating flow.py. Produces a complete prefect.yaml with YAML anchors, schedule config, parameter defaults, and TODO stubs for work pool and pull step configuration. Args: output_directory: Directory to write prefect.yaml into. flows: List of flow dicts. Each requires flow_name and entrypoint. Optional fields: schedule (cron/interval/None), parameters (dict of name→default), description, tags, dataset_triggers. workspace: Workspace name (default: "default"). Returns: JSON with created_file, deployment_names, next_steps. |
| generate_migration_reportA | Write MIGRATION.md — human-readable record of a DAG conversion. Call as the final step after generate_deployment. Documents every conversion decision, produces a before-production checklist with Prefect doc links, and suggests adding the Prefect MCP server. Args: output_directory: Directory to write MIGRATION.md into. dag_path: Path to the original Airflow DAG file. flow_path: Path to the generated Prefect flow file. decisions: List of dicts, each with: component, outcome, rationale (optional), manual_action (optional). manual_actions: Top-level action types not tied to a specific component (e.g. "setup_work_pool", "migrate_connections"). Returns: JSON with created_file, checklist_items_count. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 7 tools
Each tool targets a distinct stage of the migration workflow: reading source, lookup translation knowledge, searching docs, validating, scaffolding project, generating deployment config, and writing report. No two tools overlap in purpose or could be confused.
Most tools follow a verb_noun pattern (read_dag, lookup_concept, search_prefect_docs, generate_deployment, generate_migration_report), but 'validate' and 'scaffold' are single verbs without objects, breaking the pattern. The naming style is still readable and all lowercase with underscores.
7 tools is well within the ideal 3-15 range and perfectly scoped for the server's purpose: converting Airflow DAGs to Prefect. Each tool earns its place in the workflow without redundancy or bloat.
The tool set covers the major stages of migration: reading the source, understanding concepts, verifying, scaffolding, deployment config, and reporting. The only notable gap is the lack of a tool to generate the actual flow code, but this is intentional (the LLM is expected to write it). Minor gaps like automatic metadata extraction are workable.