datadog-mcp について
datadog-mcpは、ログ、メトリクス、トレース、モニターなどのDatadog可観測性APIをAIアシスタントに公開します。ローカルのstdioとリモートのHTTPに対応し、読み取り専用にも設定できます。
主な機能
- 01ログとトレースの検索・集計
- 02メトリクスのクエリと確認
- 03モニターとダッシュボードの管理
- 04イベント、インシデント、SLOの操作
- 05stdioまたはHTTPトランスポート
活用シーン
- 01ログとトレースを関連付けてエラーを調査
- 02メトリクスの傾向とモニターの動作を確認
- 03AIクライアントからDatadogリソースを管理
MCP 対応
このMCPサーバーは、可観測性のクエリとリソース管理に使うDatadog APIツールを互換クライアントに公開します。stdioとHTTPのトランスポートに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
19掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| id | string | いいえ | モニター ID(get/update/delete/mute/unmute に必須) |
| end | number | いいえ | ミュート終了タイムスタンプ(mute 操作用) |
| name | string | いいえ | 名前でフィルター(list 操作用) |
| tags | array | いいえ | タグで絞り込み |
| limit | number | いいえ | 返すモニターの最大数 |
| query | string | いいえ | 検索アクションの検索クエリ |
| action | enum | はい | 実行する操作list | get | search | create | update | delete | mute | unmute |
| config | object | いいえ | モニター設定(create/update 用) |
| message | string | いいえ | ミュートメッセージ(mute 操作用) |
| groupStates | array | いいえ | グループ状態でフィルター:alert、warn、no data、ok |
詳細
Datadog MCP サーバー
免責事項:これはコミュニティによって保守されているプロジェクトであり、Datadog, Inc. との公式な提携、承認、サポートを受けていません。この MCP サーバーは Datadog API を利用していますが、独立して開発されています。
AI アシスタントに Datadog のオブザーバビリティ機能への完全なアクセスを提供する MCP サーバーです。grep のようなログ検索、期間・ステータス・エラーによる APM トレースの絞り込み、トークン効率を高めるスマートサンプリングモード、ログ・トレース・メトリクス間の相互相関に対応しています。stdio(ローカル)と http(リモート/Kubernetes)の両トランスポートをサポートしています。
クイックスタート
Claude Desktop/VS Code/Cursor の最小構成 — 必須のキーは 2 つだけです:
{
"mcpServers": {
"datadog": {
"command": "npx",
"args": ["-y", "datadog-mcp"],
"env": {
"DD_API_KEY": "your-api-key",
"DD_APP_KEY": "your-app-key"
}
}
}
}
オプションの設定を追加する場合(EU サイト、カスタムのデフォルト上限、より長いログ期間):
{
"mcpServers": {
"datadog": {
"command": "npx",
"args": ["-y", "datadog-mcp"],
"env": {
"DD_API_KEY": "your-api-key",
"DD_APP_KEY": "your-app-key",
"DD_SITE": "datadoghq.eu",
"MCP_DEFAULT_LIMIT": "50",
"MCP_DEFAULT_LOG_LINES": "200",
"MCP_DEFAULT_METRIC_POINTS": "1000",
"MCP_DEFAULT_TIME_RANGE": "24"
}
}
}
}
HTTP サーバーとして実行する場合(コンテナや Kubernetes Pod 内など)、同じ env ブロックにトランスポート変数を追加します:
"env": {
"DD_API_KEY": "your-api-key",
"DD_APP_KEY": "your-app-key",
"MCP_TRANSPORT": "http",
"MCP_PORT": "3000",
"MCP_HOST": "0.0.0.0"
}
設定
必須の環境変数
DD_API_KEY=your-api-key
DD_APP_KEY=your-app-key
オプションの環境変数
DD_SITE=datadoghq.com # Default. Use datadoghq.eu for EU, etc.
# Limit defaults (fallbacks when the AI doesn't specify)
MCP_DEFAULT_LIMIT=50 # General tools default limit
MCP_DEFAULT_LOG_LINES=200 # Logs tool default limit
MCP_DEFAULT_METRIC_POINTS=1000 # Metrics timeseries data points
MCP_DEFAULT_TIME_RANGE=24 # Default time range in hours
# Transport (alternative to CLI flags — useful in Kubernetes)
MCP_TRANSPORT=stdio # stdio | http
MCP_PORT=3000 # HTTP port
MCP_HOST=0.0.0.0 # HTTP host
オプションのフラグ
--site=datadoghq.com # Datadog site (overrides DD_SITE)
--transport=stdio|http # Transport mode (default: stdio)
--port=3000 # HTTP port when using http transport
--host=0.0.0.0 # HTTP host when using http transport
--read-only # Block all write operations
--disable-tools=synthetics,rum,security # Comma-separated list of tools to disable
トランスポート
| トランスポート | 使用する場面 | エンドポイント |
|---|---|---|
stdio(デフォルト) | Claude Desktop、Cursor、VS Code などのローカル MCP クライアント | 該当なし(プロセスの stdin/stdout) |
http | リモート/コンテナ/Kubernetes | POST /mcp · GET /mcp(SSE) · DELETE /mcp · GET /health |
--transport=http または MCP_TRANSPORT=http で選択します。
デプロイ
Docker
{
"mcpServers": {
"datadog": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "DD_API_KEY",
"-e", "DD_APP_KEY",
"-e", "DD_SITE",
"ghcr.io/tantiope/datadog-mcp"
],
"env": {
"DD_API_KEY": "your-api-key",
"DD_APP_KEY": "your-app-key",
"DD_SITE": "datadoghq.com"
}
}
}
}
Kubernetes
トランスポート設定にはコンテナ引数ではなく、環境変数を使用します:
env:
- name: DD_API_KEY
value: "your-api-key"
- name: DD_APP_KEY
value: "your-app-key"
- name: MCP_TRANSPORT
value: "http"
- name: MCP_PORT
value: "3000"
- name: MCP_HOST
value: "0.0.0.0"
注記: Kubernetes の
args:は Dockerfile の CMD 全体を置き換えるため、Node.js はアプリケーションではなくフラグを受け取ります。環境変数を使えばこの問題を回避できます。
ツール
| ツール | アクション | カテゴリ | 説明 | 必要なスコープ |
|---|---|---|---|---|
monitors | list | アラート | 任意のフィルターを指定してモニターを一覧表示します | monitors_read |
monitors | get | アラート | IDでモニターを取得します | monitors_read |
monitors | search | アラート | クエリでモニターを検索します | monitors_read |
monitors | create | アラート | 新しいモニターを作成します。config は、ドキュメント化されたオプション(notifyNoData、renotifyInterval、thresholds、…)をカバーする型付きスキーマに照らして検証されます。不明なキーは warnings に表示されます。作成せずに検証するには dry_run: true を渡します(/api/v1/monitor/validate を使用し、読み取り専用モードで利用できます)。 | monitors_write |
monitors | update | アラート | 既存のモニターを更新します。create と同じ検証済みスキーマを使用し、部分的な設定も受け付けます。検証エラーがある場合、HTTP 呼び出しの前に EINVALID_MONITOR_CONFIG: として処理を中断します | monitors_write |
monitors | preview | アラート | 任意の変数と条件を含む context を使って、モニターテンプレート(インラインの message または monitor_id/id を指定)をレンダリングします。{rendered, variablesUsed, variablesMissing, conditionalsResolved, tagConditionalsResolved} を返します。Datadog の Mustache のサブセットに対応しています。変数置換、ドキュメント化された6つの条件(is_alert、is_warning、is_no_data、is_recovery、is_alert_to_warning、is_warning_to_alert)、タグ条件 {{#is_match "tag" "val"}}/{{#is_exact_match "tag" "val"}}(および ^ による否定)をサポートします。{{#each}}/パーシャルは EUNSUPPORTED_TEMPLATE_SYNTAX を発生させます。読み取り専用です。 | monitors_read |
monitors | test_notification | アラート | 既知の制限事項:ENOT_SUPPORTED を返します。Datadog にはテスト通知をトリガーするための公開 REST エンドポイントがありません。応答にはドキュメントへの参照が含まれます。 | n/a |
monitors | delete | アラート | モニターを削除します | monitors_write |
monitors | mute | アラート | モニターをミュートします | monitors_write |
monitors | unmute | アラート | モニターのミュートを解除します | monitors_write |
monitors | top | アラート | 実際のモニター名とコンテキストの内訳を含む、アラート頻度上位 N 件のモニターを取得します。警告: total_count には再通知/再評価が含まれます(アラート状態の間、Datadog は renotify_interval 分ごとに再通知イベントを生成します)。実際の発火を取得するには action=history を使用してください。 | monitors_read |
monitors | history | アラート | 1つのモニターについて、指定した時間範囲内の実際の状態遷移をカウントして一覧表示します。transitionType(デフォルトは ["alert","alert recovery"]。発火と復旧を含み、再通知は除外)および任意の group で絞り込みます。{transitions: [...], count, meta} を返します。count は実際の遷移数です(例:7日間ずっとアラート状態のバーンレートモニター1つの場合、生イベント98件に対して実際の遷移は38件です)。 | monitors_read, events_read |
dashboards | list | 可視化 | すべてのダッシュボードを一覧表示します | dashboards_read |
dashboards | get | 可視化 | IDでダッシュボードを取得します | dashboards_read |
dashboards | create | 可視化 | 新しいダッシュボードを作成します | dashboards_write |
dashboards | update | 可視化 | ダッシュボードを更新します | dashboards_write |
dashboards | delete | 可視化 | ダッシュボードを削除します | dashboards_write |
logs | search | ログ | クエリ構文とフィルターを使ってログを検索します | logs_read_data, logs_read_index_data |
logs | aggregate | ログ | groupBy を使ってログデータを集計します | logs_read_data |
logs_pipelines | list, get | ログ設定 | ログ処理パイプラインとそのプロセッサーを確認します | logs_read_config |
logs_pipelines | create, update, delete, reorder | ログ設定 | パイプラインとプロセッサーチェーンを作成・管理します | logs_write_config |
logs_pipelines | get_order | ログ設定 | パイプラインの評価順序を読み取ります | logs_read_config |
logs_indexes | list, get | ログ設定 | インデックス(フィルター、保持期間、Flex ティア、除外フィルター)を確認します。Datadog によると create/delete は UI でのみ可能なため、公開されていません | logs_read_config |
logs_indexes | update, reorder | ログ設定 | インデックスのフィルター/保持期間/クォータを更新し、評価順序を変更します | logs_write_config |
logs_indexes | get_order | ログ設定 | インデックスの評価順序を読み取ります | logs_read_config |
logs_archives | list, get | ログ設定 | ログアーカイブ(S3/GCS/Azure の宛先)を確認します。プロバイダーごとの認証情報フィールドは変更せずに転送されます | logs_read_archives |
logs_archives | create, update, delete, reorder | ログ設定 | アーカイブの宛先を管理します。SDK 呼び出しの前に destination.type を `s3 | gcs |
logs_archives | get_order | ログ設定 | アーカイブの評価順序を読み取ります | logs_read_archives |
metrics | query | メトリクス | 時系列データをクエリします。応答の meta には、(rollup(method, seconds) から解析した)rollupRequested と methodInferred フラグ、(返された pointlist の間隔から導出され、複数系列の場合は intervalsObserved の重複を除いた)rollupEffective、および Datadog によるサイレントなダウンサンプリングを呼び出し元が検出できる rollupOverridden: boolean が含まれます。 | metrics_read, timeseries_query |
metrics | search | メトリクス | 名前でメトリクスを検索します | metrics_read |
metrics | list | メトリクス | アクティブなメトリクスを一覧表示します | metrics_read |
metrics | metadata | メトリクス | メトリクスのメタデータを取得します | metrics_read |
traces | search | APM | フィルターを使ってスパンを検索します | apm_read |
traces | aggregate | APM | トレースデータを集計します | apm_read |
traces | services | APM | APM サービスを一覧表示します | apm_service_catalog_read |
events | list | イベント | イベントを一覧表示します | events_read |
events | get | イベント | IDでイベントを取得します | events_read |
events | create | イベント | イベントを作成します | events_read |
events | search | イベント | v2 API とカーソルページネーションを使ってイベントを検索します。任意の transitionType フィルター(例:["alert","alert recovery"])を指定すると、モニターの状態遷移イベントに絞り込めます。指定しない場合、source:alert には再通知も含まれます。モニター固有の発火を取得するには monitors action=history を使用してください。任意の timezone を指定すると、すべてのタイムスタンプに *Local の ISO 8601 形式の値が追加されます。結果が0件の場合は、原因の手がかりとなる diagnostics 配列(UNINDEXED_TAG_PREFIX、NARROW_TIME_RANGE、RESTRICTIVE_SOURCE_FILTER)が含まれます。 | events_read |
events | histogram | イベント | IANA timezone において、イベントを hour_of_day、day_of_week、day_of_month ごとにサーバー側でバケット化します(Intl.DateTimeFormat により DST に対応)。search と同じ transitionType フィルターを指定できるため、モニターのヒストグラムから再通知を除外できます。基盤となる検索はカーソルページネーションを使用し、上限は limits.maxEventsForHistogram(デフォルト5000、環境変数 MCP_MAX_EVENTS_HISTOGRAM)です。上限に達すると bucketCountIncomplete: true と、続きを取得するための nextCursor を返します。 | events_read |
events | aggregate | イベント | monitor_name、source などでクライアント側集計を行います | events_read |
events | top | イベント | 汎用的な groupBy に対応し、件数上位 N 件のイベントグループを取得します(デプロイ、設定、アラートなど)。コンテキストタグのないグループは "no_context" として含まれます | events_read |
events | timeseries | イベント | 時間単位または日単位の件数で、アラートの傾向を時間バケットごとに表示します | events_read |
events | incidents | イベント | トリガー/復旧のペアを使ってアラートをインシデントに重複排除します | events_read |
incidents | list | インシデント | インシデントを一覧表示します | incident_read |
incidents | get | インシデント | IDでインシデントを取得します | incident_read |
incidents | search | インシデント | インシデントを検索します | incident_read |
incidents | create | インシデント | インシデントを作成します | incident_write |
incidents | update | インシデント | インシデントを更新します | incident_write |
incidents | delete | インシデント | インシデントを削除します | incident_write |
slos | list | SLO | SLO を一覧表示します。各項目には query、monitorIds、monitorTags、groups、UI の url が含まれ、取得 → 編集 → 更新の一連の操作で定義フィールドが保持されます。 | slos_read |
slos | get | SLO | IDで SLO を取得します(list と同じ形式です)。 | slos_read |
slos | create | SLO | SLO を作成します | slos_write |
slos | update | SLO | SLO を更新します | slos_write |
slos | delete | SLO | SLO を削除します | slos_write |
slos | history | SLO | SLO の履歴を取得します | slos_read |
synthetics | list | Synthetic | Synthetic テストを一覧表示します | synthetics_read |
synthetics | get | Synthetic | Public ID でテストを取得します | synthetics_read |
synthetics | create | Synthetic | テストを作成します | synthetics_write |
synthetics | update | Synthetic | テストを更新します | synthetics_write |
synthetics | delete | Synthetic | テストを削除します | synthetics_write |
synthetics | trigger | Synthetic | テスト実行をトリガーします | synthetics_write |
synthetics | results | Synthetic | テスト結果を取得します | synthetics_read |
downtimes | list | ダウンタイム | ダウンタイムを一覧表示します | monitors_downtime |
downtimes | get | ダウンタイム | IDでダウンタイムを取得します | monitors_downtime |
downtimes | create | ダウンタイム | ダウンタイムを作成します | monitors_downtime |
downtimes | update | ダウンタイム | ダウンタイムを更新します | monitors_downtime |
downtimes | cancel | ダウンタイム | ダウンタイムをキャンセルします | monitors_downtime |
downtimes | listByMonitor | ダウンタイム | モニターのダウンタイムを一覧表示します | monitors_downtime |
hosts | list | インフラストラクチャ | ホストを一覧表示します | hosts_read |
hosts | totals | インフラストラクチャ | ホストの合計数を取得します | hosts_read |
hosts | mute | インフラストラクチャ | ホストをミュートします | hosts_read |
hosts | unmute | インフラストラクチャ | ホストのミュートを解除します | hosts_read |
rum | applications | RUM | RUM アプリケーションを一覧表示します | rum_read |
rum | events | RUM | RUM イベントを検索します | rum_read |
rum | aggregate | RUM | RUM データを集計します | rum_read |
rum | performance | RUM | Core Web Vitals(LCP、FCP、CLS、FID、INP)を取得します | rum_read |
rum | waterfall | RUM | リソース/アクション/エラーを含むセッションのタイムラインを取得します | rum_read |
security | rules | セキュリティ | セキュリティルールを一覧表示します | security_monitoring_rules_read |
security | signals | セキュリティ | セキュリティシグナルを検索します | security_monitoring_signals_read |
security | findings | セキュリティ | セキュリティ検出結果を一覧表示します | security_monitoring_findings_read |
notebooks | list | ノートブック | ノートブックを一覧表示します | notebooks_read |
notebooks | get | ノートブック | IDでノートブックを取得します | notebooks_read |
notebooks | create | ノートブック | ノートブックを作成します | notebooks_write |
notebooks | update | ノートブック | ノートブックを更新します | notebooks_write |
notebooks | delete | ノートブック | ノートブックを削除します | notebooks_write |
users | list | 管理 | ユーザーを一覧表示します | user_access_read |
users | get | 管理 | IDでユーザーを取得します | user_access_read |
teams | list | 管理 | チームを一覧表示します | teams_read |
teams | get | 管理 | IDでチームを取得します | teams_read |
teams | members | 管理 | チームメンバーを一覧表示します | teams_read |
tags | list | インフラストラクチャ | すべてのタグを一覧表示します | hosts_read |
tags | get | インフラストラクチャ | ホストのタグを取得します | hosts_read |
tags | add | インフラストラクチャ | ホストにタグを追加します | hosts_read |
tags | update | インフラストラクチャ | ホストのタグを更新します | hosts_read |
tags | delete | インフラストラクチャ | ホストのタグを削除します | hosts_read |
usage | summary | 課金 | 使用状況の概要 | usage_read |
usage | hosts | 課金 | ホストの使用状況 | usage_read |
usage | logs | 課金 | ログの使用状況 | usage_read |
usage | custom_metrics | 課金 | カスタムメトリクスの使用状況 | usage_read |
usage | indexed_spans | 課金 | インデックス化されたスパンの使用状況 | usage_read |
usage | ingested_spans | 課金 | 取り込まれたスパンの使用状況 | usage_read |
auth | validate | 認証 | API キーと App キーの有効性をテストします | — |
制限の制御
AI アシスタントはクエリ制限を完全に制御できます。MCP_DEFAULT_* 環境変数は、AI が制限を指定しない場合に使用されるフォールバック値を設定するだけで、AI がリクエストできる上限を設定するものではありません。
| ツール | デフォルト | パラメーター | 説明 |
|---|---|---|---|
| ログ | 200 | limit | 返すログ行数 |
| メトリクス(時系列) | 1000 | pointLimit | 系列ごとのデータポイント数(解像度を制御) |
| 一般的なツール | 50 | limit | 返す結果数 |
ツールレベルのトークン削減機能(ログの compact: true、sample: "diverse" | "spread" | "first"、フィールド投影、診断)は、各ツールの MCP 説明に記載され、呼び出し時に AI が選択します。
注目すべき動作
知っておくと役立つパターンをいくつか紹介します。その他の動作は、ツールの説明から AI が確認できます。
- 再通知と実際の発報。
monitors topとsource:alertを指定したevents searchは、Datadog が発行する再通知(モニターが Alert 状態の間、renotify_intervalごとに 1 回)をすべてカウントします。実際の状態遷移を取得するには、monitors history(デフォルトはtransitionType: ["alert","alert recovery"])を使うか、events searchにtransitionTypeを渡します。 - DST に対応した時間バケット。
events histogramはIntl.DateTimeFormatを使い、任意の IANAtimezoneにおけるhour_of_day/day_of_week/day_of_monthごとにバケットを作成します。基になる検索結果をカーソルでページングします。上限はMCP_MAX_EVENTS_HISTOGRAM(デフォルト 5000)で制御され、上限を超えるとbucketCountIncompleteとnextCursorが返されます。 - 作成前に検証。
dry_run: trueを指定したmonitors createは、保存する代わりに/api/v1/monitor/validateを呼び出します。--read-onlyモードでも使用できます。 - モニターテンプレートのプレビュー。
monitors previewはcontextペイロードに対して通知をレンダリングします。変数置換に加え、Datadog のドキュメントに記載された 6 つの条件式(is_alert、is_warning、is_no_data、is_recovery、is_alert_to_warning、is_warning_to_alert)と、タグ条件式{{#is_match "tag" "val"}}(部分一致)および{{#is_exact_match "tag" "val"}}(完全一致)に対応しています。^による否定と、複数の比較値の OR 条件にも対応し、値はcontext.variablesに対して解決されます(大文字と小文字を区別します)。{{#each}}とパーシャルを使うとEUNSUPPORTED_TEMPLATE_SYNTAXが発生します。 - SLO の往復編集。
slos getはquery、monitorIds、monitorTags、groups、UI のurlを返すため、定義フィールドを失わずに編集してslos updateに渡せます。 - 相互相関。
logs(sample:"diverse")→dd.trace_idを取得 →traces(query:"trace_id:<id>")→metrics(query:"p95:trace.express.request{service:...}")(パーセンタイルには.durationのないルートメトリクスを使用)。
ディープリンク
各クエリのレスポンスには、設定済みの DD_SITE に対応した datadog_url フィールドが含まれます。対応するサイトは datadoghq.com(デフォルト)、.eu、us3/us5/ap1.datadoghq.com、ddog-gov.com です。logs、metrics、traces、events、monitors、rum、slos で利用できます。
貢献
貢献を歓迎します!提案、バグ報告、改善案があれば、お気軽に issue または pull request をお送りください。
ライセンス
このプロジェクトは Apache License, Version 2.0 の下でライセンスされています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。