devops-status-mcp-server について
ベンダーのステータスページ、インシデント、TLS証明書、DNS伝播を確認するMCPサーバーです。運用チーム向けに、登録ベンダーの状態を統一形式で示し、ドメイン診断と決定論的な対応手順を提供します。
主な機能
- 01ベンダーの状態とインシデント履歴を確認
- 02名前付きベンダースタックを保存して再確認
- 03TLS証明書とドメイン情報を検査
- 04公開リゾルバー間のDNS応答を比較
- 05インシデント対応手順を生成
活用シーン
- 01障害発生時にプロバイダーの状態を確認
- 02影響を受けたベンダーの更新履歴を確認
- 03更新期限前に証明書を検証
- 04DNS伝播の応答差を調査
MCP 対応
MCPクライアント向けに7つのツールとベンダー登録情報のリソースを提供します。STDIOとStreamable HTTPに対応し、状態、証明書、DNSの確認にAPIキーは不要です。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://devops-status.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-devops-status https://devops-status.caseyjhand.com/mcp{"mcpServers":{"cyanheads-devops-status":{"type":"http","url":"https://devops-status.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-devops-status":{"type":"http","url":"https://devops-status.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-devops-status":{"type":"http","url":"https://devops-status.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-devops-status":{"serverUrl":"https://devops-status.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
7| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| query | string | いいえ | ベンダーの slug と表示名を部分一致で検索します。大文字と小文字は区別せず、前後の空白は無視されます。例:"cloud"、"auth"、"slack"。 |
| category | enum | いいえ | 次のカテゴリのいずれかで絞り込みます:cloud、cdn-edge、dev-platform、data、comms、auth、monitoring、ai。cloud | cdn-edge | dev-platform | data | comms | auth | monitoring | ai |
詳細
@cyanheads/devops-status-mcp-server
MCP 経由で、ベンダーのステータスページを確認し、SSL/TLS 証明書を調査し、DNS の伝播を検証して、インシデント対応プレイブックを取得できます。STDIO または Streamable HTTP に対応しています。
公開ホスト型サーバー: https://devops-status.caseyjhand.com/mcp
概要
53 社のベンダー(AWS、Google Cloud、Azure、Slack など)のステータスページを、統一された形式で確認できます。障害が発生しているサービスの確認、インシデントのタイムラインの取得、スタックの監視、インシデント対応プレイブックの取得が可能です。さらに、任意のドメインの TLS 証明書と DNS も確認できます。API キーは不要です。
ツール
| ツール | 説明 |
|---|---|
devops_list_vendors | 組み込みレジストリのベンダーを一覧表示します。名前またはカテゴリで絞り込むこともできます。スラッグ、表示名、カテゴリ、ステータスページの URL を返します。 |
devops_status_check | 1 つ以上のベンダーの現在の稼働状況を確認します。ベンダーごとのステータス(none/minor/major/critical/maintenance)、機能が低下しているコンポーネント、有効なインシデントの概要を返します。 |
devops_get_incidents | ベンダーのインシデント履歴(有効、解決済み、または予定されているメンテナンス)を取得します。各更新の本文と影響を受けたコンポーネントを含む、インシデントの全タイムラインを返します。 |
devops_watch_stack | 名前を指定したベンダースタックの稼働状況を確認します。サーバーが呼び出し元を識別できる場合(stdio、または jwt/oauth 認証を使う HTTP)、vendors を一度渡せばリストが保存され、以降の呼び出しで再利用されます。HTTP で MCP_AUTH_MODE=none の場合は保存されないため、呼び出しのたびに vendors が必要です。全体的な稼働状況の概要とベンダーごとの詳細を返します。 |
devops_check_certs | 実際の TLS ハンドシェイクを通じて、1 つ以上のドメインの SSL/TLS 証明書の状態を確認します。有効期限、チェーンの深さ、プロトコルバージョン、暗号スイート、HTTP ポートでの HSTS の有無を報告します。純粋な TypeScript で実装されており、外部 API は使用しません。 |
devops_check_dns | Google(8.8.8.8)、Cloudflare(1.1.1.1)、Quad9(9.9.9.9)を通じて、1 つ以上のドメインの DNS レコードを解決し、伝播状況を確認します。リゾルバーごとのレイテンシと、リゾルバー間の差異を報告します。純粋な TypeScript で実装されており、外部 API は使用しません。 |
devops_suggest_action | 指示ツールです。ベンダー名と任意のインシデントコンテキストに基づき、状況に合わせたインシデント対応プレイブックと、事前入力済みの後続ツール呼び出しを返します。外部呼び出しは行わず、完全に決定的です。 |
リソース
| リソース | 説明 |
|---|---|
devops-status://vendors/{name} | スラッグで指定したベンダーのレジストリエントリー全体です。ステータスページの URL、カテゴリ、API タイプを含みます。 |
すべてのリソースデータはツール経由でも取得できます。ツールのみを使うエージェントにも完全に対応しています。
機能リファレンス
devops_list_vendors ツール
- 任意のフリーテキスト
query(名前とスラッグ。大文字・小文字は区別しません)と、任意のcategory:cloud、cdn-edge、dev-platform、data、comms、auth、monitoring、ai - スラッグ(他のツールに渡す値)、表示名、カテゴリ、ステータスページの URL を返します。該当結果がない場合は、見つからなかった内容を示す
noticeを含みます - 組み込みエントリーは 53 件で、その大半は Atlassian Statuspage を利用しています。
aws、gcp、azure、azure-devops、gitlab、neon、slack、redis-cloudはネイティブ API アダプターを使用します。レジストリにない Statuspage 互換ページも、他のツールにベース URL を直接渡して利用できます
組み込みベンダーレジストリ:
| カテゴリ | ベンダー |
|---|---|
cloud | digitalocean, linode, aws, gcp, azure |
cdn-edge | cloudflare, akamai |
dev-platform | gitlab, github, azure-devops, npm, vercel, netlify, render, fly-io, circleci, travis-ci, snyk, atlassian, figma, launchdarkly |
data | mongodb-atlas, planetscale, supabase, neon, redis-cloud, elastic, influxdb, upstash, cloudinary, segment |
comms | slack, discord, twilio, sendgrid, mailgun, hubspot, brevo, courier, loops |
auth | auth0, clerk, workos |
monitoring | datadog, sentry, new-relic, grafana-cloud, honeycomb |
ai | openai, anthropic, elevenlabs, pinecone, cohere |
devops_status_check ツール
- ベンダーのスラッグ(例:
github、aws)または Atlassian Statuspage のベース URL を受け付け、自由に混在させられます。1 回の呼び出しでチェックするのは最大 20 件です。残りはdeferred_vendorsに返され、再送するようnoticeで通知されます。100 件を超えると拒否されます(invalid_arguments) mode: "summary"(デフォルト)では、インジケーター、劣化したコンポーネント、進行中のインシデントを返します。mode: "detailed"では、コンポーネントの完全な一覧(component_limit、デフォルトは 50、上限は 500)と予定メンテナンス時間帯も返します。component_filterはコンポーネント名またはグループ名に一致します- 1 つのベンダーでエラーが発生しても、ほかのベンダーの処理は妨げられません(ベンダーごとの
errorフィールド)。結果は 60 秒間キャッシュされ(cached: true)、summaryはoperational/degraded/down/maintenance/unavailableの件数を示します nextToolSuggestionsは、問題が発生している各ベンダーについて、devops_suggest_actionの呼び出しを事前入力して提示します
devops_get_incidents ツール
filter:all(デフォルト)、active、resolved、またはscheduled(メンテナンス時間帯のみ)。ページ分割にはlimit(デフォルトは 20、最大 50)とoffsetを指定します- 更新ごとの本文を時系列順のプレーンテキストで返します。影響を受けたコンポーネント名、解決済みインシデントの継続時間(分)、短縮リンクも含まれます。各インシデントには
sourceが付与され、apiまたはアーカイブレコードを示すhistoryになります(タイトル、影響、時刻、最終メッセージのみ) sinceとuntil(YYYY-MM-DD、UTC)で開始日を指定でき、filter: "all"または"resolved"と併用できます。sinceを指定すると、API の最新 50 件という制限を超えて、Statuspage の履歴アーカイブを最大 24 か月前まで検索します。matchは、指定したすべての単語(最大 200 文字)をタイトルまたはコンポーネント名に含むインシデントに絞り込みます- 応答は各サーフェスにつき 64,000 バイトに制限されます。ページが途中で切り詰められると
truncated: trueとnextOffsetが設定されます。full_updates: trueを指定すると、1 件のサイズが上限を超えるインシデントのすべての更新を保持します - エラー:
invalid_since、invalid_until(filter: "active"または"scheduled"の場合、あるいはuntilがsinceより前の場合) - フィルターに該当するデータがないフィードは空を返します:Azure の
resolved、AWS、Azure、Azure DevOps、Google Cloud、Slack のscheduled
devops_watch_stack ツール
vendors(最大 20 件)を 1 回指定すると、スタックがstack_name(1~64 文字。例:"production"。複数のスタックを共存させられます)で保存され、後続の呼び出しではvendorsを省略できます。20 件を超えると拒否されます(stack_too_large)。stdio と、MCP_AUTH_MODE=jwt|oauthを設定した HTTP で保存できます。デフォルトのin-memoryストレージでは、保存したスタックは再起動後に保持されませんMCP_AUTH_MODE=noneの HTTP では何も保存されません。vendorsを指定した呼び出しは一括チェックを実行し、stack_persisted: falseを返します。vendorsを指定しない呼び出しはvendors_requiredで失敗します- 集計結果の
health:all_operational/maintenance/degraded/partial_outage/major_outage/unknown(ベンダーに到達できなかった場合)。component_limitとnextToolSuggestionsの動作はdevops_status_checkと同じです
devops_check_certs ツール
- ホスト名、IP アドレス、
host:port、または URL を受け付けます。エントリーにポートが含まれる場合はport(デフォルトは 443)より優先されます。最初の 10 件を検査し、最大 100 件まで受け付けます。残りはdeferred_domainsに返され、再送するよう通知されます - 有効期限までの日数(30 日未満は
warning、7 日未満はcritical)、サブジェクトと SAN、発行者、チェーンの深さ、TLS バージョン(1.0 と 1.1 は安全でないものとしてフラグ付け)、暗号スイート、HTTP ポートでの HSTS を報告します status: "critical"では、ホスト名の不一致(hostname_verification_error)と信頼されていないチェーン(authorization_error)を区別します。ドメインごとの失敗はstatus: "error"としてインラインで返され、理由はerrorに示されますtimeout_msはドメインごとのタイムアウト時間です(最大 15000)
devops_check_dns ツール
- ドメイン名、URL、または
host:portを受け付けます。最初の10件のドメインを照会します(最大100件まで受け付けます)。残りはdeferred_domainsに返されます。IPアドレスには独立したerror行が返されます - Google(8.8.8.8)、Cloudflare(1.1.1.1)、Quad9(9.9.9.9)に対して、A、AAAA、CNAME、MX、TXT、NS、CAA、SOAを並列で照会します(デフォルトはA、AAAA、MX、TXT)
- リゾルバーごとのレイテンシーと、種類別の不一致を報告します。
partial_resolution(一部のリゾルバーから応答がない)は実際の問題です。value_variation(値が異なる)は、エニーキャストまたは地理的な振り分けを行うドメインでは通常の動作です - カスタムの
resolversにはパブリックIPリテラルを指定します。最初の5件を照会し、残りはdeferred_resolversに返されます。プライベートアドレスおよびループバックアドレスにはDEVOPS_STATUS_ALLOW_PRIVATE_TARGETS=trueが必要です。timeout_msはドメインとリゾルバーごとに適用されます(最大10000)
devops_suggest_action ツール
- ベンダーのスラッグまたは表示名を受け取り、カテゴリに合わせたMarkdownの手順書を返します。認識されないベンダーには一般的なガイダンスを返します
- 任意の
incident_summary、affected_components、vendor_indicatorを指定すると、サブシステムのセクションと、重大度に応じた緊急度が追加されます nextToolSuggestionsには、後続の呼び出し用の引数が事前入力されます。your_domainが指定されている場合は、証明書とDNSの確認も含まれます。DEVOPS_STATUS_DISABLE_ACTIVE_PROBES=trueの場合、ガイダンスでは代わりに手動コマンド(dig、openssl s_client)を使用します
devops-status://vendors/{name} リソース
- ベンダーのスラッグに対応する完全なレジストリエントリーを返します。ステータスページのURL、カテゴリ、APIの種類(
statuspage、statusio、slack、aws、gcp、azure、azure-devops、firehydrant)、およびベンダーが共有ページの一部を担当する場合のcomponent_scope_prefix(sendgrid)が含まれます - 1時間、公開キャッシュされます。同じデータは
devops_list_vendorsからも取得できます
機能
@cyanheads/mcp-ts-core を基盤としています。stdioおよびStreamable HTTPトランスポート、プラグイン可能な認証(none / jwt / oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、および任意でOpenTelemetryトレーシングを利用できる構造化ログに対応しています。
DevOps-status固有の機能:
- APIキーは不要です — すべてのステータスバックエンドは公開APIです。TLSとDNSにはNode.jsの標準ライブラリを使用します
- 8つのカテゴリにわたる53ベンダーの組み込みレジストリを備えています。ネイティブアダプターにより、Status.io、Slack、AWS Health、Google Cloud、Azure、Azure DevOps、FirehydrantをStatuspage形式に正規化します
- ベンダーが作成したテキスト、DNSレコードの値、証明書名はエスケープされ、マークアップではなくデータとして扱われます
- ステータスの読み取り結果は、テナント間で共有される60秒間のインメモリキャッシュに保存されます
devops_watch_stackは、繰り返しの確認やデプロイ前の一括確認に使う名前付きベンダーリストを保存しますdevops_suggest_actionは決定論的に動作し、LLMのサンプリングに依存しません
エージェントに適した出力:
- バッチツールでは、1つのターゲットでの失敗がほかの処理を妨げません。エラーはインラインの
errorフィールドで返されます - 各ステータス結果の
cachedとchecked_atに、データの取得時刻が示されます - 固定のインジケーターおよびステータスの列挙値(
none/minor/major/critical/maintenance)により、呼び出し元はデータに応じた分岐を行えます nextToolSuggestionsには、インシデントのコンテキストに基づいて、後続ツールの引数が事前入力されます
はじめに
公開ホストインスタンス
公開インスタンスは https://devops-status.caseyjhand.com/mcp で利用できます。インストールは不要です。任意のMCPクライアントからStreamable HTTP経由で接続してください。
{
"mcpServers": {
"devops-status-mcp-server": {
"type": "streamable-http",
"url": "https://devops-status.caseyjhand.com/mcp"
}
}
}
セルフホスト/ローカル
APIキーは不要です。MCPクライアントの設定ファイルに以下を追加してください。
{
"mcpServers": {
"devops-status-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/devops-status-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または、npxを使用します(Bunは不要です)。
{
"mcpServers": {
"devops-status-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/devops-status-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または、Dockerを使用します。
{
"mcpServers": {
"devops-status-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"ghcr.io/cyanheads/devops-status-mcp-server:latest"
]
}
}
}
Streamable HTTPを使用する場合は、トランスポートを設定してサーバーを起動します。
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 以上(またはNode.js v24以降)。
- APIキーや外部アカウントは不要です。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/devops-status-mcp-server.git
- ディレクトリに移動します:
cd devops-status-mcp-server
- 依存関係をインストールします:
bun install
- 環境を設定します:
cp .env.example .env
# edit .env if you want to override defaults
設定
API キーは不要です。すべての環境変数は任意です。
| 変数 | 説明 | デフォルト |
|---|---|---|
DEVOPS_STATUS_CACHE_TTL_MS | すべてのバックエンドにおいて、ベンダーのステータス読み取りに使用するインメモリーキャッシュの TTL(ミリ秒)。 | 60000 |
DEVOPS_STATUS_FETCH_TIMEOUT_MS | すべてのバックエンドにおいて、ベンダーのステータス API 呼び出しごとに適用されるタイムアウト(ミリ秒)。 | 8000 |
DEVOPS_STATUS_CERT_TIMEOUT_MS | devops_check_certs のデフォルトの timeout_ms(1000~15000)。 | 5000 |
DEVOPS_STATUS_DNS_TIMEOUT_MS | devops_check_dns のデフォルトの timeout_ms(1000~10000)。 | 3000 |
DEVOPS_STATUS_ALLOW_PRIVATE_TARGETS | true の場合、ユーザー指定の URL とドメインに対する SSRF ガードを無効にします。信頼できるローカルデプロイメントでのみ使用してください。 | false |
DEVOPS_STATUS_DISABLE_ACTIVE_PROBES | true の場合、devops_check_dns と devops_check_certs を無効にします。複数のユーザーが利用するパブリックインスタンス向けです。 | false |
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポート。 | 3010 |
MCP_SESSION_MODE | HTTP セッションの処理方式:stateless、stateful、または auto。 | stateless |
MCP_AUTH_MODE | 認証モード:none、jwt、または oauth。 | none |
MCP_LOG_LEVEL | ログレベル(RFC 5424)。 | info |
LOGS_DIR | ログファイルのディレクトリ(Node.js のみ)。 | <project-root>/logs |
OTEL_ENABLED | OpenTelemetry のインストゥルメンテーションを有効にします。 | false |
無効な DEVOPS_STATUS_* の値があると、該当する変数名を示すエラーとともに起動が停止します。
任意で設定できる値の一覧については、.env.example を参照してください。
サーバーの実行
ローカル開発
-
ビルドして実行:
bun run rebuild bun run start:stdio # or bun run start:http -
チェックとテストを実行:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t devops-status-mcp-server .
docker run --rm -p 3010:3010 devops-status-mcp-server
Dockerfile では、デフォルトで HTTP トランスポート、ステートレスセッションモードが設定され、ログは /var/log/devops-status-mcp-server に出力されます。OpenTelemetry のピア依存関係はデフォルトでインストールされます。これらを省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。
プロジェクト構成
| パス | 用途 |
|---|---|
src/index.ts | createApp() エントリーポイント。ツール、リソースを登録し、サービスを初期化します。 |
src/config/ | サーバー固有の環境変数を Zod で解析、検証します。 |
src/mcp-server/tools/ | ツール定義(*.tool.ts)。 |
src/mcp-server/resources/ | リソース定義(*.resource.ts)。 |
src/services/cert/ | node:tls — TLS ハンドシェイク、X.509 解析、有効期限とプロトコルのフラグ付け、レガシー TLS の再試行、HSTS の読み取り。 |
src/services/dns/ | DNS ワイヤークライアント(node:dgram / node:net):メッセージのエンコードと境界チェック付きデコード、UDP と TCP による再試行。複数リゾルバーへのファンアウトと伝播の不一致検出。 |
src/services/statuspage/ | Statuspage の公開 API クライアント(src/utils/cached-fetch.ts の共有キャッシュを介して読み取ります)。 |
src/services/status-adapters/ | ネイティブ API アダプター(Status.io、Slack、AWS Health、Google Cloud Service Health、Azure status、Azure DevOps status、Firehydrant)、共有 RSS 抽出機能、api_type によるディスパッチ。Statuspage の形式に正規化します。 |
src/services/vendor-registry/ | src/data/vendor-registry.ts から読み込むインメモリーベンダーレジストリ。 |
src/data/ | 静的なベンダーレジストリデータファイル(vendor-registry.ts)。 |
src/utils/ | 共有ヘルパー — レスポンスのキャッシュと取得、SSRF ガード、ドメインエントリーの正規化、HTML からテキストへの変換、ベンダーテキストの Markdown エスケープ、入力境界の通知、単語の照合。 |
tests/ | src/ の構成に対応する Vitest テスト。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークがキャッチします。ツールのロジック内で
try/catchは使用しないでください - リクエスト単位のログには
ctx.logを、テナント単位のストレージにはctx.stateを使用してください src/mcp-server/*/definitions/index.tsのバレル経由で、新しいツールとリソースを登録してくださいdevops_check_certsとdevops_check_dnsは Node.js の標準ライブラリのみを使用します。これらのパスに外部依存関係を追加しないでください
コントリビューション
Issue を歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細については LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。