# mcp-server-apache-airflow
A Model Context Protocol (MCP) server implementation for Apache Airflow, enabling seamless integration with MCP clients. This project provides a standardized way to interact with Apache Airflow through the Model Context Protocol.
## About
This project implements a [Model Context Protocol](https://modelcontextprotocol.io/introduction) server that wraps Apache Airflow's REST API, allowing MCP clients to interact with Airflow in a standardized way.
## Feature Implementation Status
| Feature | API Path | Status |
|---------|----------|--------|
| **DAG Management** | | |
| List DAGs | `/api/v1/dags` | ✅ |
| Get DAG Details | `/api/v1/dags/{dag_id}` | ✅ |
| Pause DAG | `/api/v1/dags/{dag_id}` | ✅ |
| Unpause DAG | `/api/v1/dags/{dag_id}` | ✅ |
| Update DAG | `/api/v1/dags/{dag_id}` | ❌ |
| Delete DAG | `/api/v1/dags/{dag_id}` | ❌ |
| **DAG Runs** | | |
| List DAG Runs | `/api/v1/dags/{dag_id}/dagRuns` | ✅ |
| Create DAG Run | `/api/v1/dags/{dag_id}/dagRuns` | ✅ |
| Get DAG Run Details | `/api/v1/dags/{dag_id}/dagRuns/{dag_run_id}` | ❌ |
| Update DAG Run | `/api/v1/dags/{dag_id}/dagRuns/{dag_run_id}` | ❌ |
| Delete DAG Run | `/api/v1/dags/{dag_id}/dagRuns/{dag_run_id}` | ❌ |
| **Tasks** | | |
| List DAG Tasks | `/api/v1/dags/{dag_id}/tasks` | ✅ |
| Get Task Details | `/api/v1/dags/{dag_id}/tasks/{task_id}` | ❌ |
| Get Task Instance | `/api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}` | ✅ |
| List Task Instances | `/api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances` | ✅ |
| Update Task Instance | `/api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}` | ❌ |
| **System** | | |
| Get Import Errors | `/api/v1/importErrors` | ✅ |
| Get Import Error Details | `/api/v1/importErrors/{import_error_id}` | ✅ |
| Get Health Status | `/api/v1/health` | ✅ |
| Get Version | `/api/v1/version` | ✅ |
| **Variables** | | |
| List Variables | `/api/v1/variables` | ❌ |
| Create Variable | `/api/v1/variables` | ❌ |
| Get Variable | `/api/v1/variables/{variable_key}` | ❌ |
| Update Variable | `/api/v1/variables/{variable_key}` | ❌ |
| Delete Variable | `/api/v1/variables/{variable_key}` | ❌ |
| **Connections** | | |
| List Connections | `/api/v1/connections` | ❌ |
| Create Connection | `/api/v1/connections` | ❌ |
| Get Connection | `/api/v1/connections/{connection_id}` | ❌ |
| Update Connection | `/api/v1/connections/{connection_id}` | ❌ |
| Delete Connection | `/api/v1/connections/{connection_id}` | ❌ |
## Setup
### Environment Variables
Set the following environment variables:
```
AIRFLOW_HOST=<your-airflow-host>
AIRFLOW_USERNAME=<your-airflow-username>
AIRFLOW_PASSWORD=<your-airflow-password>
```
### Usage with Claude Desktop
Add to your `claude_desktop_config.json`:
```json
{
"mcpServers": {
"mcp-server-apache-airflow": {
"command": "uvx",
"args": ["mcp-server-apache-airflow"],
"env": {
"AIRFLOW_HOST": "https://your-airflow-host",
"AIRFLOW_USERNAME": "your-username",
"AIRFLOW_PASSWORD": "your-password"
}
}
}
}
```
Alternative configuration using `uv`:
```json
{
"mcpServers": {
"mcp-server-apache-airflow": {
"command": "uv",
"args": [
"--directory",
"/path/to/mcp-server-apache-airflow",
"run",
"mcp-server-apache-airflow"
],
"env": {
"AIRFLOW_HOST": "https://your-airflow-host",
"AIRFLOW_USERNAME": "your-username",
"AIRFLOW_PASSWORD": "your-password"
}
}
}
}
```
Replace `/path/to/mcp-server-apache-airflow` with the actual path where you've cloned the repository.
### Manual Execution
You can also run the server manually:
```bash
python src/server.py
```
Options:
- `--port`: Port to listen on for SSE (default: 8000)
- `--transport`: Transport type (stdio/sse, default: stdio)
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
[Add your license information here]
Raw data
{
"_id": null,
"home_page": null,
"name": "mcp-server-apache-airflow",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "airflow, apache-airflow, mcp, model-context-protocol",
"author": null,
"author_email": "Gyeongmo Yang <me@gmyang.dev>",
"download_url": "https://files.pythonhosted.org/packages/31/c6/d1e8b3c4cd4bfdb89bf5df9052f4eb03be68cb749e4a62d6038931e3e97c/mcp_server_apache_airflow-0.1.3.tar.gz",
"platform": null,
"description": "# mcp-server-apache-airflow\n\nA Model Context Protocol (MCP) server implementation for Apache Airflow, enabling seamless integration with MCP clients. This project provides a standardized way to interact with Apache Airflow through the Model Context Protocol.\n\n## About\n\nThis project implements a [Model Context Protocol](https://modelcontextprotocol.io/introduction) server that wraps Apache Airflow's REST API, allowing MCP clients to interact with Airflow in a standardized way.\n\n## Feature Implementation Status\n\n| Feature | API Path | Status |\n|---------|----------|--------|\n| **DAG Management** | | |\n| List DAGs | `/api/v1/dags` | \u2705 |\n| Get DAG Details | `/api/v1/dags/{dag_id}` | \u2705 |\n| Pause DAG | `/api/v1/dags/{dag_id}` | \u2705 |\n| Unpause DAG | `/api/v1/dags/{dag_id}` | \u2705 |\n| Update DAG | `/api/v1/dags/{dag_id}` | \u274c |\n| Delete DAG | `/api/v1/dags/{dag_id}` | \u274c |\n| **DAG Runs** | | |\n| List DAG Runs | `/api/v1/dags/{dag_id}/dagRuns` | \u2705 |\n| Create DAG Run | `/api/v1/dags/{dag_id}/dagRuns` | \u2705 |\n| Get DAG Run Details | `/api/v1/dags/{dag_id}/dagRuns/{dag_run_id}` | \u274c |\n| Update DAG Run | `/api/v1/dags/{dag_id}/dagRuns/{dag_run_id}` | \u274c |\n| Delete DAG Run | `/api/v1/dags/{dag_id}/dagRuns/{dag_run_id}` | \u274c |\n| **Tasks** | | |\n| List DAG Tasks | `/api/v1/dags/{dag_id}/tasks` | \u2705 |\n| Get Task Details | `/api/v1/dags/{dag_id}/tasks/{task_id}` | \u274c |\n| Get Task Instance | `/api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}` | \u2705 |\n| List Task Instances | `/api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances` | \u2705 |\n| Update Task Instance | `/api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}` | \u274c |\n| **System** | | |\n| Get Import Errors | `/api/v1/importErrors` | \u2705 |\n| Get Import Error Details | `/api/v1/importErrors/{import_error_id}` | \u2705 |\n| Get Health Status | `/api/v1/health` | \u2705 |\n| Get Version | `/api/v1/version` | \u2705 |\n| **Variables** | | |\n| List Variables | `/api/v1/variables` | \u274c |\n| Create Variable | `/api/v1/variables` | \u274c |\n| Get Variable | `/api/v1/variables/{variable_key}` | \u274c |\n| Update Variable | `/api/v1/variables/{variable_key}` | \u274c |\n| Delete Variable | `/api/v1/variables/{variable_key}` | \u274c |\n| **Connections** | | |\n| List Connections | `/api/v1/connections` | \u274c |\n| Create Connection | `/api/v1/connections` | \u274c |\n| Get Connection | `/api/v1/connections/{connection_id}` | \u274c |\n| Update Connection | `/api/v1/connections/{connection_id}` | \u274c |\n| Delete Connection | `/api/v1/connections/{connection_id}` | \u274c |\n\n## Setup\n\n### Environment Variables\n\nSet the following environment variables:\n```\nAIRFLOW_HOST=<your-airflow-host>\nAIRFLOW_USERNAME=<your-airflow-username>\nAIRFLOW_PASSWORD=<your-airflow-password>\n```\n\n### Usage with Claude Desktop\n\nAdd to your `claude_desktop_config.json`:\n\n```json\n{\n \"mcpServers\": {\n \"mcp-server-apache-airflow\": {\n \"command\": \"uvx\",\n \"args\": [\"mcp-server-apache-airflow\"],\n \"env\": {\n \"AIRFLOW_HOST\": \"https://your-airflow-host\",\n \"AIRFLOW_USERNAME\": \"your-username\",\n \"AIRFLOW_PASSWORD\": \"your-password\"\n }\n }\n }\n}\n```\n\nAlternative configuration using `uv`:\n\n```json\n{\n \"mcpServers\": {\n \"mcp-server-apache-airflow\": {\n \"command\": \"uv\",\n \"args\": [\n \"--directory\",\n \"/path/to/mcp-server-apache-airflow\",\n \"run\",\n \"mcp-server-apache-airflow\"\n ],\n \"env\": {\n \"AIRFLOW_HOST\": \"https://your-airflow-host\",\n \"AIRFLOW_USERNAME\": \"your-username\",\n \"AIRFLOW_PASSWORD\": \"your-password\"\n }\n }\n }\n}\n```\n\nReplace `/path/to/mcp-server-apache-airflow` with the actual path where you've cloned the repository.\n\n### Manual Execution\n\nYou can also run the server manually:\n```bash\npython src/server.py\n```\n\nOptions:\n- `--port`: Port to listen on for SSE (default: 8000)\n- `--transport`: Transport type (stdio/sse, default: stdio)\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\n[Add your license information here]\n\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Model Context Protocol (MCP) server for Apache Airflow",
"version": "0.1.3",
"project_urls": {
"Bug Tracker": "https://github.com/yangkyeongmo/mcp-server-apache-airflow/issues",
"Homepage": "https://github.com/yangkyeongmo/mcp-server-apache-airflow",
"Repository": "https://github.com/yangkyeongmo/mcp-server-apache-airflow.git"
},
"split_keywords": [
"airflow",
" apache-airflow",
" mcp",
" model-context-protocol"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "1aabc429094fd0e7cfada96347d89bd60e17b3e25de071fbbace88e0b037034f",
"md5": "d95a5b2f43c37bb7783b39aebf94fcbb",
"sha256": "9a87b44f57b9957ae2845e71dcaf9bf7cec60f17db66e092ba8719a7ec6d1274"
},
"downloads": -1,
"filename": "mcp_server_apache_airflow-0.1.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d95a5b2f43c37bb7783b39aebf94fcbb",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 7126,
"upload_time": "2025-02-14T04:19:22",
"upload_time_iso_8601": "2025-02-14T04:19:22.034366Z",
"url": "https://files.pythonhosted.org/packages/1a/ab/c429094fd0e7cfada96347d89bd60e17b3e25de071fbbace88e0b037034f/mcp_server_apache_airflow-0.1.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "31c6d1e8b3c4cd4bfdb89bf5df9052f4eb03be68cb749e4a62d6038931e3e97c",
"md5": "4bbc3e97120551c02a22f7ab8fd20888",
"sha256": "47955e2dc7adead1044d784c1344badb778260aab2330928286ab5251924aafd"
},
"downloads": -1,
"filename": "mcp_server_apache_airflow-0.1.3.tar.gz",
"has_sig": false,
"md5_digest": "4bbc3e97120551c02a22f7ab8fd20888",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 5986,
"upload_time": "2025-02-14T04:19:23",
"upload_time_iso_8601": "2025-02-14T04:19:23.817324Z",
"url": "https://files.pythonhosted.org/packages/31/c6/d1e8b3c4cd4bfdb89bf5df9052f4eb03be68cb749e4a62d6038931e3e97c/mcp_server_apache_airflow-0.1.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-14 04:19:23",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "yangkyeongmo",
"github_project": "mcp-server-apache-airflow",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "mcp-server-apache-airflow"
}