Dagster Mcp について
AI エージェントが Dagster インスタンスを監視・操作するための MCP サーバーです。実行、アセット、ジョブ、スケジュール、センサー、インスタンスの状態を扱い、複数環境と設定による書き込み操作に対応します。
主な機能
- 01実行状態、ログ、失敗概要の確認
- 02アセット検索と健全性の確認
- 03ジョブ、スケジュール、センサーの一覧
- 04インスタンスとコードロケーションの状態確認
- 05実行、アセット、スケジュールの操作
- 06複数の Dagster 環境の設定
活用シーン
- 01データパイプラインの失敗実行の診断
- 02古いアセットや健全性の問題の検出
- 03起動していないスケジュールやセンサーの確認
- 04ジョブの起動や停止中の実行の終了
MCP 対応
この MCP サーバーは、実行、アセット、ジョブ、スケジュール、センサー、インスタンス管理のツールを MCP クライアントに公開します。初期設定は読み取り専用で、DAGSTER_READ_ONLY を false にすると書き込み操作が有効になります。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
17掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| env | any | いいえ | |
| limit | integer | いいえ | |
| job_name | any | いいえ | |
| statuses | any | いいえ |
詳細
Dagster MCP
AI エージェントに Dagster インスタンスの完全な可視性と制御機能を提供する MCP サーバーです。データパイプラインの SRE のように機能します。
あらゆる MCP クライアントで利用できます:Claude Code、Claude Desktop、Cursor など。
Dagster は、独自の Dagster Plus MCP サーバーを公式に開発、サポートしています。ドキュメントはこちらをご覧ください。
このプロジェクトの目的
データパイプラインは午前3時に停止します。スケジュールがいつの間にか実行されなくなります。アセットが古くなります。赤く染まったダッシュボードを見て目覚める代わりに、AI エージェントにツールを与えて、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
できること
自律的な DataOps ワークフロー向けに設計された、6カテゴリにわたる27個のツールを備えています:
| カテゴリ | ツール | エージェントができること |
|---|---|---|
| 実行 | 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を設定してください。
クイックスタート
前提条件
インストール
パッケージは 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_URL | Dagster インスタンスのベース URL | http://localhost:3000 |
DAGSTER_API_TOKEN | Dagster 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 を使用して、1 つのサーバーで複数の Dagster インスタンスを設定します。各ツールは省略可能な env パラメーターを受け取るため、LLM は適切なインスタンスを指定できます。
| 変数 | 説明 | デフォルト |
|---|---|---|
DAGSTER_ENVS | 環境名を {url, token?, extra_headers?} 設定に対応付ける JSON オブジェクト | (empty) |
DAGSTER_DEFAULT_ENV | ツールに env が渡されない場合に使用する環境名 | (empty) |
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 は無視されます。環境が 1 つだけ定義されている場合は、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"
}
}
}
}
ツールリファレンス
実行
| ツール | 説明 |
|---|---|
get_runs | 最近の実行を一覧表示し、ジョブ名やステータスで絞り込みます |
get_run_status | ステータス、設定、タグ、実行のリネージ(rootRunId/parentRunId による再実行チェーン)を取得します |
get_run_logs | ページネーションとレベルによる絞り込み(ERROR、WARNING、INFO)に対応した構造化ログイベントを取得します。EngineEvent イベントには metadataEntries が含まれます |
get_run_stats | ステップごとの実行統計(所要時間、マテリアライゼーション、期待値の結果)を取得します |
get_run_failure_summary | 障害診断を集約 — 失敗したステップ、根本原因のエラー、ステップの所要時間、提案を 1 回の呼び出しで取得します |
アセット
| ツール | 説明 |
|---|---|
search_assets | キーのプレフィックスまたはグループ名でアセットを検索します |
resolve_asset_selection | キー/グループ/タグ/種類/所有者の条件、ワイルドカード、ブール論理、ルート/シンク、リネージのたどり方を具体的なアセットキーに解決します。処理は開始されません |
get_asset_details | 説明、上流/下流の依存関係、パーティション、最新のマテリアライゼーションを取得します |
get_recent_materializations | アセットのメタデータを含むマテリアライゼーション履歴を取得します |
get_asset_health | 健全性を集約して表示 — 古さ、鮮度ポリシー、最後の実行ステータスを確認します(単一のアセットまたはグループ全体に対応) |
2 段階のアセットワークフロー
まず、選択式を解決して内容を確認します。
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") は、1 つのリポジトリとコードロケーションの組み合わせを対象にします。フィルターを 1 つだけ指定した場合は、軽量なリポジトリ検出リクエストに続いて、ジョブを一括取得するリクエストが送信されます。追加のリクエストが不要になるわけではありません。Dagster への往復が 1 回増える代わりに、一致するリポジトリの一部だけを対象とする場合にペイロードを小さくできます。呼び出しごとのリクエスト数は、フィルターなしの場合は 1、両方のフィルターを指定した場合は 1、フィルターを 1 つだけ指定した場合は 2 です。
フィルターに該当するコードロケーションの読み込みに失敗した場合、または読み込み中の場合、list_jobs は空の結果を黙って返すのではなく、そのロケーション名を示す RuntimeError を発生させます。フィルター適用後の結果が空であれば、Dagster が実際に読み込めたコードロケーション内に一致するものがないことを意味します。フィルター適用後の結果が空でなくても、不完全な場合があります。一部のリポジトリが一致すれば、別のコードロケーションを検索できなかった場合でも、list_jobs はエラーを発生させずにそれらを返します。このチェックは上記と同じリクエスト(list_code_locations がすでに照会している workspaceOrError)に含まれるため、追加の往復は発生しません。フィルターなしの呼び出し(フィルターを指定しない list_jobs())は変更されていません。このチェックを省略し、読み込み済みの情報をそのまま返します。エージェントが長い一覧を「何も存在しない」と誤解することはありませんが、フィルター適用後の空の結果ではそのような誤解が起こり得るためです。読み込み状態を直接確認するには、list_code_locations または get_instance_status を使用してください。
インスタンスとコードロケーション
| ツール | 説明 |
|---|---|
get_instance_status | まずこちらを確認してください — 全体の状態:デーモンのステータス、キューに入っている実行数、コードロケーションのエラー |
list_code_locations | すべてのコードロケーションと、その読み込み状態を一覧表示します |
list_backfills | ステータスとパーティションの進捗を含む、最近のバックフィルを一覧表示します |
書き込み操作
| ツール | 説明 |
|---|---|
materialize_assets | 実行設定とタグを指定して、具体的な未パーティションのアセットキーを起動します。互換性のあるリポジトリ/ジョブを1つ推定し、互換性のあるチェックを含め、サブセット化できない必須のマルチアセットの隣接アセットを展開します。起動に失敗した場合は例外を発生させず、事前確認のコンテキストに加えて error と message を返し、launched_asset_keys は省略します |
backfill_assets | 任意の実行設定を指定して、アセット選択によるパーティションのバックフィルを起動します。各アセットの BackfillPolicy はサーバー側で適用されます |
launch_job | 名前を指定してジョブを起動します。互換性のため asset_keys も引き続きサポートされ、GraphQL の assetSelection を通じて送信されますが、2段階のアセットワークフローが推奨されます |
launch_job_with_partitions | 1つ以上のパーティションキーを指定して、パーティション化されたジョブを起動します。バックフィルを作成します(失敗したステップのみを再試行する 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+ プラットフォームのオブジェクト(アラート、Issues、Insights)にもアクセスできます。このプロジェクトは主に、公式サーバーのドキュメントに記載されたセットアップではカバーされていない、オープンソース版/セルフホストの Dagster を実行する方向けです。
「公式」列の内容はすべて、Dagster の公式ドキュメント https://docs.dagster.io/guides/labs/dagster-mcp(2026-07-30 取得)または #21 で Dagster から直接提供された情報に基づいています。Dagster のドキュメントには、オープンソース版またはセルフホストの Dagster がサポート対象外であるとはどこにも記載されていません。ドキュメントに記載されているのは、Dagster がホストする URL、必須の Dagster-Cloud-Organization ヘッダー、および Dagster+ ユーザートークンです。機能マトリックスは現時点の状況を示すもので、Dagster は今後も機能を追加していく予定です。そのため、以下の不足点は恒久的なものではなく、現時点のものとしてご覧ください。
| dagster-mcp(このプロジェクト) | Dagster+ MCP server(公式) | dagster-expert skill(公式) | |
|---|---|---|---|
| 概要 | 自分で実行する MCP サーバー(Python、MIT) | Dagster がホストするリモート MCP エンドポイント。https://mcp.agent.dagster.cloud/mcp | エージェントスキル。コーディングエージェントが読み込む 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 …" | スキルファイルをエージェントにコピーします |
| 成熟度 | PyPI で v0.8.0(1.0 未満)。MIT。メンテナーは 1 名で、外部からの貢献も時折あります。「現状のまま、いかなる種類の保証もなく」提供され、SLA はありません | Dagster によりプレビューと表示されています:「現在開発中であり、本番環境での使用に対応できる状態とは見なされていません……API が変更される可能性があります」。/guides/labs/ 配下で公開されています | 現行版。プレビューの表示はありません |
| 実行 | 表示、起動、終了、ステップごとの統計、ログ取得、障害の概要表示 | 表示 ✅、作成/起動 ✅、削除/終了 ✅、インサイトメトリクス ✅、更新 ❌(Dagster の一覧)。実行ログ:表示 ✅ | 該当なし |
| アセット | 表示、検索、ヘルス、選択構文の解決、特定のアセットのマテリアライズ(resolve_asset_selection → materialize_assets。実行設定とパーティション範囲を指定) | 表示 ✅ とインサイトメトリクス ✅。作成/起動、更新、削除は ❌。つまり、実行の起動には対応していますが、アセット単位のマテリアライズツールはありません | 該当なし |
| スケジュールとセンサー | 一覧、ティック履歴、開始/停止 | 現時点では未対応です。Dagster が対応を認めており、追加を予定しています | 該当なし |
| バックフィルとパーティション | バックフィルの一覧、パーティション化されたジョブの起動、パーティション範囲にわたるアセットのバックフィル | Dagster の機能一覧には記載されていません | 該当なし |
| コードロケーションとインスタンスのヘルス | コードロケーションの一覧表示/再読み込み、インスタンスのステータス、デーモンのハートビート、キュー内の実行数 | デプロイ:表示 ✅、インサイト ✅。コードロケーションとデーモンのヘルスは記載されていません(デーモンは Dagster+ が管理します) | 該当なし |
| アラート、インサイト、Dagster+ Issues | 未対応です。アラート、コスト/インサイトメトリクス、Issues 相当の機能はありません | アラートポリシーと Dagster+ Issues:表示/作成/更新/削除がすべて ✅。実行、アセット、デプロイのインサイトメトリクス ✅。3 つとも Dagster+ のドキュメントに記載された機能です(Issues は限定的な早期アクセスで提供されています) | 該当なし |
| 複数インスタンス | はい。DAGSTER_ENVS で名前を任意の URL とトークンに対応付け、ツールごとの env 引数で指定します。OSS と Dagster+ を混在させることもできます | 1 つの Dagster+ 組織内のデプロイを、ツール呼び出しごとに選択します | 該当なし |
| 書き込みの安全性 | 読み取り専用ツール 17 個は常に登録されます。書き込みツール 10 個は DAGSTER_READ_ONLY=false の場合にのみ登録されます(既定値は true)。それ以外の場合、クライアントからは表示すらされません。これは利便性のためのガードレールであり、セキュリティ境界ではありません。プロセスレベルの環境変数で、インポート時に読み込まれます。また、設定した API トークンの権限はそのまま維持されます | Dagster+ のトークン権限によってサーバー側で適用されます。ドキュメントでは個人ユーザートークンが既定で、スコープを限定した非人間認証の代替手段としてサービスユーザーが案内されています(サービスユーザーは Dagster+ Pro の機能です) | 該当なし |
| サポート | ベストエフォート、コミュニティによるサポート、GitHub issues。SECURITY.md や公開手順の文書はありません | ベンダーによる公式サポート | ベンダーによる公式サポート |
| Dagster+ を利用している場合は、次の条件に当てはまれば公式の Dagster+ MCP サーバーを使用してください。 エージェントからアラート、Issues、Insights/コスト分析を利用したい場合、ローカルランタイムを使いたくない場合、またはベンダーサポートと調達プロセスで受け入れられるサプライヤーが必要な場合です。 |
次の条件に当てはまる場合は、このプロジェクトを使用してください。 オープンソースまたはセルフホスト可能な Dagster を運用している場合、あるいはエージェントからアセットレベルのマテリアライゼーション、スケジュール/センサーの制御、バックフィル、コードロケーションやデーモンの操作を行う必要がある場合です。
Dagster+ のユーザーにとって、両者は競合するものではなく、補完し合うものです。両方を実行しても問題ありません。このプロジェクトは Dagster Labs と提携しておらず、同社の推奨を受けたものでもありません。
互換性
監視ツールと既存のアクションツールは Dagster 1.6+ でテストされています。
resolve_asset_selection と materialize_assets には Dagster 1.9+ が必要であり、
クエリまたは起動の前に必要な GraphQL 機能を確認します。
RunsFilter のフィールド名(jobName と pipelineName)は、スキーマの
イントロスペクションによって自動検出されます。設定済みのアセットバックフィルも
LaunchBackfillParams.runConfigData の有無を機能検出し、古いスキーマでこのフィールドが
公開されていない場合は、明確な互換性エラーを返します。スケジュールとセンサーの開始/停止は
Dagster 1.6+ で動作します。停止ミューテーションは、InstigationState.id/selectorId から
取得した originId/selectorId の引数ペアを使用して送信されます。最新の Dagster では
これが複合 ID として再解析され、古いバージョンではそのまま受け入れられるため、
バージョンごとの分岐は不要です。ミューテーションでは、型ごとのフラグメントではなく
... on Error インターフェースフラグメントを使ってエラーメッセージを選択します。
ScheduleNotFoundError が ScheduleMutationResult に加わったのは Dagster 1.9 であり、
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
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。