Skip to main content
Glama

MCP Server Airflow Token

get_dag_runs

Retrieve and filter DAG run information from Apache Airflow by specifying criteria such as execution date range, state, and pagination options.

Instructions

Get DAG runs by ID

Input Schema

NameRequiredDescriptionDefault
dag_idYes
end_date_gteNo
end_date_lteNo
execution_date_gteNo
execution_date_lteNo
limitNo
offsetNo
order_byNo
start_date_gteNo
start_date_lteNo
stateNo
updated_at_gteNo
updated_at_lteNo

Input Schema (JSON Schema)

{ "properties": { "dag_id": { "title": "Dag Id", "type": "string" }, "end_date_gte": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "End Date Gte" }, "end_date_lte": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "End Date Lte" }, "execution_date_gte": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Execution Date Gte" }, "execution_date_lte": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Execution Date Lte" }, "limit": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Limit" }, "offset": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Offset" }, "order_by": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Order By" }, "start_date_gte": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Start Date Gte" }, "start_date_lte": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Start Date Lte" }, "state": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "State" }, "updated_at_gte": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Updated At Gte" }, "updated_at_lte": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Updated At Lte" } }, "required": [ "dag_id" ], "type": "object" }

Implementation Reference

  • The main handler function implementing the get_dag_runs tool logic: fetches DAG runs for a specific DAG ID with optional filters via Airflow API, adds UI links, and returns formatted text content.
    async def get_dag_runs( dag_id: str, limit: Optional[int] = None, offset: Optional[int] = None, execution_date_gte: Optional[str] = None, execution_date_lte: Optional[str] = None, start_date_gte: Optional[str] = None, start_date_lte: Optional[str] = None, end_date_gte: Optional[str] = None, end_date_lte: Optional[str] = None, updated_at_gte: Optional[str] = None, updated_at_lte: Optional[str] = None, state: Optional[List[str]] = None, order_by: Optional[str] = None, ) -> List[Union[types.TextContent, types.ImageContent, types.EmbeddedResource]]: # Build parameters dictionary kwargs: Dict[str, Any] = {} if limit is not None: kwargs["limit"] = limit if offset is not None: kwargs["offset"] = offset if execution_date_gte is not None: kwargs["execution_date_gte"] = execution_date_gte if execution_date_lte is not None: kwargs["execution_date_lte"] = execution_date_lte if start_date_gte is not None: kwargs["start_date_gte"] = start_date_gte if start_date_lte is not None: kwargs["start_date_lte"] = start_date_lte if end_date_gte is not None: kwargs["end_date_gte"] = end_date_gte if end_date_lte is not None: kwargs["end_date_lte"] = end_date_lte if updated_at_gte is not None: kwargs["updated_at_gte"] = updated_at_gte if updated_at_lte is not None: kwargs["updated_at_lte"] = updated_at_lte if state is not None: kwargs["state"] = state if order_by is not None: kwargs["order_by"] = order_by response = dag_run_api.get_dag_runs(dag_id=dag_id, **kwargs) # Convert response to dictionary for easier manipulation response_dict = response.to_dict() # Add UI links to each DAG run for dag_run in response_dict.get("dag_runs", []): dag_run["ui_url"] = get_dag_run_url(dag_id, dag_run["dag_run_id"]) return [types.TextContent(type="text", text=str(response_dict))]
  • Local registration: get_all_functions() returns the list of DAG run related tools, including the tuple for get_dag_runs, which is imported and used in main.py to register tools with the MCP server.
    def get_all_functions() -> list[tuple[Callable, str, str, bool]]: """Return list of (function, name, description, is_read_only) tuples for registration.""" return [ (post_dag_run, "post_dag_run", "Trigger a DAG by ID", False), (get_dag_runs, "get_dag_runs", "Get DAG runs by ID", True), (get_dag_runs_batch, "get_dag_runs_batch", "List DAG runs (batch)", True), (get_dag_run, "get_dag_run", "Get a DAG run by DAG ID and DAG run ID", True), (update_dag_run_state, "update_dag_run_state", "Update a DAG run state by DAG ID and DAG run ID", False), (delete_dag_run, "delete_dag_run", "Delete a DAG run by DAG ID and DAG run ID", False), (clear_dag_run, "clear_dag_run", "Clear a DAG run", False), (set_dag_run_note, "set_dag_run_note", "Update the DagRun note", False), (get_upstream_dataset_events, "get_upstream_dataset_events", "Get dataset events for a DAG run", True), ]
  • src/main.py:8-8 (registration)
    Global registration import: Imports the get_all_functions from dagrun module (aliased as get_dagrun_functions) to include its tools in the central tool registry.
    from src.airflow.dagrun import get_all_functions as get_dagrun_functions
  • Helper function to generate the Airflow UI URL for a specific DAG run, used by the get_dag_runs handler to enrich the response.
    def get_dag_run_url(dag_id: str, dag_run_id: str) -> str: return f"{AIRFLOW_HOST}/dags/{dag_id}/grid?dag_run_id={dag_run_id}"

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nikhil-ganage/mcp-server-airflow-token'

If you have feedback or need assistance with the MCP directory API, please join our Discord server