mcp-server-apache-airflow
一个用于 Apache Airflow 的模型上下文协议(MCP)服务器实现,可无缝集成 MCP 客户端。该项目提供了一种标准化的方式来通过模型上下文协议与 Apache Airflow 进行交互。
关于
该项目实现了一个 模型上下文协议 服务器,该服务器封装了 Apache Airflow 的 REST API,允许 MCP 客户端以标准化的方式与 Airflow 进行交互。它使用官方的 Apache Airflow 客户端库以确保兼容性和可维护性。
功能实现状态
| 功能 | API 路径 | 状态 |
|---|---|---|
| DAG 管理 | ||
| 列出 DAGs | /api/v1/dags | ✅ |
| 获取 DAG 详情 | /api/v1/dags/{dag_id} | ✅ |
| 暂停 DAG | /api/v1/dags/{dag_id} | ✅ |
| 恢复 DAG | /api/v1/dags/{dag_id} | ✅ |
| 更新 DAG | /api/v1/dags/{dag_id} | ✅ |
| 删除 DAG | /api/v1/dags/{dag_id} | ✅ |
| 获取 DAG 源 | /api/v1/dagSources/{file_token} | ✅ |
| 批量修补 DAG | /api/v1/dags | ✅ |
| 重新解析 DAG 文件 | /api/v1/dagSources/{file_token}/reparse | ✅ |
| DAG 运行 | ||
| 列出 DAG 运行 | /api/v1/dags/{dag_id}/dagRuns | ✅ |
| 创建 DAG 运行 | /api/v1/dags/{dag_id}/dagRuns | ✅ |
| 获取 DAG 运行详情 | /api/v1/dags/{dag_id}/dagRuns/{dag_run_id} | ✅ |
| 更新 DAG 运行 | /api/v1/dags/{dag_id}/dagRuns/{dag_run_id} | ✅ |
| 删除 DAG 运行 | /api/v1/dags/{dag_id}/dagRuns/{dag_run_id} | ✅ |
| 批量获取 DAG 运行 | /api/v1/dags/~/dagRuns/list | ✅ |
| 清除 DAG 运行 | /api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/clear | ✅ |
| 设置 DAG 运行备注 | /api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/setNote | ✅ |
| 获取上游数据集事件 | /api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/upstreamDatasetEvents | ✅ |
| 任务 | ||
| 列出 DAG 任务 | /api/v1/dags/{dag_id}/tasks | ✅ |
| 获取任务详情 | /api/v1/dags/{dag_id}/tasks/{task_id} | ✅ |
| 获取任务实例 | /api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id} | ✅ |
| 列出任务实例 | /api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances | ✅ |
| 更新任务实例 | /api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id} | ✅ |
| 清除任务实例 | /api/v1/dags/{dag_id}/clearTaskInstances | ✅ |
| 设置任务实例状态 | /api/v1/dags/{dag_id}/updateTaskInstancesState | ✅ |
| 变量 | ||
| 列出变量 | /api/v1/variables | ✅ |
| 创建变量 | /api/v1/variables | ✅ |
| 获取变量 | /api/v1/variables/{variable_key} | ✅ |
| 更新变量 | /api/v1/variables/{variable_key} | ✅ |
| 删除变量 | /api/v1/variables/{variable_key} | ✅ |
| 连接 | ||
| 列出连接 | /api/v1/connections | ✅ |
| 创建连接 | /api/v1/connections | ✅ |
| 获取连接 | /api/v1/connections/{connection_id} | ✅ |
| 更新连接 | /api/v1/connections/{connection_id} | ✅ |
| 删除连接 | /api/v1/connections/{connection_id} | ✅ |
| 测试连接 | /api/v1/connections/test | ✅ |
| 池 | ||
| 列出池 | /api/v1/pools | ✅ |
| 创建池 | /api/v1/pools | ✅ |
| 获取池 | /api/v1/pools/{pool_name} | ✅ |
| 更新池 | /api/v1/pools/{pool_name} | ✅ |
| 删除池 | /api/v1/pools/{pool_name} | ✅ |
| XComs | ||
| 列出 XComs | /api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/xcomEntries | ✅ |
| 获取 XCom 条目 | /api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/xcomEntries/{xcom_key} | ✅ |
| 数据集 | ||
| 列出数据集 | /api/v1/datasets | ✅ |
| 获取数据集 | /api/v1/datasets/{uri} | ✅ |
| 获取数据集事件 | /api/v1/datasetEvents | ✅ |
| 创建数据集事件 | /api/v1/datasetEvents | ✅ |
| 获取 DAG 数据集排队事件 | /api/v1/dags/{dag_id}/dagRuns/queued/datasetEvents/{uri} | ✅ |
| 获取 DAG 数据集排队事件 | /api/v1/dags/{dag_id}/dagRuns/queued/datasetEvents | ✅ |
| 删除 DAG 数据集排队事件 | /api/v1/dags/{dag_id}/dagRuns/queued/datasetEvents/{uri} | ✅ |
| 删除 DAG 数据集排队事件 | /api/v1/dags/{dag_id}/dagRuns/queued/datasetEvents | ✅ |
| 获取数据集排队事件 | /api/v1/datasets/{uri}/dagRuns/queued/datasetEvents | ✅ |
| 删除数据集排队事件 | /api/v1/datasets/{uri}/dagRuns/queued/datasetEvents | ✅ |
| 监控 | ||
| 获取健康状态 | /api/v1/health | ✅ |
| DAG 统计 | ||
| 获取 DAG 统计 | /api/v1/dags/statistics | ✅ |
| 配置 | ||
| 获取配置 | /api/v1/config | ✅ |
| 插件 | ||
| 获取插件 | /api/v1/plugins | ✅ |
| 提供者 | ||
| 列出提供者 | /api/v1/providers | ✅ |
| 事件日志 | ||
| 列出事件日志 | /api/v1/eventLogs | ✅ |
| 获取事件日志 | /api/v1/eventLogs/{event_log_id} | ✅ |
| 系统 | ||
| 获取导入错误 | /api/v1/importErrors | ✅ |
| 获取导入错误详情 | /api/v1/importErrors/{import_error_id} | ✅ |
| 获取健康状态 | /api/v1/health | ✅ |
| 获取版本 | /api/v1/version | ✅ |
设置
依赖项
该项目依赖于官方的 Apache Airflow 客户端库(apache-airflow-client)。在安装此包时,它将自动安装。
环境变量
设置以下环境变量:
AIRFLOW_HOST=<your-airflow-host> # 可选,默认为 http://localhost:8080
AIRFLOW_USERNAME=<your-airflow-username>
AIRFLOW_PASSWORD=<your-airflow-password>
AIRFLOW_API_VERSION=v1 # 可选,默认为 v1
与 Claude Desktop 一起使用
将以下内容添加到您的 claude_desktop_config.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"
}
}
}
}
对于只读模式(推荐用于安全目的):
{
"mcpServers": {
"mcp-server-apache-airflow": {
"command": "uvx",
"args": ["mcp-server-apache-airflow", "--read-only"],
"env": {
"AIRFLOW_HOST": "https://your-airflow-host",
"AIRFLOW_USERNAME": "your-username",
"AIRFLOW_PASSWORD": "your-password"
}
}
}
}
使用 uv 的替代配置:
{
"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"
}
}
}
}
将 /path/to/mcp-server-apache-airflow 替换为您克隆存储库的实际路径。
选择 API 组
您可以通过设置 --apis 标志来选择您想要使用的 API 组。
uv run mcp-server-apache-airflow --apis "dag,dagrun"
默认情况下会使用所有 API。
允许的值是:
- config
- connections
- dag
- dagrun
- dagstats
- dataset
- eventlog
- importerror
- monitoring
- plugin
- pool
- provider
- taskinstance
- variable
- xcom
只读模式
您可以通过使用 --read-only 标志以只读模式运行服务器。这将仅暴露执行读操作(GET 请求)的工具,并排除任何创建、更新或删除资源的工具。
uv run mcp-server-apache-airflow --read-only
在只读模式下,服务器将仅暴露以下工具:
- 列出 DAGs、DAG 运行、任务、变量、连接等
- 获取特定资源的详情
- 读取配置和监控信息
- 测试连接(非破坏性)
只读模式下不可用的写操作包括创建、更新、删除 DAGs、变量、连接、触发 DAG 运行等。
您可以结合只读模式与 API 组选择:
uv run mcp-server-apache-airflow --read-only --apis "dag,variable"
手动执行
您也可以手动运行服务器:
make run
make run 接受以下选项:
选项:
--port: 用于 SSE 的监听端口(默认:8000)--transport: 传输类型(stdio/sse,默认:stdio)
或者,您可以直接运行 sse 服务器,它接受相同的参数:
make run-sse
通过 Smithery 安装
要通过 Smithery 自动安装 Apache Airflow MCP 服务器,请执行以下命令:
npx -y @smithery/cli install @yangkyeongmo/mcp-server-apache-airflow --client claude
开发
设置开发环境
- 克隆存储库:
git clone https://github.com/yangkyeongmo/mcp-server-apache-airflow.git
cd mcp-server-apache-airflow
- 安装开发依赖项:
uv sync --dev
- 创建
.env文件用于环境变量(开发可选):
touch .env
注意:运行测试不需要环境变量。开发测试的
AIRFLOW_HOST默认为http://localhost:8080。
运行测试
该项目使用 pytest 进行测试,提供以下命令:
# 运行所有测试
make test
代码质量
# 运行代码检查
make lint
# 运行代码格式化
make format
持续集成
该项目包含一个 GitHub Actions 工作流(.github/workflows/test.yml),该工作流自动执行:
- 在 Python 3.10、3.11 和 3.12 上运行测试
- 使用 ruff 执行代码检查
- 在每次推送和
main分支的拉取请求上运行
CI 管道确保在合并任何更改之前,代码质量和跨支持的 Python 版本的兼容性。
贡献
欢迎贡献!请随时提交 Pull Request。
当项目版本 project.version 在 pyproject.toml 中更新时,包将自动部署到 PyPI。
请遵循 semver 进行版本控制。
请确保在 PR 中包含版本更新,以便将更改应用到核心逻辑。
