The read surface is wide enough that most incident questions never reach the web UI, and the write surface is deliberately small — trigger, pause, unpause, and connection create, update and delete. The thing to check first is version: list_users, list_roles, list_permissions, list_datasets and the dataset event tools are marked v1 API only, so on a v2 cluster those are the calls that will not behave, while DAG, task instance and config coverage is unaffected.
A server over the Airflow REST API, 54 tools spanning DAGs and their runs, task instances and their logs, configuration, pools, variables, connections, users and roles, plugins, providers and datasets.
- The triage path in three steps: running_dags and failed_dags say what is broken now, dag_task_duration narrows it to a task, get_task_instance_logs returns that attempt's log by try_number
- DAG control alongside the reads — trigger_dag, pause_dag and unpause_dag — with dag_code, dag_graph and list_tasks to read the DAG itself
- Import errors treated as their own view: list_import_errors, get_import_error and all_dag_import_summary, so a DAG that never registered is visible next to the ones that ran
- Listing shaped for a large cluster: list_dags and get_dags_detailed_batch take name_contains and id_contains filters with offset and limit, or fetch_all in one go
- Cluster state and settings: get_health, get_version, get_config with list_config_sections and search_config_options, plus pools, variables and event logs
- Connections that can be written, not only read — create_connection, update_connection and delete_connection sit beside get_connection
- Values passed between tasks and data lineage: list_xcom_entries and get_xcom_entry, list_datasets and list_dataset_events
An Airflow cluster reachable over its REST API, with an account whose role permits the endpoints in play — the connection tools write to it. The user, role, permission and dataset tools are documented as v1 API only, and the dataset ones note that v2 uses Assets instead. MIT licensed.
One command plus a key — uvx --python 3.12 mcp-airflow-api, then supply credentials
