airflow-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| AIRFLOW_TOOLS | No | Category toggles | |
| MCP_TRANSPORT | No | Set to http to opt in to Streamable HTTP transport | |
| AIRFLOW_API_URL | Yes | Airflow REST API base, e.g. http://airflow.example.com:8080/api/v1 | |
| AIRFLOW_DISABLE | No | Category toggles | |
| AIRFLOW_PASSWORD | No | Basic-auth password (secret) | |
| AIRFLOW_USERNAME | No | Basic-auth username | |
| AIRFLOW_ALLOW_WRITE | No | true enables airflow-trigger-dag / airflow-clear-task |
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": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| airflow-list-dagsB | List Airflow DAGs (active by default) with optional tag filter and dag_id substring search |
| airflow-list-runsA | List recent runs of one Airflow DAG, optionally filtered by state, ordered newest first |
| airflow-get-task-instancesB | List task instances for a specific Airflow DAG run with state, try_number, duration |
| airflow-get-task-logsB | Fetch the tail (last N kB) of an Airflow task instance log for a specific try_number |
| airflow-trigger-dagA | Trigger a new Airflow DAG run with optional conf payload and note. Write-gated by AIRFLOW_ALLOW_WRITE. |
| airflow-clear-taskA | Clear specific task instances in an Airflow DAG run (re-run them); supports include_upstream / include_downstream. Write-gated by AIRFLOW_ALLOW_WRITE. |
| dag-health-rollupA | Aggregated DAG health: success-rate over the last N runs + count breakdown (succeeded/failed/queued) + average duration + last-failed-run id + (optional) failing task instances. Replaces the airflow-list-runs + airflow-get-task-instances combo for 'is this DAG healthy right now?'. |
| search-toolsA | Discover available Airflow MCP tools by natural language query. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| dag-failure-triage | Pull recent runs of a DAG, isolate the most recent failed run, dump the failing task tail logs, and propose a remediation. If @us-all/dbt-mcp is also installed, suggest cross-referencing with dbt run results when the DAG runs dbt. |
| dag-schedule-audit | Sweep all active DAGs, identify schedule misses (next_dagrun far in the past), abnormally low success rates, and stuck/queued runs. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
Each tool maps to a distinct resource/action: DAGs, runs, task instances, logs, aggregate health, and tool discovery. dag-health-rollup and airflow-list-runs could overlap for health questions, but the description explicitly positions the rollup as the higher-level replacement, so ambiguity remains low.
Most tools follow the airflow-<verb>-<object> pattern (airflow-list-dags, airflow-trigger-dag, airflow-clear-task, airflow-list-runs, airflow-get-task-instances, airflow-get-task-logs), but dag-health-rollup and search-tools break both the airflow- prefix and the verb-noun convention. There is also minor inconsistency between 'list' and 'get' for similar retrieval operations.
Eight tools is well-scoped for an Airflow operations server. Each tool covers a meaningful operation without redundancy or bloat.
The set covers the core operational workflow: discover DAGs, trigger runs, inspect runs/task instances/logs, clear tasks, and get an aggregated health rollup. Minor gaps like pause/unpause DAGs or fetching DAG details exist, but they do not break the primary monitoring and troubleshooting use case.