
Apache Airflow MCP Server
Interact with Apache Airflow's REST API through MCP — manage DAGs, runs, tasks, variables, connections, and more.
Add to your client
Copy the config for your MCP client and paste it into its config file.
uvx mcp-server-apache-airflowPaste into ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"apache-airflow-mcp-server": {
"command": "uvx",
"args": [
"mcp-server-apache-airflow"
],
"env": {
"AIRFLOW_HOST": "https://your-airflow-host",
"AIRFLOW_USERNAME": "your-username",
"AIRFLOW_PASSWORD": "your-password"
}
}
}
}Requires `uv` (the Python package runner). Install it from https://docs.astral.sh/uv/ if `uvx` is not found.
Step-by-step guides: Add to Claude Desktop · Add to Cursor · Add to Windsurf
Before you start
- A running Apache Airflow instance with its REST API accessible
- Airflow credentials: Basic Auth (username/password) or a JWT token
- uv / uvx to run the server (or install via Smithery)
About Apache Airflow MCP Server
This project implements an MCP server that wraps Apache Airflow's REST API, allowing MCP clients to interact with Airflow in a standardized way. It uses the official Apache Airflow client library (apache-airflow-client). The server covers DAG management, DAG runs, tasks, variables, connections, pools, XComs, datasets, monitoring, DAG stats, config, plugins, providers, event logs, and system endpoints. You can select which API groups to expose with --apis and restrict to read-only operations with --read-only or READ_ONLY=true. Configure it via environment variables: AIRFLOW_HOST (defaults to http://localhost:8080), AIRFLOW_API_VERSION (defaults to v1), and either Basic Auth (AIRFLOW_USERNAME/AIRFLOW_PASSWORD) or JWT (AIRFLOW_JWT_TOKEN) credentials. Installable via uvx, uv, or Smithery.
Tools & capabilities (15)
DAG ManagementList DAGs, get DAG details, pause/unpause, update, delete, get DAG source, patch multiple DAGs, and reparse a DAG file.
DAG RunsList, create, get details, update, delete, and batch-list DAG runs; clear a run, set a run note, and get upstream dataset events.
TasksList DAG tasks, get task details, get/list task instances, update task instances, get task instance logs, clear task instances, set task instance state, and list task instance tries.
VariablesList, create, get, update, and delete Airflow variables.
ConnectionsList, create, get, update, delete, and test Airflow connections.
PoolsList, create, get, update, and delete pools.
XComsList XCom entries and get a specific XCom entry for a task instance.
DatasetsList/get datasets, get and create dataset events, and manage DAG/dataset queued events.
MonitoringGet the health status of the Airflow instance.
DAG StatsGet DAG statistics.
ConfigGet Airflow configuration.
PluginsGet installed Airflow plugins.
ProvidersList installed Airflow providers.
Event LogsList event logs and get a specific event log entry.
SystemGet import errors and details, get health status, and get the Airflow version.
When to use it
- Let an AI assistant inspect and trigger Airflow DAG runs from a chat interface
- Query DAG, task, and run status for monitoring and troubleshooting pipelines
- Manage Airflow variables, connections, and pools through natural language
- Safely expose read-only Airflow observability to LLM clients via READ_ONLY mode
Security notes
Requires credentials for your Airflow instance via environment variables (AIRFLOW_USERNAME/AIRFLOW_PASSWORD for Basic Auth, or AIRFLOW_JWT_TOKEN for JWT). If both JWT token and basic auth credentials are provided, the JWT token takes precedence. For safety, run with READ_ONLY=true (or the --read-only flag) to expose only read operations and exclude any tools that create, update, or delete resources.
Apache Airflow MCP Server FAQ
How do I authenticate against Airflow?
Choose Basic Authentication (set AIRFLOW_USERNAME and AIRFLOW_PASSWORD) or JWT Token Authentication (set AIRFLOW_JWT_TOKEN). If both are provided, the JWT token takes precedence. A JWT token can be obtained from Airflow's /auth/token endpoint.
How do I run the server in read-only mode?
Use the --read-only flag or set READ_ONLY=true. This exposes only read operations (GET requests) like listing and getting details, and excludes any tools that create, update, or delete resources. You can combine it with API group selection.
Can I limit which API groups are exposed?
Yes. Use the --apis flag (repeatable), e.g. --apis dag --apis dagrun. Allowed values include config, connections, dag, dagrun, dagstats, dataset, eventlog, importerror, monitoring, plugin, pool, provider, taskinstance, variable, and xcom. The default exposes all APIs.
What transports are supported?
stdio (default), sse, and http. The transport can be set via the --transport option, and a port can be configured for SSE/HTTP (default 8000).
Alternatives to Apache Airflow MCP Server
Compare all alternatives →GitHub's official server for repos, issues, PRs, and Actions — local Docker or hosted remote.
Official AWS Labs server that lets agents call any AWS API via the AWS CLI surface.
Bulk Kubernetes port forwarding with an MCP server that lets AI assistants forward services, inspect pods, and monitor traffic.
Compare Apache Airflow MCP Server with: