Incident Response MCP for Apache Airflow
Diagnose Airflow failures from UI links with bounded logs and optional recovery actions.
Connector by madamak · GitHub account verified by the MCP Registry
Chalk Labs
Need help deploying Incident Response MCP for Apache Airflow?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/madamak-apache-airflow-mcp-server
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.
- Tools
- 11 read · 1 write · 2 delete · 2 not yet classified
- Secrets
- 2 (API keys, tokens or passwords)
- Install scripts
- Not scanned yet
- Runs as
- Python package
Tools by what they do 16
Read from the source code; the running server may list different tools.
Read 11 · Look things up without changing anything.
airflow_dataset_eventsairflow_describe_instanceairflow_get_dagairflow_get_dag_runairflow_get_task_instanceairflow_get_task_instance_logsairflow_list_dag_runsairflow_list_dagsairflow_list_instancesairflow_list_task_instancesairflow_resolve_url
Write 1 · Create, change, send or run things.
airflow_trigger_dag
Delete 2 · Delete, drop, revoke or wipe things.
airflow_clear_dag_runairflow_clear_task_instances
Not yet classified 2 · We could not tell from the name and description.
airflow_pause_dagairflow_unpause_dag
Secrets and settings it asks for
Secrets: values you paste in that let it act as you.
AIRFLOW_MCP_PASSWORDAIRFLOW_MCP_TOKEN
Other settings (environment variables or headers).
AIRFLOW_MCP_API_VERSIONAIRFLOW_MCP_HOSTAIRFLOW_MCP_READ_ONLYAIRFLOW_MCP_USERNAME
Tools (16)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
airflow_clear_dag_runDestructively clear all task instances within one specific DAG run. Parameters - instance: Instance key (optional; mutually exclusive with ui_url) - ui_url: Airflow UI URL to resolve instance (optional; takes precedence) - dag_id: DAG identifier (required if ui_url not provided) - dag_run_id: DAG run identifier (required if ui_url not provided) - include_subdags: Include subDAGs (optional) - include_parentdag: Include parent DAG (optional) - include_upstream: Include upstream tasks (optional) - include_downstream: Include downstream tasks (optional) - dry_run: Preview without mutating (defaul…
airflow_clear_task_instancesClear task instances for a DAG across one or more runs using Airflow's native filter set (destructive). Parameters - instance: Instance key (optional; mutually exclusive with ui_url) - ui_url: Airflow UI URL to resolve instance (optional; takes precedence) - dag_id: DAG identifier (required if ui_url not provided) - task_ids: List of task IDs to clear (optional) - start_date: ISO8601 start date filter (optional) - end_date: ISO8601 end date filter (optional) - include_subdags: Include subDAGs (optional) - include_parentdag: Include parent DAG (optional) - include_upstream: Include upstream ta…
airflow_dataset_eventsread-onlyList dataset events. Parameters - instance: Instance key (optional) - ui_url: Airflow UI URL to resolve instance (optional) - dataset_uri: Dataset URI (required) - limit: Max results (default 50; accepts int/float/str, coerced to non-negative int, fractional values truncated) Returns - Response dict: { "events": [object], "count": int, "request_id": str }
airflow_describe_instanceread-onlyDescribe a configured Airflow instance (host + metadata, never secrets). Parameters - instance: Instance key (e.g., "data-stg") Returns - Response dict: { "instance", "host", "api_version", "verify_ssl", "auth_type", "request_id": str } - Raises: ToolError with compact JSON payload (`code`, `message`, `request_id`, optional `context`)
airflow_get_dagread-onlyGet DAG details and a UI link. Parameters - instance | ui_url: Provide one; `ui_url` auto-resolves/validates the host. - dag_id: Required when only `instance` is supplied. Returns - Response dict: { "dag": object, "ui_url": str, "request_id": str } - Raises: ToolError with compact JSON payload (`code`, `message`, `request_id`, optional `context`)
airflow_get_dag_runread-onlyGet a single DAG run and a UI link. Parameters - instance: Instance key (optional) - ui_url: Airflow UI URL to resolve instance/dag/dag_run (optional) - dag_id: DAG identifier - dag_run_id: DAG run identifier Returns - Response dict: { "dag_run": object, "ui_url": str, "request_id": str }
airflow_get_task_instanceread-onlyReturn task metadata, config, attempt summary, optional rendered fields, and UI URLs. Parameters - instance | ui_url: Target selection (URL precedence) - dag_id, dag_run_id, task_id: Required identifiers (unless resolved from ui_url) - include_rendered: When true, include rendered template fields (truncated using max_rendered_bytes) - max_rendered_bytes: Byte cap for rendered fields payload (default 100KB; accepts int/float/str, coerced to positive int, fractional values truncated) Returns - Response dict: { "task_instance": {...}, "task_config": {...}, "attempts": {...}, "ui_url": {...}, "r…
airflow_get_task_instance_logsread-onlyFetch task instance logs with optional filtering and truncation. Large log handling: Logs >100MB automatically tail to last 10,000 lines (sets auto_tailed=true). Host-segmented responses are flattened into a single string using headers of the form `--- [worker] ---`, ensuring agents can reason about multi-host output. The tool requires an explicit `try_number`; callers should first retrieve it via `airflow_get_task_instance`. Filter order of operations: 1. Auto-tail: If log >100MB, take last 10,000 lines 2. tail_lines: Extract last N lines from log 3. filter_level: Find matching lines by lev…
airflow_list_dag_runsread-onlyList DAG runs (defaults to execution_date DESC) with per-run UI URLs. Parameters - instance: Instance key (optional) - ui_url: Airflow UI URL to resolve instance/dag_id (optional) - dag_id: DAG identifier (required if ui_url not provided) - limit: Max results (default 100; accepts int/float/str, coerced to non-negative int, fractional values truncated) - offset: Offset for pagination (default 0; accepts int/float/str, coerced to non-negative int, fractional values truncated) - state: List of states to filter by (optional) - order_by: Optional `"start_date"`, `"end_date"`, `"execution_date"`, …
airflow_list_dagsread-onlyList DAGs (pause state + UI link) for the target instance. Parameters - instance: Instance key (optional; mutually exclusive with ui_url) - ui_url: Airflow UI URL to resolve instance (optional; takes precedence - must match a configured host) - limit: Max results (default 100; accepts int/float/str, coerced to non-negative int, fractional values truncated) - offset: Offset for pagination (default 0; accepts int/float/str, coerced to non-negative int, fractional values truncated) Returns - Response dict: { "dags": [{ "dag_id", "is_paused", "ui_url" }], "count": int, "request_id": str } - Rais…
airflow_list_instancesread-onlyList configured Airflow instance keys. Returns - Response dict: { "instances": [str], "default_instance": str | null, "request_id": str } - Raises: ToolError with compact JSON payload (`code`, `message`, `request_id`, optional `context`)
airflow_list_task_instancesread-onlyList task instances within one DAG run, including state and attempt log URLs. Parameters - instance: Instance key (optional) - ui_url: Airflow UI URL to resolve instance/dag/dag_run (optional) - dag_id: DAG identifier - dag_run_id: DAG run identifier - limit: Max results (default 100; accepts int/float/str, coerced to non-negative int, fractional values truncated) - offset: Offset for pagination (default 0; accepts int/float/str, coerced to non-negative int, fractional values truncated) - state: Optional list of task states (case-insensitive). When provided, only matching states are returned.…
airflow_pause_dagPause DAG scheduling (sets `is_paused=True` and returns UI link). Parameters - instance: Instance key (optional; mutually exclusive with ui_url) - ui_url: Airflow UI URL to resolve instance (optional; takes precedence) - dag_id: DAG identifier (required if ui_url not provided) Returns - Response dict: { "dag_id": str, "is_paused": true, "ui_url": str, "request_id": str } - Raises: ToolError with compact JSON payload (`code`, `message`, `request_id`, optional `context`)
airflow_resolve_urlread-onlyParse an Airflow UI URL, resolve instance and identifiers. Parameters - url: Airflow UI URL (http/https) Returns - Response dict: { "instance", "dag_id"?, "dag_run_id"?, "task_id"?, "try_number"?, "route", "request_id" } - Raises: ToolError with compact JSON payload (`code`, `message`, `request_id`, optional `context`)
airflow_trigger_dagTrigger a DAG run with optional configuration. Parameters - instance: Instance key (optional; mutually exclusive with ui_url) - ui_url: Airflow UI URL to resolve instance (optional; takes precedence) - dag_id: DAG identifier (required if ui_url not provided) - dag_run_id: Custom run id (optional) - logical_date: Optional ISO8601 logical date/time assigned to the new run - conf: Configuration object as dict or JSON string (optional) - note: Run note/comment (optional) Returns - Response dict: { "dag_run_id": str, "ui_url": str } - Raises: ToolError with compact JSON payload (`code`, `message`…
Show 1 more tools
airflow_unpause_dagResume DAG scheduling (sets `is_paused=False` and returns UI link). Parameters - instance: Instance key (optional; mutually exclusive with ui_url) - ui_url: Airflow UI URL to resolve instance (optional; takes precedence) - dag_id: DAG identifier (required if ui_url not provided) Returns - Response dict: { "dag_id": str, "is_paused": false, "ui_url": str, "request_id": str } - Raises: ToolError with compact JSON payload (`code`, `message`, `request_id`, optional `context`)
Signals
- Stars
- 2
- Forks
- 0
- Open issues
- 0
- Weekly downloads
- 56
- Last commit
- Jul 16, 2026 (3 months ago)
- Last release
- Jul 16, 2026 (3 months ago)
- Last package publish
- Jul 16, 2026 (3 months ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.madamak/apache-airflow-mcp-server- Version
- 1.0.2
- Auth
- API key
- Packages
- pypi apache-airflow-mcp-server
- License
- Apache-2.0
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get Incident Response MCP for Apache Airflow running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
Incident Response MCP for Apache Airflow. Agent Mart. https://agentmart.dev/connectors/madamak-apache-airflow-mcp-server (last updated 2026-10-24)