MCP-Airflow-API
MCP-Airflow-API lets you manage and monitor Apache Airflow clusters through MCP/natural-language tools.
List, inspect, trigger, pause, unpause DAGs; view DAG graphs, tasks, source code, running/failed DAGs, durations, and calendar.
Query task instances with filters, details, batch summaries, extra links, and logs.
Inspect XCom entries, variables, pools, event logs, import errors, health, version, plugins, and providers.
Read Airflow configuration sections, options, and search settings.
Create, read, update, delete connections; list users, permissions, and roles where API v1 is supported.
List datasets and dataset events for API v1; README notes API v2 adds asset management tools.
Retrieve the LLM prompt template for Airflow operations.
Support pagination, filtering, batch retrieval, and API v1/v2 version selection via configuration.
Provides comprehensive monitoring and management of Apache Airflow clusters through natural language queries, including DAG inspection, task monitoring, health checks, cluster analytics, pool management, variable management, XCom operations, and event logging without requiring direct API complexity.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP-Airflow-APIshow me currently running DAGs"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
๐ MCP-Airflow-API
Revolutionary Open Source Tool for Managing Apache Airflow with Natural Language
Architecture & Internal (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.

๐ฏ 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

๐ฏ Recommended: Docker Compose (Complete Demo Environment)
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/docsGetting 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.
Access http://localhost:3002/
Log in with admin account
Go to "Settings" โ "Tools" from the top menu
Add Tool URL:
http://localhost:8002/airflow-apiConfigure your LLM provider (Ollama, OpenAI, etc.)
๐ฆ MCP Server Installation Methods
Method 1: Direct Installation from PyPI
uvx --python 3.12 mcp-airflow-apiMethod 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"
}
}
}
}gitRemote 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
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"
Comprehensive Monitoring Capabilities
Real-time cluster status monitoring:Cluster health monitoring
DAG status and performance analysis
Task execution log tracking
XCom data management
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_VERSIONZero Configuration Changes: Same tool names, enhanced capabilities
Efficient Architecture: Shared common codebase eliminates duplication
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
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
stdiomode: Direct MCP client integration for local environmentsstreamable-httpmode: 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 via18002)MCPO Proxy: REST API endpoint provider (port
8002)
Use Cases in Action

โ๏ธ 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-hereAPI Version Comparison
Official Documentation:
API v1: Airflow 2.x REST API Reference
API v2: Airflow 3.0+ REST API Reference
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-hereOr via CLI:
python -m mcp_airflow_api --type streamable-http --auth-enable --secret-key your-secure-secret-key-hereSecurity Levels
stdio mode (Default): Local-only access, no authentication needed
streamable-http + REMOTE_AUTH_ENABLE=false: Remote access without authentication โ ๏ธ NOT RECOMMENDED for production
streamable-http + REMOTE_AUTH_ENABLE=true: Remote access with Bearer token authentication โ RECOMMENDED for production
Note:
REMOTE_AUTH_ENABLEdefaults tofalsewhen undefined, empty, or null. Supported values aretrue/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=airflowDevelopment 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
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: airflowEnvironment details:
Image:
apache/airflow:2.10.2Port:
38080(configurable viaAIRFLOW_WEBSERVER_PORT)API:
/api/v1/*endpointsAuthentication: 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: airflowEnvironment details:
Image:
apache/airflow:3.0.6Port:
48080(configurable viaAIRFLOW_APISERVER_PORT)API:
/api/v2/*endpoints + Assets managementAuthentication: 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.shKey Differences
Feature | Airflow 2.x | Airflow 3.x |
Authentication | Basic Auth | JWT Tokens (FabAuthManager) |
Default Port | 38080 | 48080 |
API Endpoints |
|
|
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 |
| Read the template or select a section with | v1, v2 |
Connections |
| List connections with | v1, v2 |
Connections |
| Read a connection by | v1, v2 |
Connections |
| Create a connection from | v1, v2 |
Connections |
| Update | v1, v2 |
Connections |
| Delete a connection by | v1, v2 |
Users and permissions |
| List users with | v1 only |
Users and permissions |
| Read a user by | v1 only |
Users and permissions |
| List available permissions | v1 only |
Users and permissions |
| List roles with | v1 only |
Plugins and providers |
| List installed plugins | v1, v2 |
Plugins and providers |
| List installed provider packages | v1, v2 |
Plugins and providers |
| Read a provider by | v1, v2 |
Datasets |
| List datasets, optionally filtering by | v1 only |
Datasets |
| Read a dataset by | v1 only |
Datasets |
| Filter events by | v1 only |
Datasets |
| List events for a specific | 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 results2. 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 analysis5. 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 toolsall_dag_event_summaryB
[Tool Role]: Provides summary of event logs across all DAGs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_data | Yes | Connection 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
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | Exact DAG identifier, as returned by list_dags; not its display name. | |
| end_date | Yes | Inclusive run start-time upper bound in ISO 8601 format. | |
| start_date | Yes | Inclusive run start-time lower bound in ISO 8601 format. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | Exact DAG identifier, as returned by list_dags; not its display name. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | Exact DAG identifier, as returned by list_dags; not its display name. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of recent DAG runs to analyze (default: 10). | |
| dag_id | Yes | Exact DAG identifier, as returned by list_dags; not its display name. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | Exact DAG identifier, as returned by list_dags; not its display name. | |
| dag_run_id | No | DAG run identifier; omitted or empty selects the latest run. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes | Exact Airflow connection identifier. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| section_name | Yes | Exact Airflow configuration section name, such as core. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes | Exact Airflow connection identifier. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | The DAG ID to get details for |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to request per page. Default: 100. | |
| offset | No | Number of records to skip for pagination. Default: 0. | |
| fetch_all | No | Fetch every DAG page; ignores limit and offset when True. Default: False. | |
| is_active | No | Optional active-status filter; None includes both statuses. Default: None. | |
| is_paused | No | Optional paused-status filter; None includes both statuses. Default: None. | |
| id_contains | No | Optional substring to match against DAG identifiers. Default: None. | |
| name_contains | No | Optional substring to match against DAG display names. Default: None. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_uri | Yes | Dataset URI, such as s3://bucket/path; API v1 only. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to request per page. Default: 20. | |
| offset | No | Number of records to skip for pagination. Default: 0. | |
| dataset_uri | Yes | Dataset URI, such as s3://bucket/path; API v1 only. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| event_log_id | Yes | Numeric identifier of the event log entry. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| import_error_id | Yes | Numeric identifier of the DAG import error. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pool_name | Yes | Exact Airflow pool name, such as default_pool. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Optional mode (summary/detailed) to control response verbosity | |
| section | No | Optional section name to get specific part of template |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| provider_name | Yes | Exact provider package name, such as apache- airflow-providers-http. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | Exact DAG identifier, as returned by list_dags; not its display name. | |
| task_id | Yes | Exact task identifier within the selected DAG. | |
| dag_run_id | Yes | Exact DAG run identifier for the selected DAG. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_extra_linksC
[Tool Role]: Gets extra links for a task instance.
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | Exact DAG identifier, as returned by list_dags; not its display name. | |
| task_id | Yes | Exact task identifier within the selected DAG. | |
| dag_run_id | Yes | Exact DAG run identifier for the selected DAG. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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-only call, but it never says what extra links actually are (e.g., operator-configured URLs to external systems), whether they can be empty, or what access is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that is front-loaded with the verb and resource, with no wasted clauses. The '[Tool Role]:' prefix is mild filler but harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 params are fully documented in the schema. Still, for a tool with zero annotations, one clause explaining what extra links are and that the call is read-only would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three identifiers are well documented in the schema, so the baseline is 3. The description adds nothing about the parameters beyond what the schema already supplies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb and resource ('Gets extra links for a task instance'), which is specific enough to act on, but 'extra links' is a domain term left unexplained, and it does not differentiate itself from adjacent siblings like get_task_instance_details or get_task_instance_logs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus the other task-instance tools (details, logs, xcom entries). The agent must infer that this is the tool to call when it needs operator-defined external links.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | Exact DAG identifier, as returned by list_dags; not its display name. | |
| task_id | Yes | Exact task identifier within the selected DAG. | |
| dag_run_id | Yes | Exact DAG run identifier for the selected DAG. | |
| try_number | No | Task attempt number whose logs to retrieve (default: 1). Default: 1. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Exact Airflow username (API v1 only). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| variable_key | Yes | Exact key of the Airflow variable. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | Exact DAG identifier, as returned by list_dags; not its display name. | |
| task_id | Yes | Exact task identifier within the selected DAG. | |
| xcom_key | Yes | Exact XCom key for the selected task instance. | |
| dag_run_id | Yes | Exact DAG run identifier for the selected DAG. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to request per page. Default: 20. | |
| offset | No | Number of records to skip for pagination. Default: 0. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of DAGs to return (default: 20) | |
| offset | No | Number of DAGs to skip for pagination (default: 0) | |
| fetch_all | No | If True, fetches all DAGs regardless of limit/offset | |
| id_contains | No | Filter DAGs by ID containing this string | |
| name_contains | No | Filter DAGs by display name containing this string |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to request per page. Default: 20. | |
| offset | No | Number of records to skip for pagination. Default: 0. | |
| dataset_uri | No | Dataset URI, such as s3://bucket/path; API v1 only. Default: None. | |
| source_dag_id | No | Optional identifier of the DAG that produced the events. Default: None. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to request per page. Default: 20. | |
| offset | No | Number of records to skip for pagination. Default: 0. | |
| uri_pattern | No | Optional dataset URI pattern passed to the API (v1 only). Default: None. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to request per page. Default: 20. | |
| dag_id | No | Exact DAG identifier, as returned by list_dags; not its display name. Default: None. | |
| offset | No | Number of records to skip for pagination. Default: 0. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to request per page. Default: 20. | |
| offset | No | Number of records to skip for pagination. Default: 0. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to request per page. Default: 20. | |
| offset | No | Number of records to skip for pagination. Default: 0. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to request per page. Default: 20. | |
| offset | No | Number of records to skip for pagination. Default: 0. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pool | No | Optional list of Airflow pool names to filter task instances. Default: None. | |
| limit | No | Maximum number of records to request per page. Default: 100. | |
| state | No | Optional list of task states, such as ["failed", "running"]. Default: None. | |
| dag_id | No | Exact DAG identifier, as returned by list_dags; not its display name. Default: None. | |
| offset | No | Number of records to skip for pagination. Default: 0. | |
| task_id | No | Exact task identifier within the selected DAG. Default: None. | |
| dag_run_id | No | Exact DAG run identifier for the selected DAG. Default: None. | |
| duration_gte | No | Optional minimum task duration in seconds. Default: None. | |
| duration_lte | No | Optional maximum task duration in seconds. Default: None. | |
| end_date_gte | No | Optional inclusive task end time lower bound, in ISO 8601 format. Default: None. | |
| end_date_lte | No | Optional inclusive task end time upper bound, in ISO 8601 format. Default: None. | |
| start_date_gte | No | Optional inclusive task start time lower bound, in ISO 8601 format. Default: None. | |
| start_date_lte | No | Optional inclusive task start time upper bound, in ISO 8601 format. Default: None. | |
| execution_date_gte | No | Optional inclusive execution date (v1) or logical date (v2) lower bound, in ISO 8601 format. Default: None. | |
| execution_date_lte | No | Optional inclusive execution date (v1) or logical date (v2) upper bound, in ISO 8601 format. Default: None. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to request per page. Default: 100. | |
| state | No | Optional list of task states, such as ["failed", "running"]. Default: None. | |
| offset | No | Number of records to skip for pagination. Default: 0. | |
| start_date_gte | No | Optional inclusive task start time lower bound, in ISO 8601 format. Default: None. | |
| start_date_lte | No | Optional inclusive task start time upper bound, in ISO 8601 format. Default: None. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | Exact DAG identifier, as returned by list_dags; not its display name. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to request per page. Default: 20. | |
| offset | No | Number of records to skip for pagination. Default: 0. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to request per page. Default: 20. | |
| offset | No | Number of records to skip for pagination. Default: 0. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to request per page. Default: 20. | |
| dag_id | Yes | Exact DAG identifier, as returned by list_dags; not its display name. | |
| offset | No | Number of records to skip for pagination. Default: 0. | |
| task_id | Yes | Exact task identifier within the selected DAG. | |
| dag_run_id | Yes | Exact DAG run identifier for the selected DAG. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | Exact DAG identifier, as returned by list_dags; not its display name. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| search_term | Yes | Case-insensitive substring to find in option names or values. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | Exact DAG identifier, as returned by list_dags; not its display name. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | Exact DAG identifier, as returned by list_dags; not its display name. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes | Exact Airflow connection identifier. | |
| connection_data | Yes | Connection 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
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 tool update
v3.7.6- Changed
list_task_instances_all2 fields changed- changed
Input schema / properties / execution_date_gte / descriptionPrevious 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." - changed
Input schema / properties / execution_date_lte / descriptionPrevious 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."
43 tool updates
v3.7.4- Changed
create_connection1 field changed- added
Input schema / properties / connection_data / descriptionAdded 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."
- Changed
dag_calendar3 fields changed- added
Input schema / properties / dag_id / descriptionAdded value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name." - added
Input schema / properties / end_date / descriptionAdded value: +"Inclusive run start-time upper bound in ISO 8601\nformat." - added
Input schema / properties / start_date / descriptionAdded value: +"Inclusive run start-time lower bound in ISO 8601\nformat."
- Changed
dag_code1 field changed- added
Input schema / properties / dag_id / descriptionAdded value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
- Changed
dag_graph1 field changed- added
Input schema / properties / dag_id / descriptionAdded value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
- Changed
dag_run_duration2 fields changed- added
Input schema / properties / dag_id / descriptionAdded value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of recent DAG runs to analyze (default:\n10)."
- Changed
dag_task_duration2 fields changed- added
Input schema / properties / dag_id / descriptionAdded value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name." - added
Input schema / properties / dag_run_id / descriptionAdded value: +"DAG run identifier; omitted or empty selects the\nlatest run."
- Changed
delete_connection1 field changed- added
Input schema / properties / connection_id / descriptionAdded value: +"Exact Airflow connection identifier."
- Changed
get_config_section1 field changed- added
Input schema / properties / section_name / descriptionAdded value: +"Exact Airflow configuration section name, such as\ncore."
- Changed
get_connection1 field changed- added
Input schema / properties / connection_id / descriptionAdded value: +"Exact Airflow connection identifier."
- Changed
get_dag1 field changed- added
Input schema / properties / dag_id / descriptionAdded value: +"The DAG ID to get details for"
- Changed
get_dags_detailed_batch7 fields changed- added
Input schema / properties / fetch_all / descriptionAdded value: +"Fetch every DAG page; ignores limit and offset when\nTrue. Default: False." - added
Input schema / properties / id_contains / descriptionAdded value: +"Optional substring to match against DAG\nidentifiers. Default: None." - added
Input schema / properties / is_active / descriptionAdded value: +"Optional active-status filter; None includes both\nstatuses. Default: None." - added
Input schema / properties / is_paused / descriptionAdded value: +"Optional paused-status filter; None includes both\nstatuses. Default: None." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of records to request per page. Default:\n100." - added
Input schema / properties / name_contains / descriptionAdded value: +"Optional substring to match against DAG display\nnames. Default: None." - added
Input schema / properties / offset / descriptionAdded value: +"Number of records to skip for pagination. Default: 0."
- Changed
get_dataset1 field changed- added
Input schema / properties / dataset_uri / descriptionAdded value: +"Dataset URI, such as s3://bucket/path; API v1 only."
- Changed
get_dataset_events3 fields changed- added
Input schema / properties / dataset_uri / descriptionAdded value: +"Dataset URI, such as s3://bucket/path; API v1 only." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of records to request per page. Default:\n20." - added
Input schema / properties / offset / descriptionAdded value: +"Number of records to skip for pagination. Default: 0."
- Changed
get_event_log1 field changed- added
Input schema / properties / event_log_id / descriptionAdded value: +"Numeric identifier of the event log entry."
- Changed
get_import_error1 field changed- added
Input schema / properties / import_error_id / descriptionAdded value: +"Numeric identifier of the DAG import error."
- Changed
get_pool1 field changed- added
Input schema / properties / pool_name / descriptionAdded value: +"Exact Airflow pool name, such as default_pool."
- Changed
get_prompt_template2 fields changed- added
Input schema / properties / mode / descriptionAdded value: +"Optional mode (summary/detailed) to control response verbosity" - added
Input schema / properties / section / descriptionAdded value: +"Optional section name to get specific part of template"
- Changed
get_provider1 field changed- added
Input schema / properties / provider_name / descriptionAdded value: +"Exact provider package name, such as apache-\nairflow-providers-http."
- Changed
get_task_instance_details3 fields changed- added
Input schema / properties / dag_id / descriptionAdded value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name." - added
Input schema / properties / dag_run_id / descriptionAdded value: +"Exact DAG run identifier for the selected DAG." - added
Input schema / properties / task_id / descriptionAdded value: +"Exact task identifier within the selected DAG."
- Changed
get_task_instance_extra_links3 fields changed- added
Input schema / properties / dag_id / descriptionAdded value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name." - added
Input schema / properties / dag_run_id / descriptionAdded value: +"Exact DAG run identifier for the selected DAG." - added
Input schema / properties / task_id / descriptionAdded value: +"Exact task identifier within the selected DAG."
- Changed
get_task_instance_logs4 fields changed- added
Input schema / properties / dag_id / descriptionAdded value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name." - added
Input schema / properties / dag_run_id / descriptionAdded value: +"Exact DAG run identifier for the selected DAG." - added
Input schema / properties / task_id / descriptionAdded value: +"Exact task identifier within the selected DAG." - added
Input schema / properties / try_number / descriptionAdded value: +"Task attempt number whose logs to retrieve (default:\n1). Default: 1."
- Changed
get_user1 field changed- added
Input schema / properties / username / descriptionAdded value: +"Exact Airflow username (API v1 only)."
- Changed
get_variable1 field changed- added
Input schema / properties / variable_key / descriptionAdded value: +"Exact key of the Airflow variable."
- Changed
get_xcom_entry4 fields changed- added
Input schema / properties / dag_id / descriptionAdded value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name." - added
Input schema / properties / dag_run_id / descriptionAdded value: +"Exact DAG run identifier for the selected DAG." - added
Input schema / properties / task_id / descriptionAdded value: +"Exact task identifier within the selected DAG." - added
Input schema / properties / xcom_key / descriptionAdded value: +"Exact XCom key for the selected task instance."
- Changed
list_connections2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of records to request per page. Default:\n20." - added
Input schema / properties / offset / descriptionAdded value: +"Number of records to skip for pagination. Default: 0."
- Changed
list_dags5 fields changed- added
Input schema / properties / fetch_all / descriptionAdded value: +"If True, fetches all DAGs regardless of limit/offset" - added
Input schema / properties / id_contains / descriptionAdded value: +"Filter DAGs by ID containing this string" - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of DAGs to return (default: 20)" - added
Input schema / properties / name_contains / descriptionAdded value: +"Filter DAGs by display name containing this string" - added
Input schema / properties / offset / descriptionAdded value: +"Number of DAGs to skip for pagination (default: 0)"
- Changed
list_dataset_events4 fields changed- added
Input schema / properties / dataset_uri / descriptionAdded value: +"Dataset URI, such as s3://bucket/path; API v1 only.\nDefault: None." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of records to request per page. Default:\n20." - added
Input schema / properties / offset / descriptionAdded value: +"Number of records to skip for pagination. Default: 0." - added
Input schema / properties / source_dag_id / descriptionAdded value: +"Optional identifier of the DAG that produced the\nevents. Default: None."
- Changed
list_datasets3 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of records to request per page. Default:\n20." - added
Input schema / properties / offset / descriptionAdded value: +"Number of records to skip for pagination. Default: 0." - added
Input schema / properties / uri_pattern / descriptionAdded value: +"Optional dataset URI pattern passed to the API (v1\nonly). Default: None."
- Changed
list_event_logs3 fields changed- added
Input schema / properties / dag_id / descriptionAdded value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name. Default: None." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of records to request per page. Default:\n20." - added
Input schema / properties / offset / descriptionAdded value: +"Number of records to skip for pagination. Default: 0."
- Changed
list_import_errors2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of records to request per page. Default:\n20." - added
Input schema / properties / offset / descriptionAdded value: +"Number of records to skip for pagination. Default: 0."
- Changed
list_pools2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of records to request per page. Default:\n20." - added
Input schema / properties / offset / descriptionAdded value: +"Number of records to skip for pagination. Default: 0."
- Changed
list_roles2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of records to request per page. Default:\n20." - added
Input schema / properties / offset / descriptionAdded value: +"Number of records to skip for pagination. Default: 0."
- Changed
list_task_instances_all15 fields changed- added
Input schema / properties / dag_id / descriptionAdded value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name. Default: None." - added
Input schema / properties / dag_run_id / descriptionAdded value: +"Exact DAG run identifier for the selected DAG.\nDefault: None." - added
Input schema / properties / duration_gte / descriptionAdded value: +"Optional minimum task duration in seconds.\nDefault: None." - added
Input schema / properties / duration_lte / descriptionAdded value: +"Optional maximum task duration in seconds.\nDefault: None." - added
Input schema / properties / end_date_gte / descriptionAdded value: +"Optional inclusive task end time lower bound, in\nISO 8601 format. Default: None." - added
Input schema / properties / end_date_lte / descriptionAdded value: +"Optional inclusive task end time upper bound, in\nISO 8601 format. Default: None." - added
Input schema / properties / execution_date_gte / descriptionAdded value: +"Optional inclusive task execution time lower\nbound, in ISO 8601 format. Default: None." - added
Input schema / properties / execution_date_lte / descriptionAdded value: +"Optional inclusive task execution time upper\nbound, in ISO 8601 format. Default: None." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of records to request per page. Default:\n100." - added
Input schema / properties / offset / descriptionAdded value: +"Number of records to skip for pagination. Default: 0." - added
Input schema / properties / pool / descriptionAdded value: +"Optional list of Airflow pool names to filter task\ninstances. Default: None." - added
Input schema / properties / start_date_gte / descriptionAdded value: +"Optional inclusive task start time lower bound,\nin ISO 8601 format. Default: None." - added
Input schema / properties / start_date_lte / descriptionAdded value: +"Optional inclusive task start time upper bound,\nin ISO 8601 format. Default: None." - added
Input schema / properties / state / descriptionAdded value: +"Optional list of task states, such as [\"failed\",\n\"running\"]. Default: None." - added
Input schema / properties / task_id / descriptionAdded value: +"Exact task identifier within the selected DAG. Default:\nNone."
- Changed
list_task_instances_batch5 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of records to request per page. Default:\n100." - added
Input schema / properties / offset / descriptionAdded value: +"Number of records to skip for pagination. Default: 0." - added
Input schema / properties / start_date_gte / descriptionAdded value: +"Optional inclusive task start time lower bound,\nin ISO 8601 format. Default: None." - added
Input schema / properties / start_date_lte / descriptionAdded value: +"Optional inclusive task start time upper bound,\nin ISO 8601 format. Default: None." - added
Input schema / properties / state / descriptionAdded value: +"Optional list of task states, such as [\"failed\",\n\"running\"]. Default: None."
- Changed
list_tasks1 field changed- added
Input schema / properties / dag_id / descriptionAdded value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
- Changed
list_users2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of records to request per page. Default:\n20." - added
Input schema / properties / offset / descriptionAdded value: +"Number of records to skip for pagination. Default: 0."
- Changed
list_variables2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of records to request per page. Default:\n20." - added
Input schema / properties / offset / descriptionAdded value: +"Number of records to skip for pagination. Default: 0."
- Changed
list_xcom_entries5 fields changed- added
Input schema / properties / dag_id / descriptionAdded value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name." - added
Input schema / properties / dag_run_id / descriptionAdded value: +"Exact DAG run identifier for the selected DAG." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of records to request per page. Default:\n20." - added
Input schema / properties / offset / descriptionAdded value: +"Number of records to skip for pagination. Default: 0." - added
Input schema / properties / task_id / descriptionAdded value: +"Exact task identifier within the selected DAG."
- Changed
pause_dag1 field changed- added
Input schema / properties / dag_id / descriptionAdded value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
- Changed
search_config_options1 field changed- added
Input schema / properties / search_term / descriptionAdded value: +"Case-insensitive substring to find in option names\nor values."
- Changed
trigger_dag1 field changed- added
Input schema / properties / dag_id / descriptionAdded value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
- Changed
unpause_dag1 field changed- added
Input schema / properties / dag_id / descriptionAdded value: +"Exact DAG identifier, as returned by list_dags; not its\ndisplay name."
- Changed
update_connection2 fields changed- added
Input schema / properties / connection_data / descriptionAdded 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." - added
Input schema / properties / connection_id / descriptionAdded value: +"Exact Airflow connection identifier."
54 tool updates
v3.7.2- Added
all_dag_event_summary - Added
all_dag_import_summary - Added
create_connection - Added
dag_calendar - Added
dag_code - Added
dag_graph - Added
dag_run_duration - Added
dag_task_duration - Added
delete_connection - Added
failed_dags - Added
get_config - Added
get_config_section - Added
get_connection - Added
get_dag - Added
get_dags_detailed_batch - Added
get_dataset - Added
get_dataset_events - Added
get_event_log - Added
get_health - Added
get_import_error - Added
get_pool - Added
get_prompt_template - Added
get_provider - Added
get_task_instance_details - Added
get_task_instance_extra_links - Added
get_task_instance_logs - Added
get_user - Added
get_variable - Added
get_version - Added
get_xcom_entry - Added
list_config_sections - Added
list_connections - Added
list_dags - Added
list_dataset_events - Added
list_datasets - Added
list_event_logs - Added
list_import_errors - Added
list_permissions - Added
list_plugins - Added
list_pools - Added
list_providers - Added
list_roles - Added
list_task_instances_all - Added
list_task_instances_batch - Added
list_tasks - Added
list_users - Added
list_variables - Added
list_xcom_entries - Added
pause_dag - Added
running_dags - Added
search_config_options - Added
trigger_dag - Added
unpause_dag - Added
update_connection
54 tool updates
v3.6.5- Removed
all_dag_event_summary - Removed
all_dag_import_summary - Removed
create_connection - Removed
dag_calendar - Removed
dag_code - Removed
dag_graph - Removed
dag_run_duration - Removed
dag_task_duration - Removed
delete_connection - Removed
failed_dags - Removed
get_config - Removed
get_config_section - Removed
get_connection - Removed
get_dag - Removed
get_dags_detailed_batch - Removed
get_dataset - Removed
get_dataset_events - Removed
get_event_log - Removed
get_health - Removed
get_import_error - Removed
get_pool - Removed
get_prompt_template - Removed
get_provider - Removed
get_task_instance_details - Removed
get_task_instance_extra_links - Removed
get_task_instance_logs - Removed
get_user - Removed
get_variable - Removed
get_version - Removed
get_xcom_entry - Removed
list_config_sections - Removed
list_connections - Removed
list_dags - Removed
list_dataset_events - Removed
list_datasets - Removed
list_event_logs - Removed
list_import_errors - Removed
list_permissions - Removed
list_plugins - Removed
list_pools - Removed
list_providers - Removed
list_roles - Removed
list_task_instances_all - Removed
list_task_instances_batch - Removed
list_tasks - Removed
list_users - Removed
list_variables - Removed
list_xcom_entries - Removed
pause_dag - Removed
running_dags - Removed
search_config_options - Removed
trigger_dag - Removed
unpause_dag - Removed
update_connection
54 tool updates
v3.6.6- Changed
all_dag_event_summary1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
all_dag_import_summary1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
create_connection2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / connection_data / titleRemoved value: -"Connection Data"
- Changed
dag_calendar4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id" - removed
Input schema / properties / end_date / titleRemoved value: -"End Date" - removed
Input schema / properties / start_date / titleRemoved value: -"Start Date"
- Changed
dag_code2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id"
- Changed
dag_graph2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id"
- Changed
dag_run_duration3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id" - removed
Input schema / properties / limit / titleRemoved value: -"Limit"
- Changed
dag_task_duration3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id" - removed
Input schema / properties / dag_run_id / titleRemoved value: -"Dag Run Id"
- Changed
delete_connection2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / connection_id / titleRemoved value: -"Connection Id"
- Changed
failed_dags1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_config1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_config_section2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / section_name / titleRemoved value: -"Section Name"
- Changed
get_connection2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / connection_id / titleRemoved value: -"Connection Id"
- Changed
get_dag2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id"
- Changed
get_dags_detailed_batch8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / fetch_all / titleRemoved value: -"Fetch All" - removed
Input schema / properties / id_contains / titleRemoved value: -"Id Contains" - removed
Input schema / properties / is_active / titleRemoved value: -"Is Active" - removed
Input schema / properties / is_paused / titleRemoved value: -"Is Paused" - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / name_contains / titleRemoved value: -"Name Contains" - removed
Input schema / properties / offset / titleRemoved value: -"Offset"
- Changed
get_dataset2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dataset_uri / titleRemoved value: -"Dataset Uri"
- Changed
get_dataset_events4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dataset_uri / titleRemoved value: -"Dataset Uri" - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / offset / titleRemoved value: -"Offset"
- Changed
get_event_log2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / event_log_id / titleRemoved value: -"Event Log Id"
- Changed
get_health1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_import_error2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / import_error_id / titleRemoved value: -"Import Error Id"
- Changed
get_pool2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / pool_name / titleRemoved value: -"Pool Name"
- Changed
get_prompt_template5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / mode / titleRemoved value: -"Mode" - removed
Input schema / properties / section / titleRemoved value: -"Section" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"_WrappedResult"
- Changed
get_provider2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / provider_name / titleRemoved value: -"Provider Name"
- Changed
get_task_instance_details4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id" - removed
Input schema / properties / dag_run_id / titleRemoved value: -"Dag Run Id" - removed
Input schema / properties / task_id / titleRemoved value: -"Task Id"
- Changed
get_task_instance_extra_links4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id" - removed
Input schema / properties / dag_run_id / titleRemoved value: -"Dag Run Id" - removed
Input schema / properties / task_id / titleRemoved value: -"Task Id"
- Changed
get_task_instance_logs5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id" - removed
Input schema / properties / dag_run_id / titleRemoved value: -"Dag Run Id" - removed
Input schema / properties / task_id / titleRemoved value: -"Task Id" - removed
Input schema / properties / try_number / titleRemoved value: -"Try Number"
- Changed
get_user2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / username / titleRemoved value: -"Username"
- Changed
get_variable2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / variable_key / titleRemoved value: -"Variable Key"
- Changed
get_version1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_xcom_entry5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id" - removed
Input schema / properties / dag_run_id / titleRemoved value: -"Dag Run Id" - removed
Input schema / properties / task_id / titleRemoved value: -"Task Id" - removed
Input schema / properties / xcom_key / titleRemoved value: -"Xcom Key"
- Changed
list_config_sections1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_connections3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / offset / titleRemoved value: -"Offset"
- Changed
list_dags6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / fetch_all / titleRemoved value: -"Fetch All" - removed
Input schema / properties / id_contains / titleRemoved value: -"Id Contains" - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / name_contains / titleRemoved value: -"Name Contains" - removed
Input schema / properties / offset / titleRemoved value: -"Offset"
- Changed
list_dataset_events5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dataset_uri / titleRemoved value: -"Dataset Uri" - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / offset / titleRemoved value: -"Offset" - removed
Input schema / properties / source_dag_id / titleRemoved value: -"Source Dag Id"
- Changed
list_datasets4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / offset / titleRemoved value: -"Offset" - removed
Input schema / properties / uri_pattern / titleRemoved value: -"Uri Pattern"
- Changed
list_event_logs4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id" - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / offset / titleRemoved value: -"Offset"
- Changed
list_import_errors3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / offset / titleRemoved value: -"Offset"
- Changed
list_permissions1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_plugins1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_pools3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / offset / titleRemoved value: -"Offset"
- Changed
list_providers1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
list_roles3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / offset / titleRemoved value: -"Offset"
- Changed
list_task_instances_all16 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id" - removed
Input schema / properties / dag_run_id / titleRemoved value: -"Dag Run Id" - removed
Input schema / properties / duration_gte / titleRemoved value: -"Duration Gte" - removed
Input schema / properties / duration_lte / titleRemoved value: -"Duration Lte" - removed
Input schema / properties / end_date_gte / titleRemoved value: -"End Date Gte" - removed
Input schema / properties / end_date_lte / titleRemoved value: -"End Date Lte" - removed
Input schema / properties / execution_date_gte / titleRemoved value: -"Execution Date Gte" - removed
Input schema / properties / execution_date_lte / titleRemoved value: -"Execution Date Lte" - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / offset / titleRemoved value: -"Offset" - removed
Input schema / properties / pool / titleRemoved value: -"Pool" - removed
Input schema / properties / start_date_gte / titleRemoved value: -"Start Date Gte" - removed
Input schema / properties / start_date_lte / titleRemoved value: -"Start Date Lte" - removed
Input schema / properties / state / titleRemoved value: -"State" - removed
Input schema / properties / task_id / titleRemoved value: -"Task Id"
- Changed
list_task_instances_batch6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / offset / titleRemoved value: -"Offset" - removed
Input schema / properties / start_date_gte / titleRemoved value: -"Start Date Gte" - removed
Input schema / properties / start_date_lte / titleRemoved value: -"Start Date Lte" - removed
Input schema / properties / state / titleRemoved value: -"State"
- Changed
list_tasks2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id"
- Changed
list_users3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / offset / titleRemoved value: -"Offset"
- Changed
list_variables3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / offset / titleRemoved value: -"Offset"
- Changed
list_xcom_entries6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id" - removed
Input schema / properties / dag_run_id / titleRemoved value: -"Dag Run Id" - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / offset / titleRemoved value: -"Offset" - removed
Input schema / properties / task_id / titleRemoved value: -"Task Id"
- Changed
pause_dag2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id"
- Changed
running_dags1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
search_config_options2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / search_term / titleRemoved value: -"Search Term"
- Changed
trigger_dag2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id"
- Changed
unpause_dag2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / dag_id / titleRemoved value: -"Dag Id"
- Changed
update_connection3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / connection_data / titleRemoved value: -"Connection Data" - removed
Input schema / properties / connection_id / titleRemoved value: -"Connection Id"
29 tool updates
v1.0.0- Added
create_connection - Changed
dag_calendar4 fields changed- removed
Input schema / properties / end_date / defaultRemoved value: -null - removed
Input schema / properties / limitRemoved value: -{ - "default": 20, - "title": "Limit", - "type": "integer" -} - removed
Input schema / properties / start_date / defaultRemoved value: -null - changed
Input schema / requiredPrevious value: -[ - "dag_id" -]New value: +[ + "dag_id", + "start_date", + "end_date" +]
- Changed
dag_run_duration1 field changed- changed
Input schema / properties / limit / defaultPrevious value: -50New value: +10
- Changed
dag_task_duration2 fields changed- added
Input schema / properties / dag_run_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Dag Run Id" +} - removed
Input schema / properties / run_idRemoved value: -{ - "default": null, - "title": "Run Id", - "type": "string" -}
- Added
delete_connection - Added
get_config - Added
get_config_section - Added
get_connection - Added
get_dataset - Added
get_dataset_events - Added
get_provider - Changed
get_task_instance_logs2 fields changed- removed
Input schema / properties / full_contentRemoved value: -{ - "default": false, - "title": "Full Content", - "type": "boolean" -} - removed
Input schema / properties / tokenRemoved value: -{ - "default": null, - "title": "Token", - "type": "string" -}
- Added
get_user - Changed
get_xcom_entry1 field changed- removed
Input schema / properties / map_indexRemoved value: -{ - "default": -1, - "title": "Map Index", - "type": "integer" -}
- Added
list_config_sections - Added
list_connections - Added
list_dataset_events - Added
list_datasets - Changed
list_event_logs4 fields changed- added
Input schema / properties / dag_id / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / dag_id / typeRemoved value: -"string" - removed
Input schema / properties / run_idRemoved value: -{ - "default": null, - "title": "Run Id", - "type": "string" -} - removed
Input schema / properties / task_idRemoved value: -{ - "default": null, - "title": "Task Id", - "type": "string" -}
- Added
list_permissions - Added
list_plugins - Added
list_providers - Added
list_roles - Changed
list_task_instances_all27 fields changed- added
Input schema / properties / dag_id / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / dag_id / typeRemoved value: -"string" - added
Input schema / properties / dag_run_id / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / dag_run_id / typeRemoved value: -"string" - added
Input schema / properties / duration_gte / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Input schema / properties / duration_gte / typeRemoved value: -"number" - added
Input schema / properties / duration_lte / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Input schema / properties / duration_lte / typeRemoved value: -"number" - added
Input schema / properties / end_date_gte / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / end_date_gte / typeRemoved value: -"string" - added
Input schema / properties / end_date_lte / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / end_date_lte / typeRemoved value: -"string" - added
Input schema / properties / execution_date_gte / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / execution_date_gte / typeRemoved value: -"string" - added
Input schema / properties / execution_date_lte / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / execution_date_lte / typeRemoved value: -"string" - changed
Input schema / properties / limit / defaultPrevious value: -20New value: +100 - added
Input schema / properties / pool / anyOfAdded value: +[ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - removed
Input schema / properties / pool / typeRemoved value: -"string" - removed
Input schema / properties / queueRemoved value: -{ - "default": null, - "title": "Queue", - "type": "string" -} - added
Input schema / properties / start_date_gte / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / start_date_gte / typeRemoved value: -"string" - added
Input schema / properties / start_date_lte / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / start_date_lte / typeRemoved value: -"string" - added
Input schema / properties / state / anyOfAdded value: +[ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - removed
Input schema / properties / state / typeRemoved value: -"string" - added
Input schema / properties / task_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Task Id" +}
- Changed
list_task_instances_batch20 fields changed- removed
Input schema / properties / dag_idsRemoved value: -{ - "default": null, - "items": { - "type": "string" - }, - "title": "Dag Ids", - "type": "array" -} - removed
Input schema / properties / dag_run_idsRemoved value: -{ - "default": null, - "items": { - "type": "string" - }, - "title": "Dag Run Ids", - "type": "array" -} - removed
Input schema / properties / duration_gteRemoved value: -{ - "default": null, - "title": "Duration Gte", - "type": "number" -} - removed
Input schema / properties / duration_lteRemoved value: -{ - "default": null, - "title": "Duration Lte", - "type": "number" -} - removed
Input schema / properties / end_date_gteRemoved value: -{ - "default": null, - "title": "End Date Gte", - "type": "string" -} - removed
Input schema / properties / end_date_lteRemoved value: -{ - "default": null, - "title": "End Date Lte", - "type": "string" -} - removed
Input schema / properties / execution_date_gteRemoved value: -{ - "default": null, - "title": "Execution Date Gte", - "type": "string" -} - removed
Input schema / properties / execution_date_lteRemoved value: -{ - "default": null, - "title": "Execution Date Lte", - "type": "string" -} - added
Input schema / properties / limitAdded value: +{ + "default": 100, + "title": "Limit", + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "title": "Offset", + "type": "integer" +} - removed
Input schema / properties / poolRemoved value: -{ - "default": null, - "items": { - "type": "string" - }, - "title": "Pool", - "type": "array" -} - removed
Input schema / properties / queueRemoved value: -{ - "default": null, - "items": { - "type": "string" - }, - "title": "Queue", - "type": "array" -} - added
Input schema / properties / start_date_gte / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / start_date_gte / typeRemoved value: -"string" - added
Input schema / properties / start_date_lte / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / start_date_lte / typeRemoved value: -"string" - added
Input schema / properties / state / anyOfAdded value: +[ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - removed
Input schema / properties / state / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / state / typeRemoved value: -"array" - removed
Input schema / properties / task_idsRemoved value: -{ - "default": null, - "items": { - "type": "string" - }, - "title": "Task Ids", - "type": "array" -}
- Added
list_users - Changed
list_variables1 field changed- removed
Input schema / properties / order_byRemoved value: -{ - "default": "key", - "title": "Order By", - "type": "string" -}
- Added
search_config_options - Added
update_connection
34 tool updates
- First observed
all_dag_event_summary - First observed
all_dag_import_summary - First observed
dag_calendar - First observed
dag_code - First observed
dag_graph - First observed
dag_run_duration - First observed
dag_task_duration - First observed
failed_dags - First observed
get_dag - First observed
get_dags_detailed_batch - First observed
get_event_log - First observed
get_health - First observed
get_import_error - First observed
get_pool - First observed
get_prompt_template - First observed
get_task_instance_details - First observed
get_task_instance_extra_links - First observed
get_task_instance_logs - First observed
get_variable - First observed
get_version - First observed
get_xcom_entry - First observed
list_dags - First observed
list_event_logs - First observed
list_import_errors - First observed
list_pools - First observed
list_task_instances_all - First observed
list_task_instances_batch - First observed
list_tasks - First observed
list_variables - First observed
list_xcom_entries - First observed
pause_dag - First observed
running_dags - First observed
trigger_dag - First observed
unpause_dag
TDQS
Scored across 54 tools
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.
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.
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.
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
Related MCP Connectors
Query your warehouse or a CSV with Claude/ChatGPT over MCP, governed by table-level ACL + audit.
Text-to-SQL MCP server: read-only queries on PostgreSQL, MySQL and SQL Server with your real schema
MCP observability. Query live traffic, errors, duration, and alerts from your AI agent.
Related MCP Servers
AlicenseAqualityFmaintenanceAn 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.3113Apache 2.0- AlicenseAqualityBmaintenanceMCP server exposing Apache Airflow REST API operations as tools โ list DAGs, inspect runs and task instances, trigger DAG runs, and check failed DAGs and scheduler health72MIT
- AlicenseAqualityCmaintenanceAn 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.101MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server for controlling Apache Airflow 3 via its REST API, enabling operations like DAG management, task monitoring, and more through natural language.MIT









