](https://mseep.ai/app/yangkyeongmo-mcp-server-apache-airflow)
MCP服务器-Apache Airflow
](https://smithery.ai/server/@yangkyeongmo/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} | ✅ | (翻译为中文可保持原样,或根据语境解释为“✅”表示“已确认”或“正确”) | ||||
| 修补多个有向无环图(DAGs) | /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}/dagRuns/{dag_run_id}/taskInstances/{task_id}/logs/{task_try_number} | ✅ | (可译为“ | ✅(勾选/正确) | ”或根据上下文简化为“ | ✅ | ”) |
| 清除任务实例 | /api/v1/dags/{dag_id}/clearTaskInstances | ✅ | (翻译为中文可保持原样,表示“正确”或“已确认”,若需文字说明则为“正确”) | ||||
| 设置任务实例状态 | /api/v1/dags/{dag_id}/updateTaskInstancesState | ✅ | (翻译为中文可以是) | 正确(✅) | |||
| 列出任务实例尝试 | /api/v1/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/tries | ✅ | (翻译为中文) | ✅ | (保持原样,因为“✅”是通用的表情符号,表示正确或确认,无需翻译) | ||
| 变量 | (此处可留空或根据上下文添加具体内容) | ||||||
| 列出变量 | /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(通常指“X-Com”系列游戏,可译为“X战警”系列,但具体翻译需根据上下文确定,此处为直译) | (此处可理解为一个空白或未填写的内容) | ||||||
| 列出 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 Stats(有向无环图统计) | |||||||
| 获取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= # Optional, defaults to http://localhost:8080
AIRFLOW_API_VERSION=v1 # Optional, defaults to v1
READ_ONLY=true # Optional, enables read-only mode (true/false, defaults to false)认证
选择以下认证方法之一:
基本身份验证(默认):
AIRFLOW_USERNAME=
AIRFLOW_PASSWORD=JWT令牌认证:
AIRFLOW_JWT_TOKEN=要获取JWT令牌,您可以使用Airflow的认证端点:
ENDPOINT_URL="http://localhost:8080" # Replace with your Airflow endpoint
curl -X 'POST' \
"${ENDPOINT_URL}/auth/token" \
-H 'Content-Type: application/json' \
-d '{ "username": "", "password": "" }'注如果同时提供了JWT令牌和基本身份验证凭据,则以JWT令牌为准。
与Claude桌面版的使用
添加到您的 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"
}
}
}
}JWT令牌认证:
{
"mcpServers": {
"mcp-server-apache-airflow": {
"command": "uvx",
"args": ["mcp-server-apache-airflow"],
"env": {
"AIRFLOW_HOST": "https://your-airflow-host",
"AIRFLOW_JWT_TOKEN": "your-jwt-token"
}
}
}
}对于只读模式(为安全起见,建议使用):
基本身份验证:
{
"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",
"READ_ONLY": "true"
}
}
}
}JWT令牌认证:
{
"mcpServers": {
"mcp-server-apache-airflow": {
"command": "uvx",
"args": ["mcp-server-apache-airflow", "--read-only"],
"env": {
"AIRFLOW_HOST": "https://your-airflow-host",
"AIRFLOW_JWT_TOKEN": "your-jwt-token"
}
}
}
}使用替代配置 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"
}
}
}
}JWT Token 认证:
{
"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_JWT_TOKEN": "your-jwt-token"
}
}
}
}替换 /path/to/mcp-server-apache-airflow 以及你克隆仓库的实际路径。
选择API组
您可以通过设置来选择您想要使用的API组 --apis 旗帜。
uv run mcp-server-apache-airflow --apis dag --apis dagrun默认使用所有API。
允许的值为:
- 配置
- 连接
- 白天
- “dagrun”可以翻译为“日常运行”或“日常任务”,具体含义取决于上下文。如果是指计算机或系统领域的术语,可能指的是系统的日常运行流程或任务安排。在更广泛的语境中,它也可以理解为日常的、常规的活动或工作
- “dagstats”可以翻译为“每日统计”。不过,这个词汇并不是一个标准的中文表达,它可能是根据英文原词直译过来的。在中文中,我们更常用“每日统计数据”或“日统计”来描述类似的概念。
- 数据集
- 事件日志
- 导入错误
- 监测
- 插件
- 泳池
- 提供者
- 任务实例
- 变量
- XCOM(通常指《XCOM》系列游戏,一款经典的策略类游戏)
只读模式
你可以通过使用以下方法以只读模式运行服务器: --read-only 通过设置标志或通过设置 READ_ONLY=true 环境变量。这将仅暴露执行读取操作(GET 请求)的工具,并排除任何创建、更新或删除资源的工具。
使用命令行标志:
uv run mcp-server-apache-airflow --read-only使用环境变量:
READ_ONLY=true uv run mcp-server-apache-airflow在只读模式下,服务器将仅提供以下工具:
- 列出有向无环图(DAGs)、DAG运行、任务、变量、连接等。
- 获取特定资源的详细信息
- 读取配置并监控信息
- 测试连接(非破坏性)
在只读模式下,无法执行创建、更新、删除DAG(有向无环图)、变量、连接,以及触发DAG运行等写入操作。
您可以将只读模式与API组选择结合使用:
uv run mcp-server-apache-airflow --read-only --apis dag --apis variable手动执行
你也可以手动运行服务器:
make runmake run 接受以下选项:
选项:
--port用于SSE监听的端口(默认:8000)--transport传输类型(stdio/sse/http,默认:stdio)
或者,您可以直接运行 SSE 服务器,它接受相同的参数:
make run-sse此外,您可以直接使用以下方式启动服务 uv 如下命令所示:
uv run src --transport http --port 8080通过Smithery进行安装
通过自动方式为Claude Desktop安装Apache Airflow MCP服务器 Smithery(注:此词在标准英语中并不常见,可能是特定语境或行业内的术语,直译为“史密斯工坊”或“史密斯制造”可能不完全准确,具体含义需根据上下文确定。若作为专有名词或品牌名,可保持原样或根据品牌官方译名翻译。):
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 进行测试,可用命令如下:
# Run all tests
make test代码质量
# Run linting
make lint
# Run code formatting
make format持续集成
该项目包含一个GitHub Actions工作流(.github/workflows/test.yml)自动地:
- 在 Python 3.10、3.11 和 3.12 上运行测试
- 使用 ruff 执行代码规范检查
- 在每次推送和拉取请求时运行
main分支
CI(持续集成)流水线确保在任何更改合并之前,代码质量和兼容性都能在所有支持的Python版本上得到保证。
做出贡献
欢迎贡献!请随时提交拉取请求。
当项目版本(project.version)更新时,该包会自动部署到PyPI pyproject.toml。 遵循语义化版本控制(SemVer)进行版本管理。
请在拉取请求(PR)中包含版本更新,以便将更改应用于核心逻辑。
