Skip to main content
Glama
call518

MCP-Airflow-API

by call518

๐Ÿš€ MCP-Airflow-API

Revolutionary Open Source Tool for Managing Apache Airflow with Natural Language

License: MIT Python Docker Pulls BuyMeACoffee

Deploy to PyPI with tag PyPI PyPI - Downloads


Architecture & Internal (DeepWiki)

Ask DeepWiki


Related MCP server: mcp-airflow

๐Ÿ“‹ Overview

Have you ever wondered how amazing it would be if you could manage your Apache Airflow workflows using natural language instead of complex REST API calls or web interface manipulations? MCP-Airflow-API is the revolutionary open-source project that makes this goal a reality.

MCP-Airflow-API Screenshot


๐ŸŽฏ What is MCP-Airflow-API?

MCP-Airflow-API is an MCP server that leverages the Model Context Protocol (MCP) to transform Apache Airflow REST API operations into natural language tools. This project hides the complexity of API structures and enables intuitive management of Airflow clusters through natural language commands.

๐Ÿ†• Multi-Version API Support (NEW!)

Now supports both Airflow API v1 (2.x) and v2 (3.0+) with dynamic version selection via environment variable:

  • API v1: Full compatibility with Airflow 2.x clusters (54 tools) - Documentation

  • API v2: Enhanced features for Airflow 3.0+ including asset management for data-aware scheduling (56 registered tools) - Documentation

Key Architecture: Single MCP server with shared common tools (54) plus v2-exclusive asset tools (2) - dynamically loads appropriate toolset based on AIRFLOW_API_VERSION environment variable!

Traditional approach (example):

curl -X GET "http://localhost:8080/api/v1/dags?limit=100&offset=0" \
  -H "Authorization: Basic YWlyZmxvdzphaXJmbG93"

MCP-Airflow-API approach (natural language):

"Show me the currently running DAGs"


๐Ÿš€ Quickstart

๐Ÿ“ Need a test Airflow cluster? Use our companion project Airflow-Docker-Compose with support for both Airflow 2.x and Airflow 3.x environments!

Flow Diagram of Quickstart/Tutorial

Flow Diagram of Quickstart/Tutorial

For quick evaluation and testing:

git clone https://github.com/call518/MCP-Airflow-API.git
cd MCP-Airflow-API

# Configure your Airflow credentials
cp .env.example .env
# Edit .env with your Airflow API settings

# Start all services
docker-compose up -d

# Access OpenWebUI at http://localhost:3002/
# API documentation at http://localhost:8002/docs

Getting Started with OpenWebUI (Docker Option)

๐Ÿ“Œ Note: Web-UI configuration instructions are based on OpenWebUI v0.6.22. Menu locations and settings may differ in newer versions.

  1. Access http://localhost:3002/

  2. Log in with admin account

  3. Go to "Settings" โ†’ "Tools" from the top menu

  4. Add Tool URL: http://localhost:8002/airflow-api

  5. Configure your LLM provider (Ollama, OpenAI, etc.)


๐Ÿ“ฆ MCP Server Installation Methods

Method 1: Direct Installation from PyPI

uvx --python 3.12 mcp-airflow-api

Method 2: Claude-Desktop MCP Client Integration

Local Access (stdio mode)

{
  "mcpServers": {
    "mcp-airflow-api": {
      "command": "uvx",
      "args": ["--python", "3.12", "mcp-airflow-api"],
      "env": {
        "AIRFLOW_API_VERSION": "v2",
        "AIRFLOW_API_BASE_URL": "http://localhost:8080/api",
        "AIRFLOW_API_USERNAME": "airflow",
        "AIRFLOW_API_PASSWORD": "airflow"
      }
    }
  }
}git

Remote Access (streamable-http mode without authentication)

{
  "mcpServers": {
    "mcp-airflow-api": {
      "type": "streamable-http",
      "url": "http://localhost:8000/mcp"
    }
  }
}

Remote Access (streamable-http mode with Bearer token authentication - Recommended)

{
  "mcpServers": {
    "mcp-airflow-api": {
      "type": "streamable-http",
      "url": "http://localhost:8000/mcp",
      "headers": {
        "Authorization": "Bearer your-secure-secret-key-here"
      }
    }
  }
}

Multiple Airflow Clusters with Different Versions

{
  "mcpServers": {
    "airflow-2x-cluster": {
      "command": "uvx",
      "args": ["--python", "3.12", "mcp-airflow-api"],
      "env": {
        "AIRFLOW_API_VERSION": "v1",
        "AIRFLOW_API_BASE_URL": "http://localhost:38080/api",
        "AIRFLOW_API_USERNAME": "airflow",
        "AIRFLOW_API_PASSWORD": "airflow"
      }
    },
    "airflow-3x-cluster": {
      "command": "uvx",
      "args": ["--python", "3.12", "mcp-airflow-api"],
      "env": {
        "AIRFLOW_API_VERSION": "v2",
        "AIRFLOW_API_BASE_URL": "http://localhost:48080/api",
        "AIRFLOW_API_USERNAME": "airflow",
        "AIRFLOW_API_PASSWORD": "airflow"
      }
    }
  }
}

๐Ÿ’ก Pro Tip: Use the test clusters from Airflow-Docker-Compose for the above configuration - they run on ports 38080 (2.x) and 48080 (3.x) respectively!

Method 3: Development Installation

git clone https://github.com/call518/MCP-Airflow-API.git
cd MCP-Airflow-API
pip install -e .

# Run in stdio mode
python -m mcp_airflow_api

๐ŸŒŸ Key Features

  1. Natural Language Queries
    No need to learn complex API syntax. Just ask as you would naturally speak:

    • "What DAGs are currently running?"

    • "Show me the failed tasks"

    • "Find DAGs containing ETL"

  2. Comprehensive Monitoring Capabilities
    Real-time cluster status monitoring:

    • Cluster health monitoring

    • DAG status and performance analysis

    • Task execution log tracking

    • XCom data management

  3. Dynamic API Version Support
    Single MCP server adapts to your Airflow version:

    • API v1: 54 shared tools for Airflow 2.x compatibility

    • API v2: 54 shared tools + 2 asset management tools for Airflow 3.0+

    • Environment Variable Control: Switch versions instantly with AIRFLOW_API_VERSION

    • Zero Configuration Changes: Same tool names, enhanced capabilities

    • Efficient Architecture: Shared common codebase eliminates duplication

  4. Comprehensive Tool Coverage
    Covers almost all Airflow API functionality:

    • DAG management (trigger, pause, resume)

    • Task instance monitoring

    • Pool and variable management

    • Connection configuration

    • Configuration queries

    • Event log analysis

  5. Large Environment Optimization
    Efficiently handles large environments with 1000+ DAGs:

    • Smart pagination support

    • Advanced filtering options

    • Batch processing capabilities


๐Ÿ› ๏ธ Technical Advantages

  • Leveraging Model Context Protocol (MCP)
    MCP is an open standard for secure connections between AI applications and data sources, providing:

    • Standardized interface

    • Secure data access

    • Scalable architecture

  • Support for Two Transport Modes

    • stdio mode: Direct MCP client integration for local environments

    • streamable-http mode: HTTP-based deployment for Docker and remote access

    Environment Variable Control:

    FASTMCP_TYPE=stdio          # Default: Direct MCP client mode
    FASTMCP_TYPE=streamable-http # Docker/HTTP mode
    FASTMCP_PORT=8000           # HTTP server port (Docker internal)
  • Comprehensive Airflow API Coverage
    Full implementation of official Airflow REST APIs:

    • API v1 Support: Based on Airflow 2.x REST API

    • API v2 Support: Based on Airflow 3.0+ REST API

    • Dynamic Version Selection: Runtime switching between API versions

    • Feature Parity: Complete endpoint coverage for both versions

  • Complete Docker Support
    Full Docker Compose setup with 3 separate services:

    • Open WebUI: Web interface (port 3002)

    • MCP Server: Airflow API tools (internal port 8000, exposed via 18002)

    • MCPO Proxy: REST API endpoint provider (port 8002)


Use Cases in Action

Capacity Management for Operations Teams

Capacity Management for Operations Teams

Capacity Management for Operations Teams

Capacity Management for Operations Teams

Capacity Management for Operations Teams

Capacity Management for Operations Teams

Capacity Management for Operations Teams

Capacity Management for Operations Teams

Capacity Management for Operations Teams

Capacity Management for Operations Teams

Capacity Management for Operations Teams


โš™๏ธ Advanced Configuration

Environment Variables

# Required - Dynamic API Version Selection (NEW!)
# Single server supports both v1 and v2 - just change this variable!
AIRFLOW_API_VERSION=v1           # v1 for Airflow 2.x, v2 for Airflow 3.0+
AIRFLOW_API_BASE_URL=http://localhost:8080/api

# Test Cluster Connection Examples:
# For Airflow 2.x test cluster (from Airflow-Docker-Compose)
AIRFLOW_API_VERSION=v1
AIRFLOW_API_BASE_URL=http://localhost:38080/api

# For Airflow 3.x test cluster (from Airflow-Docker-Compose)  
AIRFLOW_API_VERSION=v2
AIRFLOW_API_BASE_URL=http://localhost:48080/api

# Authentication
AIRFLOW_API_USERNAME=airflow
AIRFLOW_API_PASSWORD=airflow

# Optional - MCP Server Configuration
MCP_LOG_LEVEL=INFO                   # DEBUG/INFO/WARNING/ERROR/CRITICAL
FASTMCP_TYPE=stdio                   # stdio/streamable-http
FASTMCP_PORT=8000                    # HTTP server port (Docker mode)

# Bearer Token Authentication for streamable-http mode
# Enable authentication (recommended for production)
# Default: false (when undefined, empty, or null)
# Values: true/false, 1/0, yes/no, on/off (case insensitive)
REMOTE_AUTH_ENABLE=false             # true/false
REMOTE_SECRET_KEY=your-secure-secret-key-here

API Version Comparison

Official Documentation:

Feature

API v1 (Airflow 2.x)

API v2 (Airflow 3.0+)

Total Tools

54 tools

56 registered tools

Shared Tools

54 (100%)

54 (96%; includes 8 v1-only tools)

Exclusive Tools

0

2 (Asset Management)

Basic DAG Operations

โœ…

โœ… Enhanced

Task Management

โœ…

โœ… Enhanced

Connection Management

โœ…

โœ… Enhanced

Pool Management

โœ…

โœ… Enhanced

Asset Management

โŒ

โœ… New

Asset Events

โŒ

โœ… New

Data-Aware Scheduling

โŒ

โœ… New

Enhanced DAG Warnings

โŒ

โœ… New

Advanced Filtering

Basic

โœ… Enhanced

Counts refer to registered MCP tools. In API v2, eight registered tools (list_users, get_user, list_permissions, list_roles, list_datasets, get_dataset, list_dataset_events, and get_dataset_events) return an unsupported-operation response. Use list_assets and list_asset_events instead of dataset tools in v2.


๐Ÿ” Security & Authentication

Bearer Token Authentication

For streamable-http mode, this MCP server supports Bearer token authentication to secure remote access. This is especially important when running the server in production environments.

Configuration

Enable Authentication:

# In .env file
REMOTE_AUTH_ENABLE=true
REMOTE_SECRET_KEY=your-secure-secret-key-here

Or via CLI:

python -m mcp_airflow_api --type streamable-http --auth-enable --secret-key your-secure-secret-key-here

Security Levels

  1. stdio mode (Default): Local-only access, no authentication needed

  2. streamable-http + REMOTE_AUTH_ENABLE=false: Remote access without authentication โš ๏ธ NOT RECOMMENDED for production

  3. streamable-http + REMOTE_AUTH_ENABLE=true: Remote access with Bearer token authentication โœ… RECOMMENDED for production

Note: REMOTE_AUTH_ENABLE defaults to false when undefined, empty, or null. Supported values are true/false, 1/0, yes/no, on/off (case insensitive).

Client Configuration

When authentication is enabled, MCP clients must include the Bearer token in the Authorization header:

{
  "mcpServers": {
    "mcp-airflow-api": {
      "type": "streamable-http",
      "url": "http://your-server:8000/mcp",
      "headers": {
        "Authorization": "Bearer your-secure-secret-key-here"
      }
    }
  }
}

Security Best Practices

  • Always enable authentication when using streamable-http mode in production

  • Use strong, randomly generated secret keys (32+ characters recommended)

  • Use HTTPS when possible (configure reverse proxy with SSL/TLS)

  • Restrict network access using firewalls or network policies

  • Rotate secret keys regularly for enhanced security

  • Monitor access logs for unauthorized access attempts

Error Handling

When authentication fails, the server returns:

  • 401 Unauthorized for missing or invalid tokens

  • Detailed error messages in JSON format for debugging


Custom Docker Compose Setup

version: '3.8'
services:
  mcp-server:
    build: 
      context: .
      dockerfile: Dockerfile.MCP-Server
    environment:
      - FASTMCP_PORT=8000
      - AIRFLOW_API_VERSION=v1
      - AIRFLOW_API_BASE_URL=http://your-airflow:8080/api
      - AIRFLOW_API_USERNAME=airflow
      - AIRFLOW_API_PASSWORD=airflow

Development Installation

git clone https://github.com/call518/MCP-Airflow-API.git
cd MCP-Airflow-API
pip install -e .

# Run in stdio mode
python -m mcp_airflow_api

๐Ÿงช Test Airflow Cluster Deployment

For testing and development, use our companion project Airflow-Docker-Compose which supports both Airflow 2.x and 3.x environments.

Quick Setup

  1. Clone the test environment repository:

    git clone https://github.com/call518/Airflow-Docker-Compose.git
    cd Airflow-Docker-Compose

Option 1: Deploy Airflow 2.x (LTS)

For testing API v1 compatibility with stable production features:

# Navigate to Airflow 2.x environment
cd airflow-2.x

# (Optional) Customize environment variables
cp .env.template .env
# Edit .env file as needed

# Deploy Airflow 2.x cluster
./run-airflow-cluster.sh

# Access Web UI
# URL: http://localhost:38080
# Username: airflow / Password: airflow

Environment details:

  • Image: apache/airflow:2.10.2

  • Port: 38080 (configurable via AIRFLOW_WEBSERVER_PORT)

  • API: /api/v1/* endpoints

  • Authentication: Basic Auth

  • Use case: Production-ready, stable features

Option 2: Deploy Airflow 3.x (Latest)

For testing API v2 with latest features including Assets management:

# Navigate to Airflow 3.x environment  
cd airflow-3.x

# (Optional) Customize environment variables
cp .env.template .env
# Edit .env file as needed

# Deploy Airflow 3.x cluster
./run-airflow-cluster.sh

# Access API Server
# URL: http://localhost:48080
# Username: airflow / Password: airflow

Environment details:

  • Image: apache/airflow:3.0.6

  • Port: 48080 (configurable via AIRFLOW_APISERVER_PORT)

  • API: /api/v2/* endpoints + Assets management

  • Authentication: JWT Token (FabAuthManager)

  • Use case: Development, testing new features

Option 3: Deploy Both Versions Simultaneously

For comprehensive testing across different Airflow versions:

# Start Airflow 2.x (port 38080)
cd airflow-2.x && ./run-airflow-cluster.sh

# Start Airflow 3.x (port 48080) 
cd ../airflow-3.x && ./run-airflow-cluster.sh

Key Differences

Feature

Airflow 2.x

Airflow 3.x

Authentication

Basic Auth

JWT Tokens (FabAuthManager)

Default Port

38080

48080

API Endpoints

/api/v1/*

/api/v2/*

Assets Support

โŒ Limited/Experimental

โœ… Full Support

Provider Packages

providers

distributions

Stability

โœ… Production Ready

๐Ÿงช Beta/Development

Cleanup

To stop and clean up the test environments:

# For Airflow 2.x
cd airflow-2.x && ./cleanup-airflow-cluster.sh

# For Airflow 3.x
cd airflow-3.x && ./cleanup-airflow-cluster.sh

๐ŸŒˆ Future-Ready Architecture

  • Scalable design and modular structure for easy addition of new features

  • Standards-compliant protocol for integration with other tools

  • Cloud-native operations and LLM-ready interface

  • Context-aware query processing and automated workflow management capabilities


๐ŸŽฏ Who Is This Tool For?

  • Data Engineers โ€” Reduce debugging time, improve productivity, minimize learning curve

  • DevOps Engineers โ€” Automate infrastructure monitoring, reduce incident response time

  • System Administrators โ€” User-friendly management without complex APIs, real-time cluster status monitoring


๐Ÿš€ Open Source Contribution and Community

Repository: https://github.com/call518/MCP-Airflow-API

How to Contribute

  • Bug reports and feature suggestions

  • Documentation improvements

  • Code contributions

Please consider starring the project if you find it useful.


๐Ÿ”ฎ Conclusion

MCP-Airflow-API changes the paradigm of data engineering and workflow management:
No need to memorize REST API calls โ€” just ask in natural language:

"Show me the status of currently running ETL jobs."


๐Ÿท๏ธ Tags

#Apache-Airflow #MCP #ModelContextProtocol #DataEngineering #DevOps #WorkflowAutomation #NaturalLanguage #OpenSource #Python #Docker #AI-Integration


๐Ÿ“š Example Queries & Use Cases

This section provides comprehensive examples of how to use MCP-Airflow-API tools with natural language queries.

Basic DAG Operations

  • list_dags: "List all DAGs with limit 10 in a table format." โ†’ Returns up to 10 DAGs

  • list_dags: "List all DAGs a table format." โ†’ Returns up to All DAGs (WARN: Need High Tokens)

  • list_dags: "Show next page of DAGs." โ†’ Use offset for pagination

  • list_dags: "List DAGs 21-40." โ†’ list_dags(limit=20, offset=20)

  • list_dags: "Filter DAGs whose ID contains 'tutorial'." โ†’ list_dags(id_contains="etl")

  • list_dags: "Filter DAGs whose display name contains 'tutorial'." โ†’ list_dags(name_contains="daily")

  • get_dags_detailed_batch: "Get detailed information for all DAGs with execution status." โ†’ get_dags_detailed_batch(fetch_all=True)

  • get_dags_detailed_batch: "Get details for active, unpaused DAGs with recent runs." โ†’ get_dags_detailed_batch(is_active=True, is_paused=False)

  • get_dags_detailed_batch: "Get detailed info for DAGs containing 'example' with run history." โ†’ get_dags_detailed_batch(id_contains="example", limit=50)

  • running_dags: "Show running DAGs."

  • failed_dags: "Show failed DAGs."

  • trigger_dag: "Trigger DAG 'example_complex'."

  • pause_dag: "Pause DAG 'example_complex' in a table format."

  • unpause_dag: "Unpause DAG 'example_complex' in a table format."

Cluster Management & Health

  • get_health: "Check Airflow cluster health."

  • get_version: "Get Airflow version information."

Pool Management

  • list_pools: "List all pools."

  • list_pools: "Show pool usage statistics."

  • get_pool: "Get details for pool 'default_pool'."

  • get_pool: "Check pool utilization."

Variable Management

  • list_variables: "List all variables."

  • list_variables: "Show all Airflow variables with their values."

  • get_variable: "Get variable 'database_url'."

  • get_variable: "Show the value of variable 'api_key'."

Task Instance Management

list_task_instances_all and list_task_instances_batch return one page using limit and offset. Omitted DAG and run IDs select all DAGs and runs. The execution_date_gte/lte arguments filter execution dates in v1 and logical dates in v2. State and pool lists match any supplied value. The batch tool adds state_summary for the returned page. On Airflow 2.x, filtering by task_id requires Airflow 2.7.1 or later.

  • list_task_instances_all: "List all task instances for DAG 'example_complex'."

  • list_task_instances_all: "Show running task instances."

  • list_task_instances_all: "Show task instances filtered by pool 'default_pool'."

  • list_task_instances_all: "List task instances with duration greater than 300 seconds."

  • list_task_instances_all: "Show failed task instances from last week."

  • list_task_instances_all: "List failed task instances from yesterday."

  • list_task_instances_all: "Show task instances that started after 9 AM today."

  • list_task_instances_all: "List task instances from the last 3 days with state 'failed'."

  • get_task_instance_details: "Get details for task 'data_processing' in DAG 'example_complex' run 'scheduled__xxxxx'."

  • list_task_instances_batch: "List failed task instances from last month."

  • list_task_instances_batch: "Show task instances in batch for multiple DAGs from this week."

  • get_task_instance_extra_links: "Get extra links for task 'data_processing' in latest run."

  • get_task_instance_logs: "Retrieve logs for task 'create_entry_gcs' try number 2 of DAG 'example_complex'."

XCom Management

  • list_xcom_entries: "List XCom entries for task 'data_processing' in DAG 'example_complex' run 'scheduled__xxxxx'."

  • list_xcom_entries: "Show all XCom entries for task 'data_processing' in latest run."

  • get_xcom_entry: "Get XCom entry with key 'result' for task 'data_processing' in specific run."

  • get_xcom_entry: "Retrieve XCom value for key 'processed_count' from task 'data_processing'."

Configuration Management

  • get_config: "Show all Airflow configuration sections and options." โ†’ Returns complete config or 403 if expose_config=False

  • list_config_sections: "List all configuration sections with summary information."

  • get_config_section: "Get all settings in 'core' section." โ†’ get_config_section("core")

  • get_config_section: "Show webserver configuration options." โ†’ get_config_section("webserver")

  • search_config_options: "Find all database-related configuration options." โ†’ search_config_options("database")

  • search_config_options: "Search for timeout settings in configuration." โ†’ search_config_options("timeout")

Important: Configuration tools require expose_config = True in airflow.cfg [webserver] section. Even admin users get 403 errors if this is disabled.

DAG Analysis & Monitoring

  • get_dag: "Get details for DAG 'example_complex'."

  • get_dags_detailed_batch: "Get comprehensive details for all DAGs with execution history." โ†’ get_dags_detailed_batch(fetch_all=True)

  • get_dags_detailed_batch: "Get details for active DAGs with latest run information." โ†’ get_dags_detailed_batch(is_active=True)

  • get_dags_detailed_batch: "Get detailed info for ETL DAGs with recent execution data." โ†’ get_dags_detailed_batch(id_contains="etl")

Note: get_dags_detailed_batch returns each DAG with both configuration details (from get_dag()) and a latest_dag_run field containing the most recent execution information (run_id, state, execution_date, start_date, end_date, etc.).

  • dag_graph: "Show task graph for DAG 'example_complex'."

  • list_tasks: "List all tasks in DAG 'example_complex'."

  • dag_code: "Get source code for DAG 'example_complex'."

  • list_event_logs: "List event logs for DAG 'example_complex'."

  • list_event_logs: "Show event logs with ID from yesterday for all DAGs."

  • get_event_log: "Get event log entry with ID 12345."

  • all_dag_event_summary: "Show event count summary for all DAGs."

  • list_import_errors: "List import errors with ID."

  • get_import_error: "Get import error with ID 67890."

  • all_dag_import_summary: "Show import error summary for all DAGs."

  • dag_run_duration: "Get run duration stats for DAG 'example_complex'."

  • dag_task_duration: "Show latest run of DAG 'example_complex'."

  • dag_task_duration: "Show task durations for latest run of 'manual__xxxxx'."

  • dag_calendar: "Get calendar info for DAG 'example_complex' from last month."

  • dag_calendar: "Show DAG schedule for 'example_complex' from this week."

Additional Registered Tools

Category

Tool

Purpose

API support

Prompt template

get_prompt_template

Read the template or select a section with section

v1, v2

Connections

list_connections

List connections with limit and offset

v1, v2

Connections

get_connection

Read a connection by connection_id

v1, v2

Connections

create_connection

Create a connection from connection_data

v1, v2

Connections

update_connection

Update connection_id using connection_data

v1, v2

Connections

delete_connection

Delete a connection by connection_id

v1, v2

Users and permissions

list_users

List users with limit and offset

v1 only

Users and permissions

get_user

Read a user by username

v1 only

Users and permissions

list_permissions

List available permissions

v1 only

Users and permissions

list_roles

List roles with limit and offset

v1 only

Plugins and providers

list_plugins

List installed plugins

v1, v2

Plugins and providers

list_providers

List installed provider packages

v1, v2

Plugins and providers

get_provider

Read a provider by provider_name

v1, v2

Datasets

list_datasets

List datasets, optionally filtering by uri_pattern

v1 only

Datasets

get_dataset

Read a dataset by dataset_uri

v1 only

Datasets

list_dataset_events

Filter events by dataset_uri or source_dag_id

v1 only

Datasets

get_dataset_events

List events for a specific dataset_uri

v1 only

Date Calculation Examples

Tools automatically base relative date calculations on the server's current date/time:

User Input

Calculation Method

Example Format

"yesterday"

current_date - 1 day

YYYY-MM-DD (1 day before current)

"last week"

current_date - 7 days to current_date - 1 day

YYYY-MM-DD to YYYY-MM-DD (7 days range)

"last 3 days"

current_date - 3 days to current_date

YYYY-MM-DD to YYYY-MM-DD (3 days range)

"this morning"

current_date 00:00 to 12:00

YYYY-MM-DDTHH:mm:ssZ format

The server always uses its current date/time for these calculations.

Asset Management (API v2 Only)

Available only when AIRFLOW_API_VERSION=v2 (Airflow 3.0+):

  • list_assets: "Show all assets registered in the system." โ†’ Lists all data assets for data-aware scheduling

  • list_assets: "Find assets with URI containing 's3://data-lake'." โ†’ list_assets(uri_pattern="s3://data-lake")

  • list_asset_events: "Show recent asset events." โ†’ Lists when assets were created or updated

  • list_asset_events: "Show asset events for specific URI." โ†’ list_asset_events(asset_uri="s3://bucket/file.csv")

  • list_asset_events: "Find events produced by ETL DAGs." โ†’ list_asset_events(source_dag_id="etl_pipeline")

Data-Aware Scheduling Examples:

  • "Show me which assets trigger the customer_analysis DAG."

  • "List all assets created by the data_ingestion DAG this week."

  • "Find assets that haven't been updated recently."

  • "Show the data lineage for our ML training pipeline."


Contributing

๐Ÿค Got ideas? Found bugs? Want to add cool features?

We're always excited to welcome new contributors! Whether you're fixing a typo, adding a new monitoring tool, or improving documentation - every contribution makes this project better.

Ways to contribute:

  • ๐Ÿ› Report issues or bugs

  • ๐Ÿ’ก Suggest new Airflow monitoring features

  • ๐Ÿ“ Improve documentation

  • ๐Ÿš€ Submit pull requests

  • โญ Star the repo if you find it useful!

Pro tip: The codebase is designed to be super friendly for adding new tools. Check out the existing @mcp.tool() functions in airflow_api.py.


๐Ÿ› ๏ธ Adding Custom Tools (Advanced)

This MCP server is designed for easy extensibility. After you have explored the main features and Quickstart, you can add your own custom tools as follows:

Step-by-Step Guide

1. Add Helper Functions (Optional)

Add reusable data functions to src/mcp_airflow_api/functions.py:

async def get_your_custom_data(target_resource: str = None) -> List[Dict[str, Any]]:
  """Your custom data retrieval function."""
  # Example implementation - adapt to your service
  data_source = await get_data_connection(target_resource)
  results = await fetch_data_from_source(
    source=data_source,
    filters=your_conditions,
    aggregations=["count", "sum", "avg"],
    sorting=["count DESC", "timestamp ASC"]
  )
  return results

2. Create Your MCP Tool

Add your tool function to src/mcp_airflow_api/airflow_api.py:

@mcp.tool()
async def get_your_custom_analysis(limit: int = 50, target_name: Optional[str] = None) -> str:
  """
  [Tool Purpose]: Brief description of what your tool does
    
  [Exact Functionality]:
  - Feature 1: Data aggregation and analysis
  - Feature 2: Resource monitoring and insights
  - Feature 3: Performance metrics and reporting
    
  [Required Use Cases]:
  - When user asks "your specific analysis request"
  - Your business-specific monitoring needs
    
  Args:
    limit: Maximum results (1-100)
    target_name: Target resource/service name
    
  Returns:
    Formatted analysis results
  """
  try:
    limit = max(1, min(limit, 100))  # Always validate input
    results = await get_your_custom_data(target_resource=target_name)
    if results:
      results = results[:limit]
    return format_table_data(results, f"Custom Analysis (Top {len(results)})")
  except Exception as e:
    logger.error(f"Failed to get custom analysis: {e}")
    return f"Error: {str(e)}"

3. Update Imports (If Needed)

Add your helper function to imports in src/mcp_airflow_api/airflow_api.py:

from .functions import (
  # ...existing imports...
  get_your_custom_data,  # Add your new function
)

4. Update Prompt Template (Recommended)

Add your tool description to src/mcp_airflow_api/prompt_template.md for better natural language recognition:

### **Your Custom Analysis Tool**

### X. **get_your_custom_analysis**
**Purpose**: Brief description of what your tool does
**Usage**: "Show me your custom analysis" or "Get custom analysis for database_name"
**Features**: Data aggregation, resource monitoring, performance metrics
**Required**: `target_name` parameter for specific resource analysis

5. Test Your Tool

# Local testing
./scripts/run-mcp-inspector-local.sh

# Or with Docker
docker-compose up -d
docker-compose logs -f mcp-server

# Test with natural language:
# "Show me your custom analysis"
# "Get custom analysis for target_name"

That's it! Your custom tool is ready to use with natural language queries.

License

Freely use, modify, and distribute under the MIT License.

Available Tools

54 tools
all_dag_event_summaryB

[Tool Role]: Provides summary of event logs across all DAGs.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It only says 'summary' but does not disclose what the summary contains (e.g., counts, time ranges, aggregation), any side effects, or access requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence is concise and front-loaded with the action. However, it could be slightly more informative without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's name and many siblings, the description should clarify what the summary includes and how it differs. It is too minimal for adequate completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist; schema coverage is 100%. The baseline of 4 is appropriate as the description adds no parameter info but is not needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states it provides a summary of event logs across all DAGs, which is a clear verb+resource. It distinguishes from siblings like 'list_event_logs' (detailed logs) and 'all_dag_import_summary' (import summaries), though not explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. Does not specify exclusions, prerequisites, or when to prefer other tools like 'list_event_logs' for detailed logs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

all_dag_import_summaryA

[Tool Role]: Provides summary of import errors across all DAGs.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden. It only states the purpose but does not disclose behavioral traits such as performance implications, authentication requirements, or whether the summary is real-time or cached.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no unnecessary words, perfectly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and an output schema exists (though not detailed), the description adequately conveys the tool's role. However, a slightly richer description of what the summary includes could improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, so the baseline is 4. The description does not need to add parameter details since none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides a summary of import errors across all DAGs, distinguishing it from siblings like list_import_errors (which lists individual errors) and failed_dags (which focuses on failed DAG runs).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool over alternatives. It does not mention context, prerequisites, or situations where another tool (e.g., list_import_errors) would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_connectionC

[Tool Role]: Creates a new connection.

NameRequiredDescriptionDefault
connection_dataYesConnection JSON body with connection_id and conn_type; optional host, login, password, schema, port, and extra fields. Obtain credentials from a secret store; do not hardcode them.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, and it discloses almost nothing: no permissions required, no duplicate-connection_id behavior, no failure modes. A mutation tool with zero annotation coverage and a one-line description leaves the agent guessing about side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is front-loaded and wastes no words, but it is under-specified rather than genuinely conciseโ€”the brevity comes from omitting information, not from tight editing. The redundant "[Tool Role]:" prefix contributes little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema is present so return values need not be explained, and the parameter is fully documented in the schema. But for a write operation with no annotations, the description should still say something about preconditions (permissions, duplicate ids) and it does not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the connection_data property already documents connection_id, conn_type, optional host/login/password/schema/port/extra, and the secret-store advice. The description adds nothing beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource ("Creates a new connection"), which separates it from list_connections/get_connection/update_connection by intent. However, it is essentially a restatement of the tool name and adds no distinguishing detail such as what a "connection" includes or when creation is preferred over update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool, no mention of prerequisites (permissions, existing connection_id collisions), and no reference to the sibling update_connection or get_connection tools. The agent must infer everything from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dag_calendarC

[Tool Role]: Shows DAG schedule and execution calendar for a date range.

NameRequiredDescriptionDefault
dag_idYesExact DAG identifier, as returned by list_dags; not its display name.
end_dateYesInclusive run start-time upper bound in ISO 8601 format.
start_dateYesInclusive run start-time lower bound in ISO 8601 format.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries the full burden. 'Shows' implies a read operation, but nothing states permission requirements, whether the calendar is computed vs stored, or behavior for missing DAGs. One sentence leaves most behavioral context undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single front-loaded sentence with zero waste. It's efficient but arguably under-specified rather than maximally concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists and all required params are documented in schema, so minimal gaps. However, with no annotations and only one description sentence, an agent lacks guidance on when to use it and interpret calendar results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter has a clear description (dag_id exact identifier, ISO 8601 inclusive bounds). The description adds nothing beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Shows DAG schedule and execution calendar.' Distinguishes it from siblings like list_dags or dag_graph, but doesn't name a sibling or clarify the boundary with dag_run_duration/dag_task_duration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance or alternatives mentioned. Only a hint that it's scoped to a date range; no indication when an agent should pick this over list_dags or dag_run_duration.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dag_codeC

[Tool Role]: Retrieves the source code for the specified DAG.

NameRequiredDescriptionDefault
dag_idYesExact DAG identifier, as returned by list_dags; not its display name.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, yet it says nothing about read-only nature, permission requirements, size limits, or truncation for large DAG files. Only the bare retrieval action is stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. The only minor overhead is the '[Tool Role]:' prefix, which is boilerplate rather than information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return format need not be explained, and the single parameter is fully documented. However, with zero annotations and no behavioral notes, the definition is adequate but thin for a tool an agent may call on arbitrarily large DAGs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already explains that dag_id is the exact identifier as returned by list_dags, not the display name. The description adds no further semantics beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb ('Retrieves') and resource ('source code for the specified DAG'), so the agent knows exactly what comes back. It does not differentiate from near-neighbors like get_dag or dag_graph, which likely return metadata/structure rather than source, leaving a small ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to pick this over get_dag or dag_graph, and no prerequisites or exclusions stated. The agent must infer from the name alone that this returns raw source text rather than parsed structure.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dag_graphB

[Tool Role]: Retrieves task graph structure for the specified DAG.

NameRequiredDescriptionDefault
dag_idYesExact DAG identifier, as returned by list_dags; not its display name.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden, and 'Retrieves' at least signals a read-only operation. It does not disclose anything about cost, size for large DAGs, permissions, or what 'graph structure' contains (nodes, edges, dependencies), though the presence of an output schema reduces the need to describe return values.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the only redundancy is the '[Tool Role]:' label, which carries little information. Appropriately sized for a simple one-parameter read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema and 100% parameter coverage mean the essentials are covered, but for a tool with many closely related siblings, the description leaves the agent without a selection criterion. Naming the alternative (get_dag for metadata, list_tasks for task list) would close the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is well documented, including the important 'not its display name' caveat, so the baseline of 3 applies. The description adds nothing beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Retrieves') and resource ('task graph structure for the specified DAG'), which is meaningfully different from get_dag or list_tasks. It does not explicitly name or contrast those siblings, so the differentiation must be inferred.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this instead of get_dag, list_tasks, or dag_code, all of which appear in the sibling list and sound related. An agent has to guess whether it wants the graph topology or DAG metadata.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dag_run_durationC

[Tool Role]: Analyzes DAG run durations and performance metrics.

NameRequiredDescriptionDefault
limitNoMaximum number of recent DAG runs to analyze (default: 10).
dag_idYesExact DAG identifier, as returned by list_dags; not its display name.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, yet it says nothing about read-only behavior, cost/latency (how many runs are scanned), or what "performance metrics" concretely includes. A single role label plus one clause is far below the bar for an unannotated analytical tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is one short sentence with no wasted clauses, but the "[Tool Role]:" boilerplate prefix consumes words without conveying information, and the sentence is under-sized rather than efficient for its stakes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, but with zero annotations and only two sentences the definition leaves an agent without enough context for an analytics tool: nothing on what metrics are computed, the default window (limit=10 implies recency only), or how it differs from dag_task_duration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: dag_id is documented as "Exact DAG identifier, as returned by list_dags; not its display name" and limit as the max number of recent runs. The description adds no parameter meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a verb ("Analyzes") and a resource ("DAG run durations") plus a vague add-on ("performance metrics"). It does not distinguish this tool from the sibling dag_task_duration, so an agent cannot tell from the text alone whether to pick run-level vs task-level duration analysis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites (e.g., that dag_id must come from list_dags), and no explicit routing to or from alternatives like dag_task_duration, dag_calendar, or running_dags. Usage must be inferred entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dag_task_durationC

[Tool Role]: Analyzes task durations within a DAG run.

NameRequiredDescriptionDefault
dag_idYesExact DAG identifier, as returned by list_dags; not its display name.
dag_run_idNoDAG run identifier; omitted or empty selects the latest run.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden and does not meet it: it does not state read-only vs mutating nature, permission requirements, cost, or result size. Nothing is contradicted, but almost nothing beyond the name is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short, front-loaded sentence with no waste, but it errs toward under-specification rather than conciseness. The '[Tool Role]' label adds no information an agent can act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter analysis tool with no annotations, one sentence is insufficient: what 'analysis' means (per-task durations? totals? comparisons?) is left undefined, and no usage context is given. The existing output schema helps with return-value shape, but the description still leaves the agent guessing about the tool's actual behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are well documented in the schema, including the 'omitted selects latest run' default behavior, so the schema does the heavy lifting. The description adds no parameter meaning of its own, which is the baseline expectation here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a resource (task durations within a DAG run) and implies a read/compute operation, which does separate it from the sibling dag_run_duration (whole-run duration). But the verb 'analyzes' is vague โ€” it never says whether this aggregates, compares, or ranks task durations โ€” so the agent cannot tell precisely what the tool produces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no mention of alternatives, despite obvious siblings such as dag_run_duration, list_tasks, and list_task_instances_all that overlap in scope. The agent must infer from the name alone which of these to pick.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_connectionC

[Tool Role]: Deletes a connection.

NameRequiredDescriptionDefault
connection_idYesExact Airflow connection identifier.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure, but it only says "Deletes". It does not state whether deletion is permanent or reversible, whether it cascades to dependent DAGs/tasks, or what permissions/authorization are required for a destructive Airflow connection operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short, front-loaded sentence with no filler, but its terseness reflects under-specification rather than efficient conciseness. The one sentence barely earns its place because it adds nothing beyond the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with no annotations, the description should at minimum note irreversibility, permissions, and effect on referenced objects; all are absent. An output schema exists, so return-value explanation is not required, but the behavioral gaps remain significant.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the single required parameter connection_id documented as an "Exact Airflow connection identifier". The description adds no further parameter meaning, but the baseline is 3 when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource ("Deletes a connection"), so an agent can tell what it does at a glance. However, it essentially restates the tool name and offers no differentiation from closely related siblings such as create_connection or update_connection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus the alternatives; the sibling set includes create_connection and update_connection, yet the description does not mention them or any preconditions. The agent must infer that this is the destructive counterpart to those tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

failed_dagsB

[Tool Role]: Lists all recently failed DAG runs in the Airflow cluster.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It only states it lists failed runs, omitting behavioral details like read-only nature, pagination, or definition of 'recently'. Minimal disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence front-loaded with '[Tool Role]' prefix. Concise with no wasted words. Could be slightly more structured but effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and existence of output schema, description adequately states purpose but lacks details on time frame, ordering, or behavior. It's acceptable but leaves ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist; schema coverage is 100% (empty schema). Description adds value by scoping to 'recently failed DAG runs', which is meaning beyond the empty schema. Baseline 4 for 0 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it 'Lists all recently failed DAG runs' โ€“ a specific verb and resource. It distinguishes from siblings like 'running_dags' and 'all_dag_event_summary' by focusing on failures. However, no title provided and 'recently' is vague.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like 'running_dags' or 'all_dag_event_summary'. Missing explicit context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_configC

[Tool Role]: Retrieves Airflow configuration.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and the description offers no behavioral details beyond the action. No mention of side effects, safety, rate limits, or any other traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no unnecessary words. It is appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description lacks context about what configuration is returned (e.g., all or specific sections). It does not guide the agent beyond the basic action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters with 100% coverage, so no additional description is needed. Baseline for no parameters is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states 'Retrieves Airflow configuration.' which clearly specifies the verb and resource. It is distinct from sibling tools like list_config_sections, but does not explicitly differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. The description does not mention context, prerequisites, or relationships to other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_config_sectionB

[Tool Role]: Gets all options within a specific configuration section.

NameRequiredDescriptionDefault
section_nameYesExact Airflow configuration section name, such as core.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. The word 'Gets' implies a read-only retrieval and it states that all options in the section are returned, but it does not disclose permission requirements, behavior for unknown sections, or other operational traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It immediately communicates the core operation and scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with full schema coverage and an output schema, the description is minimally adequate. However, in a crowded config-related sibling set, it is not complete enough to guide an agent on when this tool is the right choice versus get_config, list_config_sections, or search_config_options.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents section_name as an exact Airflow configuration section name with an example. The description adds no parameter semantics beyond what the schema provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it 'Gets all options within a specific configuration section.' This is clearer than a tautology and lets an agent understand the basic operation. However, it does not explicitly distinguish this from nearby siblings such as get_config, list_config_sections, or search_config_options.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives. The description implies it is for retrieving options in a known section, but it does not mention siblings or exclusions, leaving the agent to infer selection logic from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_connectionC

[Tool Role]: Gets details for a specific connection.

NameRequiredDescriptionDefault
connection_idYesExact Airflow connection identifier.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden and does almost nothing with it: it does not say whether the read is safe, whether sensitive fields (e.g. passwords in the connection) are masked, what happens when the ID does not exist, or what permissions are needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, front-loaded sentence with no waste; the '[Tool Role]:' prefix is mild boilerplate but harmless. It errs toward under-specification rather than verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the sole parameter is documented, so the essentials for calling the tool are covered. Still missing is how an agent should obtain a valid connection_id (e.g. via list_connections) and the not-found behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single connection_id parameter is described as the 'Exact Airflow connection identifier', so the schema does the work. The description adds nothing about the parameter, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Gets details') and resource ('a specific connection'), and the singular framing plus the required connection_id distinguishes it from the plural list_connections sibling. What the 'details' actually encompass is left unspecified, keeping it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit statement of when to use this versus list_connections or the create/update/delete_connection siblings; the distinction only exists implicitly in the tool name and the required ID parameter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dagC

[Tool Role]: Retrieves detailed information for a specific DAG.

NameRequiredDescriptionDefault
dag_idYesThe DAG ID to get details for

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about permissions, error behavior (e.g., unknown dag_id), or read-only semantics. An output schema exists, so return values need not be explained, but the safety and failure profile is entirely absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with zero filler and the resource stated up front. It is appropriately sized, though it leans toward under-specification rather than tight completeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with full schema coverage and an output schema, the essentials are present. However, with no annotations the description should have covered error cases or read-only behavior, which it omits.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single dag_id parameter is already documented in the schema. The description's phrase 'specific DAG' adds no format, source, or lookup guidance beyond that, so the high-coverage baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Retrieves detailed information') and a clear resource ('a specific DAG'), so an agent can distinguish it from list_dags or get_dags_detailed_batch on get-vs-list grounds. It does not explicitly name those siblings, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus alternatives such as list_dags or get_dags_detailed_batch, and no prerequisites or exclusions are given. The agent must infer the choice from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dags_detailed_batchB

[Tool Role]: Retrieves detailed information for multiple DAGs in batch with latest run information.

NameRequiredDescriptionDefault
limitNoMaximum number of records to request per page. Default: 100.
offsetNoNumber of records to skip for pagination. Default: 0.
fetch_allNoFetch every DAG page; ignores limit and offset when True. Default: False.
is_activeNoOptional active-status filter; None includes both statuses. Default: None.
is_pausedNoOptional paused-status filter; None includes both statuses. Default: None.
id_containsNoOptional substring to match against DAG identifiers. Default: None.
name_containsNoOptional substring to match against DAG display names. Default: None.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. 'Retrieves' implies a read-only operation, and 'batch with latest run information' conveys useful scope, but the description does not explicitly state side-effect safety, pagination behavior, rate limits, or how the detailed output differs from simpler list tools. The output schema helps with return format, but usage behavior remains thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted text. The '[Tool Role]:' placeholder adds minor noise, and 'detailed information' is somewhat vague, but the structure is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has seven optional parameters, full schema descriptions, and an output schema, so the description need not repeat parameter or return details. However, with no annotations and no sibling routing guidance, the one-sentence description is only minimally complete for a batch retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all seven parameters are documented in the schema. The description does not add meaning beyond the schema for pagination, filters, or fetch_all behavior, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: retrieves detailed information for multiple DAGs in batch. It adds the scope of including latest run information, making the purpose clear. It does not explicitly distinguish this from siblings such as list_dags or get_dag, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives like list_dags, get_dag, running_dags, or failed_dags. There are no exclusions, prerequisites, or contextual recommendations for selecting this batch-detailed variant.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_datasetB

[Tool Role]: Gets details of a specific dataset (v1 API only - v2 uses Assets).

NameRequiredDescriptionDefault
dataset_uriYesDataset URI, such as s3://bucket/path; API v1 only.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it only says it 'gets details'. It does not state that this is a read-only operation, what happens on an invalid or v2-era URI, or any permission requirements. An output schema exists so return shape needn't be covered, but the mutation/safety profile remains undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the key scope distinction front-loaded; every element (including the v1/v2 note) earns its place. Minor filler in the '[Tool Role]:' prefix, but otherwise efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with full schema coverage and an output schema, the description supplies the one non-obvious detail (v1 only vs Assets in v2). It is largely sufficient, with only the read-only/error behavior left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter's description already documents the URI format and v1-only constraint. The tool description's version note reinforces but does not extend beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Gets) and resource (details of a specific dataset), which is clear and distinct from list_datasets. The parenthetical note that it is v1-only and v2 uses Assets helps separate it from other retrieval paths, though it doesn't explicitly contrast with siblings like get_dataset_events.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: fetch details for one dataset. The v1/v2 caveat gives a routing hint away from Assets-based workflows, but there is no explicit statement of when to prefer this over list_datasets or get_dataset_events, nor any prerequisite guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dataset_eventsB

[Tool Role]: Gets events for a specific dataset (v1 API only - v2 uses Assets).

NameRequiredDescriptionDefault
limitNoMaximum number of records to request per page. Default: 20.
offsetNoNumber of records to skip for pagination. Default: 0.
dataset_uriYesDataset URI, such as s3://bucket/path; API v1 only.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry behavioral context. It discloses the important v1-only limitation and points to Assets for v2, but it omits read-only confirmation, permissions, pagination behavior, and event types. This is more than nothing but not adequate for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single, front-loaded sentence that communicates purpose and version constraint without filler. The '[Tool Role]' prefix is slightly mechanical but does not meaningfully hurt conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, has a complete input schema, and has an output schema, so return values need not be explained. However, with no annotations and no sibling differentiation, the description is somewhat thin on operational context even for a simple read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented in the input schema. The description adds no parameter-level semantics beyond reiterating that the dataset URI is API-v1-only, making the baseline score appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Gets events for a specific dataset') and adds a meaningful API-version constraint (v1 only). It does not distinguish the tool from the closely named sibling list_dataset_events or explain why both exist, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only explicit guidance is the v1-only constraint, which is useful but negative-scoped. There is no direct guidance on when to use this instead of get_dataset or list_dataset_events; the 'specific dataset' phrasing only implies scoping.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_event_logB

[Tool Role]: Retrieves a specific event log entry.

NameRequiredDescriptionDefault
event_log_idYesNumeric identifier of the event log entry.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it only says "Retrieves". It does not disclose that this is a read-only, non-mutating operation, nor what happens when the ID does not exist (empty result vs error). An output schema exists, so return values need no explanation, but the operational behavior is essentially undescribed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler and no redundancy. The only dead weight is the "[Tool Role]:" prefix, which conveys nothing to the agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter get-by-ID tool with full schema coverage and an output schema, very little needs to be said. The remaining gap is sibling differentiation against list_event_logs, which is a genuine but modest omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: event_log_id is documented as a numeric identifier and is the only required parameter. The description adds nothing beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("Retrieves a specific event log entry"), and the word "specific" vs the sibling list_event_logs implies single-record retrieval. It is clear what the tool does, but it never names the sibling it is distinguished from, which for a family with list_event_logs and all_dag_event_summary would have been easy to add.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance and no alternative named. An agent must infer from the name alone that this is the single-record lookup to use after list_event_logs returns an ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_healthA

[Tool Role]: Checks Airflow cluster health status.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden for behavioral disclosure. It only states 'checks' but does not describe the nature of the health check, error conditions, or any side effects. The brevity leaves significant transparency gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no redundancy. The '[Tool Role]:' prefix is somewhat redundant but does not detract significantly from conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool is simple (no parameters, one action) and an output schema exists, the description is adequately complete. Adding typical response or error handling could increase completeness slightly, but it's sufficient for a health check.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the description does not need to add parameter information. Baseline score of 4 is appropriate as no additional semantic value is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Checks Airflow cluster health status.' The verb 'checks' and resource 'Airflow cluster health status' are specific and distinct from sibling tools like get_version or get_config.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., get_version for version info, get_config for config). The description lacks context for appropriate usage scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_import_errorB

[Tool Role]: Retrieves a specific import error.

NameRequiredDescriptionDefault
import_error_idYesNumeric identifier of the DAG import error.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full disclosure burden. 'Retrieves' implies a safe read, and an output schema exists to cover the return shape, but the description says nothing about behavior when the ID does not exist or any permission requirements. For a simple read tool this is acceptable but thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short front-loaded sentence with no waste. The '[Tool Role]:' prefix is mild boilerplate, and the extreme brevity edges toward under-specification rather than optimal conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one fully documented parameter and an output schema covering return values, the description is nearly sufficient for calling the tool. However it omits sibling differentiation from list_import_errors and any not-found behavior, leaving clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with a single required parameter already documented as a numeric identifier of a DAG import error. The description adds no meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (retrieves) and resource (a specific import error), and the word 'specific' implicitly contrasts with listing siblings. It stops short of naming list_import_errors or explaining what an import error record contains, but the core purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no prerequisites, and no mention of the alternative sibling list_import_errors for browsing errors. The agent must infer from 'specific' that this requires a known ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_poolB

[Tool Role]: Gets details for a specific pool.

NameRequiredDescriptionDefault
pool_nameYesExact Airflow pool name, such as default_pool.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. "Gets details" implies a read-only retrieval and the output schema covers return values, but the description does not mention behavior when the pool is missing, permissions, or any other operational traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the key information front-loaded and no wasted text. It is appropriately sized for a simple get-by-name tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read operation with full schema coverage and an output schema, the description is nearly complete. It could improve by explicitly routing agents to list_pools when they do not already know the pool name.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents pool_name with an example, so the baseline is 3. The description adds only "specific pool" without additional meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: "Gets details" for "a specific pool." It is distinguishable from the list-oriented sibling by "specific," but it does not explicitly name or differentiate against list_pools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus list_pools or other pool-related siblings. Usage is only implied by the required pool_name parameter and the word "specific."

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_prompt_templateC

[Tool Role]: Provides comprehensive prompt template for LLM interactions with Airflow operations.

NameRequiredDescriptionDefault
modeNoOptional mode (summary/detailed) to control response verbosity
sectionNoOptional section name to get specific part of template

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and delivers almost nothing: it does not say whether the tool is read-only, whether the template is static or generated per request, or what invoking it changes. Only the word "Provides" weakly implies a non-mutating read.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short sentence with no filler, but the bracketed "[Tool Role]:" prefix is meta-noise and the brevity comes at the cost of under-specification rather than efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not required, but for a tool with zero annotations the description should still say what the template covers and how the optional selectors behave. As written, an agent cannot confidently predict the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both mode (summary/detailed) and section are already documented in the schema. The description adds no extra meaning about accepted values or interactions between the two parameters, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a verb+resource ("provides prompt template") and scopes it to "Airflow operations," which is more than a bare restatement of the name. However, it never explains what the template is for or how it differs from the many Airflow data-reading siblings, so it stays at vague-purpose level.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to call this versus other tools, no mention of the optional mode/section selectors as a way to narrow the response, and no indication of whether this is a prerequisite step before other Airflow operations. The agent is left to infer everything.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_providerB

[Tool Role]: Gets details of a specific provider package.

NameRequiredDescriptionDefault
provider_nameYesExact provider package name, such as apache- airflow-providers-http.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it only restates the name. It says nothing about read-only nature, error behavior for unknown providers, or what 'details' comprise.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence, front-loaded with the action and resource, with no filler. It is efficient, though its brevity borders on under-specification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and the lone parameter is fully documented. However, for a lookup tool the absence of any failure-mode or discovery guidance leaves a modest gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter already documents the exact package-name format with an example, so the description needs no additional parameter semantics. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Gets details) and resource (a specific provider package), which separates it from list_providers by scope. It stops short of explicitly naming the sibling, so differentiation relies on inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied โ€” fetch details when you have an exact provider package name โ€” but there is no explicit when-to-use, when-not-to-use, or pointer to list_providers for discovery.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_task_instance_detailsC

[Tool Role]: Gets detailed information for a specific task instance.

NameRequiredDescriptionDefault
dag_idYesExact DAG identifier, as returned by list_dags; not its display name.
task_idYesExact task identifier within the selected DAG.
dag_run_idYesExact DAG run identifier for the selected DAG.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden: it doesn't state that this is a read-only operation, what 'details' comprises, whether it errors on missing instances, or authorization requirements. The only signal is the implicit read semantics of 'Gets'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. It is efficient, though borderline under-specified rather than richly informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the input schema is fully documented, so the missing pieces are modest. Still, for a read tool with no annotations, a sentence on what 'details' covers and how it relates to the logs/extra-links siblings would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each of the three parameters (dag_id, task_id, dag_run_id) has a clear description including the exactness/'as returned by list_dags' caveat. The description adds nothing beyond this, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Gets') and resource ('detailed information for a specific task instance'), which is clearer than a bare restatement of the name. Sibling tools like get_task_instance_logs and get_task_instance_extra_links are implicitly differentiated by the word 'details', but the description never names them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this vs. list_task_instances_all, list_task_instances_batch, get_task_instance_logs, or get_task_instance_extra_links. The agent must infer selection from tool names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_task_instance_logsC

[Tool Role]: Retrieves logs for a specific task instance.

NameRequiredDescriptionDefault
dag_idYesExact DAG identifier, as returned by list_dags; not its display name.
task_idYesExact task identifier within the selected DAG.
dag_run_idYesExact DAG run identifier for the selected DAG.
try_numberNoTask attempt number whose logs to retrieve (default: 1). Default: 1.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does not disclose whether logs exist only for started/finished attempts, how try_number maps to retries, whether output is paginated or truncated, or any permission requirements โ€” all relevant for a log-retrieval tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. The '[Tool Role]:' prefix is slightly stylized but the substance is efficient and immediately conveys the action and target.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the input schema is fully documented, so return values and parameters need not be explained. Still, for a log tool with no annotations, the description leaves behavioral questions (retry semantics, log availability) unanswered, making it only minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters including try_number's default are already documented in the schema. The description adds no extra semantics beyond 'specific task instance', so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Retrieves') and resource ('logs for a specific task instance'), which distinguishes it from siblings like get_task_instance_details and get_task_instance_extra_links. However, it does not explicitly name a sibling or state the boundary between logs and details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no indication of when to use this tool versus get_task_instance_details or get_task_instance_extra_links, nor any prerequisite such as the task instance needing to have run. Usage must be inferred entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_userC

[Tool Role]: Gets details of a specific user (v1 API only).

NameRequiredDescriptionDefault
usernameYesExact Airflow username (API v1 only).

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, yet it says nothing about required permissions, behavior for unknown usernames, or whether roles/attributes are returned. 'Gets' implies a read, but that is the only behavioral signal in the text.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with the resource and scope stated immediately. The '[Tool Role]:' prefix adds no information but costs little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the parameter is fully documented, so the remaining gaps are modest. Still, for a lookup tool with no annotations, the description should at least say what happens when the user does not exist and how it relates to list_users.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents the single 'username' parameter including the exact-match and v1-only constraint. The description repeats rather than extends that information, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Gets details of a specific user') and adds a scope qualifier ('v1 API only'). It does not explicitly contrast with the sibling list_users, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus list_users (to enumerate users) or why the v1-only restriction matters. The only hint is the parenthetical API version note, which implies a constraint rather than a selection rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_variableB

[Tool Role]: Gets the value of a specific variable.

NameRequiredDescriptionDefault
variable_keyYesExact key of the Airflow variable.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. 'Gets' implies a read operation, but the description does not state what happens if the variable is missing, whether variables may contain sensitive values, or any permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted elaboration. The '[Tool Role]:' prefix is minor metadata overhead but does not materially hurt readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple one-parameter getter with full schema description coverage and an output schema, so the description is mostly complete for calling the tool. The main missing context is error behavior for nonexistent variables and any sensitivity handling, which are not covered elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already documents variable_key as the exact key of the Airflow variable. The description adds no additional parameter semantics beyond saying it retrieves a specific variable, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a clear verb and resource: it gets the value of a specific variable. It does not explicitly contrast with the sibling list_variables, so an agent can infer but not be certain why to choose one over the other.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no exclusions, and no mention of alternatives such as list_variables. The purpose implies it is used to retrieve a known variable, but the description does not guide the agent on when this is preferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_versionB

[Tool Role]: Gets Airflow version information.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must stand alone. It implies a read operation but lacks detail on response structure or side effects. With output schema available, the gap is partially filled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded. The '[Tool Role]' prefix is unnecessary jargon but does not significantly harm clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool is simple with no parameters and an output schema. Description sufficiently states the purpose. Could mention output schema existence, but not required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, and schema coverage is 100%. Description adds no param info, which is acceptable as baseline for 0 parameters is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action (get) and resource (Airflow version information). However, it does not differentiate from siblings like get_health or get_config, which also retrieve system information.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. Given many sibling tools, explicit context is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_xcom_entryC

[Tool Role]: Gets a specific XCom entry.

NameRequiredDescriptionDefault
dag_idYesExact DAG identifier, as returned by list_dags; not its display name.
task_idYesExact task identifier within the selected DAG.
xcom_keyYesExact XCom key for the selected task instance.
dag_run_idYesExact DAG run identifier for the selected DAG.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about read-only nature, behavior when the key does not exist (error vs empty), or permission requirements. The presence of an output schema removes the need to explain return values, but the disclosure gap remains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero waste, but it is under-specified rather than tightโ€”brevity comes at the cost of any operational context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a full output schema and 100% parameter description coverage, the structured data supplies most of what an agent needs to invoke the tool correctly. The missing piece is behavioral context, which no annotation covers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each of the four identifiers documented in the schema itself. The description adds no additional semantics, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("Gets a specific XCom entry"), which is clearly distinct from list_xcom_entries by the singular/plural naming. It does not explicitly call out the sibling relationship or scope, but an agent can infer the get-vs-list distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus list_xcom_entries, nor any prerequisites such as needing a completed task instance or existing key. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_config_sectionsB

[Tool Role]: Lists all configuration sections with summary.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description does not disclose any behavioral traits such as auth requirements, performance characteristics, or whether the tool is read-only. With no annotations provided, the description should fill this gap but fails to do so.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that is concise and front-loaded. It efficiently communicates the tool's purpose without waste, though it could be slightly more detailed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity (0 parameters, output schema present), the description is minimally adequate. However, it does not mention the scope of sections (e.g., all sections or filtered), which could be improved. The output schema likely covers return details, so completeness is acceptable but not excellent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema description coverage is 100%, so the baseline is 4. The description adds no additional parameter semantics beyond what the schema provides, but none are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all configuration sections with a summary. The verb 'lists' and resource 'configuration sections' are specific, and it distinguishes from siblings like 'get_config_section' which gets details of a single section. However, it could be more precise about the format of the summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'search_config_options' or 'get_config'. There is no indication of prerequisites or context, leaving the agent without enough information to choose correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_connectionsC

[Tool Role]: Lists all connections in Airflow.

NameRequiredDescriptionDefault
limitNoMaximum number of records to request per page. Default: 20.
offsetNoNumber of records to skip for pagination. Default: 0.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Lists' implies a read-only operation, but it does not state whether authentication is required, whether pagination is automatic, or what happens with large result sets beyond the schema's limit/offset fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted text. The '[Tool Role]' prefix is slightly redundant but the core content is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. However, with no annotations and many sibling tools, the description should provide more context about when to choose this tool and its read-only nature. It is adequate but leaves clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both pagination parameters (limit, offset) are fully documented in the schema. The description adds no parameter details, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Lists all connections in Airflow.' It is clear that this is a collection-listing operation for Airflow connections, though it does not explicitly differentiate itself from sibling tools like get_connection or create_connection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives such as get_connection for a single connection or create_connection for writes. Usage is only implied by the generic 'list all' phrasing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_dagsB

[Tool Role]: Lists all DAGs registered in the Airflow cluster with pagination support.

NameRequiredDescriptionDefault
limitNoMaximum number of DAGs to return (default: 20)
offsetNoNumber of DAGs to skip for pagination (default: 0)
fetch_allNoIf True, fetches all DAGs regardless of limit/offset
id_containsNoFilter DAGs by ID containing this string
name_containsNoFilter DAGs by display name containing this string

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses that the operation lists registered DAGs and supports pagination, and listing implies a safe read operation. However, it does not mention permissions, rate limits, or whether the listing is live versus cached.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with no wasted words. The tool role and core behavior are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with full schema coverage and an output schema, the description is mostly complete: it states the resource, scope, and pagination behavior. The main gap is sibling differentiation, which is a usage-guidance concern rather than a missing core detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all five parameters clearly. The description only adds 'pagination support,' which is already covered by the limit/offset/fetch_all parameters, so it does not add meaningful semantic detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: 'Lists all DAGs registered in the Airflow cluster.' It also mentions pagination support, which clarifies scope. It does not explicitly differentiate this tool from siblings like running_dags, failed_dags, or get_dags_detailed_batch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for enumerating DAGs but gives no explicit when-to-use guidance. It does not mention when to prefer this over running_dags, failed_dags, get_dag, or get_dags_detailed_batch.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_dataset_eventsA

[Tool Role]: Lists dataset events for data lineage tracking (v1 API only - v2 uses Assets).

NameRequiredDescriptionDefault
limitNoMaximum number of records to request per page. Default: 20.
offsetNoNumber of records to skip for pagination. Default: 0.
dataset_uriNoDataset URI, such as s3://bucket/path; API v1 only. Default: None.
source_dag_idNoOptional identifier of the DAG that produced the events. Default: None.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden; it does convey that this is a read/list operation and flags the API-version limitation. It says nothing about permissions, result ordering, or how events are scoped when dataset_uri is omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that names the role and appends the version caveat parenthetically. There is no redundant or filler text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and all parameters are documented in the schema, so return values and inputs need no explanation here. What is missing is the relationship to the near-identically-named get_dataset_events sibling and any note on default listing behavior when no dataset_uri filter is given.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each of the four parameters (limit, offset, dataset_uri, source_dag_id) is already documented in the schema, setting the baseline at 3. The description adds nothing about filtering behavior or defaults beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Lists'), a specific resource ('dataset events'), and a stated purpose ('data lineage tracking'). It is clear what the tool returns, but it does not differentiate itself from the sibling get_dataset_events, whose name suggests overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The v1-only caveat ('v2 uses Assets') tells the agent when the tool is applicable, which is a real usage constraint. However, there is no guidance on when to choose this over get_dataset_events, list_datasets, or all_dag_event_summary, leaving the agent to infer the boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_datasetsB

[Tool Role]: Lists all datasets in the Airflow system (v1 API only - v2 uses Assets).

NameRequiredDescriptionDefault
limitNoMaximum number of records to request per page. Default: 20.
offsetNoNumber of records to skip for pagination. Default: 0.
uri_patternNoOptional dataset URI pattern passed to the API (v1 only). Default: None.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose one meaningful trait: this only works against the v1 dataset API (v2 assets are not covered). It says nothing about read-only safety, whether results are paginated by default, or ordering โ€” traits an agent would want before calling a list endpoint, though the limit/offset params hint at paging.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the key constraint in parentheses; nothing is padded. The '[Tool Role]:' prefix is slightly redundant boilerplate but costs little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and all three parameters are documented, so the essentials are covered. The remaining gap is that the version caveat is stated but not resolved โ€” an agent is told v2 uses Assets yet not told what to call instead, which is the one thing it might still need.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with limit, offset and uri_pattern each fully documented including defaults, so the schema does the work and baseline 3 applies. The description adds no extra semantics such as pattern syntax or matching behavior beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lists all datasets in the Airflow system'), which clearly distinguishes it from get_dataset and list_dataset_events among the siblings. It stops short of naming a sibling or defining scope (e.g. whether all datasets or only those with events/URIs are returned), so it is clear but not fully differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the verb 'lists' โ€” an agent can infer this is the enumeration entry point before calling get_dataset. The parenthetical '(v1 API only - v2 uses Assets)' gives a useful environmental condition for when the tool applies, but there is no explicit when-not guidance or pointer to the sibling that replaces it on v2.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_event_logsC

[Tool Role]: Lists event logs from Airflow.

NameRequiredDescriptionDefault
limitNoMaximum number of records to request per page. Default: 20.
dag_idNoExact DAG identifier, as returned by list_dags; not its display name. Default: None.
offsetNoNumber of records to skip for pagination. Default: 0.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it only implies a safe read operation via the verb "Lists". It says nothing about required permissions, result size, ordering, or whether the paginated scan is expensive โ€” all relevant for a log-listing endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short sentence with no filler and the purpose is front-loaded, but the brevity reflects under-specification rather than efficient packing of useful information. The '[Tool Role]:' prefix is boilerplate that consumes space without adding meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be explained, and all three parameters are documented in the schema. However, with zero annotations and many closely related siblings (get_event_log, all_dag_event_summary, list_dag_events), the definition leaves the agent without enough context to choose this tool confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so limit/offset pagination semantics and the dag_id 'exact DAG identifier, not its display name' caveat are already fully documented in the schema. The description adds nothing beyond it, which is acceptable at baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The sentence "Lists event logs from Airflow" is essentially a restatement of the tool name list_event_logs plus the product name. It gives a verb and resource but adds no scope information (what an event log contains, which events) and does not distinguish it from the sibling get_event_log or all_dag_event_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance at all โ€” nothing says when to list logs versus calling get_event_log for a single record or all_dag_event_summary for aggregates. The agent must infer the routing decision entirely from tool names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_import_errorsC

[Tool Role]: Lists import errors in Airflow.

NameRequiredDescriptionDefault
limitNoMaximum number of records to request per page. Default: 20.
offsetNoNumber of records to skip for pagination. Default: 0.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It only states that the tool lists import errors and does not disclose read-only behavior, pagination semantics, permission requirements, or any other operational traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence with no wasted words, but it is under-specified rather than effectively concise. It lacks front-loaded differentiating or usage information that would help an agent select it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the parameters are fully documented in the schema. However, the description does not distinguish this list tool from the sibling get_import_error or explain pagination behavior, leaving a clear gap for a simple retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents the limit and offset parameters. The description adds no parameter meaning beyond what the schema provides, which is the baseline expectation for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Lists import errors in Airflow.' An agent can understand the basic operation, but it does not differentiate from sibling tools such as get_import_error or all_dag_import_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives like get_import_error or all_dag_import_summary. The description provides no context, exclusions, or selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_permissionsB

[Tool Role]: Lists all permissions available in the Airflow system (v1 API only).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavioral traits. It mentions the v1 API constraint but does not disclose whether the operation is read-only, requires authentication, or any side effects. The minimal description leaves important behavioral aspects unclear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is concise and front-loaded with the core purpose. Every word is informative with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, output schema exists), the description provides the essential information. However, it could briefly mention that it returns a list of permission objects, though the output schema likely covers that. Overall, it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, and the schema coverage is 100% (empty). Per the baseline rule for zero-parameter tools, the description does not need to add parameter details. The description is adequate in this dimension.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Lists' and the resource 'permissions', and specifies it is for the Airflow system v1 API. However, it does not explicitly differentiate from sibling list tools like list_roles or list_users, which could cause confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool vs alternatives. The description lacks context about prerequisites or when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pluginsA

[Tool Role]: Lists all installed plugins in the Airflow system.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description only states a simple read operation. Lacks details on performance, ordering, or error handling, but the operation is simple.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single, front-loaded sentence with clear role prefix; no extraneous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple list with output schema; could mention return type or limitations, but not required given minimal complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, and description adds value by stating 'all' indicates no filtering. Baseline score of 4 applies for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb ('lists') and specific resource ('all installed plugins in the Airflow system'), distinguishing it from similar list tools like list_providers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use versus alternatives like list_providers or list_dags, though the action is straightforward for listing plugins.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_poolsB

[Tool Role]: Lists all pools in Airflow.

NameRequiredDescriptionDefault
limitNoMaximum number of records to request per page. Default: 20.
offsetNoNumber of records to skip for pagination. Default: 0.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. Beyond 'lists all', it says nothing about pagination behavior, ordering, result size, or required permissions for a tool with 2 paging parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with zero waste. It is efficient, though the prefixed '[Tool Role]' tag adds no information an agent can act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and parameters are fully described in the schema, so the description needn't explain return values or paging. For a simple read-only list tool, the remaining gap (whether results are exhaustive or paged) is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with limit and offset documented including defaults, so baseline 3 applies. The description adds no additional pagination semantics beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Lists') and resource ('pools in Airflow') with an 'all' scope. It doesn't explicitly name the distinction from sibling get_pool, though the singular/plural naming makes the split fairly discoverable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides no when-to-use guidance, no mention of alternatives like get_pool for a single pool, and no note that no filters are supported. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_providersA

[Tool Role]: Lists all provider packages installed in the Airflow system.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It indicates a safe read operation ('lists all provider packages'). However, it does not disclose any potential limitations, permissions needed, or whether the output is paginated. Minimal but adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence that is direct and contains no redundant information. Every word serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so description need not explain return format. With 0 parameters, the description adequately states what the tool does. Could mention that it returns a list but not necessary. Slightly lacking in context about usage scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so description adds no param details. Schema coverage is 100% (vacuous). Baseline is 4 for no parameters; description is clear but does not add extra meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states 'Lists all provider packages installed in the Airflow system.' The verb 'list' combined with resource 'provider packages' and scope 'all' is specific and distinguishes it from 'get_provider' which likely retrieves a single provider.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. The sibling 'get_provider' could be used for specific providers, but no differentiation is provided. The description does not mention any context for why one would choose this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_rolesB

[Tool Role]: Lists all roles in the Airflow system (v1 API only).

NameRequiredDescriptionDefault
limitNoMaximum number of records to request per page. Default: 20.
offsetNoNumber of records to skip for pagination. Default: 0.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden. It makes clear this is a read-style listing operation and adds the v1-only constraint, but it does not disclose authorization requirements, rate limits, or whether the result is paginated beyond the presence of limit/offset in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted text. The bracketed label is minor and does not obscure the core information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with an output schema and fully documented pagination parameters, the description is mostly sufficient. However, the absence of annotations and the lack of guidance on when to use this versus related list tools leave some contextual gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both limit and offset are documented with defaults in the schema. The description adds no additional parameter semantics, so the schema does the heavy lifting and baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it lists all roles in the Airflow system. It also scopes the tool to the v1 API only, making the purpose clear, though it does not explicitly distinguish itself from siblings like list_permissions or list_users.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage context is the 'v1 API only' constraint. The description gives no guidance on when to choose this tool over related sibling tools such as list_permissions, and no prerequisites or exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_task_instances_allC

[Tool Role]: Lists task instances with comprehensive filtering options.

NameRequiredDescriptionDefault
poolNoOptional list of Airflow pool names to filter task instances. Default: None.
limitNoMaximum number of records to request per page. Default: 100.
stateNoOptional list of task states, such as ["failed", "running"]. Default: None.
dag_idNoExact DAG identifier, as returned by list_dags; not its display name. Default: None.
offsetNoNumber of records to skip for pagination. Default: 0.
task_idNoExact task identifier within the selected DAG. Default: None.
dag_run_idNoExact DAG run identifier for the selected DAG. Default: None.
duration_gteNoOptional minimum task duration in seconds. Default: None.
duration_lteNoOptional maximum task duration in seconds. Default: None.
end_date_gteNoOptional inclusive task end time lower bound, in ISO 8601 format. Default: None.
end_date_lteNoOptional inclusive task end time upper bound, in ISO 8601 format. Default: None.
start_date_gteNoOptional inclusive task start time lower bound, in ISO 8601 format. Default: None.
start_date_lteNoOptional inclusive task start time upper bound, in ISO 8601 format. Default: None.
execution_date_gteNoOptional inclusive execution date (v1) or logical date (v2) lower bound, in ISO 8601 format. Default: None.
execution_date_lteNoOptional inclusive execution date (v1) or logical date (v2) upper bound, in ISO 8601 format. Default: None.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It says nothing beyond "lists" โ€” no note on default result volume, pagination semantics for limit/offset, ordering, permission requirements, or what happens when filters are omitted on a large Airflow instance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, though it errs toward under-specification rather than tight economy. There is nothing to trim but also little that earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, but for a 15-parameter read tool with zero annotations the description is far too thin. It never mentions pagination defaults, result caps, or the difference from the batch/detail siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all 15 parameters, including format hints like ISO 8601 and units in seconds, so the schema does the heavy lifting. The description adds no parameter meaning of its own, which is the baseline-3 case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: "Lists task instances." However, it offers no differentiation from close siblings like list_task_instances_batch or get_task_instance_details, so an agent still has to guess which entry point fits its case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase "comprehensive filtering options" hints at broad, filter-driven listing but gives no explicit when-to-use guidance, no exclusions, and no pointer to the batch or detail siblings. The agent must infer the routing decision entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_task_instances_batchC

[Tool Role]: Lists task instances in batch with date and state filtering.

NameRequiredDescriptionDefault
limitNoMaximum number of records to request per page. Default: 100.
stateNoOptional list of task states, such as ["failed", "running"]. Default: None.
offsetNoNumber of records to skip for pagination. Default: 0.
start_date_gteNoOptional inclusive task start time lower bound, in ISO 8601 format. Default: None.
start_date_lteNoOptional inclusive task start time upper bound, in ISO 8601 format. Default: None.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, and it states nothing about permissions, read-only nature, default ordering, or result limits beyond what the schema already documents. For a list tool with zero annotation coverage this is thin, though the low risk of a read operation softens the gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the verb and resource, with no filler. The '[Tool Role]:' prefix is boilerplate that earns no place, which keeps it from a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained, and the flat five-parameter schema is fully documented. However, with no annotations and no sibling differentiation, the agent lacks enough to confidently choose this over list_task_instances_all.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all five parameters are documented in-schema, so baseline is 3. The description names date and state filtering but adds no semantics beyond what the schema already says, such as how states are matched or the pagination interaction.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Lists task instances') and adds the batch nature plus the supported filters (date and state). It is clear what the tool does, but it does not differentiate from the sibling list_task_instances_all, leaving ambiguity about when 'batch' matters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance and no mention of alternatives, even though list_task_instances_all is an obvious sibling. The filters hint at valid use cases but the agent must infer the routing decision itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tasksB

[Tool Role]: Lists all tasks within the specified DAG.

NameRequiredDescriptionDefault
dag_idYesExact DAG identifier, as returned by list_dags; not its display name.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. 'Lists' implies a safe read operation, but the description says nothing about whether results are paginated, how they are ordered, or what happens for an unknown dag_id. It is adequate but thin for a zero-annotation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the action and scope front-loaded, and no wasted words. It is perhaps over-compressed rather than verbose, but structurally clean.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple: one required parameter, fully documented in the schema, and an output schema exists to explain return values. The description covers the essential scope, leaving only usage routing and pagination behavior unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains that dag_id is the exact identifier returned by list_dags, not a display name. The description's phrase 'specified DAG' adds nothing beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (lists tasks) and scopes it to a single DAG, which implicitly distinguishes it from the sibling list_dags that enumerates DAGs themselves. It does not explicitly name any sibling, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus alternatives such as get_dag, dag_graph, or list_task_instances_all. The only hint is the scope phrase 'within the specified DAG', which is implicit at best.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_usersB

[Tool Role]: Lists all users in the Airflow system (v1 API only).

NameRequiredDescriptionDefault
limitNoMaximum number of records to request per page. Default: 20.
offsetNoNumber of records to skip for pagination. Default: 0.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the safety and behavior profile. 'Lists' implies a non-mutating read, and the v1-API-only constraint is genuinely useful context that the schema cannot convey, but nothing is said about permissions required, pagination behavior, or result ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no waste. The bracketed '[Tool Role]:' tag is slightly redundant but harmlessly short.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and both parameters are documented, so the description's burden is light, and the version note helps. It is still thin on sibling differentiation and on whether results are paginated/unbounded, which matters for an unfiltered 'list all' operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with limit and offset fully documented including defaults, so the schema does the heavy lifting. The description adds no additional parameter meaning such as max page size limits or typical usage of offset.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lists all users in the Airflow system') plus a version constraint, so the agent knows exactly what is returned. However, it never distinguishes itself from the sibling get_user, which is the natural alternative when a single user is wanted.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus get_user, list_roles, or any other sibling. The only contextual cue is the '(v1 API only)' note, which is an environment constraint rather than usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_variablesC

[Tool Role]: Lists all variables in Airflow.

NameRequiredDescriptionDefault
limitNoMaximum number of records to request per page. Default: 20.
offsetNoNumber of records to skip for pagination. Default: 0.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, yet it says nothing about read-only semantics, permissions required, result size, or whether the list is paginated in practice. The only behavioral hint (limit/offset pagination) comes from the schema, not the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence, so it is not bloated, but the '[Tool Role]:' prefix is boilerplate that does not earn its place, and the sentence body adds little beyond restating the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the parameters are fully described in the schema, so the description need not explain return values. However, for a tool with zero annotations, the absence of any permission or safety context leaves the definition just barely adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both limit and offset fully documented in the schema, so the baseline of 3 applies. The description adds nothing about the parameters, but nothing is missing from the structured data either.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lists all variables in Airflow'), and the plural 'all variables' clearly distinguishes it from the sibling get_variable which fetches a single variable. No explicit sibling callout, but the list-vs-get contrast is inferable from the name and the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no mention of alternatives like get_variable, and no prerequisites or context about when listing variables is the right choice. Usage must be inferred entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_xcom_entriesC

[Tool Role]: Lists XCom entries for a specific task instance.

NameRequiredDescriptionDefault
limitNoMaximum number of records to request per page. Default: 20.
dag_idYesExact DAG identifier, as returned by list_dags; not its display name.
offsetNoNumber of records to skip for pagination. Default: 0.
task_idYesExact task identifier within the selected DAG.
dag_run_idYesExact DAG run identifier for the selected DAG.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it says nothing about pagination (limit/offset exist), whether entries can be empty for unfinished tasks, or whether XCom values are masked/serialized. The existence of an output schema offsets return-value disclosure, but the operational behavior remains undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single clean sentence with no waste and the key scoping fact front-loaded, but its terseness is under-specification rather than effective concision for a 5-parameter paginated tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 params, required identifiers, and paging controls, the description omits pagination behavior and task-state context entirely. An output schema covers return shape, but an agent still lacks guidance on obtaining valid dag_run_id/task_id values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter documented including defaults and ID semantics ('as returned by list_dags'), so the baseline of 3 applies. The description adds nothing beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lists XCom entries') plus the scoping unit ('for a specific task instance'), so its role is unambiguous. It doesn't explicitly contrast with the sibling get_xcom_entry (single entry), though the plural 'entries' lets an agent infer the difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus get_xcom_entry, or versus listing task instances first. It doesn't mention prerequisites such as needing a completed task run or that results may be paged.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pause_dagA

[Tool Role]: Pauses the specified Airflow DAG (prevents scheduling new runs).

NameRequiredDescriptionDefault
dag_idYesExact DAG identifier, as returned by list_dags; not its display name.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. The parenthetical 'prevents scheduling new runs' is genuinely valuable because it discloses the scope of the effect โ€” but it stops short of saying whether in-flight runs continue, whether the change is reversible via unpause_dag, or what permissions are required for a mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence with a role tag and a parenthetical that earns its place by adding behavioral meaning. Front-loaded and waste-free.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the only parameter is fully specified, so the description needn't cover returns. For a simple one-param mutation, the main remaining gap is whether currently running runs are affected โ€” useful but not blocking for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single dag_id parameter is documented in the schema, including the useful 'exact identifier, not display name' note. The description adds nothing beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (pauses) and resource (the specified Airflow DAG) and immediately clarifies the semantic effect: prevents scheduling new runs. That effect clause cleanly separates it from unpause_dag and trigger_dag, which appear in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the effect clause rather than stated: an agent can infer 'use when you want to stop new runs from being scheduled.' There is no explicit when-not guidance (e.g., that running task instances are unaffected) and the counterpart unpause_dag is never named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

running_dagsA

[Tool Role]: Lists all currently running DAG runs in the Airflow cluster.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavior. It states that the tool lists all currently running DAG runs, which is a read-only operation. For a simple list tool with no parameters, this is sufficiently transparent. It could mention performance implications or that no authentication is needed, but the core behavior is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no extraneous words. It is concise and front-loaded, clearly stating the tool's purpose without any waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool is simple (zero parameters, clear output), the description is adequate for an agent to understand its purpose. However, with many sibling tools, a brief note on when to prefer this over 'list_dags' or 'failed_dags' would improve completeness. The output schema exists, so return values are defined elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline score is 4. The description adds no parameter information, but none is needed. The input schema is empty and fully covered (100%), so no additional meaning is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all currently running DAG runs in the Airflow cluster. It uses a specific verb ('Lists'), specific resource ('running DAG runs'), and scope ('currently running'), effectively distinguishing it from sibling tools like 'list_dags' (lists all DAGs) and 'failed_dags' (lists failed runs).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, such as 'list_dags' or 'failed_dags'. There is no explicit context or exclusions, leaving the agent to infer usage from the name and purpose alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_config_optionsC

[Tool Role]: Searches for configuration options matching a term.

NameRequiredDescriptionDefault
search_termYesCase-insensitive substring to find in option names or values.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, and it says nothing about read-only nature, whether results span all config sections, result limits, ordering, or matching scope. The only behavioral detail (case-insensitive substring on names or values) lives in the schema, not the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with no redundancy, but the '[Tool Role]:' prefix is structural noise and the brevity comes partly from under-specification rather than efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the tool is a simple one-parameter search. Still, with zero annotations the description leaves read-only status and search scope undisclosed, which is the minimum viable rather than fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter is well documented as a case-insensitive substring over names or values. The phrase 'matching a term' adds nothing beyond that, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Searches) and resource (configuration options) with the matching criterion. The 'search' verb does implicitly distinguish it from siblings like get_config and list_config_sections, though the description never names those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No statement of when to use this versus get_config, get_config_section, or list_config_sections. An agent must infer that 'search' means 'use when you don't know the exact option name', which is reasonable but entirely unstated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trigger_dagC

[Tool Role]: Triggers a new DAG run for a specified Airflow DAG.

NameRequiredDescriptionDefault
dag_idYesExact DAG identifier, as returned by list_dags; not its display name.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden for a mutation tool. It states that a new run is triggered, but does not disclose permission requirements, whether the trigger is synchronous or asynchronous, idempotency behavior, or what happens if the DAG is paused.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler or repetition. It is concise and easy to scan, though the bracketed tool-role label adds little informational value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has low parameter complexity, complete schema coverage, and an output schema, so the description need not explain return values. However, for a mutation tool with no annotations, it is still thinner than ideal because it omits basic behavioral context about triggering a DAG run.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and dag_id already documents that it must be the exact identifier returned by list_dags rather than a display name. The description adds no parameter semantics beyond "specified Airflow DAG," so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: "Triggers a new DAG run" for a specified Airflow DAG. It is clear what the tool does, though it does not explicitly differentiate itself from nearby tools such as pause_dag, unpause_dag, or list_dags.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives, prerequisites for triggering a DAG, or whether the caller should confirm the DAG state first. The only usage hint is that the DAG must be specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unpause_dagB

[Tool Role]: Unpauses the specified Airflow DAG (allows scheduling new runs).

NameRequiredDescriptionDefault
dag_idYesExact DAG identifier, as returned by list_dags; not its display name.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden; it does disclose the key behavioral effect that unpausing allows scheduling of new runs. However, it says nothing about permissions required, idempotency on an already-unpaused DAG, or what happens to existing runs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence that front-loads the action and its effect. The '[Tool Role]:' prefix is mild boilerplate but harmless.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the schema covers the lone parameter, so the description only needs to explain intent and effect, which it mostly does. It still lacks state precondition and side-effect details an agent would want before mutating a scheduler.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single dag_id parameter is documented in detail (exact identifier as returned by list_dags, not display name). The description adds nothing beyond the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (unpause) and resource (the specified Airflow DAG), plus a clarifying parenthetical about scheduling new runs. It is clearly the inverse of the sibling pause_dag, though it never names that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no note about prerequisites (e.g., the DAG must currently be paused), and no mention of alternatives like pause_dag or trigger_dag. The agent must infer the usage context from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_connectionC

[Tool Role]: Updates an existing connection.

NameRequiredDescriptionDefault
connection_idYesExact Airflow connection identifier.
connection_dataYesConnection JSON body containing fields to update, such as host, login, password, schema, port, or extra. Obtain credentials from a secret store; do not hardcode them.

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears the full behavioral burden and discloses almost nothing. It does not say whether the update is a partial merge or full replacement, whether it requires specific Airflow permissions, or whether changes are reversible. Only the bare fact that this mutates an existing resource is conveyed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is efficient and front-loaded, but its brevity comes at the cost of under-specification rather than disciplined economy. It is short without being informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with nested object parameters, no annotations, and no guidance, the description is incomplete: the critical question of partial-update vs full-replace semantics for connection_data is left unanswered. The existence of an output schema relieves the need to explain return values, but the update behavior itself is undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (connection_id, connection_data) are well documented in the schema, including the credential-handling caveat. The description adds no parameter meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description restates the tool name and title almost verbatim: "Updates an existing connection." It gives no detail on what aspects of a connection are updated nor how this differs from create_connection or delete_connection among the siblings. A specific verb+resource is present, but it is tautological rather than clarifying.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus create_connection or delete_connection, and no prerequisites stated. The only implied condition is that the connection must already exist, which is carried entirely by the word "existing."

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev3.7.6
    • Changedlist_task_instances_all2 fields changed
      • changedInput schema / properties / execution_date_gte / description
        Previous value: -"Optional inclusive task execution time lower\nbound, in ISO 8601 format. Default: None."New value: +"Optional inclusive execution date (v1) or\nlogical date (v2) lower bound, in ISO 8601 format. Default: None."
      • changedInput schema / properties / execution_date_lte / description
        Previous value: -"Optional inclusive task execution time upper\nbound, in ISO 8601 format. Default: None."New value: +"Optional inclusive execution date (v1) or\nlogical date (v2) upper bound, in ISO 8601 format. Default: None."
  2. 43 tool updatesv3.7.4
    • Changedcreate_connection1 field changed
      • addedInput schema / properties / connection_data / description
        Added value: +"Connection JSON body with connection_id and\nconn_type; optional host, login, password, schema, port, and\nextra fields. Obtain credentials from a secret store; do not\nhardcode them."
    • Changeddag_calendar3 fields changed
      • addedInput schema / properties / dag_id / description
        Added value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
      • addedInput schema / properties / end_date / description
        Added value: +"Inclusive run start-time upper bound in ISO 8601\nformat."
      • addedInput schema / properties / start_date / description
        Added value: +"Inclusive run start-time lower bound in ISO 8601\nformat."
    • Changeddag_code1 field changed
      • addedInput schema / properties / dag_id / description
        Added value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
    • Changeddag_graph1 field changed
      • addedInput schema / properties / dag_id / description
        Added value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
    • Changeddag_run_duration2 fields changed
      • addedInput schema / properties / dag_id / description
        Added value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of recent DAG runs to analyze (default:\n10)."
    • Changeddag_task_duration2 fields changed
      • addedInput schema / properties / dag_id / description
        Added value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
      • addedInput schema / properties / dag_run_id / description
        Added value: +"DAG run identifier; omitted or empty selects the\nlatest run."
    • Changeddelete_connection1 field changed
      • addedInput schema / properties / connection_id / description
        Added value: +"Exact Airflow connection identifier."
    • Changedget_config_section1 field changed
      • addedInput schema / properties / section_name / description
        Added value: +"Exact Airflow configuration section name, such as\ncore."
    • Changedget_connection1 field changed
      • addedInput schema / properties / connection_id / description
        Added value: +"Exact Airflow connection identifier."
    • Changedget_dag1 field changed
      • addedInput schema / properties / dag_id / description
        Added value: +"The DAG ID to get details for"
    • Changedget_dags_detailed_batch7 fields changed
      • addedInput schema / properties / fetch_all / description
        Added value: +"Fetch every DAG page; ignores limit and offset when\nTrue. Default: False."
      • addedInput schema / properties / id_contains / description
        Added value: +"Optional substring to match against DAG\nidentifiers. Default: None."
      • addedInput schema / properties / is_active / description
        Added value: +"Optional active-status filter; None includes both\nstatuses. Default: None."
      • addedInput schema / properties / is_paused / description
        Added value: +"Optional paused-status filter; None includes both\nstatuses. Default: None."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of records to request per page. Default:\n100."
      • addedInput schema / properties / name_contains / description
        Added value: +"Optional substring to match against DAG display\nnames. Default: None."
      • addedInput schema / properties / offset / description
        Added value: +"Number of records to skip for pagination. Default: 0."
    • Changedget_dataset1 field changed
      • addedInput schema / properties / dataset_uri / description
        Added value: +"Dataset URI, such as s3://bucket/path; API v1 only."
    • Changedget_dataset_events3 fields changed
      • addedInput schema / properties / dataset_uri / description
        Added value: +"Dataset URI, such as s3://bucket/path; API v1 only."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of records to request per page. Default:\n20."
      • addedInput schema / properties / offset / description
        Added value: +"Number of records to skip for pagination. Default: 0."
    • Changedget_event_log1 field changed
      • addedInput schema / properties / event_log_id / description
        Added value: +"Numeric identifier of the event log entry."
    • Changedget_import_error1 field changed
      • addedInput schema / properties / import_error_id / description
        Added value: +"Numeric identifier of the DAG import error."
    • Changedget_pool1 field changed
      • addedInput schema / properties / pool_name / description
        Added value: +"Exact Airflow pool name, such as default_pool."
    • Changedget_prompt_template2 fields changed
      • addedInput schema / properties / mode / description
        Added value: +"Optional mode (summary/detailed) to control response verbosity"
      • addedInput schema / properties / section / description
        Added value: +"Optional section name to get specific part of template"
    • Changedget_provider1 field changed
      • addedInput schema / properties / provider_name / description
        Added value: +"Exact provider package name, such as apache-\nairflow-providers-http."
    • Changedget_task_instance_details3 fields changed
      • addedInput schema / properties / dag_id / description
        Added value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
      • addedInput schema / properties / dag_run_id / description
        Added value: +"Exact DAG run identifier for the selected DAG."
      • addedInput schema / properties / task_id / description
        Added value: +"Exact task identifier within the selected DAG."
    • Changedget_task_instance_extra_links3 fields changed
      • addedInput schema / properties / dag_id / description
        Added value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
      • addedInput schema / properties / dag_run_id / description
        Added value: +"Exact DAG run identifier for the selected DAG."
      • addedInput schema / properties / task_id / description
        Added value: +"Exact task identifier within the selected DAG."
    • Changedget_task_instance_logs4 fields changed
      • addedInput schema / properties / dag_id / description
        Added value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
      • addedInput schema / properties / dag_run_id / description
        Added value: +"Exact DAG run identifier for the selected DAG."
      • addedInput schema / properties / task_id / description
        Added value: +"Exact task identifier within the selected DAG."
      • addedInput schema / properties / try_number / description
        Added value: +"Task attempt number whose logs to retrieve (default:\n1). Default: 1."
    • Changedget_user1 field changed
      • addedInput schema / properties / username / description
        Added value: +"Exact Airflow username (API v1 only)."
    • Changedget_variable1 field changed
      • addedInput schema / properties / variable_key / description
        Added value: +"Exact key of the Airflow variable."
    • Changedget_xcom_entry4 fields changed
      • addedInput schema / properties / dag_id / description
        Added value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
      • addedInput schema / properties / dag_run_id / description
        Added value: +"Exact DAG run identifier for the selected DAG."
      • addedInput schema / properties / task_id / description
        Added value: +"Exact task identifier within the selected DAG."
      • addedInput schema / properties / xcom_key / description
        Added value: +"Exact XCom key for the selected task instance."
    • Changedlist_connections2 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of records to request per page. Default:\n20."
      • addedInput schema / properties / offset / description
        Added value: +"Number of records to skip for pagination. Default: 0."
    • Changedlist_dags5 fields changed
      • addedInput schema / properties / fetch_all / description
        Added value: +"If True, fetches all DAGs regardless of limit/offset"
      • addedInput schema / properties / id_contains / description
        Added value: +"Filter DAGs by ID containing this string"
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of DAGs to return (default: 20)"
      • addedInput schema / properties / name_contains / description
        Added value: +"Filter DAGs by display name containing this string"
      • addedInput schema / properties / offset / description
        Added value: +"Number of DAGs to skip for pagination (default: 0)"
    • Changedlist_dataset_events4 fields changed
      • addedInput schema / properties / dataset_uri / description
        Added value: +"Dataset URI, such as s3://bucket/path; API v1 only.\nDefault: None."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of records to request per page. Default:\n20."
      • addedInput schema / properties / offset / description
        Added value: +"Number of records to skip for pagination. Default: 0."
      • addedInput schema / properties / source_dag_id / description
        Added value: +"Optional identifier of the DAG that produced the\nevents. Default: None."
    • Changedlist_datasets3 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of records to request per page. Default:\n20."
      • addedInput schema / properties / offset / description
        Added value: +"Number of records to skip for pagination. Default: 0."
      • addedInput schema / properties / uri_pattern / description
        Added value: +"Optional dataset URI pattern passed to the API (v1\nonly). Default: None."
    • Changedlist_event_logs3 fields changed
      • addedInput schema / properties / dag_id / description
        Added value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name. Default: None."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of records to request per page. Default:\n20."
      • addedInput schema / properties / offset / description
        Added value: +"Number of records to skip for pagination. Default: 0."
    • Changedlist_import_errors2 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of records to request per page. Default:\n20."
      • addedInput schema / properties / offset / description
        Added value: +"Number of records to skip for pagination. Default: 0."
    • Changedlist_pools2 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of records to request per page. Default:\n20."
      • addedInput schema / properties / offset / description
        Added value: +"Number of records to skip for pagination. Default: 0."
    • Changedlist_roles2 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of records to request per page. Default:\n20."
      • addedInput schema / properties / offset / description
        Added value: +"Number of records to skip for pagination. Default: 0."
    • Changedlist_task_instances_all15 fields changed
      • addedInput schema / properties / dag_id / description
        Added value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name. Default: None."
      • addedInput schema / properties / dag_run_id / description
        Added value: +"Exact DAG run identifier for the selected DAG.\nDefault: None."
      • addedInput schema / properties / duration_gte / description
        Added value: +"Optional minimum task duration in seconds.\nDefault: None."
      • addedInput schema / properties / duration_lte / description
        Added value: +"Optional maximum task duration in seconds.\nDefault: None."
      • addedInput schema / properties / end_date_gte / description
        Added value: +"Optional inclusive task end time lower bound, in\nISO 8601 format. Default: None."
      • addedInput schema / properties / end_date_lte / description
        Added value: +"Optional inclusive task end time upper bound, in\nISO 8601 format. Default: None."
      • addedInput schema / properties / execution_date_gte / description
        Added value: +"Optional inclusive task execution time lower\nbound, in ISO 8601 format. Default: None."
      • addedInput schema / properties / execution_date_lte / description
        Added value: +"Optional inclusive task execution time upper\nbound, in ISO 8601 format. Default: None."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of records to request per page. Default:\n100."
      • addedInput schema / properties / offset / description
        Added value: +"Number of records to skip for pagination. Default: 0."
      • addedInput schema / properties / pool / description
        Added value: +"Optional list of Airflow pool names to filter task\ninstances. Default: None."
      • addedInput schema / properties / start_date_gte / description
        Added value: +"Optional inclusive task start time lower bound,\nin ISO 8601 format. Default: None."
      • addedInput schema / properties / start_date_lte / description
        Added value: +"Optional inclusive task start time upper bound,\nin ISO 8601 format. Default: None."
      • addedInput schema / properties / state / description
        Added value: +"Optional list of task states, such as [\"failed\",\n\"running\"]. Default: None."
      • addedInput schema / properties / task_id / description
        Added value: +"Exact task identifier within the selected DAG. Default:\nNone."
    • Changedlist_task_instances_batch5 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of records to request per page. Default:\n100."
      • addedInput schema / properties / offset / description
        Added value: +"Number of records to skip for pagination. Default: 0."
      • addedInput schema / properties / start_date_gte / description
        Added value: +"Optional inclusive task start time lower bound,\nin ISO 8601 format. Default: None."
      • addedInput schema / properties / start_date_lte / description
        Added value: +"Optional inclusive task start time upper bound,\nin ISO 8601 format. Default: None."
      • addedInput schema / properties / state / description
        Added value: +"Optional list of task states, such as [\"failed\",\n\"running\"]. Default: None."
    • Changedlist_tasks1 field changed
      • addedInput schema / properties / dag_id / description
        Added value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
    • Changedlist_users2 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of records to request per page. Default:\n20."
      • addedInput schema / properties / offset / description
        Added value: +"Number of records to skip for pagination. Default: 0."
    • Changedlist_variables2 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of records to request per page. Default:\n20."
      • addedInput schema / properties / offset / description
        Added value: +"Number of records to skip for pagination. Default: 0."
    • Changedlist_xcom_entries5 fields changed
      • addedInput schema / properties / dag_id / description
        Added value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
      • addedInput schema / properties / dag_run_id / description
        Added value: +"Exact DAG run identifier for the selected DAG."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of records to request per page. Default:\n20."
      • addedInput schema / properties / offset / description
        Added value: +"Number of records to skip for pagination. Default: 0."
      • addedInput schema / properties / task_id / description
        Added value: +"Exact task identifier within the selected DAG."
    • Changedpause_dag1 field changed
      • addedInput schema / properties / dag_id / description
        Added value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
    • Changedsearch_config_options1 field changed
      • addedInput schema / properties / search_term / description
        Added value: +"Case-insensitive substring to find in option names\nor values."
    • Changedtrigger_dag1 field changed
      • addedInput schema / properties / dag_id / description
        Added value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
    • Changedunpause_dag1 field changed
      • addedInput schema / properties / dag_id / description
        Added value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
    • Changedupdate_connection2 fields changed
      • addedInput schema / properties / connection_data / description
        Added value: +"Connection JSON body containing fields to\nupdate, such as host, login, password, schema, port, or\nextra. Obtain credentials from a secret store; do not\nhardcode them."
      • addedInput schema / properties / connection_id / description
        Added value: +"Exact Airflow connection identifier."
  3. 54 tool updatesv3.7.2
    • Addedall_dag_event_summary
    • Addedall_dag_import_summary
    • Addedcreate_connection
    • Addeddag_calendar
    • Addeddag_code
    • Addeddag_graph
    • Addeddag_run_duration
    • Addeddag_task_duration
    • Addeddelete_connection
    • Addedfailed_dags
    • Addedget_config
    • Addedget_config_section
    • Addedget_connection
    • Addedget_dag
    • Addedget_dags_detailed_batch
    • Addedget_dataset
    • Addedget_dataset_events
    • Addedget_event_log
    • Addedget_health
    • Addedget_import_error
    • Addedget_pool
    • Addedget_prompt_template
    • Addedget_provider
    • Addedget_task_instance_details
    • Addedget_task_instance_extra_links
    • Addedget_task_instance_logs
    • Addedget_user
    • Addedget_variable
    • Addedget_version
    • Addedget_xcom_entry
    • Addedlist_config_sections
    • Addedlist_connections
    • Addedlist_dags
    • Addedlist_dataset_events
    • Addedlist_datasets
    • Addedlist_event_logs
    • Addedlist_import_errors
    • Addedlist_permissions
    • Addedlist_plugins
    • Addedlist_pools
    • Addedlist_providers
    • Addedlist_roles
    • Addedlist_task_instances_all
    • Addedlist_task_instances_batch
    • Addedlist_tasks
    • Addedlist_users
    • Addedlist_variables
    • Addedlist_xcom_entries
    • Addedpause_dag
    • Addedrunning_dags
    • Addedsearch_config_options
    • Addedtrigger_dag
    • Addedunpause_dag
    • Addedupdate_connection
  4. 54 tool updatesv3.6.5
    • Removedall_dag_event_summary
    • Removedall_dag_import_summary
    • Removedcreate_connection
    • Removeddag_calendar
    • Removeddag_code
    • Removeddag_graph
    • Removeddag_run_duration
    • Removeddag_task_duration
    • Removeddelete_connection
    • Removedfailed_dags
    • Removedget_config
    • Removedget_config_section
    • Removedget_connection
    • Removedget_dag
    • Removedget_dags_detailed_batch
    • Removedget_dataset
    • Removedget_dataset_events
    • Removedget_event_log
    • Removedget_health
    • Removedget_import_error
    • Removedget_pool
    • Removedget_prompt_template
    • Removedget_provider
    • Removedget_task_instance_details
    • Removedget_task_instance_extra_links
    • Removedget_task_instance_logs
    • Removedget_user
    • Removedget_variable
    • Removedget_version
    • Removedget_xcom_entry
    • Removedlist_config_sections
    • Removedlist_connections
    • Removedlist_dags
    • Removedlist_dataset_events
    • Removedlist_datasets
    • Removedlist_event_logs
    • Removedlist_import_errors
    • Removedlist_permissions
    • Removedlist_plugins
    • Removedlist_pools
    • Removedlist_providers
    • Removedlist_roles
    • Removedlist_task_instances_all
    • Removedlist_task_instances_batch
    • Removedlist_tasks
    • Removedlist_users
    • Removedlist_variables
    • Removedlist_xcom_entries
    • Removedpause_dag
    • Removedrunning_dags
    • Removedsearch_config_options
    • Removedtrigger_dag
    • Removedunpause_dag
    • Removedupdate_connection
  5. 54 tool updatesv3.6.6
    • Changedall_dag_event_summary1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedall_dag_import_summary1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedcreate_connection2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / connection_data / title
        Removed value: -"Connection Data"
    • Changeddag_calendar4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
      • removedInput schema / properties / end_date / title
        Removed value: -"End Date"
      • removedInput schema / properties / start_date / title
        Removed value: -"Start Date"
    • Changeddag_code2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
    • Changeddag_graph2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
    • Changeddag_run_duration3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
    • Changeddag_task_duration3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
      • removedInput schema / properties / dag_run_id / title
        Removed value: -"Dag Run Id"
    • Changeddelete_connection2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / connection_id / title
        Removed value: -"Connection Id"
    • Changedfailed_dags1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedget_config1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedget_config_section2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / section_name / title
        Removed value: -"Section Name"
    • Changedget_connection2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / connection_id / title
        Removed value: -"Connection Id"
    • Changedget_dag2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
    • Changedget_dags_detailed_batch8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / fetch_all / title
        Removed value: -"Fetch All"
      • removedInput schema / properties / id_contains / title
        Removed value: -"Id Contains"
      • removedInput schema / properties / is_active / title
        Removed value: -"Is Active"
      • removedInput schema / properties / is_paused / title
        Removed value: -"Is Paused"
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / name_contains / title
        Removed value: -"Name Contains"
      • removedInput schema / properties / offset / title
        Removed value: -"Offset"
    • Changedget_dataset2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dataset_uri / title
        Removed value: -"Dataset Uri"
    • Changedget_dataset_events4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dataset_uri / title
        Removed value: -"Dataset Uri"
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / offset / title
        Removed value: -"Offset"
    • Changedget_event_log2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / event_log_id / title
        Removed value: -"Event Log Id"
    • Changedget_health1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedget_import_error2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / import_error_id / title
        Removed value: -"Import Error Id"
    • Changedget_pool2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / pool_name / title
        Removed value: -"Pool Name"
    • Changedget_prompt_template5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • removedInput schema / properties / section / title
        Removed value: -"Section"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedget_provider2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / provider_name / title
        Removed value: -"Provider Name"
    • Changedget_task_instance_details4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
      • removedInput schema / properties / dag_run_id / title
        Removed value: -"Dag Run Id"
      • removedInput schema / properties / task_id / title
        Removed value: -"Task Id"
    • Changedget_task_instance_extra_links4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
      • removedInput schema / properties / dag_run_id / title
        Removed value: -"Dag Run Id"
      • removedInput schema / properties / task_id / title
        Removed value: -"Task Id"
    • Changedget_task_instance_logs5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
      • removedInput schema / properties / dag_run_id / title
        Removed value: -"Dag Run Id"
      • removedInput schema / properties / task_id / title
        Removed value: -"Task Id"
      • removedInput schema / properties / try_number / title
        Removed value: -"Try Number"
    • Changedget_user2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / username / title
        Removed value: -"Username"
    • Changedget_variable2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / variable_key / title
        Removed value: -"Variable Key"
    • Changedget_version1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedget_xcom_entry5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
      • removedInput schema / properties / dag_run_id / title
        Removed value: -"Dag Run Id"
      • removedInput schema / properties / task_id / title
        Removed value: -"Task Id"
      • removedInput schema / properties / xcom_key / title
        Removed value: -"Xcom Key"
    • Changedlist_config_sections1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedlist_connections3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / offset / title
        Removed value: -"Offset"
    • Changedlist_dags6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / fetch_all / title
        Removed value: -"Fetch All"
      • removedInput schema / properties / id_contains / title
        Removed value: -"Id Contains"
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / name_contains / title
        Removed value: -"Name Contains"
      • removedInput schema / properties / offset / title
        Removed value: -"Offset"
    • Changedlist_dataset_events5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dataset_uri / title
        Removed value: -"Dataset Uri"
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / offset / title
        Removed value: -"Offset"
      • removedInput schema / properties / source_dag_id / title
        Removed value: -"Source Dag Id"
    • Changedlist_datasets4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / offset / title
        Removed value: -"Offset"
      • removedInput schema / properties / uri_pattern / title
        Removed value: -"Uri Pattern"
    • Changedlist_event_logs4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / offset / title
        Removed value: -"Offset"
    • Changedlist_import_errors3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / offset / title
        Removed value: -"Offset"
    • Changedlist_permissions1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedlist_plugins1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedlist_pools3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / offset / title
        Removed value: -"Offset"
    • Changedlist_providers1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedlist_roles3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / offset / title
        Removed value: -"Offset"
    • Changedlist_task_instances_all16 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
      • removedInput schema / properties / dag_run_id / title
        Removed value: -"Dag Run Id"
      • removedInput schema / properties / duration_gte / title
        Removed value: -"Duration Gte"
      • removedInput schema / properties / duration_lte / title
        Removed value: -"Duration Lte"
      • removedInput schema / properties / end_date_gte / title
        Removed value: -"End Date Gte"
      • removedInput schema / properties / end_date_lte / title
        Removed value: -"End Date Lte"
      • removedInput schema / properties / execution_date_gte / title
        Removed value: -"Execution Date Gte"
      • removedInput schema / properties / execution_date_lte / title
        Removed value: -"Execution Date Lte"
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / offset / title
        Removed value: -"Offset"
      • removedInput schema / properties / pool / title
        Removed value: -"Pool"
      • removedInput schema / properties / start_date_gte / title
        Removed value: -"Start Date Gte"
      • removedInput schema / properties / start_date_lte / title
        Removed value: -"Start Date Lte"
      • removedInput schema / properties / state / title
        Removed value: -"State"
      • removedInput schema / properties / task_id / title
        Removed value: -"Task Id"
    • Changedlist_task_instances_batch6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / offset / title
        Removed value: -"Offset"
      • removedInput schema / properties / start_date_gte / title
        Removed value: -"Start Date Gte"
      • removedInput schema / properties / start_date_lte / title
        Removed value: -"Start Date Lte"
      • removedInput schema / properties / state / title
        Removed value: -"State"
    • Changedlist_tasks2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
    • Changedlist_users3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / offset / title
        Removed value: -"Offset"
    • Changedlist_variables3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / offset / title
        Removed value: -"Offset"
    • Changedlist_xcom_entries6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
      • removedInput schema / properties / dag_run_id / title
        Removed value: -"Dag Run Id"
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / offset / title
        Removed value: -"Offset"
      • removedInput schema / properties / task_id / title
        Removed value: -"Task Id"
    • Changedpause_dag2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
    • Changedrunning_dags1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedsearch_config_options2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / search_term / title
        Removed value: -"Search Term"
    • Changedtrigger_dag2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
    • Changedunpause_dag2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / dag_id / title
        Removed value: -"Dag Id"
    • Changedupdate_connection3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / connection_data / title
        Removed value: -"Connection Data"
      • removedInput schema / properties / connection_id / title
        Removed value: -"Connection Id"
  6. 29 tool updatesv1.0.0
    • Addedcreate_connection
    • Changeddag_calendar4 fields changed
      • removedInput schema / properties / end_date / default
        Removed value: -null
      • removedInput schema / properties / limit
        Removed value: -{
        -  "default": 20,
        -  "title": "Limit",
        -  "type": "integer"
        -}
      • removedInput schema / properties / start_date / default
        Removed value: -null
      • changedInput schema / required
        Previous value: -[
        -  "dag_id"
        -]New value: +[
        +  "dag_id",
        +  "start_date",
        +  "end_date"
        +]
    • Changeddag_run_duration1 field changed
      • changedInput schema / properties / limit / default
        Previous value: -50New value: +10
    • Changeddag_task_duration2 fields changed
      • addedInput schema / properties / dag_run_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Dag Run Id"
        +}
      • removedInput schema / properties / run_id
        Removed value: -{
        -  "default": null,
        -  "title": "Run Id",
        -  "type": "string"
        -}
    • Addeddelete_connection
    • Addedget_config
    • Addedget_config_section
    • Addedget_connection
    • Addedget_dataset
    • Addedget_dataset_events
    • Addedget_provider
    • Changedget_task_instance_logs2 fields changed
      • removedInput schema / properties / full_content
        Removed value: -{
        -  "default": false,
        -  "title": "Full Content",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / token
        Removed value: -{
        -  "default": null,
        -  "title": "Token",
        -  "type": "string"
        -}
    • Addedget_user
    • Changedget_xcom_entry1 field changed
      • removedInput schema / properties / map_index
        Removed value: -{
        -  "default": -1,
        -  "title": "Map Index",
        -  "type": "integer"
        -}
    • Addedlist_config_sections
    • Addedlist_connections
    • Addedlist_dataset_events
    • Addedlist_datasets
    • Changedlist_event_logs4 fields changed
      • addedInput schema / properties / dag_id / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / dag_id / type
        Removed value: -"string"
      • removedInput schema / properties / run_id
        Removed value: -{
        -  "default": null,
        -  "title": "Run Id",
        -  "type": "string"
        -}
      • removedInput schema / properties / task_id
        Removed value: -{
        -  "default": null,
        -  "title": "Task Id",
        -  "type": "string"
        -}
    • Addedlist_permissions
    • Addedlist_plugins
    • Addedlist_providers
    • Addedlist_roles
    • Changedlist_task_instances_all27 fields changed
      • addedInput schema / properties / dag_id / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / dag_id / type
        Removed value: -"string"
      • addedInput schema / properties / dag_run_id / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / dag_run_id / type
        Removed value: -"string"
      • addedInput schema / properties / duration_gte / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / duration_gte / type
        Removed value: -"number"
      • addedInput schema / properties / duration_lte / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / duration_lte / type
        Removed value: -"number"
      • addedInput schema / properties / end_date_gte / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / end_date_gte / type
        Removed value: -"string"
      • addedInput schema / properties / end_date_lte / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / end_date_lte / type
        Removed value: -"string"
      • addedInput schema / properties / execution_date_gte / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / execution_date_gte / type
        Removed value: -"string"
      • addedInput schema / properties / execution_date_lte / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / execution_date_lte / type
        Removed value: -"string"
      • changedInput schema / properties / limit / default
        Previous value: -20New value: +100
      • addedInput schema / properties / pool / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / pool / type
        Removed value: -"string"
      • removedInput schema / properties / queue
        Removed value: -{
        -  "default": null,
        -  "title": "Queue",
        -  "type": "string"
        -}
      • addedInput schema / properties / start_date_gte / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / start_date_gte / type
        Removed value: -"string"
      • addedInput schema / properties / start_date_lte / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / start_date_lte / type
        Removed value: -"string"
      • addedInput schema / properties / state / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / state / type
        Removed value: -"string"
      • addedInput schema / properties / task_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Task Id"
        +}
    • Changedlist_task_instances_batch20 fields changed
      • removedInput schema / properties / dag_ids
        Removed value: -{
        -  "default": null,
        -  "items": {
        -    "type": "string"
        -  },
        -  "title": "Dag Ids",
        -  "type": "array"
        -}
      • removedInput schema / properties / dag_run_ids
        Removed value: -{
        -  "default": null,
        -  "items": {
        -    "type": "string"
        -  },
        -  "title": "Dag Run Ids",
        -  "type": "array"
        -}
      • removedInput schema / properties / duration_gte
        Removed value: -{
        -  "default": null,
        -  "title": "Duration Gte",
        -  "type": "number"
        -}
      • removedInput schema / properties / duration_lte
        Removed value: -{
        -  "default": null,
        -  "title": "Duration Lte",
        -  "type": "number"
        -}
      • removedInput schema / properties / end_date_gte
        Removed value: -{
        -  "default": null,
        -  "title": "End Date Gte",
        -  "type": "string"
        -}
      • removedInput schema / properties / end_date_lte
        Removed value: -{
        -  "default": null,
        -  "title": "End Date Lte",
        -  "type": "string"
        -}
      • removedInput schema / properties / execution_date_gte
        Removed value: -{
        -  "default": null,
        -  "title": "Execution Date Gte",
        -  "type": "string"
        -}
      • removedInput schema / properties / execution_date_lte
        Removed value: -{
        -  "default": null,
        -  "title": "Execution Date Lte",
        -  "type": "string"
        -}
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "title": "Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "title": "Offset",
        +  "type": "integer"
        +}
      • removedInput schema / properties / pool
        Removed value: -{
        -  "default": null,
        -  "items": {
        -    "type": "string"
        -  },
        -  "title": "Pool",
        -  "type": "array"
        -}
      • removedInput schema / properties / queue
        Removed value: -{
        -  "default": null,
        -  "items": {
        -    "type": "string"
        -  },
        -  "title": "Queue",
        -  "type": "array"
        -}
      • addedInput schema / properties / start_date_gte / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / start_date_gte / type
        Removed value: -"string"
      • addedInput schema / properties / start_date_lte / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / start_date_lte / type
        Removed value: -"string"
      • addedInput schema / properties / state / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / state / items
        Removed value: -{
        -  "type": "string"
        -}
      • removedInput schema / properties / state / type
        Removed value: -"array"
      • removedInput schema / properties / task_ids
        Removed value: -{
        -  "default": null,
        -  "items": {
        -    "type": "string"
        -  },
        -  "title": "Task Ids",
        -  "type": "array"
        -}
    • Addedlist_users
    • Changedlist_variables1 field changed
      • removedInput schema / properties / order_by
        Removed value: -{
        -  "default": "key",
        -  "title": "Order By",
        -  "type": "string"
        -}
    • Addedsearch_config_options
    • Addedupdate_connection
  7. 34 tool updates
    • First observedall_dag_event_summary
    • First observedall_dag_import_summary
    • First observeddag_calendar
    • First observeddag_code
    • First observeddag_graph
    • First observeddag_run_duration
    • First observeddag_task_duration
    • First observedfailed_dags
    • First observedget_dag
    • First observedget_dags_detailed_batch
    • First observedget_event_log
    • First observedget_health
    • First observedget_import_error
    • First observedget_pool
    • First observedget_prompt_template
    • First observedget_task_instance_details
    • First observedget_task_instance_extra_links
    • First observedget_task_instance_logs
    • First observedget_variable
    • First observedget_version
    • First observedget_xcom_entry
    • First observedlist_dags
    • First observedlist_event_logs
    • First observedlist_import_errors
    • First observedlist_pools
    • First observedlist_task_instances_all
    • First observedlist_task_instances_batch
    • First observedlist_tasks
    • First observedlist_variables
    • First observedlist_xcom_entries
    • First observedpause_dag
    • First observedrunning_dags
    • First observedtrigger_dag
    • First observedunpause_dag

TDQS

C2.9/5.0

Scored across 54 tools

Disambiguation3/5

Most tools have a clear resource+action target (get_dag vs list_dags vs trigger_dag), but several pairs are hard to distinguish: list_task_instances_all vs list_task_instances_batch, list_dataset_events vs get_dataset_events, and list_import_errors vs all_dag_import_summary overlap heavily. The read-only inventory tools (list_event_logs, all_dag_event_summary, list_config_sections, get_config) also blur together without clear guidance on when to use which.

Naming Consistency3/5

The dominant pattern is snake_case verb_noun (get_dag, list_pools, delete_connection), which is good, but a sizable minority inverts it to noun-first or adjective-first (running_dags, failed_dags, dag_calendar, dag_graph, dag_code, all_dag_event_summary). It remains readable, but an agent cannot reliably predict a name from intent.

Tool Count2/5

54 tools is well beyond a comfortable set and reflects a one-to-one mirroring of the Airflow REST API rather than a curated surface. Several near-duplicate list/get variants and summary tools could be collapsed into filtered parameters on a smaller number of tools.

Completeness4/5

Coverage is broad across DAGs, tasks, task instances, XCom, pools, variables, connections, users, roles, providers, datasets, config, plugins, event logs, and import errors, with full CRUD only for connections. Gaps exist (no create/update/delete for variables or pools, no task-instance state mutation or clear), but agents can work around most of them.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    An MCP server that enables AI assistants to interact with Apache Airflow's REST API for DAG management, task monitoring, and system diagnostics. It provides comprehensive tools for triggering workflows, retrieving logs, and inspecting system health across Airflow 2.x and 3.x versions.
    31
    13
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    An MCP server that enables AI coding assistants to interact with a local Airflow cluster via its REST API for triggering DAG runs, monitoring status, reading logs, and diagnosing errors.
    10
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for controlling Apache Airflow 3 via its REST API, enabling operations like DAG management, task monitoring, and more through natural language.
    MIT