astro-airflow-mcp
OfficialProvides comprehensive access to Apache Airflow's REST API, enabling capabilities such as DAG management, task monitoring, log retrieval, and system health diagnostics.
Click on "Install 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., "@astro-airflow-mcpdiagnose why the production_etl DAG failed and show the logs"
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.
This project has been relocated to theAstronomer agents monorepo.
Airflow MCP Server
A Model Context Protocol (MCP) server for Apache Airflow that provides AI assistants with access to Airflow's REST API. Built with FastMCP.
Quickstart
IDEs
Add to your MCP settings (Cursor: ~/.cursor/mcp.json, VS Code: .vscode/mcp.json):
{
"mcpServers": {
"airflow": {
"command": "uvx",
"args": ["astro-airflow-mcp", "--transport", "stdio"]
}
}
}CLI Tools
claude mcp add airflow -- uvx astro-airflow-mcp --transport stdiogemini mcp add airflow -- uvx astro-airflow-mcp --transport stdiocodex mcp add airflow -- uvx astro-airflow-mcp --transport stdioDesktop Apps
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"airflow": {
"command": "uvx",
"args": ["astro-airflow-mcp", "--transport", "stdio"]
}
}
}Other MCP Clients
Add to your MCP configuration file:
{
"mcpServers": {
"airflow": {
"command": "uvx",
"args": ["astro-airflow-mcp", "--transport", "stdio"]
}
}
}Or connect to a running HTTP server: "url": "http://localhost:8000/mcp"
Note: No installation required -
uvxruns directly from PyPI. The--transport stdioflag is required because the server defaults to HTTP mode.
Configuration
By default, the server connects to http://localhost:8080 (Astro CLI default). Set environment variables for custom Airflow instances:
Variable | Description |
| Airflow webserver URL |
| Username (Airflow 3.x uses OAuth2 token exchange) |
| Password |
| Bearer token (alternative to username/password) |
Example with auth (Claude Code):
claude mcp add airflow -e AIRFLOW_API_URL=https://your-airflow.example.com -e AIRFLOW_USERNAME=admin -e AIRFLOW_PASSWORD=admin -- uvx astro-airflow-mcp --transport stdioRelated MCP server: Apache Airflow MCP Server
Features
Airflow 2.x and 3.x Support: Automatic version detection with adapter pattern
MCP Tools for accessing Airflow data:
DAG management (list, get details, get source code, stats, warnings, import errors, trigger, pause/unpause)
Task management (list, get details, get task instances, get logs)
Pool management (list, get details)
Variable management (list, get specific variables)
Connection management (list connections with credentials excluded)
Asset/Dataset management (unified naming across versions, data lineage)
Plugin and provider information
Configuration and version details
Consolidated Tools for agent workflows:
explore_dag: Get comprehensive DAG information in one calldiagnose_dag_run: Debug failed DAG runs with task instance detailsget_system_health: System overview with health, errors, and warnings
MCP Resources: Static Airflow info exposed as resources (version, providers, plugins, config)
MCP Prompts: Guided workflows for common tasks (troubleshooting, health checks, onboarding)
Dual deployment modes:
Standalone server: Run as an independent MCP server
Airflow plugin: Integrate directly into Airflow 3.x webserver
Flexible Authentication:
Bearer token (Airflow 2.x and 3.x)
Username/password with automatic OAuth2 token exchange (Airflow 3.x)
Basic auth (Airflow 2.x)
Available Tools
Consolidated Tools (Agent-Optimized)
Tool | Description |
| Get comprehensive DAG info: metadata, tasks, recent runs, source code |
| Debug a DAG run: run details, failed task instances, logs |
| System overview: health status, import errors, warnings, DAG stats |
Core Tools
Tool | Description |
| Get all DAGs and their metadata |
| Get detailed info about a specific DAG |
| Get the source code of a DAG |
| Get DAG run statistics (Airflow 3.x only) |
| Get DAG import warnings |
| Get import errors from DAG files that failed to parse |
| Get DAG run history |
| Get specific DAG run details |
| Trigger a new DAG run (start a workflow execution) |
| Pause a DAG to prevent new scheduled runs |
| Unpause a DAG to resume scheduled runs |
| Get all tasks in a DAG |
| Get details about a specific task |
| Get task instance execution details |
| Get logs for a specific task instance execution |
| Get all resource pools |
| Get details about a specific pool |
| Get all Airflow variables |
| Get a specific variable by key |
| Get all connections (credentials excluded for security) |
| Get assets/datasets (unified naming across versions) |
| Get installed Airflow plugins |
| Get installed provider packages |
| Get Airflow configuration |
| Get Airflow version information |
MCP Resources
Resource URI | Description |
| Airflow version information |
| Installed provider packages |
| Installed Airflow plugins |
| Airflow configuration |
MCP Prompts
Prompt | Description |
| Guided workflow for diagnosing DAG failures |
| Morning health check routine |
| Guide for understanding a new DAG |
Advanced Usage
Running as Standalone Server
For HTTP-based integrations or connecting multiple clients to one server:
# Run server (HTTP mode is default)
uvx astro-airflow-mcp --airflow-url https://my-airflow.example.com --username admin --password adminConnect MCP clients to: http://localhost:8000/mcp
Airflow Plugin Mode
Install into your Airflow 3.x environment to expose MCP at http://your-airflow:8080/mcp/v1:
# Add to your Astro project
echo astro-airflow-mcp >> requirements.txtCLI Options
Flag | Environment Variable | Default | Description |
|
|
| Transport mode ( |
|
|
| Host to bind to (HTTP mode only) |
|
|
| Port to bind to (HTTP mode only) |
|
| Auto-discovered or | Airflow webserver URL |
|
|
| Astro project directory for auto-discovering Airflow URL from |
|
|
| Bearer token for authentication |
|
|
| Username for authentication (Airflow 3.x uses OAuth2 token exchange) |
|
|
| Password for authentication |
Architecture
The server is built using FastMCP with an adapter pattern for Airflow version compatibility:
Core Components
Adapters (
adapters/): Version-specific API implementationsAirflowAdapter(base): Abstract interface for all Airflow API operationsAirflowV2Adapter: Airflow 2.x API (/api/v1) with basic authAirflowV3Adapter: Airflow 3.x API (/api/v2) with OAuth2 token exchange
Version Detection: Automatic detection at startup by probing API endpoints
Models (
models.py): Pydantic models for type-safe API responses
Version Handling Strategy
Major versions (2.x vs 3.x): Adapter pattern with runtime version detection
Minor versions (3.1 vs 3.2): Runtime feature detection with graceful fallbacks
New API parameters: Pass-through
**kwargsfor forward compatibility
Deployment Modes
Standalone: Independent ASGI application with HTTP/SSE transport
Plugin: Mounted into Airflow 3.x FastAPI webserver
Development
# Setup development environment
make install-dev
# Run tests
make test
# Run all checks
make check
# Local testing with Astro CLI
astro dev start # Start Airflow
make run # Run MCP server (connects to localhost:8080)Contributing
Contributions welcome! Please ensure:
All tests pass (
make test)Code passes linting (
make check)prek hooks pass (
make prek)
Available Tools
31 toolsdiagnose_dag_runA
Diagnose issues with a specific DAG run - get run details and failed tasks.
USE THIS TOOL WHEN troubleshooting a failed or problematic DAG run. Returns all the information you need to understand what went wrong.
This is the preferred tool when:
User asks "Why did this DAG run fail?"
User asks "What's wrong with run X?"
You need to investigate task failures in a specific run
Returns combined data:
DAG run metadata (state, start/end times, trigger type)
All task instances for this run with their states
Highlighted failed/upstream_failed tasks with details
Summary of task states
Args: dag_id: The ID of the DAG dag_run_id: The ID of the DAG run (e.g., "manual__2024-01-01T00:00:00+00:00")
Returns: JSON with diagnostic information about the DAG run
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | ||
| dag_run_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the tool returns combined data (metadata, tasks, failures) and is read-only in nature. With no annotations, a clear behavioral description is provided, though it could explicitly state no 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?
Well-structured with clear sections, bullet points, and front-loaded purpose. Every sentence adds value without 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?
Covers all necessary aspects: purpose, usage, parameters, and return values (described). With an output schema present, the description provides sufficient context for an AI agent to use the tool correctly.
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?
Despite 0% schema coverage, the description explains both parameters ('dag_id', 'dag_run_id') with example values and context, compensating well for the missing schema descriptions.
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?
Clearly states the tool diagnoses issues with a specific DAG run, providing run details and failed tasks. Differentiates from sibling tools like 'get_dag_run' by emphasizing combined data and failure highlights.
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?
Explicitly states when to use (troubleshooting failed runs) and provides example user queries. Implicitly indicates alternatives by describing its specialized diagnostic function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explore_dagA
Comprehensive investigation of a DAG - get all relevant info in one call.
USE THIS TOOL WHEN you need to understand a DAG completely. Instead of making multiple calls, this returns everything about a DAG in a single response.
This is the preferred first tool when:
User asks "Tell me about DAG X" or "What is this DAG?"
You need to understand a DAG's structure before diagnosing issues
You want to know the schedule, tasks, and source code together
Returns combined data:
DAG metadata (schedule, owners, tags, paused status)
All tasks with their operators and dependencies
DAG source code
Any import errors or warnings for this DAG
Args: dag_id: The ID of the DAG to explore
Returns: JSON with comprehensive DAG information
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes returned data (metadata, tasks, source code, errors) and states it combines multiple pieces in one call. With no annotations, this provides good transparency, but does not explicitly declare read-only nature.
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?
Well-structured with sections for purpose, usage, args, returns. Slightly verbose in usage section but still 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?
Given one parameter, no annotations, and output schema exists, the description comprehensively covers purpose, usage, parameter, and return data.
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 has 0% description coverage, but description includes 'Args: dag_id: The ID of the DAG to explore', fully clarifying the parameter's purpose.
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 'Comprehensive investigation of a DAG - get all relevant info in one call' with specific verb and resource. It distinguishes from siblings by noting it avoids multiple calls and is the preferred first tool.
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 explicit when-to-use scenarios: when user asks 'Tell me about DAG X' or needs to understand structure before diagnosis. Does not explicitly exclude cases where a more specific tool is better, but implies general context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_airflow_configA
Get Airflow instance configuration and settings.
Use this tool when the user asks about:
"What's the Airflow configuration?" or "Show me Airflow settings"
"What's the executor type?" or "How is Airflow configured?"
"What's the parallelism setting?"
Database connection, logging, or scheduler settings
Finding specific configuration values
Returns all Airflow configuration organized by sections:
[core]: Basic Airflow settings (executor, dags_folder, parallelism)
[database]: Database connection and settings
[webserver]: Web UI configuration (port, workers, auth)
[scheduler]: Scheduler behavior and intervals
[logging]: Log locations and formatting
[api]: REST API configuration
[operators]: Default operator settings
And many more sections...
Each setting includes:
key: Configuration parameter name
value: Current value
source: Where the value came from (default, env var, config file)
Returns: JSON with complete Airflow configuration organized by sections
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes the output structure and that it returns JSON, but does not mention authentication, permissions, or side effects. For a getter, it's adequate but not thorough.
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?
Well-structured with bullet points and sections, front-loaded with purpose. However, the list of example queries is slightly verbose and could be shortened.
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 no parameters and presence of output schema, the description fully explains the output sections and per-setting details, making it complete for the tool's purpose.
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 in input schema, so baseline is 4. Description adds value by detailing the output sections and structure, exceeding the baseline.
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 gets Airflow configuration and settings, listing specific user queries and sections returned. It distinguishes from sibling tools (e.g., get_airflow_version) by focusing on config retrieval.
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?
Explicitly states when to use with example queries, providing clear context. Does not mention when not to use, but given the tool's read-only nature, it's acceptable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_airflow_versionA
Get version information for the Airflow instance.
Use this tool when the user asks about:
"What version of Airflow is running?" or "Show me the Airflow version"
"What's the Airflow version?" or "Which Airflow release is this?"
"What version is installed?" or "Check Airflow version"
"Is this Airflow 2 or 3?" or "What's the version number?"
Returns version information including:
version: The Airflow version string (e.g., "2.8.0", "3.0.0")
git_version: Git commit hash if available
This is useful for:
Determining API compatibility
Checking if features are available in this version
Troubleshooting version-specific issues
Verifying upgrade success
Returns: JSON with Airflow version information
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description discloses the return fields (version, git_version) and explains its practical uses. It does not mention rate limits or permissions, but for a simple read operation with no side effects, the transparency about output and purpose is 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?
The description is verbose due to a long list of example user queries and repeating similar phrases. While structured with sections, it could be more concise without losing clarity. Every sentence adds some value, but some redundancy exists.
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 no parameters and an existing output schema, the description is fully complete: it explains what the tool returns, why it's useful, and when to invoke it. It covers all necessary aspects for an agent to correctly select and use this 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?
The input schema has zero parameters, so the description bears no burden to explain parameters. Instead, it adds value by describing the return structure and use cases, exceeding the baseline of 4 for tools without 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 retrieves 'version information for the Airflow instance' and distinguishes itself from siblings like get_airflow_config and get_system_health. It provides specific examples of user queries that should trigger this tool, making its purpose 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?
The description explicitly lists when to use the tool (e.g., when user asks about Airflow version) and provides context for its utility (API compatibility, feature availability, troubleshooting). It lacks explicit 'when not to use' guidance, but given no overlapping sibling tools for version info, this is less critical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dag_detailsA
Get detailed information about a specific Apache Airflow DAG.
Use this tool when the user asks about:
"Show me details for DAG X" or "What are the details of DAG Y?"
"Tell me about DAG Z" or "Get information for this specific DAG"
"What's the schedule for DAG X?" or "When does this DAG run?"
"Is DAG Y paused?" or "Show me the configuration of DAG Z"
"Who owns this DAG?" or "What are the tags for this workflow?"
Returns complete DAG information including:
dag_id: Unique identifier for the DAG
is_paused: Whether the DAG is currently paused
is_active: Whether the DAG is active
is_subdag: Whether this is a SubDAG
fileloc: File path where the DAG is defined
file_token: Unique token for the DAG file
owners: List of DAG owners
description: Human-readable description of what the DAG does
schedule_interval: Cron expression or timedelta for scheduling
tags: List of tags/labels for categorization
max_active_runs: Maximum number of concurrent runs
max_active_tasks: Maximum number of concurrent tasks
has_task_concurrency_limits: Whether task concurrency limits are set
has_import_errors: Whether the DAG has import errors
next_dagrun: When the next DAG run is scheduled
next_dagrun_create_after: Earliest time for next DAG run creation
Args: dag_id: The ID of the DAG to get details for
Returns: JSON with complete details about the specified DAG
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It does not disclose behavioral traits such as read-only nature, authentication requirements, rate limits, error handling, or potential side effects. Only describes what information is returned, not the behavior.
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 front-loaded with purpose and use cases, but it is somewhat lengthy with a detailed list of return fields. This could be streamlined since an output schema exists, but the structure is logical and easy to scan.
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 a simple getter with one parameter and has an output schema, the description covers usage scenarios, parameter meaning, and return fields adequately. It does not address edge cases or error conditions, but for a straightforward retrieval tool it is sufficiently 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?
The input schema has 0% description coverage and only one parameter dag_id. The description adds a brief but clear explanation: 'dag_id: The ID of the DAG to get details for', which provides necessary context beyond the bare schema definition.
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 explicitly states 'Get detailed information about a specific Apache Airflow DAG' and lists numerous specific user queries, clearly distinguishing it from sibling tools like list_dags (listing all DAGs) or get_dag_run (specific run 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?
Provides a comprehensive list of when to use the tool with example user queries, but does not explicitly mention when not to use it or suggest alternatives. However, the extensive examples make the use context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dag_runA
Get detailed information about a specific DAG run execution.
Use this tool when the user asks about:
"Show me details for DAG run X" or "What's the status of run Y?"
"When did this run start/finish?" or "How long did run Z take?"
"Why did this run fail?" or "Get execution details for run X"
"What was the configuration for this run?" or "Show me run metadata"
"What's the state of DAG run X?" or "Did run Y succeed?"
Returns detailed information about a specific DAG run execution including:
dag_run_id: Unique identifier for this execution
dag_id: Which DAG this run belongs to
state: Current state (running, success, failed, queued, etc.)
execution_date: When this run was scheduled to execute
start_date: When execution actually started
end_date: When execution completed (if finished)
duration: How long the run took (in seconds)
run_type: Type of run (manual, scheduled, backfill, etc.)
conf: Configuration parameters passed to this run
external_trigger: Whether this was triggered externally
data_interval_start: Start of the data interval
data_interval_end: End of the data interval
last_scheduling_decision: Last scheduling decision timestamp
note: Optional note attached to the run
Args: dag_id: The ID of the DAG (e.g., "example_dag") dag_run_id: The ID of the DAG run (e.g., "manual__2024-01-01T00:00:00+00:00")
Returns: JSON with complete details about the specified DAG run
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | ||
| dag_run_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It comprehensively lists all returned fields and states output is JSON. It does not mention error handling, authorization, or read-only nature, but for a read operation this is 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?
The description is structured with sections and bullet points, front-loading the purpose. It is thorough but slightly verbose; could be trimmed without losing 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?
Given the tool's complexity, lack of annotations, and presence of output schema (implied by detailed field list), the description is complete. It covers usage guidance, parameter semantics, and return value details, enabling correct selection among 28 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 coverage is 0%, but the description provides clear meaning and examples for both parameters (dag_id and dag_run_id). It fully compensates for the missing schema descriptions.
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 it gets detailed information about a specific DAG run execution. Use cases and examples distinguish it from siblings like list_dag_runs (list all runs) and diagnose_dag_run (diagnose issues).
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 explicit when-to-use scenarios with example user queries. It implicitly differentiates from alternative tools but does not explicitly state when not to use it or name alternatives directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dag_sourceA
Get the source code for a specific Apache Airflow DAG.
Use this tool when the user asks about:
"Show me the code for DAG X" or "What's the source of DAG Y?"
"How is DAG Z implemented?" or "What does the DAG file look like?"
"Can I see the Python code for this workflow?"
"What tasks are defined in the DAG code?"
Returns the DAG source file contents including:
content: The actual Python source code of the DAG file
file_token: Unique identifier for the source file
Args: dag_id: The ID of the DAG to get source code for
Returns: JSON with DAG source code and metadata
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 correctly identifies this as a read operation (no mention of side effects) and describes the return fields. However, it does not disclose authorization requirements, error handling, or constraints like DAG existence, which would be helpful.
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 somewhat verbose with bullet points and example queries. While helpful, it could be more concise. The front-loading of purpose is good, but the list of user queries takes up space that could be summarized more briefly.
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 output schema exists, the description adequately covers return values (content, file_token). It addresses the parameter and usage examples. With many sibling tools, the context is fairly complete, though it could mention prerequisite conditions like DAG existence.
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?
With 0% schema description coverage, the description fully defines the sole parameter 'dag_id' as 'The ID of the DAG to get source code for'. This adds necessary clarity beyond the schema's type-only definition.
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 'get' and resource 'source code for a specific Apache Airflow DAG'. It provides explicit example queries that distinguish it from siblings like 'get_dag_details' or 'explore_dag'.
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 includes explicit 'when to use' scenarios with concrete user queries, making the tool's purpose clear. It lacks explicit 'when not to use' or alternative tool references, but the examples effectively guide usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dag_statsA
Get statistics about DAG runs (success/failure counts by state).
Use this tool when the user asks about:
"What's the overall health of my DAGs?" or "Show me DAG statistics"
"How many DAG runs succeeded/failed?" or "What's the success rate?"
"Give me a summary of DAG run states"
"How many runs are currently running/queued?"
"Show me stats for specific DAGs"
Returns statistics showing counts of DAG runs grouped by state:
success: Number of successful runs
failed: Number of failed runs
running: Number of currently running runs
queued: Number of queued runs
And other possible states
Args: dag_ids: Optional list of DAG IDs to filter by. If not provided, returns stats for all DAGs.
Returns: JSON with DAG run statistics organized by DAG and state
| Name | Required | Description | Default |
|---|---|---|---|
| dag_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 explains the return format (JSON with counts by state) and the optional filtering. However, it omits details like time range, whether it's real-time or historical, permission requirements, or any rate limits. The description is adequate but not exhaustive, scoring a 3.
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 well-structured: a one-line summary, bullet-pointed use cases, a list of return states, and an Args/Returns section. It is comprehensive yet concise, with every sentence contributing value. No wasted 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?
Given the output schema exists (though not shown) and the tool has only one optional parameter, the description covers purpose, usage, parameter, and return structure comprehensively. It leaves no obvious gaps for agent decision-making, earning a 5.
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?
With schema description coverage at 0%, the description adds significant value by explaining the dag_ids parameter: it's optional, filters to specific DAGs, and defaults to all DAGs. This goes beyond the schema's simple type definition, earning a 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?
The description clearly states it gets statistics about DAG runs, specifying the verb 'Get' and the resource 'DAG runs' (aggregate stats). It effectively distinguishes from sibling tools like get_dag_details (single DAG) and get_dag_run (single run) by focusing on aggregate state counts. The use cases list further clarifies its role.
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 explicitly lists example queries that should trigger this tool (health, success/failure counts, summary, etc.), providing clear context. It does not mention when NOT to use it or name alternatives directly, but the implied scope is clear given the sibling tools, so it's slightly below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_poolA
Get detailed information about a specific resource pool.
Use this tool when the user asks about:
"Show me details for pool X" or "What's the status of pool Y?"
"How many slots are available in pool Z?" or "Is pool X full?"
"What's using pool Y?" or "How many tasks are running in pool X?"
"Get information about the default_pool" or "Show me pool details"
Pools are used to limit parallelism for specific sets of tasks. This returns detailed real-time information about a specific pool's capacity and utilization.
Returns detailed pool information including:
name: Name of the pool
slots: Total number of available slots in the pool
occupied_slots: Number of currently occupied slots (running + queued)
running_slots: Number of slots with currently running tasks
queued_slots: Number of slots with queued tasks waiting to run
open_slots: Number of available slots (slots - occupied_slots)
description: Human-readable description of the pool's purpose
Args: pool_name: The name of the pool to get details for (e.g., "default_pool")
Returns: JSON with complete details about the specified pool
| Name | Required | Description | Default |
|---|---|---|---|
| pool_name | Yes |
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 full burden. It discloses that the tool returns real-time information about capacity and utilization, and lists all return fields. No contradictions noted.
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 well-structured with usage examples and return field definitions. Slightly verbose but front-loaded with purpose and no wasted sentences.
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 an output schema exists, the description explains return values in detail. It covers the parameter, usage scenarios, and output, making it fully complete 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 coverage is 0%, so description compensates. It explains the single parameter 'pool_name' with example 'default_pool', adding meaning beyond the schema's type only.
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 'Get detailed information about a specific resource pool.' with specific verb+resource. It distinguishes from siblings like 'list_pools' by focusing on a single pool's details. Examples of user queries reinforce the purpose.
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 explicit 'when to use' examples mimicking user queries (e.g., 'Show me details for pool X'). It does not explicitly mention when not to use or alternatives, but the context is clear and specific.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_healthA
Get overall Airflow system health - import errors, warnings, and DAG stats.
USE THIS TOOL WHEN you need a quick health check of the Airflow system. Returns a consolidated view of potential issues across the entire system.
This is the preferred tool when:
User asks "Are there any problems with Airflow?"
User asks "Show me the system health" or "Any errors?"
You want to do a morning health check
You're starting an investigation and want to see the big picture
Returns combined data:
Import errors (DAG files that failed to parse)
DAG warnings (deprecations, configuration issues)
DAG statistics (run counts by state) if available
Version information
Returns: JSON with system health overview
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 discloses what data is returned (import errors, warnings, stats) and implies a read-only operation, but does not explicitly state it is non-destructive or idempotent. Lacks details on authentication or rate limits.
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 structured with bullet points and front-loads the purpose. It is somewhat verbose but each sentence adds value. Could be shortened, but it is clear and well-organized.
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 is a simple health check, the description fully covers its behavior and return format. With the presence of an output schema (not shown but indicated), the description provides sufficient context for an agent to use the tool correctly.
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 schema coverage is 100% by default. The description adds value by enumerating the specific data categories returned, which goes beyond the empty schema. A score of 4 is appropriate for providing meaningful return context.
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 function: getting overall Airflow system health, listing specific components (import errors, warnings, DAG stats). The purpose is distinct from sibling tools like list_import_errors or explore_dag, as it provides a consolidated view.
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 explicit usage scenarios: when users ask about problems, for health checks, or starting investigations. It does not explicitly state when not to use it, but the context implies it's for high-level overviews, and alternatives like list_import_errors are more specific.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskA
Get detailed information about a specific task definition in a DAG.
Use this tool when the user asks about:
"Show me details for task X in DAG Y" or "What does task Z do?"
"What operator does task A use?" or "What's the configuration of task B?"
"Tell me about task C" or "Get task definition for D"
"What are the dependencies of task E?" or "Which tasks does F depend on?"
Returns task definition information including:
task_id: Unique identifier for the task
task_display_name: Human-readable display name
owner: Who owns this task
start_date: When this task becomes active
end_date: When this task becomes inactive (if set)
trigger_rule: When this task should run (all_success, one_failed, etc.)
depends_on_past: Whether task depends on previous run's success
wait_for_downstream: Whether to wait for downstream tasks
retries: Number of retry attempts
retry_delay: Time between retries
execution_timeout: Maximum execution time
operator_name: Type of operator (PythonOperator, BashOperator, etc.)
pool: Resource pool assignment
queue: Queue for executor
downstream_task_ids: List of tasks that depend on this task
upstream_task_ids: List of tasks this task depends on
Args: dag_id: The ID of the DAG containing the task task_id: The ID of the task to get details for
Returns: JSON with complete task definition details
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | ||
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It comprehensively lists all return fields (18 attributes) but does not mention error handling or permissions. Still, it transparently describes the tool's read-only behavior and output.
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?
Description is well-structured with a clear purpose statement, usage examples, and a formatted list of return fields. Slightly lengthy but every section adds value; no unnecessary content.
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 (2 params) and absent output schema, the description fully compensates by detailing all return fields. It covers the essential information needed for an agent to invoke and interpret results correctly.
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 0%, so description must compensate. It provides brief explanations for dag_id and task_id ('The ID of the DAG containing the task', 'The ID of the task to get details for') but no additional details like formats, constraints, or examples. This is minimally adequate but not enriching.
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 retrieves detailed information about a specific task definition in a DAG. It distinguishes itself from siblings like get_task_instance and get_task_logs by focusing on task definitions, aiding correct selection.
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 explicit when-to-use guidance with example user queries. Lacks explicit when-not-to-use or alternative sibling names, but the examples sufficiently imply its scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_instanceA
Get detailed information about a specific task instance execution.
Use this tool when the user asks about:
"Show me details for task X in DAG run Y" or "What's the status of task Z?"
"Why did task A fail?" or "When did task B start/finish?"
"What's the duration of task C?" or "Show me task execution details"
"Get logs for task D" or "What operator does task E use?"
Returns detailed task instance information including:
task_id: Name of the task
state: Current state (success, failed, running, queued, etc.)
start_date: When the task started
end_date: When the task finished
duration: How long the task ran
try_number: Which attempt this is
max_tries: Maximum retry attempts
operator: What operator type (PythonOperator, BashOperator, etc.)
executor_config: Executor configuration
pool: Resource pool assignment
Args: dag_id: The ID of the DAG dag_run_id: The ID of the DAG run (e.g., "manual__2024-01-01T00:00:00+00:00") task_id: The ID of the task within the DAG
Returns: JSON with complete task instance details
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | ||
| dag_run_id | Yes | ||
| task_id | Yes |
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 full burden. It comprehensively explains the tool's behavior, listing all return fields and the output format. It implicitly indicates a read-only operation with no 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 description is well-structured: a brief summary, usage examples, returned fields, args, and returns. It is front-loaded with the core purpose and remains concise without unnecessary detail.
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 (3 parameters, no nested objects) and the presence of an output schema (though not provided), the description covers all necessary context, including what the tool returns and how to use it.
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 provides only types and 'required' but no descriptions (0% coverage). The description compensates by explaining each parameter and providing an example for dag_run_id, adding significant semantic value.
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 with specific verb and resource: 'Get detailed information about a specific task instance execution.' It distinguishes from siblings like get_task (task definition) and get_task_logs by focusing on execution 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 provides a bullet list of user queries that map to this tool, offering clear guidance on when to use it. However, it does not explicitly mention when not to use it or compare directly to sibling tools, which would improve clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_logsA
Get logs for a specific task instance execution.
Use this tool when the user asks about:
"Show me the logs for task X" or "Get logs for task Y"
"What did task Z output?" or "Show me task execution logs"
"Why did task A fail?" (to see error messages in logs)
"What happened during task B execution?"
"Show me the stdout/stderr for task C"
"Debug task D" or "Troubleshoot task E"
Returns the actual log output from the task execution, which includes:
Task execution output (stdout/stderr)
Error messages and stack traces (if task failed)
Timing information
Any logged messages from the task code
This is essential for debugging failed tasks or understanding what happened during task execution.
Args: dag_id: The ID of the DAG (e.g., "example_dag") dag_run_id: The ID of the DAG run (e.g., "manual__2024-01-01T00:00:00+00:00") task_id: The ID of the task within the DAG (e.g., "extract_data") try_number: The task try/attempt number, 1-indexed (default: 1). Use higher numbers to get logs from retry attempts. map_index: For mapped tasks, which map index to get logs for. Use -1 for non-mapped tasks (default: -1).
Returns: JSON with the task logs content
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | ||
| dag_run_id | Yes | ||
| task_id | Yes | ||
| try_number | No | ||
| map_index | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 describes the return values (stdout/stderr, errors, timing), giving good behavioral insight. It does not explicitly state no side effects or authorization needs, but for a read-only log tool this is acceptable.
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 well-structured with a clear lead sentence, bulleted usage examples, and an Args list. It is slightly verbose with the example queries, but remains clear and 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?
Given the tool has 5 parameters (3 required) and no annotations, the description covers all necessary aspects: what the tool returns, parameter semantics, and usage context. It does not discuss potential errors or performance, but is complete enough for typical log retrieval.
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 0%, but the description provides detailed, example-rich explanations for all 5 parameters (e.g., try_number: '1-indexed, use higher numbers for retries'). This adds significant value beyond the bare 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 clearly states the tool's verb ('Get logs') and resource ('task instance execution'). It differentiates from siblings like get_task_instance by focusing on logs, and provides user query examples that match the tool's function.
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 explicitly lists when to use the tool with specific user queries (e.g., 'Show me the logs for task X'). It does not state when not to use it or mention alternatives, but the context (sibling tools) and the examples implicitly provide guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_upstream_asset_eventsA
Get asset events that triggered a specific DAG run.
Use this tool when the user asks about:
"What triggered this DAG run?"
"Which asset events caused this run to start?"
"Why did DAG X start running?"
"Show me the upstream triggers for this run"
"What data changes triggered this pipeline run?"
This is useful for understanding causation in data-aware scheduling. When a DAG is scheduled based on asset updates, this tool shows which specific asset events triggered the run.
Returns information including:
dag_id: The DAG that was triggered
dag_run_id: The specific run
triggered_by_events: List of asset events that caused this run
event_count: Number of triggering events
Each event includes:
asset_uri or dataset_uri: The asset that was updated
source_dag_id: The DAG that produced the event
source_run_id: The run that produced the event
timestamp: When the event occurred
Args: dag_id: The ID of the DAG dag_run_id: The ID of the DAG run (e.g., "scheduled__2024-01-01T00:00:00+00:00")
Returns: JSON with the asset events that triggered this DAG run
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | ||
| dag_run_id | Yes |
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 compensates by detailing the return structure (fields like dag_id, triggered_by_events, event_count, etc.) and explains the context of data-aware scheduling. It implies a read-only operation but does not explicitly state idempotency or lack of 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 description is well-structured with bullet points and sections, covering key aspects without being overly verbose. Slightly more concise phrasing could be used, but it remains clear and scannable.
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 (2 params, no nested objects) and presence of an output schema, the description fully addresses purpose, usage, parameters, and return information. It also provides operational context (data-aware scheduling) which enhances understanding.
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?
Input schema has 0% description coverage, but the description provides clear explanations for both required parameters: dag_id and dag_run_id, including an example format for dag_run_id. This adds significant meaning beyond the schema's type definitions.
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 'Get' and the resource 'asset events that triggered a specific DAG run'. It distinguishes this tool from siblings like list_asset_events and get_dag_run by focusing on causation for a specific run.
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 explicit when-to-use guidance with example user queries ('What triggered this DAG run?', 'Why did DAG X start running?'), making it easy for an agent to select this tool for traceability questions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_variableA
Get a specific Airflow variable by key.
Use this tool when the user asks about:
"What's the value of variable X?" or "Show me variable Y"
"Get variable Z" or "What does variable A contain?"
"What's stored in variable B?" or "Look up variable C"
Variables are key-value pairs stored in Airflow's metadata database that can be accessed by DAGs at runtime. They're commonly used for configuration values, API keys, or other settings that need to be shared across DAGs.
Returns variable information including:
key: The variable's key/name
value: The variable's value (may be masked if marked as sensitive)
description: Optional description of the variable's purpose
Args: variable_key: The key/name of the variable to retrieve
Returns: JSON with the variable's key, value, and metadata
| Name | Required | Description | Default |
|---|---|---|---|
| variable_key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes return values including potential masking of sensitive values, and explains that it's a read operation. Lacks mention of any side effects, but none expected.
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?
Well-structured with headings and bullet points, but some explanatory text about variables could be shortened without losing 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?
For a simple getter with one parameter and no annotations, the description is complete, covering purpose, usage, and return format.
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 single parameter 'variable_key' is fully described with its purpose and role, compensating for the 0% schema 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 clearly states 'Get a specific Airflow variable by key' and provides specific example user queries, distinguishing it from list_variables.
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 explicit usage examples and context about when to use, but does not explicitly mention when not to use or alternatives beyond the given examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_asset_eventsA
List asset/dataset events with optional filtering.
Use this tool when the user asks about:
"What asset events were produced by DAG X?"
"Show me dataset events from run Y"
"Debug why downstream DAG wasn't triggered"
"What assets did this pipeline produce?"
"List recent asset update events"
Asset events are produced when a task updates an asset/dataset. These events can trigger downstream DAGs that depend on those assets (data-aware scheduling).
Returns event information including:
uri: The asset that was updated
source_dag_id: The DAG that produced this event
source_run_id: The DAG run that produced this event
source_task_id: The task that produced this event
timestamp: When the event was created
Args: source_dag_id: Filter events by the DAG that produced them source_run_id: Filter events by the DAG run that produced them source_task_id: Filter events by the task that produced them limit: Maximum number of events to return (default: 100)
Returns: JSON with list of asset events
| Name | Required | Description | Default |
|---|---|---|---|
| source_dag_id | No | ||
| source_run_id | No | ||
| source_task_id | No | ||
| limit | No |
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. It explains that events are produced when a task updates an asset/dataset and that they can trigger downstream DAGs. The return fields are listed. However, it does not disclose pagination behavior or any failure modes, which would be a minor improvement.
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 well-structured with sections for purpose, usage, return info, and args. It is slightly verbose but each sentence adds value. Could be tightened by merging the initial statement with the first usage line.
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 4 optional parameters and an output schema (described in words), the description covers all necessary details: purpose, use cases, return fields, and parameter semantics. It is complete for an AI agent to invoke correctly.
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?
Despite 0% schema description coverage, the description explains all four parameters in the 'Args' section with clear meanings (e.g., 'Filter events by the DAG that produced them'). The default for limit is also mentioned (100). This fully compensates for the missing schema descriptions.
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 asset/dataset events with optional filtering. It uses a specific verb-resource combination ('List asset/dataset events') and distinguishes itself from sibling tools by focusing on events from task updates and data-aware scheduling triggers.
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 explicit usage scenarios starting with 'Use this tool when the user asks about:' and lists five concrete queries. This helps the agent understand when to invoke this tool versus others like get_upstream_asset_events or list_dags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_assetsA
Get data assets and datasets tracked by Airflow (data lineage).
Use this tool when the user asks about:
"What datasets exist?" or "List all assets"
"What data does this DAG produce/consume?"
"Show me data dependencies" or "What's the data lineage?"
"Which DAGs use dataset X?"
Data freshness or update events
Assets represent datasets or files that DAGs produce or consume. This enables data-driven scheduling where DAGs wait for data availability.
Returns asset information including:
uri: Unique identifier for the asset (e.g., s3://bucket/path)
id: Internal asset ID
created_at: When this asset was first registered
updated_at: When this asset was last updated
consuming_dags: Which DAGs depend on this asset
producing_tasks: Which tasks create/update this asset
Returns: JSON with list of all assets and their producing/consuming relationships
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description clearly indicates this is a read-only operation with no side effects, and details the returned fields (uri, id, consuming_dags, etc.). It provides sufficient behavioral context beyond the input 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 well-structured with clear sections and bullet points for return fields. It is moderately concise but includes necessary context; no wasted sentences.
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, the description fully explains the tool's purpose and output. The presence of an output schema is complemented by a detailed textual description of return fields, making it complete for this simple 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?
With zero parameters and 100% schema coverage, the description adds meaning by detailing the return structure. Since there are no parameters to document, the baseline 3 is exceeded by the clear output specification.
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 retrieves data assets and datasets tracked by Airflow, providing specific example queries. It distinguishes from related tools like list_asset_events and get_upstream_asset_events by focusing on assets themselves.
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 explicitly lists example user queries to guide usage, such as 'What datasets exist?' and 'Show me data dependencies'. While it does not explicitly exclude alternative tools, the examples cover primary use cases effectively.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_connectionsA
Get connection configurations for external systems (databases, APIs, services).
Use this tool when the user asks about:
"What connections are configured?" or "List all connections"
"How do I connect to database X?"
"What's the connection string for Y?"
"Which databases/services are available?"
Finding connection details by name or type
Connections store credentials and connection info for external systems that DAGs interact with (databases, S3, APIs, etc.).
Returns connection metadata including:
connection_id: Unique name for this connection
conn_type: Type (postgres, mysql, s3, http, etc.)
description: Human-readable description
host: Server hostname or IP
port: Port number
schema: Database schema or path
login: Username (passwords excluded for security)
extra: Additional connection parameters as JSON
IMPORTANT: Passwords are NEVER returned for security reasons.
Returns: JSON with list of all connections (credentials excluded)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It explicitly states that passwords are never returned for security reasons, describes the returned fields, and implies a read-only operation. This is thorough and honest.
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 well-structured with bullet points and sections, front-loading the purpose and usage. It is slightly verbose but every sentence adds value. Slight improvement could be made by shortening the example queries list.
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 tool with no parameters and an output schema (though not provided in schema field, the description compensates), the description covers purpose, usage, return fields, and a security note. It is complete enough for an AI agent to use correctly.
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 schema coverage is 100% and the description adds no parameter-specific detail. However, the description adds meaning by detailing the return fields and behavior (passwords excluded). Following the guidelines, baseline 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?
The description clearly states the tool's purpose as retrieving connection configurations for external systems. It lists specific user queries that map to this tool, and the verb 'Get' with resource 'connection configurations' is precise. Sibling tools focus on DAGs, tasks, pools, etc., so this tool is well-distinguished.
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 explicit usage guidance by listing example user queries like 'What connections are configured?' and 'List all connections'. It does not explicitly state when not to use the tool, but the context is clear enough for an AI agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dag_runsA
Get execution history and status of DAG runs (workflow executions).
Use this tool when the user asks about:
"What DAG runs have executed?" or "Show me recent runs"
"Which runs failed/succeeded?"
"What's the status of my workflows?"
"When did DAG X last run?"
Execution times, durations, or states
Finding runs by date or status
Returns execution metadata including:
dag_run_id: Unique identifier for this execution
dag_id: Which DAG this run belongs to
state: Current state (running, success, failed, queued)
execution_date: When this run was scheduled to execute
start_date: When execution actually started
end_date: When execution completed (if finished)
run_type: manual, scheduled, or backfill
conf: Configuration passed to this run
Returns: JSON with list of DAG runs across all DAGs, sorted by most recent
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 explains the return format, fields, and sorting (most recent). However, it does not mention pagination, rate limits, or performance implications.
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 well-structured with bullet points for use cases and a clear list of return fields. It is front-loaded with purpose and every sentence adds 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?
Given no parameters and an existing output schema, the description is fairly complete, explaining return fields and sorting. However, it lacks mention of pagination or limits, which would be useful for a list 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?
The input schema has 0 parameters with 100% coverage, so the baseline is 3. The description adds value by explaining the output format and fields, which helps understand the tool's behavior even without 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 the tool retrieves execution history and status of DAG runs, lists specific user intents, and distinguishes itself from sibling tools like get_dag_run (which retrieves a single run) and diagnose_dag_run.
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 explicitly lists use cases (e.g., 'show me recent runs', 'which runs failed/succeeded?') and implies context. However, it does not explicitly say when not to use it or mention alternatives like get_dag_run for single runs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dagsA
Get information about all Apache Airflow DAGs (Directed Acyclic Graphs).
Use this tool when the user asks about:
"What DAGs are available?" or "List all DAGs"
"Show me the workflows" or "What pipelines exist?"
"Which DAGs are paused/active?"
DAG schedules, descriptions, or tags
Finding a specific DAG by name
Returns comprehensive DAG metadata including:
dag_id: Unique identifier for the DAG
is_paused: Whether the DAG is currently paused
is_active: Whether the DAG is active
schedule_interval: How often the DAG runs
description: Human-readable description
tags: Labels/categories for the DAG
owners: Who maintains the DAG
file_token: Location of the DAG file
Returns: JSON with list of all DAGs and their complete metadata
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully handles behavioral disclosure. Describes that it returns comprehensive metadata and lists fields. Implicitly indicates read-only operation. No contradictions.
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?
Well-structured with bullet points and clear sections. Front-loaded with purpose. Could be slightly more concise, but no unnecessary repetition.
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 presence of an output schema, description sufficiently covers return structure and usage. Missing mention of potential limits or pagination, but not critical for a list-all 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?
Input schema has zero parameters, so description does not need to add parameter information. Baseline score of 4 is appropriate as no additional detail 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?
Description clearly states 'Get information about all Apache Airflow DAGs' and provides specific user queries that trigger this tool. It effectively distinguishes from sibling tools like get_dag_details (single DAG) and list_dag_runs (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?
Explicitly instructs when to use with example queries like 'What DAGs are available?' and 'Show me the workflows'. Does not explicitly mention when not to use or alternatives, but the examples are clear and sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dag_warningsA
Get warnings and issues detected in DAG definitions.
Use this tool when the user asks about:
"Are there any DAG warnings?" or "Show me DAG issues"
"What problems exist with my DAGs?" or "Any DAG errors?"
"Check DAG health" or "Show me DAG validation warnings"
"What's wrong with my workflows?"
Returns warnings about DAG configuration issues including:
dag_id: Which DAG has the warning
warning_type: Type of warning (e.g., deprecation, configuration issue)
message: Description of the warning
timestamp: When the warning was detected
Returns: JSON with list of DAG warnings and their details
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavior. It states it returns warnings and lists the fields, but omits details like whether it is read-only, required permissions, or potential rate limits. The output schema reduces the burden slightly.
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 fairly verbose with bullet-like examples and listing return fields. It could be more concise while maintaining clarity. The structure is functional but not optimized.
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 covers the output fields and use cases adequately. It could mention whether warnings are cumulative or from a specific time period.
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 the description does not need to add parameter info. It correctly derives a baseline of 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?
The description clearly states it retrieves warnings and issues from DAG definitions. The usage examples explicitly list user queries that map to this tool, distinguishing it from siblings like list_dag_runs or list_import_errors.
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 explicit when-to-use scenarios with natural language examples. However, it does not mention when not to use this tool or explicitly compare to alternatives like list_import_errors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_import_errorsA
Get import errors from DAG files that failed to parse or load.
Use this tool when the user asks about:
"Are there any import errors?" or "Show me import errors"
"Why isn't my DAG showing up?" or "DAG not appearing in Airflow"
"What DAG files have errors?" or "Show me broken DAGs"
"Check for syntax errors" or "Are there any parsing errors?"
"Why is my DAG file failing to load?"
Import errors occur when DAG files have problems that prevent Airflow from parsing them, such as:
Python syntax errors
Missing imports or dependencies
Module not found errors
Invalid DAG definitions
Runtime errors during file parsing
Returns import error details including:
import_error_id: Unique identifier for the error
timestamp: When the error was detected
filename: Path to the DAG file with the error
stack_trace: Complete error message and traceback
Returns: JSON with list of import errors and their stack traces
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 discloses the return fields (import_error_id, timestamp, filename, stack_trace) and explains the causes of import errors. It implies a read-only operation but does not discuss potential limitations like pagination or performance. Still, it is adequately transparent.
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 longer than necessary, with repeated information (e.g., causes of import errors are listed twice). The first sentence is clear, but the bulleted examples could be condensed. Some sentences do not add new 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?
Given the low complexity (no parameters, output schema present), the description is fairly complete. It covers purpose, typical use cases, causes, and return fields. It does not mention behavior for empty results or error cases, but that 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?
The input schema has zero parameters, so coverage is vacuously 100%. The description adds value by explaining the output fields beyond the schema, which is the only semantic context needed. Baseline is 3, but the extra output detail justifies a 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?
The description clearly states the purpose: 'Get import errors from DAG files that failed to parse or load.' It uses a specific verb-resource pair and distinguishes from sibling tools (none of which list import errors). The examples reinforce the specific resource.
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 includes a list of explicit user queries that map to this tool, providing clear usage context. However, it does not mention when not to use it or provide alternative sibling tools for related issues (e.g., diagnose_dag_run for run failures).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pluginsA
Get information about installed Airflow plugins.
Use this tool when the user asks about:
"What plugins are installed?" or "List all plugins"
"Show me the plugins" or "Which plugins are enabled?"
"Is plugin X installed?" or "Do we have any custom plugins?"
"What's in the plugins directory?"
Plugins extend Airflow functionality by adding custom operators, hooks, views, menu items, or other components. This returns information about all plugins discovered by Airflow's plugin system.
Returns information about installed plugins including:
name: Name of the plugin
hooks: Custom hooks provided by the plugin
executors: Custom executors provided by the plugin
macros: Custom macros provided by the plugin
flask_blueprints: Flask blueprints for custom UI pages
appbuilder_views: Flask-AppBuilder views for admin interface
appbuilder_menu_items: Custom menu items in the UI
Returns: JSON with list of all installed plugins and their components
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description fully discloses behavior: it returns information about all discovered plugins, lists return fields (name, hooks, executors, etc.), and implies read-only nature. No side effects mentioned, but appropriate for a list 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?
Description is moderately long but well-structured with bullet points and example queries. Each sentence adds value, though could be slightly more concise. Front-loaded with 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?
Given the tool's simplicity (list with no parameters) and presence of output schema (described in detail), the description is complete. Covers purpose, usage triggers, behavioral details, and return fields with no 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?
Input schema has zero parameters, so schema description coverage is 100% trivially. Description adds no parameter info (none exist), which is fine. Baseline for zero-parameter tools 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 'Get information about installed Airflow plugins' with specific verb and resource. Provides example user queries that map directly to this tool, distinguishing it from siblings like 'list_providers' 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?
Explicitly lists when to use via example user questions (e.g., 'What plugins are installed?', 'Is plugin X installed?'). Provides context on what plugins are, but does not explicitly state when not to use or compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_poolsA
Get resource pools for managing task concurrency and resource allocation.
Use this tool when the user asks about:
"What pools are configured?" or "List all pools"
"Show me the resource pools" or "What pools exist?"
"How many slots does pool X have?" or "What's the pool capacity?"
"Which pools are available?" or "What's the pool configuration?"
Pools are used to limit parallelism for specific sets of tasks. Each pool has a certain number of slots, and tasks assigned to a pool will only run if there are available slots. This is useful for limiting concurrent access to resources like databases or external APIs.
Returns pool information including:
name: Name of the pool
slots: Total number of available slots in the pool
occupied_slots: Number of currently occupied slots
running_slots: Number of slots with running tasks
queued_slots: Number of slots with queued tasks
open_slots: Number of available slots (slots - occupied_slots)
description: Human-readable description of the pool's purpose
Returns: JSON with list of all pools and their current utilization
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description fully discloses that this is a read-only list operation. It describes the returned fields and their meanings, and implies no 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 description is well-structured: a summary line, usage examples, a brief explanation of the resource, and a clear list of return fields. Every sentence is informative and 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 no parameters and an output schema present, the description provides sufficient detail about the return fields and overall purpose. It covers what an agent needs to know to use this tool correctly.
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 cannot add parameter semantics. The baseline is 4 per guidelines, and the description does not need to elaborate further.
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 'Get resource pools' and immediately lists example user questions. It is specific to listing all pools, which distinguishes it from get_pool (singular).
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?
Explicitly lists when to use the tool with example questions. Also explains the concept of pools and their purpose, giving context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_providersA
Get information about installed Airflow provider packages.
Use this tool when the user asks about:
"What providers are installed?" or "List all providers"
"What integrations are available?" or "Show me installed packages"
"Do we have the AWS provider?" or "Is the Snowflake provider installed?"
"What version of provider X is installed?"
Returns information about installed provider packages including:
package_name: Name of the provider package (e.g., "apache-airflow-providers-amazon")
version: Version of the provider package
description: What the provider does
provider_info: Details about operators, hooks, and sensors included
Returns: JSON with list of all installed provider packages and their details
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 full burden for behavioral disclosure. It explains the tool returns a JSON list with fields (package_name, version, description, provider_info), which is helpful. However, it lacks details on edge cases (e.g., empty result), potential side effects, or authentication requirements, leaving some behavioral aspects implied.
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 concise, front-loaded with the main purpose, and uses bullet points to enumerate user queries and return fields. Every sentence adds value without 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 zero parameters and an output schema, the description adequately covers the tool's functionality, return structure, and usage examples. It is complete for the tool's 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?
The input schema has no parameters, so schema coverage is effectively 100%. The description adds no parameter-specific semantics, but none are needed. According to guidelines, 0 parameters earns a baseline of 4, which is appropriate 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?
The description clearly states the tool retrieves installed Airflow provider packages. It lists specific user queries that trigger this tool (e.g., 'List all providers', 'Is the AWS provider installed?'), making its purpose unambiguous and distinct from sibling tools.
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 explicitly enumerates when to use the tool with example user questions, providing strong contextual guidance. It does not list when not to use it or mention alternatives, but the context is sufficiently clear for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksA
Get all tasks defined in a specific DAG.
Use this tool when the user asks about:
"What tasks are in DAG X?" or "List all tasks for DAG Y"
"Show me the tasks in this workflow" or "What's in the DAG?"
"What are the steps in DAG Z?" or "Show me the task structure"
"What does this DAG do?" or "Explain the workflow steps"
Returns information about all tasks in the DAG including:
task_id: Unique identifier for the task
task_display_name: Human-readable display name
owner: Who owns this task
operator_name: Type of operator (PythonOperator, BashOperator, etc.)
start_date: When this task becomes active
end_date: When this task becomes inactive (if set)
trigger_rule: When this task should run
retries: Number of retry attempts
pool: Resource pool assignment
downstream_task_ids: List of tasks that depend on this task
upstream_task_ids: List of tasks this task depends on
Args: dag_id: The ID of the DAG to list tasks for
Returns: JSON with list of all tasks in the DAG and their configurations
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden. It states the tool returns a list of tasks with fields like task_id, owner, etc., but does not disclose behavior on missing DAG, errors, or side effects. Adequate but not thorough.
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 well-structured with a clear opening, bullet-pointed examples, and return fields. It is slightly verbose but every sentence contributes value. Front-loaded with 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?
Given the simple interface (one required parameter, list return), the description covers purpose, parameter, and return fields. There is an output schema, so return details need not be expanded. Minor missing error contexts but sufficient overall.
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 only parameter dag_id is described as 'The ID of the DAG to list tasks for', adding meaning beyond the schema's type and required flag. With 0% schema description coverage, this explanation is valuable.
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 'Get all tasks defined in a specific DAG' with a specific verb and resource. It distinguishes from siblings like get_task (single task) and explore_dag (different scope).
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 explicit query examples such as 'What tasks are in DAG X?' and 'Show me the tasks in this workflow'. It does not explicitly state when not to use the tool, but the context is clear for its intended use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_variablesA
Get all Airflow variables (key-value configuration pairs).
Use this tool when the user asks about:
"What variables are configured?" or "List all variables"
"Show me the variables" or "What variables exist?"
"What configuration variables are available?"
"Show me all variable keys"
Variables are key-value pairs stored in Airflow's metadata database that can be accessed by DAGs at runtime. They're commonly used for configuration values, environment-specific settings, or other data that needs to be shared across DAGs without hardcoding in the DAG files.
Returns variable information including:
key: The variable's key/name
value: The variable's value (may be masked if marked as sensitive)
description: Optional description of the variable's purpose
IMPORTANT: Sensitive variables (like passwords, API keys) may have their values masked in the response for security reasons.
Returns: JSON with list of all variables and their values
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It discloses that sensitive variable values may be masked, and describes the return structure. It implies a read-only operation (no side effects). It does not contradict any annotations.
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 well-structured with a clear opening, usage examples, explanation, and return details. While slightly verbose, each sentence serves a purpose and contributes to 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?
Given no parameters and no annotations, the description is fairly complete: it explains what variables are, when to use, return format, and masking behavior. It lacks mention of pagination limits, but for a simple list tool this is acceptable.
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 no parameters (0 params), so the baseline is 4. The description adds value by explaining the return fields and the security note about masking, which compensates for the lack of 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 'Get all Airflow variables (key-value configuration pairs)', with specific verb and resource. It lists example user queries that directly map to the tool's functionality. This distinguishes it from siblings like 'get_variable' by implying it returns all variables rather than a single one.
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 explicit usage guidance: 'Use this tool when the user asks about:' followed by concrete examples. It does not mention when not to use it or alternatives like 'get_variable', but the context is clear and helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_dagA
Pause a DAG to prevent new scheduled runs from starting.
Use this tool when the user asks to:
"Pause DAG X" or "Stop DAG Y from running"
"Disable DAG Z" or "Prevent new runs of DAG X"
"Turn off DAG scheduling" or "Suspend DAG execution"
When a DAG is paused:
No new scheduled runs will be created
Currently running tasks will complete
Manual triggers are still possible
The DAG remains visible in the UI with a paused indicator
IMPORTANT: This is a write operation that modifies Airflow state. The DAG will remain paused until explicitly unpaused.
Args: dag_id: The ID of the DAG to pause (e.g., "example_dag")
Returns: JSON with updated DAG details showing is_paused=True
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and thoroughly explains behavioral traits: no new scheduled runs, current tasks complete, manual triggers still possible, UI indicator, and that it's a write operation modifying state until unpaused.
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 front-loaded with the primary action and uses multiple paragraphs effectively. However, the list of user queries could be slightly trimmed without losing 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?
Given the simplicity of the tool (1 param, output schema present), the description fully covers the purpose, behavior, return value, and usage guidance. No missing aspects are apparent.
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 0%, but the description adds an 'Args' section with dag_id and an example value, providing context beyond the schema's type and required fields. While minimal, it adequately clarifies usage for the single parameter.
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 pauses a DAG to prevent new scheduled runs, providing a specific verb-resource pair. It lists example user queries like 'Pause DAG X' which distinguishes it from siblings like unpause_dag.
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 explicitly lists when to use this tool (e.g., user asks to pause, disable, turn off scheduling), making context clear. However, it does not explicitly exclude alternatives or mention when not to use, though the sibling unpause_dag is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_dagA
Trigger a new DAG run (start a workflow execution manually).
Use this tool when the user asks to:
"Run DAG X" or "Start DAG Y" or "Execute DAG Z"
"Trigger a run of DAG X" or "Kick off DAG Y"
"Run this workflow" or "Start this pipeline"
"Execute DAG X with config Y" or "Trigger DAG with parameters"
"Start a manual run" or "Manually execute this DAG"
This creates a new DAG run that will be picked up by the scheduler and executed.
You can optionally pass configuration parameters that will be available to the
DAG during execution via the conf context variable.
IMPORTANT: This is a write operation that modifies Airflow state by creating a new DAG run. Use with caution.
Returns information about the newly triggered DAG run including:
dag_run_id: Unique identifier for the new execution
dag_id: Which DAG was triggered
state: Initial state (typically 'queued')
execution_date: When this run is scheduled to execute
start_date: When execution started (may be null if queued)
run_type: Type of run (will be 'manual')
conf: Configuration passed to the run
external_trigger: Set to true for manual triggers
Args: dag_id: The ID of the DAG to trigger (e.g., "example_dag") conf: Optional configuration dictionary to pass to the DAG run. This will be available in the DAG via context['dag_run'].conf
Returns: JSON with details about the newly triggered DAG run
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | ||
| conf | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It explicitly states this is a write operation that modifies Airflow state by creating a new DAG run, and lists return fields. It does not detail permissions or side effects beyond creation, but is transparent enough for basic use.
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 well-structured with a clear action statement, example queries, notes, and return field list. It is slightly verbose but every section adds value. Front-loaded with core 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 description is complete: it explains purpose, usage context, parameter meaning, return value fields, and behavioral notes. Despite the output schema existing but not provided here, the description's own return field list is thorough. For a moderately complex tool with 2 parameters and a clear action, this description fully covers the agent's needs.
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 0%, but the description compensates by explaining both parameters: dag_id as the DAG ID string and conf as an optional config dictionary with context explanation. This adds meaning beyond the raw 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 clearly states it triggers a new DAG run and provides many example user queries. However, it does not differentiate from the sibling tool trigger_dag_and_wait, which slightly reduces clarity.
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 lists explicit when-to-use scenarios with example user requests. It could be improved by noting when not to use this tool (e.g., if waiting for completion is desired, use trigger_dag_and_wait instead).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_dag_and_waitA
Trigger a DAG run and wait for it to complete before returning.
Use this tool when the user asks to:
"Run DAG X and wait for it to finish" or "Execute DAG Y and tell me when it's done"
"Trigger DAG Z and wait for completion" or "Run this pipeline synchronously"
"Start DAG X and let me know the result" or "Execute and monitor DAG Y"
"Run DAG X and show me if it succeeds or fails"
This is a BLOCKING operation that will:
Trigger the specified DAG
Poll for status automatically (interval scales with timeout)
Return once the DAG run reaches a terminal state (success, failed, upstream_failed)
Include details about any failed tasks if the run was not successful
IMPORTANT: This tool blocks until the DAG completes or times out. For long-running
DAGs, consider using trigger_dag instead and checking status separately with
get_dag_run.
Default timeout is 60 minutes. Adjust the timeout parameter for longer DAGs.
Returns information about the completed DAG run including:
dag_id: Which DAG was run
dag_run_id: Unique identifier for this execution
state: Final state (success, failed, upstream_failed)
start_date: When execution started
end_date: When execution completed
elapsed_seconds: How long we waited
timed_out: Whether we hit the timeout before completion
failed_tasks: List of failed task details (only if state != success)
Args: dag_id: The ID of the DAG to trigger (e.g., "example_dag") conf: Optional configuration dictionary to pass to the DAG run. This will be available in the DAG via context['dag_run'].conf timeout: Maximum time to wait in seconds (default: 3600.0 / 60 minutes)
Returns: JSON with final DAG run status and any failed task details
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes | ||
| conf | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden. It explicitly states 'This is a BLOCKING operation', describes internal steps (trigger, poll, return), default timeout, and details on failed tasks. No contradictions.
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 well-structured with bullet points and clear sections. It is front-loaded with purpose. However, it is slightly verbose; some sentences could be combined. Still highly 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 the tool's complexity (blocking, polling, timeout, failure handling), the description is thorough. It explains the process, return fields, and even though an output schema exists, the description adds context. No gaps for an AI agent.
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?
Despite 0% schema description coverage, the description adds rich meaning to all three parameters: `dag_id` with example, `conf` behavior description, and `timeout` default. This significantly aids an AI agent in understanding parameter usage beyond 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 clearly states the tool's action: 'Trigger a DAG run and wait for it to complete before returning.' It provides specific verb and resource, distinguishes from sibling `trigger_dag` by explicitly noting the blocking behavior, and includes example queries that match common user requests.
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 explicitly lists example queries for when to use this tool and advises against it for long-running DAGs by suggesting `trigger_dag` and `get_dag_run` as alternatives. This clear when-to-use and when-not-to-use guidance is exemplary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpause_dagA
Unpause a DAG to allow scheduled runs to resume.
Use this tool when the user asks to:
"Unpause DAG X" or "Resume DAG Y"
"Enable DAG Z" or "Start DAG scheduling again"
"Turn on DAG X" or "Activate DAG Y"
When a DAG is unpaused:
The scheduler will create new runs based on the schedule
Any missed runs (depending on catchup setting) may be created
The DAG will appear active in the UI
IMPORTANT: This is a write operation that modifies Airflow state. New DAG runs will be scheduled according to the DAG's schedule_interval.
Args: dag_id: The ID of the DAG to unpause (e.g., "example_dag")
Returns: JSON with updated DAG details showing is_paused=False
| Name | Required | Description | Default |
|---|---|---|---|
| dag_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 states it's a write operation, modifies Airflow state, and schedules new runs. It could mention permissions or catchup implications, but overall it's transparent.
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 well-structured: a clear purpose sentence, bullet points for usage scenarios, consequences, and an important note. It is concise yet comprehensive.
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 single parameter and existing output schema, the description covers everything needed: usage hints, behavioral effects, and return value format ('JSON with updated DAG details showing is_paused=False').
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?
Only one parameter (dag_id) with schema coverage 0%, but the description adds an example ('example_dag') and context, which provides meaning beyond the schema's type definition.
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 'Unpause a DAG to allow scheduled runs to resume.' It uses a specific verb (unpause) and resource (DAG), and distinguishes from siblings like pause_dag and trigger_dag.
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 explicit usage examples (e.g., 'Unpause DAG X') and explains what happens when unpaused. It does not explicitly mention when not to use or alternatives, but the context is very clear and helpful.
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. Dates show when Glama detected each change.
31 tool updates
v0.1.0- First observed
diagnose_dag_run - First observed
explore_dag - First observed
get_airflow_config - First observed
get_airflow_version - First observed
get_dag_details - First observed
get_dag_run - First observed
get_dag_source - First observed
get_dag_stats - First observed
get_pool - First observed
get_system_health - First observed
get_task - First observed
get_task_instance - First observed
get_task_logs - First observed
get_upstream_asset_events - First observed
get_variable - First observed
list_asset_events - First observed
list_assets - First observed
list_connections - First observed
list_dag_runs - First observed
list_dag_warnings - First observed
list_dags - First observed
list_import_errors - First observed
list_plugins - First observed
list_pools - First observed
list_providers - First observed
list_tasks - First observed
list_variables - First observed
pause_dag - First observed
trigger_dag - First observed
trigger_dag_and_wait - First observed
unpause_dag
TDQS
Each tool targets a distinct aspect of Airflow (DAGs, runs, tasks, instances, logs, pools, variables, etc.), with clear descriptions that prevent confusion. Even similar tools like 'explore_dag' and 'get_dag_details' serve different granularity levels.
Most tools follow a verb_noun pattern (list_dags, get_dag_details, trigger_dag), but a few deviate (diagnose_dag_run, explore_dag, trigger_dag_and_wait). Overall, the pattern is clear and predictable.
31 tools is high but appropriate for a comprehensive Airflow MCP server covering many subsystems. Each tool has a clear purpose, though some consolidation (e.g., get_dag_details and explore_dag) could reduce count slightly.
The tool set is strong for monitoring and troubleshooting (DAGs, runs, tasks, logs, system health) but misses write operations for variables, connections, and pools. This leaves agents without the ability to create or update these resources.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseCqualityAmaintenanceMonitor and manage Apache Airflow clusters through natural language queries via MCP tools: DAG inspection, task monitoring, health checks, and cluster analytics without API complexity. * Guide: https://call518.medium.com/mcp-airflow-api-a-model-context-protocol-mcp-server-for-apache-airflow-5dfdfb25451MIT
- AlicenseNot gradedqualityNot gradedmaintenanceAn MCP server that wraps the Apache Airflow REST API, enabling clients to manage DAGs, monitor task instances, and handle workflows through a standardized interface. It provides comprehensive access to Airflow features including DAG runs, variables, connections, and XComs.-
- 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
- FlicenseNot gradedqualityDmaintenanceEnables DAG management, monitoring, debugging, and connection testing for Apache Airflow through the MCP protocol.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/astronomer/astro-airflow-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server