MCP-Airflow-API
Manage Apache Airflow workflows and clusters using natural language commands, including DAG management, task monitoring, pool and variable management, event log analysis, and support for both Airflow 2.x and 3.0+ via dynamic API version selection.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP-Airflow-API Show me the list of DAGs and their statuses"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
๐ MCP-Airflow-API
Revolutionary Open Source Tool for Managing Apache Airflow with Natural Language
Architecture & Internal (DeepWiki)
Related MCP server: mcp-server-apache-airflow
๐ Overview
Have you ever wondered how amazing it would be if you could manage your Apache Airflow workflows using natural language instead of complex REST API calls or web interface manipulations? MCP-Airflow-API is the revolutionary open-source project that makes this goal a reality.

๐ฏ What is MCP-Airflow-API?
MCP-Airflow-API is an MCP server that leverages the Model Context Protocol (MCP) to transform Apache Airflow REST API operations into natural language tools. This project hides the complexity of API structures and enables intuitive management of Airflow clusters through natural language commands.
๐ Multi-Version API Support (NEW!)
Now supports both Airflow API v1 (2.x) and v2 (3.0+) with dynamic version selection via environment variable:
API v1: Full compatibility with Airflow 2.x clusters (43 tools) - Documentation
API v2: Enhanced features for Airflow 3.0+ including asset management for data-aware scheduling (45 tools) - Documentation
Key Architecture: Single MCP server with shared common tools (43) plus v2-exclusive asset tools (2) - dynamically loads appropriate toolset based on AIRFLOW_API_VERSION environment variable!
Traditional approach (example):
curl -X GET "http://localhost:8080/api/v1/dags?limit=100&offset=0" \
-H "Authorization: Basic YWlyZmxvdzphaXJmbG93"MCP-Airflow-API approach (natural language):
"Show me the currently running DAGs"
๐ Quickstart
๐ Need a test Airflow cluster? Use our companion project Airflow-Docker-Compose with support for both Airflow 2.x and Airflow 3.x environments!
Flow Diagram of Quickstart/Tutorial

๐ฏ Recommended: Docker Compose (Complete Demo Environment)
For quick evaluation and testing:
git clone https://github.com/call518/MCP-Airflow-API.git
cd MCP-Airflow-API
# Configure your Airflow credentials
cp .env.example .env
# Edit .env with your Airflow API settings
# Start all services
docker-compose up -d
# Access OpenWebUI at http://localhost:3002/
# API documentation at http://localhost:8002/docsGetting Started with OpenWebUI (Docker Option)
Access http://localhost:3002/
Log in with admin account
Go to "Settings" โ "Tools" from the top menu
Add Tool URL:
http://localhost:8002/airflow-apiConfigure your LLM provider (Ollama, OpenAI, etc.)
๐ฆ MCP Server Installation Methods
Method 1: Direct Installation from PyPI
uvx --python 3.12 mcp-airflow-apiMethod 2: Claude-Desktop MCP Client Integration
Local Access (stdio mode)
{
"mcpServers": {
"mcp-airflow-api": {
"command": "uvx",
"args": ["--python", "3.12", "mcp-airflow-api"],
"env": {
"AIRFLOW_API_VERSION": "v2",
"AIRFLOW_API_BASE_URL": "http://localhost:8080/api",
"AIRFLOW_API_USERNAME": "airflow",
"AIRFLOW_API_PASSWORD": "airflow"
}
}
}
}Remote Access (streamable-http mode without authentication)
{
"mcpServers": {
"mcp-airflow-api": {
"type": "streamable-http",
"url": "http://localhost:8000/mcp"
}
}
}Remote Access (streamable-http mode with Bearer token authentication - Recommended)
{
"mcpServers": {
"mcp-airflow-api": {
"type": "streamable-http",
"url": "http://localhost:8000/mcp",
"headers": {
"Authorization": "Bearer your-secure-secret-key-here"
}
}
}
}Multiple Airflow Clusters with Different Versions
{
"mcpServers": {
"airflow-2x-cluster": {
"command": "uvx",
"args": ["--python", "3.12", "mcp-airflow-api"],
"env": {
"AIRFLOW_API_VERSION": "v1",
"AIRFLOW_API_BASE_URL": "http://localhost:38080/api",
"AIRFLOW_API_USERNAME": "airflow",
"AIRFLOW_API_PASSWORD": "airflow"
}
},
"airflow-3x-cluster": {
"command": "uvx",
"args": ["--python", "3.12", "mcp-airflow-api"],
"env": {
"AIRFLOW_API_VERSION": "v2",
"AIRFLOW_API_BASE_URL": "http://localhost:48080/api",
"AIRFLOW_API_USERNAME": "airflow",
"AIRFLOW_API_PASSWORD": "airflow"
}
}
}
}๐ก Pro Tip: Use the test clusters from Airflow-Docker-Compose for the above configuration - they run on ports 38080 (2.x) and 48080 (3.x) respectively!
Method 3: Development Installation
git clone https://github.com/call518/MCP-Airflow-API.git
cd MCP-Airflow-API
pip install -e .
# Run in stdio mode
python -m mcp_airflow_api๐ Key Features
Natural Language Queries
No need to learn complex API syntax. Just ask as you would naturally speak:"What DAGs are currently running?"
"Show me the failed tasks"
"Find DAGs containing ETL"
Comprehensive Monitoring Capabilities
Real-time cluster status monitoring:Cluster health monitoring
DAG status and performance analysis
Task execution log tracking
XCom data management
Dynamic API Version Support
Single MCP server adapts to your Airflow version:API v1: 43 shared tools for Airflow 2.x compatibility
API v2: 43 shared tools + 2 asset management tools for Airflow 3.0+
Environment Variable Control: Switch versions instantly with
AIRFLOW_API_VERSIONZero Configuration Changes: Same tool names, enhanced capabilities
Efficient Architecture: Shared common codebase eliminates duplication
Comprehensive Tool Coverage
Covers almost all Airflow API functionality:DAG management (trigger, pause, resume)
Task instance monitoring
Pool and variable management
Connection configuration
Configuration queries
Event log analysis
Large Environment Optimization
Efficiently handles large environments with 1000+ DAGs:Smart pagination support
Advanced filtering options
Batch processing capabilities
๐ ๏ธ Technical Advantages
Leveraging Model Context Protocol (MCP)
MCP is an open standard for secure connections between AI applications and data sources, providing:Standardized interface
Secure data access
Scalable architecture
Support for Two Transport Modes
stdiomode: Direct MCP client integration for local environmentsstreamable-httpmode: HTTP-based deployment for Docker and remote access
Environment Variable Control:
FASTMCP_TYPE=stdio # Default: Direct MCP client mode FASTMCP_TYPE=streamable-http # Docker/HTTP mode FASTMCP_PORT=8000 # HTTP server port (Docker internal)Comprehensive Airflow API Coverage
Full implementation of official Airflow REST APIs:API v1 Support: Based on Airflow 2.x REST API
API v2 Support: Based on Airflow 3.0+ REST API
Dynamic Version Selection: Runtime switching between API versions
Feature Parity: Complete endpoint coverage for both versions
Complete Docker Support
Full Docker Compose setup with 3 separate services:Open WebUI: Web interface (port
3002)MCP Server: Airflow API tools (internal port
8000, exposed via18002)MCPO Proxy: REST API endpoint provider (port
8002)
Use Cases in Action

โ๏ธ Advanced Configuration
Environment Variables
# Required - Dynamic API Version Selection (NEW!)
# Single server supports both v1 and v2 - just change this variable!
AIRFLOW_API_VERSION=v1 # v1 for Airflow 2.x, v2 for Airflow 3.0+
AIRFLOW_API_BASE_URL=http://localhost:8080/api
# Test Cluster Connection Examples:
# For Airflow 2.x test cluster (from Airflow-Docker-Compose)
AIRFLOW_API_VERSION=v1
AIRFLOW_API_BASE_URL=http://localhost:38080/api
# For Airflow 3.x test cluster (from Airflow-Docker-Compose)
AIRFLOW_API_VERSION=v2
AIRFLOW_API_BASE_URL=http://localhost:48080/api
# Authentication
AIRFLOW_API_USERNAME=airflow
AIRFLOW_API_PASSWORD=airflow
# Optional - MCP Server Configuration
MCP_LOG_LEVEL=INFO # DEBUG/INFO/WARNING/ERROR/CRITICAL
FASTMCP_TYPE=stdio # stdio/streamable-http
FASTMCP_PORT=8000 # HTTP server port (Docker mode)
# Bearer Token Authentication for streamable-http mode
# Enable authentication (recommended for production)
# Default: false (when undefined, empty, or null)
# Values: true/false, 1/0, yes/no, on/off (case insensitive)
REMOTE_AUTH_ENABLE=false # true/false
REMOTE_SECRET_KEY=your-secure-secret-key-hereAPI Version Comparison
Official Documentation:
API v1: Airflow 2.x REST API Reference
API v2: Airflow 3.0+ REST API Reference
Feature | API v1 (Airflow 2.x) | API v2 (Airflow 3.0+) |
Total Tools | 43 tools | 45 tools |
Shared Tools | 43 (100%) | 43 (96%) |
Exclusive Tools | 0 | 2 (Asset Management) |
Basic DAG Operations | โ | โ Enhanced |
Task Management | โ | โ Enhanced |
Connection Management | โ | โ Enhanced |
Pool Management | โ | โ Enhanced |
Asset Management | โ | โ New |
Asset Events | โ | โ New |
Data-Aware Scheduling | โ | โ New |
Enhanced DAG Warnings | โ | โ New |
Advanced Filtering | Basic | โ Enhanced |
๐ Security & Authentication
Bearer Token Authentication
For streamable-http mode, this MCP server supports Bearer token authentication to secure remote access. This is especially important when running the server in production environments.
Configuration
Enable Authentication:
# In .env file
REMOTE_AUTH_ENABLE=true
REMOTE_SECRET_KEY=your-secure-secret-key-hereOr via CLI:
python -m mcp_airflow_api --type streamable-http --auth-enable --secret-key your-secure-secret-key-hereSecurity Levels
stdio mode (Default): Local-only access, no authentication needed
streamable-http + REMOTE_AUTH_ENABLE=false: Remote access without authentication โ ๏ธ NOT RECOMMENDED for production
streamable-http + REMOTE_AUTH_ENABLE=true: Remote access with Bearer token authentication โ RECOMMENDED for production
Note:
REMOTE_AUTH_ENABLEdefaults tofalsewhen undefined, empty, or null. Supported values aretrue/false,1/0,yes/no,on/off(case insensitive).
Client Configuration
When authentication is enabled, MCP clients must include the Bearer token in the Authorization header:
{
"mcpServers": {
"mcp-airflow-api": {
"type": "streamable-http",
"url": "http://your-server:8000/mcp",
"headers": {
"Authorization": "Bearer your-secure-secret-key-here"
}
}
}
}Security Best Practices
Always enable authentication when using streamable-http mode in production
Use strong, randomly generated secret keys (32+ characters recommended)
Use HTTPS when possible (configure reverse proxy with SSL/TLS)
Restrict network access using firewalls or network policies
Rotate secret keys regularly for enhanced security
Monitor access logs for unauthorized access attempts
Error Handling
When authentication fails, the server returns:
401 Unauthorized for missing or invalid tokens
Detailed error messages in JSON format for debugging
Custom Docker Compose Setup
version: '3.8'
services:
mcp-server:
build:
context: .
dockerfile: Dockerfile.MCP-Server
environment:
- FASTMCP_PORT=8000
- AIRFLOW_API_VERSION=v1
- AIRFLOW_API_BASE_URL=http://your-airflow:8080/api
- AIRFLOW_API_USERNAME=airflow
- AIRFLOW_API_PASSWORD=airflowDevelopment Installation
git clone https://github.com/call518/MCP-Airflow-API.git
cd MCP-Airflow-API
pip install -e .
# Run in stdio mode
python -m mcp_airflow_api๐งช Test Airflow Cluster Deployment
For testing and development, use our companion project Airflow-Docker-Compose which supports both Airflow 2.x and 3.x environments.
Quick Setup
Clone the test environment repository:
git clone https://github.com/call518/Airflow-Docker-Compose.git cd Airflow-Docker-Compose
Option 1: Deploy Airflow 2.x (LTS)
For testing API v1 compatibility with stable production features:
# Navigate to Airflow 2.x environment
cd airflow-2.x
# (Optional) Customize environment variables
cp .env.template .env
# Edit .env file as needed
# Deploy Airflow 2.x cluster
./run-airflow-cluster.sh
# Access Web UI
# URL: http://localhost:38080
# Username: airflow / Password: airflowEnvironment details:
Image:
apache/airflow:2.10.2Port:
38080(configurable viaAIRFLOW_WEBSERVER_PORT)API:
/api/v1/*endpointsAuthentication: Basic Auth
Use case: Production-ready, stable features
Option 2: Deploy Airflow 3.x (Latest)
For testing API v2 with latest features including Assets management:
# Navigate to Airflow 3.x environment
cd airflow-3.x
# (Optional) Customize environment variables
cp .env.template .env
# Edit .env file as needed
# Deploy Airflow 3.x cluster
./run-airflow-cluster.sh
# Access API Server
# URL: http://localhost:48080
# Username: airflow / Password: airflowEnvironment details:
Image:
apache/airflow:3.0.6Port:
48080(configurable viaAIRFLOW_APISERVER_PORT)API:
/api/v2/*endpoints + Assets managementAuthentication: JWT Token (FabAuthManager)
Use case: Development, testing new features
Option 3: Deploy Both Versions Simultaneously
For comprehensive testing across different Airflow versions:
# Start Airflow 2.x (port 38080)
cd airflow-2.x && ./run-airflow-cluster.sh
# Start Airflow 3.x (port 48080)
cd ../airflow-3.x && ./run-airflow-cluster.shKey Differences
Feature | Airflow 2.x | Airflow 3.x |
Authentication | Basic Auth | JWT Tokens (FabAuthManager) |
Default Port | 38080 | 48080 |
API Endpoints |
|
|
Assets Support | โ Limited/Experimental | โ Full Support |
Provider Packages | providers | distributions |
Stability | โ Production Ready | ๐งช Beta/Development |
Cleanup
To stop and clean up the test environments:
# For Airflow 2.x
cd airflow-2.x && ./cleanup-airflow-cluster.sh
# For Airflow 3.x
cd airflow-3.x && ./cleanup-airflow-cluster.sh๐ Future-Ready Architecture
Scalable design and modular structure for easy addition of new features
Standards-compliant protocol for integration with other tools
Cloud-native operations and LLM-ready interface
Context-aware query processing and automated workflow management capabilities
๐ฏ Who Is This Tool For?
Data Engineers โ Reduce debugging time, improve productivity, minimize learning curve
DevOps Engineers โ Automate infrastructure monitoring, reduce incident response time
System Administrators โ User-friendly management without complex APIs, real-time cluster status monitoring
๐ Open Source Contribution and Community
Repository: https://github.com/call518/MCP-Airflow-API
How to Contribute
Bug reports and feature suggestions
Documentation improvements
Code contributions
Please consider starring the project if you find it useful.
๐ฎ Conclusion
MCP-Airflow-API changes the paradigm of data engineering and workflow management:
No need to memorize REST API calls โ just ask in natural language:
"Show me the status of currently running ETL jobs."
๐ท๏ธ Tags
#Apache-Airflow #MCP #ModelContextProtocol #DataEngineering #DevOps #WorkflowAutomation #NaturalLanguage #OpenSource #Python #Docker #AI-Integration
๐ Example Queries & Use Cases
This section provides comprehensive examples of how to use MCP-Airflow-API tools with natural language queries.
Basic DAG Operations
list_dags: "List all DAGs with limit 10 in a table format." โ Returns up to 10 DAGs
list_dags: "List all DAGs a table format." โ Returns up to All DAGs (WARN: Need High Tokens)
list_dags: "Show next page of DAGs." โ Use offset for pagination
list_dags: "List DAGs 21-40." โ
list_dags(limit=20, offset=20)list_dags: "Filter DAGs whose ID contains 'tutorial'." โ
list_dags(id_contains="etl")list_dags: "Filter DAGs whose display name contains 'tutorial'." โ
list_dags(name_contains="daily")get_dags_detailed_batch: "Get detailed information for all DAGs with execution status." โ
get_dags_detailed_batch(fetch_all=True)get_dags_detailed_batch: "Get details for active, unpaused DAGs with recent runs." โ
get_dags_detailed_batch(is_active=True, is_paused=False)get_dags_detailed_batch: "Get detailed info for DAGs containing 'example' with run history." โ
get_dags_detailed_batch(id_contains="example", limit=50)running_dags: "Show running DAGs."
failed_dags: "Show failed DAGs."
trigger_dag: "Trigger DAG 'example_complex'."
pause_dag: "Pause DAG 'example_complex' in a table format."
unpause_dag: "Unpause DAG 'example_complex' in a table format."
Cluster Management & Health
get_health: "Check Airflow cluster health."
get_version: "Get Airflow version information."
Pool Management
list_pools: "List all pools."
list_pools: "Show pool usage statistics."
get_pool: "Get details for pool 'default_pool'."
get_pool: "Check pool utilization."
Variable Management
list_variables: "List all variables."
list_variables: "Show all Airflow variables with their values."
get_variable: "Get variable 'database_url'."
get_variable: "Show the value of variable 'api_key'."
Task Instance Management
list_task_instances_all: "List all task instances for DAG 'example_complex'."
list_task_instances_all: "Show running task instances."
list_task_instances_all: "Show task instances filtered by pool 'default_pool'."
list_task_instances_all: "List task instances with duration greater than 300 seconds."
list_task_instances_all: "Show failed task instances from last week."
list_task_instances_all: "List failed task instances from yesterday."
list_task_instances_all: "Show task instances that started after 9 AM today."
list_task_instances_all: "List task instances from the last 3 days with state 'failed'."
get_task_instance_details: "Get details for task 'data_processing' in DAG 'example_complex' run 'scheduled__xxxxx'."
list_task_instances_batch: "List failed task instances from last month."
list_task_instances_batch: "Show task instances in batch for multiple DAGs from this week."
get_task_instance_extra_links: "Get extra links for task 'data_processing' in latest run."
get_task_instance_logs: "Retrieve logs for task 'create_entry_gcs' try number 2 of DAG 'example_complex'."
XCom Management
list_xcom_entries: "List XCom entries for task 'data_processing' in DAG 'example_complex' run 'scheduled__xxxxx'."
list_xcom_entries: "Show all XCom entries for task 'data_processing' in latest run."
get_xcom_entry: "Get XCom entry with key 'result' for task 'data_processing' in specific run."
get_xcom_entry: "Retrieve XCom value for key 'processed_count' from task 'data_processing'."
Configuration Management
get_config: "Show all Airflow configuration sections and options." โ Returns complete config or 403 if expose_config=False
list_config_sections: "List all configuration sections with summary information."
get_config_section: "Get all settings in 'core' section." โ
get_config_section("core")get_config_section: "Show webserver configuration options." โ
get_config_section("webserver")search_config_options: "Find all database-related configuration options." โ
search_config_options("database")search_config_options: "Search for timeout settings in configuration." โ
search_config_options("timeout")
Important: Configuration tools require expose_config = True in airflow.cfg [webserver] section. Even admin users get 403 errors if this is disabled.
DAG Analysis & Monitoring
get_dag: "Get details for DAG 'example_complex'."
get_dags_detailed_batch: "Get comprehensive details for all DAGs with execution history." โ
get_dags_detailed_batch(fetch_all=True)get_dags_detailed_batch: "Get details for active DAGs with latest run information." โ
get_dags_detailed_batch(is_active=True)get_dags_detailed_batch: "Get detailed info for ETL DAGs with recent execution data." โ
get_dags_detailed_batch(id_contains="etl")
Note: get_dags_detailed_batch returns each DAG with both configuration details (from get_dag()) and a latest_dag_run field containing the most recent execution information (run_id, state, execution_date, start_date, end_date, etc.).
dag_graph: "Show task graph for DAG 'example_complex'."
list_tasks: "List all tasks in DAG 'example_complex'."
dag_code: "Get source code for DAG 'example_complex'."
list_event_logs: "List event logs for DAG 'example_complex'."
list_event_logs: "Show event logs with ID from yesterday for all DAGs."
get_event_log: "Get event log entry with ID 12345."
all_dag_event_summary: "Show event count summary for all DAGs."
list_import_errors: "List import errors with ID."
get_import_error: "Get import error with ID 67890."
all_dag_import_summary: "Show import error summary for all DAGs."
dag_run_duration: "Get run duration stats for DAG 'example_complex'."
dag_task_duration: "Show latest run of DAG 'example_complex'."
dag_task_duration: "Show task durations for latest run of 'manual__xxxxx'."
dag_calendar: "Get calendar info for DAG 'example_complex' from last month."
dag_calendar: "Show DAG schedule for 'example_complex' from this week."
Date Calculation Examples
Tools automatically base relative date calculations on the server's current date/time:
User Input | Calculation Method | Example Format |
"yesterday" | current_date - 1 day | YYYY-MM-DD (1 day before current) |
"last week" | current_date - 7 days to current_date - 1 day | YYYY-MM-DD to YYYY-MM-DD (7 days range) |
"last 3 days" | current_date - 3 days to current_date | YYYY-MM-DD to YYYY-MM-DD (3 days range) |
"this morning" | current_date 00:00 to 12:00 | YYYY-MM-DDTHH:mm:ssZ format |
The server always uses its current date/time for these calculations.
Asset Management (API v2 Only)
Available only when AIRFLOW_API_VERSION=v2 (Airflow 3.0+):
list_assets: "Show all assets registered in the system." โ Lists all data assets for data-aware scheduling
list_assets: "Find assets with URI containing 's3://data-lake'." โ
list_assets(uri_pattern="s3://data-lake")list_asset_events: "Show recent asset events." โ Lists when assets were created or updated
list_asset_events: "Show asset events for specific URI." โ
list_asset_events(asset_uri="s3://bucket/file.csv")list_asset_events: "Find events produced by ETL DAGs." โ
list_asset_events(source_dag_id="etl_pipeline")
Data-Aware Scheduling Examples:
"Show me which assets trigger the customer_analysis DAG."
"List all assets created by the data_ingestion DAG this week."
"Find assets that haven't been updated recently."
"Show the data lineage for our ML training pipeline."
Contributing
๐ค Got ideas? Found bugs? Want to add cool features?
We're always excited to welcome new contributors! Whether you're fixing a typo, adding a new monitoring tool, or improving documentation - every contribution makes this project better.
Ways to contribute:
๐ Report issues or bugs
๐ก Suggest new Airflow monitoring features
๐ Improve documentation
๐ Submit pull requests
โญ Star the repo if you find it useful!
Pro tip: The codebase is designed to be super friendly for adding new tools. Check out the existing @mcp.tool() functions in airflow_api.py.
๐ ๏ธ Adding Custom Tools (Advanced)
This MCP server is designed for easy extensibility. After you have explored the main features and Quickstart, you can add your own custom tools as follows:
Step-by-Step Guide
1. Add Helper Functions (Optional)
Add reusable data functions to src/mcp_airflow_api/functions.py:
async def get_your_custom_data(target_resource: str = None) -> List[Dict[str, Any]]:
"""Your custom data retrieval function."""
# Example implementation - adapt to your service
data_source = await get_data_connection(target_resource)
results = await fetch_data_from_source(
source=data_source,
filters=your_conditions,
aggregations=["count", "sum", "avg"],
sorting=["count DESC", "timestamp ASC"]
)
return results2. Create Your MCP Tool
Add your tool function to src/mcp_airflow_api/airflow_api.py:
@mcp.tool()
async def get_your_custom_analysis(limit: int = 50, target_name: Optional[str] = None) -> str:
"""
[Tool Purpose]: Brief description of what your tool does
[Exact Functionality]:
- Feature 1: Data aggregation and analysis
- Feature 2: Resource monitoring and insights
- Feature 3: Performance metrics and reporting
[Required Use Cases]:
- When user asks "your specific analysis request"
- Your business-specific monitoring needs
Args:
limit: Maximum results (1-100)
target_name: Target resource/service name
Returns:
Formatted analysis results
"""
try:
limit = max(1, min(limit, 100)) # Always validate input
results = await get_your_custom_data(target_resource=target_name)
if results:
results = results[:limit]
return format_table_data(results, f"Custom Analysis (Top {len(results)})")
except Exception as e:
logger.error(f"Failed to get custom analysis: {e}")
return f"Error: {str(e)}"3. Update Imports (If Needed)
Add your helper function to imports in src/mcp_airflow_api/airflow_api.py:
from .functions import (
# ...existing imports...
get_your_custom_data, # Add your new function
)4. Update Prompt Template (Recommended)
Add your tool description to src/mcp_airflow_api/prompt_template.md for better natural language recognition:
### **Your Custom Analysis Tool**
### X. **get_your_custom_analysis**
**Purpose**: Brief description of what your tool does
**Usage**: "Show me your custom analysis" or "Get custom analysis for database_name"
**Features**: Data aggregation, resource monitoring, performance metrics
**Required**: `target_name` parameter for specific resource analysis5. Test Your Tool
# Local testing
./scripts/run-mcp-inspector-local.sh
# Or with Docker
docker-compose up -d
docker-compose logs -f mcp-server
# Test with natural language:
# "Show me your custom analysis"
# "Get custom analysis for target_name"That's it! Your custom tool is ready to use with natural language queries.
License
Freely use, modify, and distribute under the MIT License.
Available Tools
54 toolsall_dag_event_summaryB
[Tool Role]: Provides summary of event logs across all DAGs.
Inputs: no named parameters. Returns: object
all_dag_import_summaryB
[Tool Role]: Provides summary of import errors across all DAGs.
Inputs: no named parameters. Returns: object
create_connectionC
[Tool Role]: Creates a new connection.
Inputs: connection_data (required). Returns: object
dag_calendarC
[Tool Role]: Shows DAG schedule and execution calendar for a date range.
Inputs: dag_id (required), end_date (required), start_date (required). Returns: object
dag_codeC
[Tool Role]: Retrieves the source code for the specified DAG.
Inputs: dag_id (required). Returns: object
dag_graphB
[Tool Role]: Retrieves task graph structure for the specified DAG.
Inputs: dag_id (required). Returns: object
dag_run_durationC
[Tool Role]: Analyzes DAG run durations and performance metrics.
Inputs: dag_id (required), limit. Returns: object
dag_task_durationC
[Tool Role]: Analyzes task durations within a DAG run.
Inputs: dag_id (required), dag_run_id. Returns: object
delete_connectionC
[Tool Role]: Deletes a connection.
Inputs: connection_id (required). Returns: object
failed_dagsA
[Tool Role]: Lists all recently failed DAG runs in the Airflow cluster.
Inputs: no named parameters. Returns: object
get_configB
[Tool Role]: Retrieves Airflow configuration.
Inputs: no named parameters. Returns: object
get_config_sectionB
[Tool Role]: Gets all options within a specific configuration section.
Inputs: section_name (required). Returns: object
get_connectionA
[Tool Role]: Gets details for a specific connection.
Inputs: connection_id (required). Returns: object
get_dagC
[Tool Role]: Retrieves detailed information for a specific DAG.
Args: dag_id: The DAG ID to get details for
Returns: Comprehensive DAG details
Inputs: dag_id (required). Returns: object
get_dags_detailed_batchC
[Tool Role]: Retrieves detailed information for multiple DAGs in batch with latest run information.
Inputs: limit, offset, fetch_all, is_active, +3 more. Returns: object
get_datasetA
[Tool Role]: Gets details of a specific dataset (v1 API only - v2 uses Assets).
Inputs: dataset_uri (required). Returns: object
get_dataset_eventsB
[Tool Role]: Gets events for a specific dataset (v1 API only - v2 uses Assets).
Inputs: dataset_uri (required), limit, offset. Returns: object
get_event_logC
[Tool Role]: Retrieves a specific event log entry.
Inputs: event_log_id (required). Returns: object
get_healthA
[Tool Role]: Checks Airflow cluster health status.
Inputs: no named parameters. Returns: object
get_import_errorC
[Tool Role]: Retrieves a specific import error.
Inputs: import_error_id (required). Returns: object
get_poolC
[Tool Role]: Gets details for a specific pool.
Inputs: pool_name (required). Returns: object
get_prompt_templateA
[Tool Role]: Provides comprehensive prompt template for LLM interactions with Airflow operations.
Args: section: Optional section name to get specific part of template mode: Optional mode (summary/detailed) to control response verbosity
Returns: Comprehensive template or specific section for optimal LLM guidance
Inputs: mode, section. Returns: result
get_providerB
[Tool Role]: Gets details of a specific provider package.
Inputs: provider_name (required). Returns: object
get_task_instance_detailsC
[Tool Role]: Gets detailed information for a specific task instance.
Inputs: dag_id (required), task_id (required), dag_run_id (required). Returns: object
get_task_instance_extra_linksC
[Tool Role]: Gets extra links for a task instance.
Inputs: dag_id (required), task_id (required), dag_run_id (required). Returns: object
get_task_instance_logsC
[Tool Role]: Retrieves logs for a specific task instance.
Inputs: dag_id (required), task_id (required), dag_run_id (required), try_number. Returns: object
get_userA
[Tool Role]: Gets details of a specific user (v1 API only).
Inputs: username (required). Returns: object
get_variableA
[Tool Role]: Gets the value of a specific variable.
Inputs: variable_key (required). Returns: object
get_versionA
[Tool Role]: Gets Airflow version information.
Inputs: no named parameters. Returns: object
get_xcom_entryC
[Tool Role]: Gets a specific XCom entry.
Inputs: dag_id (required), task_id (required), xcom_key (required), dag_run_id (required). Returns: object
list_config_sectionsB
[Tool Role]: Lists all configuration sections with summary.
Inputs: no named parameters. Returns: object
list_connectionsC
[Tool Role]: Lists all connections in Airflow.
Inputs: limit, offset. Returns: object
list_dagsA
[Tool Role]: Lists all DAGs registered in the Airflow cluster with pagination support.
Args: limit: Maximum number of DAGs to return (default: 20) offset: Number of DAGs to skip for pagination (default: 0) fetch_all: If True, fetches all DAGs regardless of limit/offset id_contains: Filter DAGs by ID containing this string name_contains: Filter DAGs by display name containing this string
Returns: Dict containing dags list, pagination info, and total counts
Inputs: limit, offset, fetch_all, id_contains, +1 more. Returns: object
list_dataset_eventsB
[Tool Role]: Lists dataset events for data lineage tracking (v1 API only - v2 uses Assets).
Inputs: limit, offset, dataset_uri, source_dag_id. Returns: object
list_datasetsB
[Tool Role]: Lists all datasets in the Airflow system (v1 API only - v2 uses Assets).
Inputs: limit, offset, uri_pattern. Returns: object
list_event_logsC
[Tool Role]: Lists event logs from Airflow.
Inputs: limit, dag_id, offset. Returns: object
list_import_errorsC
[Tool Role]: Lists import errors in Airflow.
Inputs: limit, offset. Returns: object
list_permissionsA
[Tool Role]: Lists all permissions available in the Airflow system (v1 API only).
Inputs: no named parameters. Returns: object
list_pluginsA
[Tool Role]: Lists all installed plugins in the Airflow system.
Inputs: no named parameters. Returns: object
list_poolsC
[Tool Role]: Lists all pools in Airflow.
Inputs: limit, offset. Returns: object
list_providersA
[Tool Role]: Lists all provider packages installed in the Airflow system.
Inputs: no named parameters. Returns: object
list_rolesB
[Tool Role]: Lists all roles in the Airflow system (v1 API only).
Inputs: limit, offset. Returns: object
list_task_instances_allC
[Tool Role]: Lists task instances with comprehensive filtering options.
Inputs: pool, limit, state, dag_id, +11 more. Returns: object
list_task_instances_batchC
[Tool Role]: Lists task instances in batch with date and state filtering.
Inputs: limit, state, offset, start_date_gte, +1 more. Returns: object
list_tasksC
[Tool Role]: Lists all tasks within the specified DAG.
Inputs: dag_id (required). Returns: object
list_usersB
[Tool Role]: Lists all users in the Airflow system (v1 API only).
Inputs: limit, offset. Returns: object
list_variablesC
[Tool Role]: Lists all variables in Airflow.
Inputs: limit, offset. Returns: object
list_xcom_entriesB
[Tool Role]: Lists XCom entries for a specific task instance.
Inputs: dag_id (required), task_id (required), dag_run_id (required), limit, +1 more. Returns: object
pause_dagA
[Tool Role]: Pauses the specified Airflow DAG (prevents scheduling new runs).
Inputs: dag_id (required). Returns: object
running_dagsA
[Tool Role]: Lists all currently running DAG runs in the Airflow cluster.
Inputs: no named parameters. Returns: object
search_config_optionsB
[Tool Role]: Searches for configuration options matching a term.
Inputs: search_term (required). Returns: object
trigger_dagB
[Tool Role]: Triggers a new DAG run for a specified Airflow DAG.
Inputs: dag_id (required). Returns: object
unpause_dagB
[Tool Role]: Unpauses the specified Airflow DAG (allows scheduling new runs).
Inputs: dag_id (required). Returns: object
update_connectionC
[Tool Role]: Updates an existing connection.
Inputs: connection_id (required), connection_data (required). Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogโฆ
TDQS
Scored across 54 tools
Most tools clearly target distinct resources and actions, such as list_dags, get_dag, and trigger_dag. However, a few pairs like list_task_instances_all vs list_task_instances_batch and list_dataset_events vs get_dataset_events have overlapping purposes that could confuse an agent.
All 54 tools follow a consistent snake_case verb_noun pattern, such as get_user, list_plugins, trigger_dag, and pause_dag. Even longer names like get_dags_detailed_batch and list_task_instances_all maintain the same pattern, with no mixed naming conventions.
With 54 tools, this is an extremely large tool set for a single server. The number far exceeds the typical well-scoped range of 3-15 tools, and while Airflow is complex, many tools are redundant or could be consolidated, making the surface overwhelming for an agent.
The tool set provides broad read coverage for most Airflow resources, including DAGs, task instances, connections, variables, and pools, plus core actions like triggering, pausing, and unpausing DAGs. However, there are significant gaps in mutation operations, such as creating or updating variables, pools, and users, and missing common task management like clearing or retrying task instances.
Maintenance
Related MCP Connectors
Interact with your Google Cloud Composer resources using natural language commands.
Connect, monitor, and control AI agents โ tasks, approvals, schedules, and governance.
Deploy, monitor, and manage your OpenClaw AI assistants via natural language.
Manage projects, tasks, time tracking, and team collaboration through natural language.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables users to interact with Apache Airflow orchestration platform through natural language to query pipeline statuses, troubleshoot DAG failures, trigger DAGs, and analyze configurations.42 PyPI11MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Apache Airflow through the Model Context Protocol, allowing users to manage DAGs, task instances, variables, connections, pools, XComs, and datasets.MIT
- AlicenseNot gradedqualityCmaintenanceEnables natural language interaction with Apache Airflow for querying DAGs, monitoring execution, and troubleshooting failures.28 PyPI1MIT
- AlicenseNot gradedqualityCmaintenanceEnables natural language interaction with Home Assistant for managing entities, automations, services, and dashboards via the Model Context Protocol.154 npmMIT









