mcpField
D
Dagster Mcp

Dagster Mcp

本地服务
github.com/fabdendev云与基础设施184 周前更新

关于 Dagster Mcp

该 MCP 服务让 AI Agent 监控并操作 Dagster 实例,涵盖运行、资产、作业、调度器、传感器和实例健康状况。支持多个环境,并可通过配置启用写操作。

主要功能

  1. 01查询运行状态、日志与失败摘要
  2. 02搜索资产并检查健康度
  3. 03查看作业、调度器和传感器
  4. 04检查实例及代码位置状态
  5. 05操作运行、资产和调度组件
  6. 06配置多个 Dagster 环境

适用场景

  1. 01诊断失败的数据管道运行
  2. 02发现过期或不健康的资产
  3. 03检查未触发的调度和传感器
  4. 04启动作业或停止卡住的运行

MCP 相关

该 MCP 服务向 MCP 客户端提供 Dagster 运行、资产、作业、调度器、传感器和实例管理工具。默认仅开放读取工具;将 DAGSTER_READ_ONLY 设为 false 可启用写操作。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"dagster": {
"command": "uvx",
"args": [
"dagster-mcp"
],
"env": {
"DAGSTER_URL": "<DAGSTER_URL>"
}
}
}
}
启动命令uvx dagster-mcp
需要配置的环境变量
DAGSTER_URL

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypidagster-mcp

工具

17

收录的工具列表 · 更新于 2 周前

参数类型必填说明
envany否
limitinteger否
job_nameany否
statusesany否

详细介绍

Dagster MCP

PyPI version Downloads License: MIT Python 3.12+ Tests

一个 MCP 服务,让 AI Agent 全面查看和控制你的 Dagster 实例——就像是数据管道的 SRE。

兼容任何 MCP 客户端:Claude Code、Claude Desktop、Cursor 等。

Dagster 官方开发并支持自己的 Dagster Plus MCP 服务。请参阅此处的文档。

为什么要开发它

数据管道会在凌晨 3 点发生故障。计划任务可能悄无声息地停止触发。资产会变得陈旧。与其醒来后面对满屏红色的仪表盘,不如为 AI Agent 提供工具,让它自主监控、诊断和修复你的 Dagster 实例。

Agent: Checking instance health...
       get_instance_status() -> healthy: false, daemon "SCHEDULER" unhealthy

Agent: Scheduler daemon is down. Let me check recent failures...
       get_runs(statuses=["FAILURE"], limit=5) -> 3 failed runs in the last hour

Agent: Diagnosing the most recent failure...
       get_run_failure_summary("run_abc123") ->
         failed_steps: ["transform_orders"]
         root_cause: "NullPointerError: column 'price' is null"
         suggestions: ["Single step failed — consider re-running from failure"]

Agent: Re-launching the failed job...
       launch_job("etl_pipeline", "my_project") -> run_id: "run_def456", status: STARTED

Agent: One sensor keeps firing on bad data. Checking its ticks...
       get_tick_history("orders_sensor", "SENSOR") -> 12 consecutive FAILURE ticks

Agent: Stopping it until the upstream fix lands...
       stop_sensor("orders_sensor") -> status: STOPPED

功能

提供 6 类共 27 个工具,专为自主 DataOps 工作流设计:

类别工具Agent 可以执行的操作
运行get_runs get_run_status get_run_logs get_run_stats get_run_failure_summary查找故障、诊断根本原因、检查日志和步骤耗时
资产search_assets resolve_asset_selection get_asset_details get_recent_materializations get_asset_health发现资产、预览沿袭选择、检查新鲜度、检测陈旧数据
作业list_jobs查看不同代码位置中的作业清单,可选按存储库或位置筛选
计划任务与传感器list_schedules list_sensors get_tick_history检测无声故障、遗漏的触发和传感器错误
实例get_instance_status list_code_locations list_backfills全局运行状况检查、守护进程状态、代码位置错误
操作materialize_assets backfill_assets launch_job launch_job_with_partitions terminate_run start_schedule stop_schedule start_sensor stop_sensor reload_code_location使用配置物化具体资产、回填分区、启动作业、停止卡住的运行、启动或停止计划任务和传感器、部署后重新加载

操作默认关闭:设置 DAGSTER_READ_ONLY=false 以启用写入操作。

快速开始

前提条件
  • Python 3.12+
  • uv(推荐)或 pip
  • 正在运行的 Dagster 实例(可自托管或使用 Cloud)
安装

此软件包已发布到 PyPI。

选项 A — 使用 uvx 直接运行(无需安装):

uvx dagster-mcp

选项 B — 使用 pip 安装:

pip install dagster-mcp

选项 C — 克隆并运行:

git clone https://github.com/fabdendev/dagster-mcp.git
cd dagster-mcp
uv sync
配置
单一环境
变量说明默认值
DAGSTER_URLDagster 实例的基础 URLhttp://localhost:3000
DAGSTER_API_TOKENDagster Cloud API 令牌(自托管时留空)(empty)
DAGSTER_EXTRA_HEADERS要发送至 Dagster GraphQL 的额外请求头 JSON 对象(empty)
DAGSTER_READ_ONLY为 true 时,仅提供读取工具(不提供启动/终止/重新加载操作,也不提供启动/停止计划任务或传感器的操作)true

自托管:

export DAGSTER_URL=http://localhost:3000

Dagster Cloud:

export DAGSTER_URL=https://myorg.dagster.cloud/prod
export DAGSTER_API_TOKEN=your-dagster-cloud-user-token

自定义身份验证/代理请求头:

export DAGSTER_EXTRA_HEADERS='{"Authorization":"Bearer your-token","X-My-Header":"value"}'
多个环境

使用 DAGSTER_ENVS 在一台服务器中配置多个 Dagster 实例。之后,每个工具都会接受可选的 env 参数,以便 LLM 定位到正确的实例。

变量描述默认值
DAGSTER_ENVS将环境名称映射到 {url, token?, extra_headers?} 配置的 JSON 对象(空)
DAGSTER_DEFAULT_ENV未向工具传递 env 时使用的环境名称(空)
export DAGSTER_ENVS='{
  "prod": {"url": "https://myorg.dagster.cloud/prod", "token": "prod-token"},
  "staging": {"url": "https://myorg.dagster.cloud/staging", "token": "stg-token"},
  "dev": {"url": "http://localhost:3000"}
}'
export DAGSTER_DEFAULT_ENV=prod

设置 DAGSTER_ENVS 后,DAGSTER_URL / DAGSTER_API_TOKEN / DAGSTER_EXTRA_HEADERS 将被忽略。如果只定义了一个环境,即使未设置 DAGSTER_DEFAULT_ENV,也会自动使用该环境。

添加到 MCP 客户端
Claude Code

添加到 ~/.claude/settings.json:

单个环境:

{
  "mcpServers": {
    "dagster": {
      "command": "uvx",
      "args": ["dagster-mcp"],
      "env": {
        "DAGSTER_URL": "http://localhost:3000"
      }
    }
  }
}

多个环境:

{
  "mcpServers": {
    "dagster": {
      "command": "uvx",
      "args": ["dagster-mcp"],
      "env": {
        "DAGSTER_ENVS": "{\"prod\":{\"url\":\"https://myorg.dagster.cloud/prod\",\"token\":\"prod-token\"},\"dev\":{\"url\":\"http://localhost:3000\"}}",
        "DAGSTER_DEFAULT_ENV": "prod"
      }
    }
  }
}
Claude Desktop

添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "dagster": {
      "command": "uvx",
      "args": ["dagster-mcp"],
      "env": {
        "DAGSTER_URL": "http://localhost:3000"
      }
    }
  }
}
从本地克隆版本使用
{
  "mcpServers": {
    "dagster": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/dagster-mcp", "dagster-mcp"],
      "env": {
        "DAGSTER_URL": "http://localhost:3000"
      }
    }
  }
}

工具参考

Runs
工具描述
get_runs列出最近的运行,可按作业名称和/或状态筛选
get_run_status获取状态、配置、标签和运行沿袭关系(通过 rootRunId/parentRunId 查看重新执行链)
get_run_logs获取带分页和可选级别筛选(ERROR、WARNING、INFO)的结构化日志事件;EngineEvent 事件包含 metadataEntries
get_run_stats获取逐步执行统计信息:耗时、物化结果和预期结果
get_run_failure_summary综合故障诊断——通过一次调用获取失败步骤、根因错误、步骤耗时和建议
Assets
工具描述
search_assets按键前缀或组名称查找资产
resolve_asset_selection将键/组/标签/类型/所有者谓词、通配符、布尔逻辑、根节点/汇节点和沿袭遍历解析为具体资产键,不会启动任何操作
get_asset_details获取描述、上游/下游依赖关系、分区和最新物化结果
get_recent_materializations获取资产的物化历史记录及元数据
get_asset_health综合健康视图——查看过期情况、新鲜度策略和上次运行状态(适用于单个资产或整个组)
两步资产工作流

首先解析并检查选择表达式:

resolve_asset_selection(
  asset_selection="group:analytics and (kind:dbt or key:*benchmark)"
)

→ {
    "asset_keys": [
      "warehouse/analytics/orders",
      "warehouse/analytics/reranker_benchmark"
    ],
    "assets": [...]
  }

对于具体的非分区资产,将返回的键以及所需的启动配置和标签传递给 materialize_assets:

materialize_assets(
  asset_keys=[
    "warehouse/analytics/orders",
    "warehouse/analytics/reranker_benchmark"
  ],
  run_config={"ops": {"benchmark": {"config": {"limit": 1000}}}},
  tags={"triggered_by": "agent"}
)

对于分区资产,则将相同的已解析键传递给 backfill_assets:

backfill_assets(
  asset_keys=["warehouse/analytics/daily_orders"],
  partition_start="2026-07-01",
  partition_end="2026-07-07",
  run_config={"resources": {"warehouse": {"config": {"pool": "benchmark"}}}}
)

只读和读写模式均可使用 resolve_asset_selection。 它会返回外部、可观察、不可执行和分区匹配项,以便调用方检查完整结果。写入工具会在执行前重新获取当前资产定义。resolve_asset_selection 和 materialize_assets 要求 Dagster 1.9+。

作业、计划与传感器
工具说明
list_jobs列出各代码位置中的作业,可选按精确的 repository_name 和/或 location_name 筛选(用于查找 launch_job 所需的名称)
list_schedules列出计划及其状态(RUNNING/STOPPED)、cron、目标作业和下一次触发时间
list_sensors列出传感器及其状态和目标作业
get_tick_history查看计划或传感器逐次触发的历史记录——检测无声故障的关键工具。可选传入 repository_name / location_name,以区分多个代码位置中同名的对象

list_jobs 的筛选条件相互独立,组合使用时采用 AND 语义。例如,list_jobs(repository_name="example_repository") 会跨代码位置查找该存储库,而 list_jobs(repository_name="example_repository", location_name="example_location") 则指定一个存储库与代码位置组合。只使用一个筛选条件的调用会先发送轻量级的存储库发现请求,再批量请求作业信息;这并非免费:它会多产生一次与 Dagster 的往返请求,以便在只有部分存储库匹配时缩小负载。每次调用的请求数:无筛选条件时为 1,同时使用两个筛选条件时为 1,仅使用一个筛选条件时为 2。

如果与筛选条件相关的代码位置加载失败或仍在加载,list_jobs 会抛出包含该位置名称的 RuntimeError,而不是悄然返回空结果——筛选结果为空,意味着 Dagster 实际能够加载的代码位置中没有匹配项。筛选结果非空时,仍可能不完整:如果有些存储库匹配,list_jobs 就会返回这些存储库,而不会抛出异常,即使另一个代码位置无法搜索也是如此。此检查会随上述相同请求一并进行(workspaceOrError,list_code_locations 本来就会查询它),因此不会增加额外的往返请求。不带筛选条件的调用(无筛选条件的 list_jobs())保持不变:它会省略此检查,并继续返回当前已加载的所有内容,因为 Agent 不会像误读空筛选结果那样,把冗长的清单误读为“什么都不存在”——可使用 list_code_locations 或 get_instance_status 直接检查加载状态。

实例与代码位置
工具说明
get_instance_status从这里开始——全局运行状况:守护进程状态、排队的运行数、代码位置错误
list_code_locations列出所有代码位置及其加载状态
list_backfills列出近期回填及其状态和分区进度
写入操作
工具描述
materialize_assets使用运行配置和标签启动具体的未分区资产键;推断一个兼容的仓库/作业,包含兼容的检查,并扩展必需的不可子集多资产邻项。启动失败时,不会抛出异常,而是返回预检上下文以及 error 和 message,并省略 launched_asset_keys
backfill_assets按资产选择启动分区回填,可选运行配置;在服务端遵循每个资产的 BackfillPolicy
launch_job启动指定名称的作业;为保持兼容,仍支持 asset_keys,并通过 GraphQL assetSelection 传递,但更推荐使用两步资产工作流
launch_job_with_partitions为一个或多个分区键启动分区作业;创建回填(支持使用 from_failure 仅重试失败的步骤)
start_schedule启动(启用)一个调度,使其按 cron 启动运行
stop_schedule停止(禁用)一个调度——状态会在重启后保留;不会终止正在运行的任务
start_sensor启动(启用)一个传感器,使其恢复评估
stop_sensor停止(禁用)一个传感器——通过 get_tick_history 发现失控或报错的传感器时,可使用此工具将其停止

调度/传感器名称仅在仓库内唯一。如果多个代码位置存在同名对象,启动/停止工具会拒绝操作并列出候选项;传入 repository_name / location_name 可消除歧义。调用成功时会回显解析出的 repository 和 location。 | terminate_run | 停止卡住或失控的运行 | | reload_code_location | 部署后重新加载代码位置 |

写入工具要求 DAGSTER_READ_ONLY=false(默认为 true)。

与 Dagster 官方 AI 工具的区别

Dagster 构建并支持自己的 AI 工具。如果你是 Dagster+ 客户,请优先使用官方工具——它们由 Dagster 一方提供,无需本地运行时,并且可以访问 Dagster+ 平台对象(警报、Issues、Insights),而本项目无法访问这些对象。本项目主要面向运行开源/可自托管 Dagster 的用户;官方服务器文档中的设置说明未涵盖这类用户。

“官方”列中的所有内容均来自 Dagster 自己的文档 https://docs.dagster.io/guides/labs/dagster-mcp(检索日期:2026-07-30),或来自 Dagster 在 #21 中的直接说明。Dagster 的文档并未声明不支持开源或可自托管的 Dagster;文档说明的是由 Dagster 托管的 URL、必需的 Dagster-Cloud-Organization 标头,以及 Dagster+ 用户令牌。其功能矩阵只是当前情况的快照,Dagster 也预计会继续扩展功能,因此请将下方的差异视为当前情况,而非永久不变。

dagster-mcp(本项目)Dagster+ MCP 服务(官方)dagster-expert skill(官方)
它是什么由你自行运行的 MCP 服务(Python,MIT)由 Dagster 托管的远程 MCP 端点:https://mcp.agent.dagster.cloud/mcp一种 Agent Skill——由编码 Agent 加载的 Markdown 指令,而非 MCP 服务
使用时机运维期间,针对正在运行的实例运维期间,针对 Dagster+ 部署开发期间,针对你的本地代码库
适用于自托管 / OSS Dagster是 — 可指向任何 Dagster Web 服务器(DAGSTER_URL,默认值为 http://localhost:3000;会追加 /graphql)。无需令牌根据文档中的设置,不适用:唯一提供的 URL 由 Dagster 托管,连接时需要 Dagster-Cloud-Organization 标头和 Dagster+ 用户令牌是 — Apache-2.0 Markdown 文件,可复制到本地
适用于 Dagster+是 — 会发送 Dagster-Cloud-Api-Token 标头;可通过 DAGSTER_EXTRA_HEADERS 添加其他标头是 — 这是其文档中唯一支持的目标不适用
设置由 MCP 客户端启动的本地进程(Python 3.12+,例如 uvx dagster-mcp),通过环境变量配置无需本地运行时:claude mcp add --transport http dagster-plus https://mcp.agent.dagster.cloud/mcp --header "Dagster-Cloud-Organization: …" --header "Authorization: Bearer …"将 skill 文件复制到你的 Agent 中
成熟度PyPI 上的 v0.8.0(未达 1.0),MIT,由一位维护者维护,偶有外部贡献,按“原样”提供,不提供任何形式的保证,无 SLADagster 标注为预览版:“正在积极开发中,尚未准备好用于生产……API 可能会发生变化”,并发布在 /guides/labs/ 下当前版本,无预览版标记
运行查看、启动、终止、逐步统计、日志检索、汇总故障摘要查看 ✅、创建/启动 ✅、删除/终止 ✅、Insights 指标 ✅、更新 ❌(Dagster 的矩阵);运行日志查看 ✅不适用
资产查看、搜索、健康状态、解析选择语法,以及物化指定资产(resolve_asset_selection → materialize_assets,支持运行配置和分区范围)查看 ✅ 和 Insights 指标 ✅;创建/启动、更新和删除均标记为 ❌——即没有资产级物化工具,但支持启动运行不适用
计划和传感器列出、查看触发历史、启动/停止目前不支持 — Dagster 已确认,并预计会添加此功能不适用
回填和分区列出回填、启动分区作业、按分区范围回填资产Dagster 的功能矩阵中未列出不适用
代码位置和实例健康状态列出/重新加载代码位置、实例状态、守护进程心跳、排队运行数量部署查看 ✅ 和 Insights ✅;未列出代码位置和守护进程健康状态(Dagster+ 会管理守护进程)不适用
告警、Insights、Dagster+ Issues不支持 — 没有告警、成本/Insights 指标或 Issues 等效功能告警策略和 Dagster+ Issues:查看 / 创建 / 更新 / 删除均为 ✅。运行、资产和部署均支持 Insights 指标 ✅。这三项都是有文档说明的 Dagster+ 功能(Issues 处于有限早期访问阶段)不适用
多个实例是 — DAGSTER_ENVS 将名称映射到任意 URL 和令牌,并提供每个工具专用的 env 参数;可混用 OSS 和 Dagster+一个 Dagster+ 组织内的部署,可在每次工具调用时选择不适用
写入安全性始终注册 17 个只读工具;仅当 DAGSTER_READ_ONLY=false(默认值为 true)时才会注册 10 个写入工具,否则客户端甚至无法看到这些工具。这是一种便利性的防护措施,不是安全边界:它是一个在导入时读取的进程级环境变量,而你配置的 API 令牌仍保留其自身的全部权限由 Dagster+ 在服务器端根据令牌权限强制执行。文档默认使用个人用户令牌;也提供服务用户作为范围受限的非人工身份验证替代方案(服务用户是 Dagster+ Pro 功能)不适用
支持尽力提供支持,由社区维护,通过 GitHub 问题跟踪;没有 SECURITY.md 或有文档说明的披露流程厂商官方支持厂商官方支持
如果你在使用 Dagster+,且希望通过 Agent 获取告警、Issues 或 Insights/成本分析,不想使用本地运行时,或者需要厂商支持以及采购流程认可的供应商,请使用官方 Dagster+ MCP 服务。

如果你运行的是开源版或可自托管的 Dagster,或者需要通过 Agent 执行资产级物化、计划/传感器控制、回填,或代码位置和守护进程操作,请使用本项目。

对于 Dagster+ 用户,两者是互补而非竞争关系——你完全可以同时运行它们。本项目与 Dagster Labs 无关联,也未获得其认可。

兼容性

监控工具和现有操作工具已通过 Dagster 1.6+ 测试。 resolve_asset_selection 和 materialize_assets 需要 Dagster 1.9+,并且会在查询或启动前验证所需的 GraphQL 功能。RunsFilter 字段名称(jobName 与 pipelineName)会通过架构自省自动检测。配置的资产回填也会检测 LaunchBackfillParams.runConfigData 是否存在;如果较旧的架构未公开该字段,则会返回明确的兼容性错误。计划和传感器的启动/停止适用于 Dagster 1.6+:停止 mutation 使用 originId/selectorId 参数对,其值来自 InstigationState.id/selectorId;现代 Dagster 会将其重新解析为复合 ID,而较旧版本可直接接受,因此无需按版本分支处理。mutation 通过 ... on Error 接口片段选择错误消息,而非使用按类型划分的片段,因为 ScheduleNotFoundError 直到 Dagster 1.9 才加入 ScheduleMutationResult;若在 1.6-1.8 中展开该片段,会导致文档验证失败。

开发

uv sync --extra dev
uv run ruff check dagster_mcp/    # lint
uv run pytest                     # run the test suite
uv run python -m dagster_mcp      # start server locally

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。